Let’s assume that there is a team of developers working together on a project.
It’s important, to write down every task, issue and problem, which needs to be adressed
during the course of development.
Once a problem is on the task list, it might be delegated to a team memner, who is resposible for.
For each task, a responsible person might be assigned, a target date might be specified
and maybe also the working progress might be set (0% done, 25%, 50%, 75%, 100% done).
The simplest way for such a tasklist would be to create an excel sheet and use it as a kind of tasklist to drive the project.
But hold on, although this can be done, it is not really the way to go.
In fact, such a taskmanagement application does not need to be complex.
The key is a simple application which can be used simultaneously by each member of the team.
The main work is to quickly edit the tasklist and the task follow-up
as the core business is the product development.
Create a simple and easy to use application which can be used within a group of people to follow up tasks.
From a user point of view, the software should be fairly simple,
the main focus is to work on one common source of information in real time.
The layout of the database (table) or interface should be freely editable and defineable
(just like in a spread sheet application).
Data handling and management (to enter information, to filter existing data) should be intuitive and fast
(without extra dialogs which needs to be filled in, etc…).
In fact, the whole data management process should be somehow click-optimized.
- The application should be fairly easy to install,
with no pre-requisites to be installed and as less dependencies as possible.
- The software does not necessarily to be a web enabled solution,
just needs to have multi-user capability.
- No cloud based information storage wanted (for security),
ideally the database should be just a file on a shared network drive.
Some more thoughts:
Nowadays task management software is quite popular and most of the available solutions are web-based.
The advantage of getting access to the actual tasklist over the web has some charm, but is not allways wanted.
Because of security reasons, it might be a better solution to share information over a VPN tunnel with defined access rights.
The PHP/MySQL/Apache stack sometimes is a bit overkill and of course you need a provider.
And what, if your network is not attached to the www and has no web server running ?…
With tcl/tk in mind, it soon becomes quite clear of how the implementaion of the above mentioned requirements will look like.
SQLite for the database, there is no question about it, great thanks for this amazing piece of software.
tablelist for the main part of the GUI, there is also no question about it.
- tablelist is a pure tcl/tk package, which I normally prefer in order to keep things simple
- tablelist is active developed and thanks to Csaba Nemethi, there was a lot of improvements done recently
- I also feel quite familar with tablelist and I really like this package.
BWidget still comes in quite handy to build the GUI.
Some goodies to point out:
- nice and usefull gui widgets,
- easy to programm with a clear interface and good documentation,
- the package is still maintained and there is a good maintanance and bug fixing,
(although there is not so much new development going on so far),
- has been adopted to work with ttk
Overview of packages used so far:
In fact the DBM is based on the following packages and additional software applications:
|Public / tcllib||Custom packages||Binary packages|
The column in the middle belongs to packages made from scratch or adopted from already existing source.
It clearly shows that even with the massive help public domain packages, there is still quite some effort needed
to bring an application to live.
The DBM is essentially an application that allows to create and manage arbitrary tables.
Tables may e.g. Worklists, to-do lists, checklists, etc.
Thus, the DBM is suitable as a task management tool within a team.
Features in brief:
The DBM is based on SQLite, whereas the database consists of only one file.
The database does not need a server.
Any number of users can edit the same database table at the same time.
The database file is not “locked”, changes are made under transaction control,
i.e. as long as a transaction is not completed, it will not be visible to other users.
Database changes are updated within the GUI with the help of the “Refresh” button.
There is no “save data” - changes are saved directly in the database!
A database manager (based on tkSQLite) is available for managing the database tables.
Main dialog window:
Table layout and value entry:
The behaviour of a database table entry can be controlled via the corresponding type declaration.
So for instance, if the type declaration is
TEXT, a text entry window is automatically available to enter text.
Or if the type is declared as
DATETIME, a datechooser dialog pops up automatically.
The following type declarations are possible:
|Attribute:||Usage / assigned function:|
|Unique line number, usually: PRIMARY KEY UNIQUE NOT NULL|
|Date, datechooser dialog box will be displayed|
|Text input, text editor will be displayed, the text editor window also allows to enter multi-line text|
|Yes / No Switch, when clicking on a field, the status is changed immediately|
|in conjunction with the |
DONE% keyword, a filter dialogbox will be displayed
Example - table layout:
CREATE TABLE 'Project_X_Worklist' (
'Nr' INTEGER PRIMARY KEY UNIQUE NOT NULL,
'DONE %' NUMERIC
The DBM is meant to be: a replacement for a spreadsheet to manage open issues within a group of people.
For what the DBM is not meant to be: as a replacement for a database.
The DBM works in the background exactly the same as a database application (SQL driven),
although it’s intention is to be a tool for entering and sharing information in a quick and easy way.
|Open Existing Database…||Select existing sqlite database file.|
|Create new Database…||Use this function to create something new.|
|Close Database…||Use this function as usual to close the a actual database.|
|Clean temporary files…||Used to wipe out user settings from the system’s TEMP directory.Once deleted, the application needs to be closed and re-opened.|
|Export all available Images…||Images (if any) can be exported to file.|
The function asks to specify the export directory.
All images are organized in the export directory as sub-folders according to their individual table item number.
The database manager allows to manage the underlying database to its full extend.
- Make shure to create a backup before modifying the database.
- If there are images available on the database, it might be a good idea to export this information as well.
If a table is deleted by accident, all data is lost, there is no undo function implemented.
Changes on the table layout can be done at any time. Once a change is done, the GUI needs to be re-opended.
The following nomenclature is used for internal tables:
_images required for image storage, images are directly written to the database as BLOB (binary large objects).
The corresponding image table will be created automatically for each data table.
sqlite_sequence Required internally for the sequence counter. Under no circumstances delete this table.
Backup & Restore:
Create Backup File...
Creates a snapshot file of the currently open database.
In general, it is recommended to use this function periodically to create a
This function can be called at any time.
On the other hand, backing up the database file with the file manager
is not recommended, doing so, the data integrity is not is ensured.
Create backup function uses the API of the database, so it also takes care
of data integrity even if there are more than one user accessing the database at the
same time. The database will not be blocked.
The backup file will be stored side by side to the actual database file
(same name, but with
Restore from Backup...
This function restores all tables and informations from an existing backup file.
Attention: Be aware, that all changes which could have been done in the meantime are lost!
|Refresh||Re-read all table information according to the actual database information.|
|New Item||Insert a new data entry.|
Database item is selected: the new item is inserted directly after the current selection, all following rows are pushed down, row numbering will be modified accordingly.
Nothing selected: The new item appears after the last row.
|Delete Item||The currently selected row will be deleted. If there is nothing selected, no action takes place.|
|Recalculate Index||Allows to re-calculate all row index numbers (1st column).|
|Export||Allows to export a database table as an excel file.|
Remark: Only those information, which is visible in the dialog is exported (what you see is what you get).
There is a basic functionality available which allows to attach images (e.g. screenshots) to each individual row entry.
The number of images per item is not restricted.
Big sized images are shrinked down to a predefined size. This might take some time.
For each image a thumbnail is created in parallel to speed up the dialog a little bit.
Export tablelist to Markdown
- The Markdown2Go executable needs to be stored in in the same directory as the DBM executable.
Remark: If required, columns can be hidden before starting the export. There is a
(right mouse button in the tablelist widget) available for doing that.
Preferences / Settings:
|Font Selection Dialog||Hint: font types with UI in the name are (maybe a bit more) easier to read.|
|Automatically open||When enabled, the previously selected table is automaticly opend the next time the program is launched (recommended setting).|
|Sidepanel animation||Enable/disable a dynamic effect of the side panel.|
|Scroll to bottom||Scroll down automaticly to the bottom once a new table will be opend or the refresh button is pressed (recommended setting).|
|Fixed title column||If enabled, the 1st column keeps visible all the time (recommended setting).|
|Allow resizeable header items||If enabled, it is possible to move each column of the tablelist individually (if in doubt, leave this option deactivated).|
|Enable moveover effect||If enabled, a visual effect is shown when hovering with the mouse pointer over the tablelist.|
There are some side-effects with the arrow navigation, so for the moment this option is stated as experimental. (If in doubt, leave this option deactivated).
|Additional row spacing||To add extra space above and below each tablelist row (in pixel).|
The value 5 is recommended to make the table more readable. Once this setting is changed, it is requred to re-open the actual tablelist window.
|Header max.height||Allows to specify the max.height of the header line (in pixel). Default is 60px. Once this setting is changed, it is requred to re-open the actual tablelist window.|
|Imagepanel height||Allows to specify the height of the image panel (in pixel). The default value is 100px.|