Archive

Posts Tagged ‘DELETE’

BD-incollo 0.9 is out!

July 26th, 2009 bodom_lx No comments

It took me about one year to find some time to enhance my project BD-incollo. I worked hard for 5 days and to add new features and fight the (huge) amount of spam that was wasting my database space. Now I’m very proud to announce bd-incollo 0.9, a free, light, speedy, anonymous Pastebin clone written in Python Django. This version introduces a lot of new features, including the possibility to make diffs between pastes, and fights spam using Akismet. Read more about the features on the project page and on the new News section on the website that makes use of BD-incollo, incollo.com .

BD-incollo 0.9 is free software as always, under the Gnu Affero General Public License 3.

Currently, you can:

  • Copy, Paste and store a text / source code snippet to the system
  • NEW! Give other people the possibility to discover your Paste (make a Paste either public or private)
  • Decide to colorize the syntax of the Paste
  • Share it using its URL
  • NEW! Enhance Pastes! Create a Paste starting from an old one
  • NEW! View differences! Makes use of the powerful diff-match-patch by Neil Fraser to see differences between two Pastes
  • NEW! Antispam protection using Akismet and akismet.py by Michael Foord
  • Download it as plain text
  • View it as plain text
  • Search something interesting through other pastes!
  • Report abuses to site admins

It also uses a very smart hash system that automatically re-computes a hash key in case of collision.

Here is an example of Paste: http://incollo.com/f341e6a4b
Here is an example of enhancement of the Paste: http://incollo.com/ba22929ac
Here is a full-screen diff of the Pastes: http://incollo.com/compare/f341e6a4b/ba22929ac

Play with them! Use incollo.com, spread it!

Road to 1.0

1.0 development will start after my next examination session (on September) and will surely include:

  • Some asynchronous improvements
  • The possibility to teach Akismet about Spam and Ham in Pastes (when admin user is logged in)
  • More cleaner code
  • The possibility to associate a user to its Pastes via a Cookie (always anonymous) and let him delete them
  • Comments to snippets?
  • What else? Contact me if you’ve got ideas!

Related posts

Heap vs. Stack in C++

March 20th, 2009 bodom_lx 4 comments

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://task3.cc/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

Introduction to HTTP mind-map

March 1st, 2009 bodom_lx No comments

As I promised about 4 hours ago, here is my introduction to Hyper Text Transfer Protocol in form of a mind map.
It is to be intended as a really short introduction to this protocol. Like the previous one about computer networks, the mindmap summarizes materials copyrighted by Tanenbaum and also material taken from Wikipedia.

The topics covered are:

  • Scope of the protocol
  • HTTP connection
    • HTTP/1.0
    • HTTP/1.1
  • HTTP request methods:
    • GET
    • HEAD
    • PUT
    • POST
    • DELETE
    • TRACE
    • CONNECT
    • OPTIONS
  • Message Headers
    • Request Headers – all
    • Response Headers – all
  • Status Codes:
    • 1xx Information
    • 2xx Success
    • 3xx Redirection
    • 4xx Client error
    • 5xx Server Error
  • Sessions:
    • Cookies
    • Server-Side sessions
  • Secure HTTP – HTTPS:
    • By URI scheme
    • HTTP Upgrade Header
    • SSL/TLS

You can browse an HTML version online.

You can download:

As always, you are free and encouraged to contact me in case of errors or anything else.
Hope you like it!

Related posts

Announcing incollo.com service!

September 30th, 2008 bodom_lx No comments

When I announced BD-incollo 6 days ago, I also mentioned that I would have launched the service today. I really did that, and I’m very proud to announce the first site that runs BD-incollo.
http://incollo.com! Very easy :-)
Incollo.com is a collaborative debugging tool like Pastebin or other similar services, but it’s slightly different from it. And it’s different from other Pastebin clones even written using Rails or Django.
Here are the most exciting features:

  • It’s Fast. Very Fast
  • Written thinking about usability
  • A very clean interface, a minimalist design that gives space to the code (as it should always be)
  • It’s possible to search through pastes, like in a forum
  • A Paste is not deleted after 30 days or something similar. A paste is deleted after it is no more interesting! It’s deleted after 60 days of no visualizations
  • The system is anonymous. It won’t store your information! Paste whatever you want but please use your brain! A Paste may be reported to the administrator!
  • You don’t really have to play with options and there are no required field other than the Paste itself. You may paste a text and directly hit the submit button
  • Quite every page is XHTML 1.0 compatible
  • It works well and has nice urls, thanks to Django
  • Compatible with every browser (tested with Internet Explorer 6,7,8, Mozilla Firefox 3, Apple Safari, Google Chrome)
  • Resolution friendly! Liquid design that adapts to every monitor resolution (tests from 1024×768)
  • Developer friendly! Every functionality of incollo.com can be used with max 2 mouse clicks and without a mouse scroll!
  • Tested with lots of pastes, quite every source code should be perfectly viewed (this does not happen with every pastebin clones I’ve tried)
  • Uses Pygments for code highlighting
  • Languages supported: ActionScript, Assembly (various), Boo, Befunge, BrainFuck, C, C++, C#, Common Lisp, D, Delphi, Dylan, Erlang, Haskell (incl. Literate Haskell), Java, JavaScript, Lua, MiniD, MooCode, MuPad, OCaml, PHP, Perl, Python (incl. console sessions and tracebacks), Redcode, Ruby (incl. irb sessions), Scheme, Visual Basic.NET, Django/Jinja templates, ERB (Ruby templating), Genshi (the Trac template language), Myghty (the HTML::Mason based framework), Mako (the Myghty successor), Smarty templates (PHP templating), JSP (Java Server Pages), , Other markup, , Apache config files, Bash shell scripts, BBCode, CSS, Debian control files, Diff files, Gettext catalogs, Groff markup, HTML, INI-style config files, IRC logs (irssi style), Makefiles, MoinMoin/Trac Wiki markup, Redcode, ReST, SQL, also MySQL, Squid configuration, TeX, Vim Script, Windows batch files, XML

This is an example of Paste with Incollo.com:
http://incollo.com/7dca5011

You are really welcome to report any bugs or leave a feedback! Remember that this is my very first Django project, and I created it in about 6 days!

Of course, I’m already beginning to think about new features :D

Related posts

Change MSN address

May 26th, 2008 bodom_lx No comments

VERSIONE IN ITALIANO
Dear Msn buddy, I’m going to change account.
For technical and political reasons I won’t continue to either use Microsoft Window Live Messenger or its protocol MSN Messenger.
I’m going to use Jabber/XMPP.
I would like to keep in touch with you and my other 200 contacts, so I decided to Read more…

Related posts

BD-shell

April 21st, 2008 bodom_lx No comments

BD-shell (a.k.a. bdsh) is a tiny Unix shell written in C. It’s a project required for the Operating System Course at my University.
It is written using a clean coding style, following xP coding standard philosophy.
Version 1.0 is the release that satisfies all the course requirements!

Quick Jump:
Features
Download
License

Features

Cool Features

  • Lightweight
  • Implements real Job Control
  • Clear and understandable code, ideal for Academic (and personal) studies
  • Makes use of various system calls, signals, signal handlers, user input handling, data structures implementation
  • Free Software!

Cool Features NOT present (but may be in future)

  • No command history present
  • No command/filename auto completion
  • No wildcars
  • No command piping, just a single command can be launched at a time
  • Put everything else here.
These are the requirements asked by the teaching professor. The complete project description page is located at http://www.inf.unibz.it/~david/os/project.html
The shell must be able to do the following:

  1. to read commands from standard input and execute them in a loop until a
    built-in command exit is issued (we call these processes the foreground processes; there is always at most one of these at any particular time);
  2. be able to redirect the standard input and output of commands by prefixing them with built-in commands in file and out file;
  3. be able to terminate (involuntarily) the foreground process when user presses ^C and return back to the mini-shell;
  4. be able to interrupt the foreground process temporarily, when user presses ^Z, returning to the mini-shell;
  5. be able to execute any number of processes in background (i.e., in parallel with the foreground process), including in particular, the ability to start another process while a process has been temporarily suspended;
  6. inform the user when the background process finishes or is
    waiting for an input from the terminal;
  7. be able to inform the user what commands are executing in the background by issuing the built-in command jobs, this should include information about the state of the process (i.e., suspended, background, waiting for input, etc.) and about what file(s) is the background process using for standard input and output);
  8. be able to terminate involuntarily a background processes by issuing the built-in command kill job-number.
  9. to be able to resume a process or to make a background process into the foreground process (i.e., the one that currently interacts with the terminal) by issuing the fg job-number command.

Download:

  • 2008-09-14 – version 1.0.0.
    • fixed synchronization bug in putJobBackground() that made not notify background processes requesting input (in some situations)

    Known Bugs:

    • Lots of! I consider bdsh-1.0.0 stable because it covers ALL requirements of the course and does them whell on various Unix systems. So it works, but commands like “in non_existent_file cat” won’t work and will crash it!

    What will be next?

    • I don’t know. I may consider a 1.0.1 release to fix future bugs. I may also think to add cool features to make the shell complete. I hope I will have the time for it. You can also do it by yourself and send me the code
  • 2008-09-13 – version 1.0.0 Release Candidate 2.
    Changes from beta 1 / release candidate 1

    • removed gcc O3 flag from makefile
    • lots of bugs fixed in functions operating on the list of jobs
    • improvements in launchJob() when dealing with background commands
    • bug in putJobBackground() that made the shell crash has been fixed
    • killJob() now sends a SIGKILL
    • bugs fixed in signalHandler_child()
    • Code formatted using astyle (linux style)
    • A couple of variables renamed
    • Various usleep() removed

    Known Bugs:

    • So many =) This is a shell made for Academic purposes, not for production use!
  • 2008-07-30 – version 1.0.0 beta1.
    Characteristics:

    • First beta release of the final version
    • Every requirement has been covered
    • Real Job-Control implemented
    • About every function of bdsh.c has been rewritten
    • New source directory layout, very clean
    • Some documentation and makefile
    • IMPORTANT! this has to be considered a bug hunting release! Please report me any bugs
  • 2008-06-05 – version 0.7.1, corrects the linked list bug of version 0.7.0
  • 2008-05-09 – version 0.7.0.
    UPDATE 2008-06-05: there is a bug in the list handling, the shell crashes when using the standard input redirection. Please download version 0.7.1, which corrects the problem.
    Characteristics:
    • Cleaner code!
    • Lots of bugs fixed!
    • reads commands from standard input and executes them in a loop until a built-in command exit is issued
    • redirects STDIN and STDOUT of commands by prefixing them with built-in commands in file and out file
    • terminates (involuntarily) the foreground process when user presses ^C and return back to the shell
    • executes any number of processes in background (i.e., in parallel with the foreground process)
    • informs the user when the background process finishes
    • informs the user what commands are executing in the background by issuing the built-in command jobs
    • terminates involuntarily a background processes by issuing the built-in command kill job-number.
  • Due to a lots of compatibility issues with Gnu/Linux (the shell has been developed under Mac Os X), the final released has been delayed to mid-September. Sorry for this, I encountered so many problems the day before project presentation, that I decided to present it during the next exam session. I switched back to Gnu/Linux, too :)
  • Final release is scheduled on 2008-06-26, as the project deadline is 2008-06-25. The release will
    satisfy all the requirements, and as addition:

    • Execution system totally rewritten (e.g. one single short function that handles everything)
    • A Job Control will be implemented
    • Processes in foreground will really be in foreground, there are a lot of things that we did not learn during the course, like tcsetpgrp()
    • Some functions in utils.h will be deleted and optimized
    • Cleaner and clearer code!

  • 2008-04-21 – version 0.0.1
    Characteristics:
    • Modular code, divided in 3 files: bdsh.c, utils.h, headers.h
    • Clean user input from a char buffer to an array of strings
    • Built-in commands: exit (exits from the shell), cd (changes directory), in <filename> command (redirects STDIN of command from <filename>), out <filename> command (redirects STDOUT of command to <filename>)
    • Makes use of fork() to read commands from standard input and execute them

License:

BD-shell is released under The Gnu 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 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 General Public License for more details.

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

Related posts