Domain: equi4.com
Stories and comments across the archive that link to equi4.com.
Comments · 22
-
Disk catalogue software.. old school
Gosh, disk cataloguing software brings back memories of software we used to keep track of floppies back in the early '90s. I can't find any examples specifically from the Amiga (I definitely had some PD utility to do just this though), but this Windows shareware from the late 90s is a suitably crummy example: http://equi4.com/catfish/
When it comes to CDs and DVDs, I now rip them and store the originals in the loft. They go in to iTunes and that make it easy to find them again. It stops the children wrecking the actual disks too. When we're low on space I either upgrade the disk or delete stuff they've lost interest in.
-
Software solutions
For Windows, there's catfish http://www.equi4.com/catfish/index.html
For Linux, there's cdcat http://cdcat.sourceforge.net/ -
Metakit
Take a look at Metakit. http://www.equi4.com/metakit/index.html. Its single file, small, fast and it has proven itself over many years. It is written in C++ and bindings for Python and Tcl are available. Instead of tables, rows and fields it uses similar concepts called view, index and property. Interestingly, a property may also be a subview thus allowing a mix of a relational database (flexible) and a hierarchical database (fast).
-
Metakit
In addition to SQLite, there's also Metakit, which you might want to check out. There's a Windows build available.
-
Try Metakit
Metakit is a small footprint database that might fit your needs. Metakit
-
Re:What happened to Tcl?
As I heard the story (n-hand so take with a grain of salt), Sun hired Ousterhout because they wanted a language platform they could control and use against Microsoft. However, Ousterhout insisted that TCL remain with its open license.
When Gosling and crew showed off Oak (later Java), Sun realized they had what they needed, a completely home grown system they could own and control.
Java became the favorite child, TCL was ignored (so was SELF, another language Sun was interested in). So Ousterhout left Sun and formed Scriptics.
So basically it was because Sun wasn't allowed dominating control over TCL that they didn't keep backing it.
Disclaimer: I'm a fan of both Java and TCL. I particularly like TCL's Starkit system of a self contained executable that is drag-and-drop deployable without requiring a runtime install.
-
Re:It's remarkable that people still do this
The 100 new languages we get each year tend to be the same C++ style language with a few pieces of syntactic sugar on top.
Syntactic sugar and (as you said) a lack of libraries.
It frustrates me to no end that I can't just pick a language for a project and use the mountains of java|ruby|perl libraries that I'm already familiar with. By now most languages ought to be able to compile themselves or be interpreted on one or 2 mainstream runtimes, or at least have a convenient method of calling each other's libraries.
I know there are several languages that run on the JVM, and that the intenion of Parrot is to address just this issue, but JVM is huge, slow to start, and not generally very well adjusted for running small scripts or CGI programs (the kind of programs I tend to write a lot), and Parrot's been in development at least since 2002, with only a few languages working on it, most of them incomplete.
I thought this guy had some interesting ideas on the subject: http://www.equi4.com/moam/nuts
-
Metakit is a great column-oriented database engine
... and best of all, it's Open Source and free!
The real interest of column-based storage is that each column only carries a given data type. This means that allocation can be optimal (up to the bit level). Moreover, memory-mapping a column gives a contiguous array of uniform data, which is randomly accessible. Scanning a column consumes much less memory than for row-based tables, since only the relevant data has to be present in memory. Here is a great intro to its view model.
Another big advantage of Metakit (and probably other column-based DBMSs) is that it supports hierarchical tables (dubbed subviews). A column type can thus be a table itself. This means that rows can contain variable data, which eliminates most of the needs for table joins and relational algebra. Moreover the table definitions can be self-referential: one can easily represent tree data in a single table, such as an XML document or a file hierarchy. For example, the following table definition is sufficient to store a whole tree of ints: tree[value:I,children[^]] where ^ references the table itself.
I've used Metakit with success in several commercial projects. The learning curve is a bit steep, mostly because of the sometimes obscure documentation, the radical choices, and terminology which often depart from that used in traditional RDBMS. I had to experiment a bit to make the right choices. However, once in hand, it is lightning fast. I was able to design an object-based system where all data were stored in memory-mapped storage, and were accessed in a fully transactional manner. This means that in-memory objects were only wrappers around memory-mapped Metakit storage: setting an object property actually altered the data in the right column inside the storage.
-
Metakit is a great column-oriented database engine
... and best of all, it's Open Source and free!
The real interest of column-based storage is that each column only carries a given data type. This means that allocation can be optimal (up to the bit level). Moreover, memory-mapping a column gives a contiguous array of uniform data, which is randomly accessible. Scanning a column consumes much less memory than for row-based tables, since only the relevant data has to be present in memory. Here is a great intro to its view model.
Another big advantage of Metakit (and probably other column-based DBMSs) is that it supports hierarchical tables (dubbed subviews). A column type can thus be a table itself. This means that rows can contain variable data, which eliminates most of the needs for table joins and relational algebra. Moreover the table definitions can be self-referential: one can easily represent tree data in a single table, such as an XML document or a file hierarchy. For example, the following table definition is sufficient to store a whole tree of ints: tree[value:I,children[^]] where ^ references the table itself.
I've used Metakit with success in several commercial projects. The learning curve is a bit steep, mostly because of the sometimes obscure documentation, the radical choices, and terminology which often depart from that used in traditional RDBMS. I had to experiment a bit to make the right choices. However, once in hand, it is lightning fast. I was able to design an object-based system where all data were stored in memory-mapped storage, and were accessed in a fully transactional manner. This means that in-memory objects were only wrappers around memory-mapped Metakit storage: setting an object property actually altered the data in the right column inside the storage.
-
Re:Are relations obsolete?It depends on the application. I have done quite a bit of work with Jean-Claude Wippler metakit database. It is essentially a column based store with some clever underpinnings to make it relational as well. We mainly used it to track molecules and assay results coming off of our plate-readers. The nice thing is that this streaming data can be saved to disk and used in our LIMS system. What it does really well is scan and sort columns, the throughput is really quite amazing. It gets pretty slow for relational queries, but has the benefit that results of queries are persistant in the sense you can chain them together in a relational algebra fashion.
When I was getting interested in this, I also came across kdb a relational database based on the K programming language. kdb is also a column based store with one huge benefit, the interpreter that analyzes the columns,K fits inside a level 1 cache. The throughput of kdb is immense which is why it is mainly used to track and analyze financial data and other streaming and real-time data. It used to be you could try it out for free, I'm not sure what the state is currently, but I suggest at least giving it a try, it's not cheap but it certainly changed my view of databases.
Just my two cents. -
Re:Just what we need...another VM..
I don't own a Mac - (until very recently I didn't own a Windows machine either) - so even though I work hard to write portable code, I can't compile or test it on the Mac - so I can't provide an executable for people to download and run. Sure I can (and do) hand out source code - but most Mac users don't know how to use a compiler and most Windows users don't own a compiler.
You are aware that this is a solved problem for many people? -
Re:TCL/TK
Kudos to the well-informed parent. Tcl/Tk is indeed an excellent solution. More below.
But first
... Visual Basic is NOT the answer. The criteria were "fairly small" and "easy to install". For most Windows versions you'll have to distribute your VB application in an install package that includes the VB runtime DLLs or the .NET runtime (or get the end user to download them, which is a mission). If you're unlucky you'll have to distribute other MS DLLs like ComCtls as well. Find out more at http://msdn.microsoft.com/vbrun/ . Then there's accessing the serial port ...For a simpler solution, grab TclKit, a single-file Tcl/Tk distribution. Tcl is ridiculously easy to learn, serial port access is as easy as file access, and it uses Tk to provide a powerful GUI.
You can put your scripts into the TclKit EXE as a resource, creating a single-file EXE distribution of your application. With UPX compression the resulting file will be around 1.2Mb (depending on what extensions you choose to use).
-
Starpacks, Tcl/Tk
If it's a starpack, they won't know what it is. They download one executable file that is smaller than 2 megs, and run it.
http://www.equi4.com/starkit.html
I'll second the Tcl/Tk recommendation. It's super easy to get an application up and running in no time. What's even better is that you can do most of the development on Linux if it's not an app that requires a lot of windows specific services, and then switch to windows to put the final touches on. I've even had it happen that I didn't need to change any code at all (but it's usually recommended, just to give your app that extra polish). -
Fat cross platform binaries, just do it
Another variant for Tcl/Tk with Tclkit:
http://www.equi4.com/tclkit
Create a starkit with:
sdx wrap myapp
Run it on any of the supported platforms for Tclkit (30 or so http://www.equi4.com/pub/tk/downloads.html) with:
tclkit myapp.kit
Or do a transaction safe differential update of the app from the internet server with:
sdx update myapp.kit
And yes, you can build fat binaries which can include compiled C libraries for use on Mac/Linux/Windows. If they use the Tcl Stubs mechanism you do not even need the same Tcl version for the runtime you used for the libraries, no recompile of library packages for minor version changes. (thats currently 7 years of no recompiles for most Tcl extensions). -
Fat cross platform binaries, just do it
Another variant for Tcl/Tk with Tclkit:
http://www.equi4.com/tclkit
Create a starkit with:
sdx wrap myapp
Run it on any of the supported platforms for Tclkit (30 or so http://www.equi4.com/pub/tk/downloads.html) with:
tclkit myapp.kit
Or do a transaction safe differential update of the app from the internet server with:
sdx update myapp.kit
And yes, you can build fat binaries which can include compiled C libraries for use on Mac/Linux/Windows. If they use the Tcl Stubs mechanism you do not even need the same Tcl version for the runtime you used for the libraries, no recompile of library packages for minor version changes. (thats currently 7 years of no recompiles for most Tcl extensions). -
Metakit
Metakit is a radical alternative to conventional RDBMS. Portable, self-contained, on-the-fly restructuring, fast, memory-mapped...
IIRC Apple uses it for MacOS X's address book. -
Tk getting a makeover
It's called "tile" and the goal is to make Tk look native on all platforms, in a 21st century sort of way.
http://tktable.sourceforge.net/tile/
Combine that with starkits, and you have 0 dependencies. Just distribute one file. -
Re:Reliability comes first
-
there are plenty of choices
Under UNIX, people traditionally use the file system as the database. It's an intuitive, hierarchical database supporting many of the features you expect from databases. You get hierarchical string-based keys and arbitrary binary content (up to many Gigabytes per key). This works best with ReiserFS, but works well enough with the other file systems as well. And everything knows how to access the file system.
The next database system people use a lot is dbm and its variants. They are good for when you need to hold lots of tiny data items and you need high performance. If your data items are big or you don't need high performance, go back to the file system. Dbm is, again, intuitive, simple, and powerful. And it's accessible from lots of different languages.
If you want something close to an RDBMS without using an RDBMS, have a look at Metakit.
Altogether, I think UNIX/Linux developers should mostly stick with using the file system as a database. -
Related toolsRandom links that may be of interest:
- EasyORM - "EasyORM is an object-relational mapping tool for users of PHP and MySQL."
- DaDaBik - "DaDaBIK is a DataBase Interfaces Kreator". For PHP.
- Metastorage generator - "Metastorage is an application that is capable of generating persistence layer APIs." Available for PHP.
- Metakit - "Metakit is an efficient embedded database library with a small footprint. It fills the gap between flat-file, relational, object-oriented, and tree-structured databases, supporting relational joins, serialization, nested structures, and instant schema evolution." C++, Python, Tcl.
- CodeCharge - Code generator for database web sites.
- Link from hotscripts PHP database tools section: AppGini - "AppGini creates your MySQL database and all the PHP scripts you need to manage data."
- eSKUeL, phpMyAdmin - Web-based MySQL administration.
- EasyORM - "EasyORM is an object-relational mapping tool for users of PHP and MySQL."
-
Re:Doesn't look like an OS in a browser
It claims (without proof) to be a lot faster than Java: 1.5 - 3 times slower than C (according to this document, the source of much of the following information).
It's all tooled up with both the bad bways of Garbage Collection. Yes, let's hear it, folks, for Mark and Sweep and his old sparring partner Reference Counting. Still doesn't stop it churning perceptibly in the ticker applet. (They claim RT scheduling but that's no good when you're sitting inside IE with JavaScript turned on in a force 9 pr0n gale.) The polyhedra demo is fast and smoothe and reasonably svelte.
'array of array of vector of arse'. Gak! Neither I nor the compiler are amused that dcl is now compulsory.
It can run Limbo source or binaries, not just bytecode.
Dennis Ritchie encourages the development of a C compiler, and maybe the one bundled with Plan 9 has a few tricks up its sleeve. With a gcj-style Dis backend you could install signed X and Gnome/GTK/KDE/Qt (or the unbelievably cool Ion Window Manager) applets to replace the embarrassingly retro interface. How about writing DHTML in Perl or Python instead of JavaScript? Can you say
.GNET?The site's 3 years old and the guy may be talking out of his arse. I'll give him this, though: he sure knows how to diss up C++ with a zeal for hellfire and damnation truly worthy of his dear OS's name:
C++ objects and their complexities are happily left out. There is no polymorphism or tricky exception handling (the difficulty of understanding exception handling caused the explosion of the Ariane 5 rocket).
It's not every day you download and install an operating system in a couple of seconds (ADSL). Didn't even have to powercycle IE let alone reboot its other OS plugin, Windows. If they don't open the source I'm sure there's someone somewhere who's looking at his/her 1 floppy Linux distro and hatching a cunning plan. What a shame Theo de Raadt's so down on a pocket OpenBSD (reminds me of Guido's antipathy to a Python shared object, Linus's allergy to a kernel debugger). That fireproof sonofabitch would be a perfect fit for plug-in World Domination.
-
Perhaps MetaKit?
I'm not certain if it's what you're looking for or not, but I've been playing with Metakit a bit lately. According to it's author, "MetaKit is a class library for storage and transport of highly structured containers. Using a truly simple API, you can create very small and efficient stand-alone database applications for Windows, Mac, Unix, and VMS. The datafiles are platform independent, self-repairing, very compact, and can be instantly reorganized. This product has been used in a number of financial applications, CDROM-based catalogs, internet utilities, statistical tools, etc. CatFish and OSAX are both based on this general-purpose database library."
It's also available in versions for Tcl & Python. I've been using the Tcl version & have been quite impressed with it's simplicity & speed. It's distributed as shareware, so it's even inexpensive: $165 for all platforms (includes C++ source code).