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 addressed
during the course of development.
Once a problem is on the task list, it might be delegated to another member in the team,
capable to follow up the task.
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).
… and of course, the task-list needs to be edited and follow-up on a daily basis.
The simplest way for such a task-list would be to create an excel sheet
and use it as a kind of task-list to drive the project.
But hold on, although this can be done, it is not really the way to go.
In fact, such a task-management-application does not need to be complex.
The key is a simple application which can be used simultaneously by each member of the team.
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 definable
(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 prerequisites 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 task-list over the web has some charm, but is not always 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 implementation 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.
The only question left for me so far:
is sqlite really capable to handle multi-user access ?
can the database file be located on a shared network drive
(and maybe the share is accessed over a remote VPN connection)?
and what, if for whatever reason the database file should be accessible over the net
& provided via http and a web server?
O.k. that’s definitely not the aim of sqlite (server-less), but there is always a solution…
In short: later on, I discovered that actually it is possible to implement a small PHP layer which can bridge the sqlite access.
Let’s find out…
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 familiar 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 useful GUI widgets,
- easy to program with a clear interface and good documentation,
- the package is still maintained and there is a good maintenance and bug fixing,
(although there is not so much new development going on so far),
- has been adopted to work with ttk
It took me quite a while to develop the program, but here it is!
The DBM is essentially an application that allows to create and manage arbitrary (database-)tables.
Tables may e.g. work-lists, 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 behavior 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 date-chooser dialog pops up automatically.
The following type declarations are possible:
|Attribute:||Usage / assigned function:|
|Unique line number, usually: PRIMARY KEY UNIQUE NOT NULL|
|Date, date-chooser 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 dialog-box will be displayed
Example - showing a typical 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 sure 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. screen-shots) 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.
Note: If required, columns can be hidden before starting the export. There is a no-show filter
(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 automatically opend the next time the program is launched (recommended setting).|
|Side-panel animation||Enable/disable a dynamic effect of the side panel.|
|Scroll to bottom||Scroll down automatically 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 move over 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 required 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 required 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.|
Last modified date: 09.05.2020