Posts Tagged ‘ life

BD-review

BD-review is a dynamic website to allow people to review releases (albums, demos, EPs, singles) of (young, unsigned) music bands. The project is the outcome of the Internet Technologies course at the Faculty of Computer Science of the Free University of Bolzano.  The requirements of the project were to build a website using a small subset of JavaEE technologies, without the use of web-frameworks.

Therefore, this project is not really meant for production use. It was made as a strong, working and correct base for studying JavaEE academically. It should be useful for every student (also non-student) willing to have an overview on JSP and study it. The code is well-written, uses MVC, and the whole project is documented in detail in a 20+ pages report.

A screenshot of a Review

A screenshot of a Review

I encourage to read the PDF report of the project. It contains detailed information about the analysis and design phases, as well as the architecture description, screenshots, problems found etc. Please read also the README file. It contains configuration instructions.

There is a running demo located on the evaluation server of the course, but I think it will be removed soon.

Quick Jump:

Vision

Requirements Implemented

Technologies Overview

Download

License

Vision

The aim of the project is to build a dynamic website to allow people to review releases (albums, demos, EPs, singles) of (young, unsigned) music bands. Users will be able to signal interesting materials and review them, while other users will be able to comment the reviews, too.
This web 2.0-oriented application should allow unknown talented musicians to achieve a higher notoriety but also to improve their productions.

Screenshot of the personal user page

Screenshot of the personal user page

Requirements Implemented

I report here the requirements of the course, all implemented by BD-review:
What BD-review implements is:

  • User Management
    • List existing users of the system
    • Creation of a new user
    • Deletion of the existing user
  • List and modify access rights of the users
    • check boxes with some capabilities (min 3)
  • User registration and login to the system
  • Items management
    • Users add, edit or remove items
    • Users comments or reviews items
    • Administrator can manage the comments (edit,remove, add)
  • Personalization
    • Salutation for a returning user
    • List resources that are new from the last visit
    • Customization of the layout for a class of users.
  • Techniques – MUST be used
    • Static HTML
    • CSS: all the look and feel must be in CSS files
    • Javascript: check input and manage menus
    • Servlet: Reading (parameters and headers) and writing headers and resulting page
    • Servlet: Session management with cookies and session object
    • Servlet: Redirect the client
    • Servlet: Forward to another page or servlet
    • JSP: Expressions, scriptlets and declarations Beans
    • DBMS access trough JDBC
    • Integration of JSP and Servlets (forward and include) using MVC pattern.

In addition, BD-review implements two Filters and plays with Regular Expressions.

Technologies Overview

  • J2EE technologies (JSP, Servlets and JavaBeans)
  • Database support (PostgreSQL 8.3) through JDBC 4
  • XHTML Strict 1.0 + Cascading Style Sheets 2.1 for presentation
  • Apache Commons for conversion and Bean population routines
  • Some utility methods found on Books and Internet (their provenience is cited in the sourcecode)
  • Javascript for confirmation system and form validation
  • Regular Expressions
  • TinyMCE rich WYSIWYG HTML editor
Screenshot: modifying a Review

Screenshot: modifying a Review

Download

PDF report of the project
Complete Source Code and Documentation (as Netbeans Project)

The Future

There will not be future developments for the project. It was not a real-life project but I will be very proud if you find it an useful example for learning JSP. You can also use it as a basis for developing a real project (also a University Project). You can do anything you want with BD-review, but please respect the license. I would be happy if you send me an email about your experience in using BD-review.

License

BD-review is released under The Gnu Affero GPL version 3! This is different from the license of the contents of the blog

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program. If not, see < http ://www.gnu.org/licenses/ >.

Related posts

Finally, the site has entered top 20000 Netcraft Most Visited Web Sites

It is always a great satisfaction to reach a goal. It took me about 3 years but I finally did it!
Today bd-things.net entered top 20k in Netcraft Most Visited Websites, at position 19058!
On September I desired to re-enter top 30k in about a year after the domain name change .
8 months after I reached a even better result.

I took two screenshots of the event , because I don’t think that this will happen so much often in my life :)

bd-thingsnet_top_20k_netcraft_2

bd-things_top_20k_netcraft_1

I would like to thank all the visitors of bd-things.net for their support, even if I would be happier to see more comments that would surely help to improve my articles.

In something more than a month I will publish 3 project source codes: a C++ task manager, a simple dynamic website using Java EE5 and a C (subset) compiler. All of them started as University Projects. The first program will surely be expanded and improved after the publish of the source code. But before that time, I have to study hard for ca. 20 deadlines I must accomplish. See you again.

Related posts

What is taking me busy – Pomotux!

I’m currently pressed by my University life, that’s because I don’t post often.
There are 3 big projects for this semester: a C compiler, a dynamic website using Java Servlets and JSP and the most interesting one: a C++ program for Software Engineering Project course.
I’m working with other two collegues on a task manager for people using the Pomodoro Technique by Francesco Cirillo.
The project is called Pomotux and is under development following strong software engineering methodologies (Scrum@Xp). Pomotux is under construction since 2 months and uses technologies such as SQLite to store and play with tasks. The interesting fact regarding our data structure choice is that we are also using a framework for obtaining ORM, called LiteSQL.

LiteSQL is a C++ library that integrates C++ objects tightly to relational database and thus provides an object persistence layer

LiteSQL is still young and immature but powerful enough for our scope. We are also happy to provide feedback to their developers, that are ready to help us. They even wrote a patch for us!
Pomotux is reaching an unexpected stability. Unexpected because it is written by 3 young people that come from a light Java experience and saw C++ 3 months ago. It works under Linux and its graphical interface uses QT 4.5.0. It should work on any *NIX variant that meets dependencies, but also under Windows with some light modifications.
It will support just the basic features of the technique (unfortunately we don’t have the time to fully work on it) but it’s ready for expansions such as team support and statistics.
We will be happy to release the sources as soon as we finish the course, hoping that people will find it useful and that some serious programmers take it and make it the perfect tool for Pomodorians :) I will also contact the author of the Pomodoro Technique when we release it.

Related posts

Heap vs. Stack in C++

After the study of pointers versus references, the second natural question that comes in head of a ex Java developer turning to C++ is:

“What are the difference between static and dynamic memory allocation in C++?”

which can be translated as:

“When should I use the stack and when do I have to use the heap in C++?”

that can be further simplified to:

“When should I use the new operator in C++?”

I could simply summarize the answer to: “Use stack when possible”, but I think that this time there is the need of more explanations. Let’s have the following model for a process in the system:

A simplified model for a process

A simplified model for a process

I’m not really interested in an real representation of a process (see Modern Operating Systems by A. S. Tanenbaum for a very good explanation on processes), but focus on the stack and on the heap.
In reality the heap is a software abstraction but you can also imagine it like the stack.
In C++ programs there are also several other memory areas in which objects and non-object values may be stored (see this article on GotW for further details).

Why then choose between stack or heap? Quoting my publication on object-oriented memory management in Java:

Stack-based variables have their extent determined by their scope, so the former is constrained by the structure of the code at compile-time .

Sometimes there is a need for the variables with unconstrained extent in order to cope with
problems where lifetime of a variable can only be known at run-time.
In this case heap-based variables, whose extent is strictly under control of the programmer, are used. [..]

I promise that I will update my 17 pages about OO-memory management to cover also C++ by the end of June. By the way, following some forums, wikipedia, my publication and GotW, I also summarized pros and cons of stack and heap use in C++:

Stack Heap
Its size is determined at compile-time Size determined at run-time
Therefore, it is less expensive and quick Therefore, it is more expensive and slower than stack
The preferred way to store objects and variables if their size is limited. To be used only if needed: the amount of memory needed is variable and unknown, and may increase rapidly.
There is an AUTOMATIC CLEANUP of objects when they go out of their scope Objects STAY IN MEMORY even when you don’t use them anymore.
Programmers don’t have to bother to free resources Therefore, programmers HAVE TO CLEAN memory manually. However, all modern OS free the resources when the program exits.

Update 2009-07-03
After 4 months of heavy GUI and Database C++ programming, here are my thoughts: if you are planning to write a program with something more than a couple of objects interacting, using associations and therefore, objects as attributes, use the heap. Every serious program, even if not really big, uses heap for object allocation. Just take care to delete the objects when you don’t need them anymore. Objects on the heap are dynamically allocated and it is more comfortable to pass them through other objects using pointers. The use of the heap assures the live of objects even if the method that generated them runs out of scope ( =dies ). If you also plan to write GUIs, solid toolkits like QT recommend the use of heap to create graphical objects.

In some Operating Systems, stack is also very limited while heap is usually not.

Here are listed the sources I used for writing this article:

  • http://www.velocityreviews.com/forums/t278261-stack-vs-heap.html
  • http://www.computing.net/answers/programming/stackheap-c/2293.html
  • http://www.codeguru.com/forum/showthread.php?p=1186307#post1186307
  • http://www.codeguru.com/forum/showthread.php?t=350945
  • http://www.gotw.ca/gotw/009.htm
  • http://en.wikipedia.org/wiki/Process_(computing)#Representation
  • http://bd-things.net/object-oriented-memory-management/

Hope that this article helped you to clearly understand the differences between stack and heap allocation in C++, write me if there are other issues or you need more explanations!

Related posts

Reference vs. Pointer

In Software Engineering Project course we need to learn some C++ to develop the project. A question that some programmers have when passing from Java to C++ (like me) is “Which are the differences between pointers and references?“. You can find a lot of answers around developers forum, but I summarized them in the following table. Glad if you found it useful!

Reference Pointer
is an object which IS AN ALIAS for another object is an object that CONTAINS THE ADRRESS IN MEMORY of another object
the preferred way of undirectly access objects you should use it just if you really need it, as it lets you to work in a lower level than a reference does
keeps your code clear the code is less clear but still understandable
it must be initialized when created you don’t have to initialize it when declared
it references to the one object and only that one, therefore you can not modify the address referenced because it contains an address, it can point to many different objects during lifetime. The address can be manipulated
when used, the address is dereferenced without using any particular operator the address must be dereferenced using the * operator

Related posts

New domain: from daniel.graziotin.net to bd-things.net

As I previously announced, I purchased a brand new domain for my stuff.
The blog is changing during the months, becoming more than a blog but less than a site.
That’s because I decided to buy the domain BD-things.net, because this site contains all of my things, files, thoughts, projects, publications.
The old address daniel.graziotin.net now redirects permanently here and every link should have been updated/rewritten. Please contact me if you encounter problems.
I also took BD-blog.net which points here, too, but I won’t renew it the next year.
Some things are different now, but you won’t notice it ;)
I obviously lost my decent position at Netcraft’s Most Visited Web Sites rank list, but I don’t care. It will be funny to advance with the new domain and reach a even better position!
I hope there will be a new beginning and a brand new life with BD-things!

Related posts