That's it, Noteman is now open source - a tool for taking notes, sorting them by categories; designed for quick and easy access to the collected information.
This is a program I wrote some years ago; before any kind of formal education in programming - see the details in the sections that will follow.
At its time it was pretty successful, I relied on it, and a couple of my friends still use it (it has been more than 7 years). I promised I would release updates, but somehow I never had the time to actually do that.
Here is the program itself - download Noteman 4.0, there is a readme in the archive, with a detailed description of what it does, what the features are, and how they are used.
Some stuff about the feature set (from the fine manual):
NoteMan v4 (tLPT) The Lazy Ppl's Tool (tm), features
- As many note-windows as you wish
- Custom colors for each tab in the window
- Customizing Hotkeys
- Beep @ sharp hour
- Auto-add to registry (if neccessary)
- Configuration in ini-file
- Auto-Calculate form size and position and write the values in the ini (also automatically)
- Auto-Save the notes
- Icon in the systray that offers control of the program
- 15 TimeReminders (see Reminders in pop-up)
- Custom actions for TimeReminders, Shutdown PC added. works in 2k as well
- unlimited number of DayReminders (via ini)
- Install/Uninstall using command line params
- hotkey usage
- text centering
- Font type
- Font size
- Color of the text (in RGB)
- Color of the background (in RGB)
- Form Size
- Form Location
- Primary and secondary hotkeys
- TimeFormat mask
It also comes with a nifty feature that allowed me to use free dial up internet from Relsoft (and other providers); they had a free login/name that you could use for 15 minutes if you dialed precisely at a sharp hour. If you call and someone else made it ahead of you - tough luck. With Noteman's help I was able to log in almost all the time - the program renders the exact system time in the top left corner (above all other windows), and I had a prototype version that would tell my dialing program to start dialing at SharpHour-delta (delta is how long it took my modem to wait for tone, dial, connect, and perform authentication). Ah, the memories... My dad once removed the modem from the computer because the phone-bill exceeded the boundaries of common sense :-)
Programmers, read on to find out why this is an example of "how not to write software", how to get hold of the source code, how to compile it, and so on.
Now I've graduated a university and have gone through a series of courses on programming; I told myself that if there will be any updates, that would only happen in the case if Noteman is rewritten from scratch. If you take a look at the source-code, you will see that it is a sample of "how not to write code", and anti-Borland activists can use this as a good example in a "Borland can be dangerous for the industry" discussion point. But.. that might not be relevant now, because Borland is not what it used to be (and not only because it is not called Borland anymore, or is it? :-)
Why there were no updates:
- I don't use Delphi anymore
- There was no time (and not much will) to continue
- The current version did its job pretty well
- There were other, more important projects
- There are alternative programs that I switched to, namely Microsoft's OneNote
Noteman is written in Delphi, you can download Noteman's source code.
- I don't have the Delphi IDE installed, so I am not sure the code compiles; you might get a few warnings and errors that will require some tweaking;
- The program uses a component to provide the tray icon functionality, it is not a standard component; I (hope) I included it in the source as trayicon.dcu (Delphi Compiled Unit); if it still doesn't work, just remove all the references to it and change the logic - show the main window immediately. You can try to find this component yourself if you can't install the included .dcu;
- The code is not pretty (not properly indented, the names of the variables are not well-chosen, etc);
- Some of the functionality is duplicated in different units;
- The assembly code is obviously not mine :-)
Programmers beware - separate the GUI from the core (and everything else)
One thing I know today and I didn't know then, is that the GUI should be separated from the program's logic. Noteman is an example of not following this rule - everything is tightly tied to Borland's GUI widgets. For example, when the state of a reminder is verified - I read the caption of a label (a string), convert it to an integer, compare that with what I need, then make a decision. When I make an update - the information is only stored in the meta-data associated with the state of that particular widget.
An example: in one of the earliest versions of Noteman, the "beep at sharp hour" feature (uses the system speaker to generate a beep sound when it is a sharp hour, ex: 15:00 or 16:00) worked this way:
- There was a hidden label somewhere on the window
- Each second the caption of the label was set to "now", with: TimeToStr(now)
- I would then parse the string and verify if the minutes part was equal to "00"
- If so, a beep would be made
You can see how horribly inefficient this is - these operations happen each second! Not to mention that different people use different separators for time/date notation - so such an approach is bound not to work on some systems. The current implementation is better:
- When the program starts, get the current time
- See how many seconds are left until the next sharp hour
- Create a timer and set its interval to the value obtained at the previous step
- When the timer is triggered
- Set the timer to 60*60*1000 milliseconds
Back to separating the GUI from the core. My current vision is to avoid that by storing everything in my own data-structures, and applying that information to the graphical widgets when necessary. This allows me to easily switch to another set of graphical widgets (handy when porting to another platform), or create command-line equivalents (since having a window with some widgets in it is not required). This makes it possible to let a qualified designer develop the interface, and the programmer implement it (instead of letting the programmer do everything on their own - usually not a good idea).
The drawback, of course, is that some of the information is doubled (ex: some data are stored in the form of a variable, as well as in the form of "the caption of a label"); but it's not a problem as serious as the one that the GUI *is* practically the program's core...
Programmers beware - always read the documentation and avoid reinventing the wheel
Much of Noteman's date/time manipulation features work by parsing strings; it all happened before I knew about the DateUtils unit, which provided all that functionality out of the box. Morale of the story - know your instruments well.
What I am asking you, if you decide to play with the code:
- Let me know if you plan to work on it (perhaps we could cooperate);
- Please leave a reference to the original program (a link to this page will do);
Update: the license question is tricky; choosing the right license means that I must first study the options, we all know how long the story is. This guide made it easier:
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License.
You cyborg =)
What license are you releasing it under?
1) Basket Note Pads is a OneNote alternative for Linux.
2) The only “real” thing I wrote for DOS was a program which played random Morse codes :P
I never wrote anything real for Windows.
3) I only know Qt, but there are intermediary spots between “complete reliance on widgets for data” and “complete core/gui separation".
PS. Nice trick with the sharp hour :)
I still remember the shock of hearing the phone ring while I was browsing the internet when I first got broadband…
I updated the article; was tempted to write ‘public domain’, but somehow I just can’t let it go, hoping that if someone wants to improve it, they’ll let me know about it and perhaps I could still play a role in the evolution of this program.
I know about Basket, but it is for KDE, and I don’t feel like experimenting (the switch from Gnome means that I have to dedicate time finding alternatives for my favourite tools).
The core/GUI separation is something we are soon going to deal with (in the context of the bill management project, which by the way, has moved several inches forward :-)
Comment from: Ion Todirel [Visitor]
regarding license question, if your are not sure you can always use WTFPL :)
Am încercat aplicaţia şi zic că e minunată. E uşoară, e simplă, la sigur nu mănâncă din resurse şi chiar dacă nu pricepi în programare (eu de ex.) am reuşit să fac schimbări comode.
Doar că nu imi place că fişierele se salvează pe discul C: în My documents, iar alta că nu suportă diacriticele.
mai căutăm … :D
Fisierele sunt stocate in acelasi folder cu EXE’ul, nu neaparat in “My documents". Nici mie nu-mi plac programale care imi genereaza fisiere in diferite locuri, de aceea Noteman nu se comporta asa.
Despre diacritice, ce sta la tine in Control Panel\Regional settings\Codepage for non unicode programs? Daca e setat Romanian - atunci vor fi si diacritice.
Iti multumesc pentru feedback.
Autosave-ul are un anumită perioadă ? Caci nu itodeauna cele copy/paste se salvau la următoarea deschidere.
Şi încă ceva, după ce am făcut schimbările necesare ca să îmi apară diacriticele, am fost rugată de xp să restarez computerul, însă vai, au dispărut toate taburile, iar cel rămas e deja fără culoare, deşi cu text cu tot.
Salvarea se face de fiecare data cind schimbi tabul, sau cind minimizezi ascunzi fereastra. Adica totul e automat, si nu sunt necesare actiuni din partea ta - asta e unul din conceptele de baza - “no need to save".
Cit despre problema, spune-mi:
- in care folder este aplicatia (trebuie sa cunosc toata calea, ex: c:\programs\test\noteman\noteman.exe)
- cum se numesc taburile?
- fisierul noteman.ini este la locul sau? (trebuie sa fie in acelasi loc cu noteman.exe, si trebuie sa ai drept de scriere in acel folder)
Se află aici E:\programe\Noteman4\Noteman4
şi în fişierul ini se află înscrise taburile mele, dar numai un fisier txt care este şi prezentat în program. Iar cele care erau până acum, în C:\Documents and Settings\eu. Cei drept, un timp mapa se afla pe desktop, dar il mutasem şi lucra bine până l-am restartat.
aprpo, eu tot sânt Railean :P
Toate fisierele trebuie sa fie in acelasi folder cu EXE’ul, programul nu-si poate da seama ca ceea ce tii pe desktop sunt notitele tale. Cu alte cuvinte, iata ce trebuie sa ai in “E:\programe\Noteman4\Noteman4″
arrow.ico note1.txt note3.txt noteman.ini
note2.txt noteman.exe readme.txt uninstall.bat install.bat
Nota: daca ai adagat alte taburi, atunci vor fi si alte fisiere cu numele noteN.txt.
Dupa ce transferi programul intr-un alt folder, sa lansezi din nou install.bat.
Cred ca va fi mai simplu daca publici aici continutul fisierului noteman.ini, in asa fel voi putea sa verific daca ai facut totul corect.
Ok, am transferat toate txt care reprezentau taburile în mapa E:\programe\Noteman4\Noteman4 , am repornit programul şi acum merge bine.
DAr nu îţi fă griji, am toate fişierele în aceeaşi mapă.
Mulţumesc pentru ajutor :D
Form is loading...