Software ideas up for grabs

By uliwitness

In case there are any programmers out there who have lots of time on their hands and don’t know what to program, here’s a few ideas that I’m surprised nobody has implemented, along with my suggestions on how you could fairly easily implement them.

Web Site Layouter

CSS supports absolute positioning of elements. However, most tools available for WYSIWYG site design restrict how you can position stuff. iWeb comes pretty close, but just doesn’t give you enough flexibility for themes, and Sandvox and RapidWeaver both only flow text and objects and don’t let you just position stuff by dragging.

So, my idea is pretty simple: Create a tool that takes HTML and renders it on the screen. Design this as “layers”, each of which has its own entry with absolute positions and the left/top values defaulting to 0. Use a WebView to correctly render each layer at 0,0 and draw it into an offscreen buffer (i.e. NSImage). Then draw all of these layers into your document window. When the user clicks, you loop over your layers in the reverse order as you’re drawing them, and check the pixel at the click position whether it’s opaque or transparent. If it’s opaque, that layer was just clicked.

Now, when the user clicks a layer, let them drag the layer, live. Save the position, and draw the buffered layer at that offset position. When the user requests to upload the page to a server, write that position to the CSS file.

WYSIWYG item positioning and correct HTML rendering the easy way.

Now, the hard part will be to actually edit each layer. You could do plugin-like objects that just output HTML to render that layer. E.g. a “table” plugin and a “styled text” plugin, and you could even use the new cool NSTextView features in Tiger to let users pretty nicely WYSIWYG-preview their images embedded in text. But really, positioning is key. If you’re a proficient CSS-maven, you might even manage to add other cool features, like Interface Builder’s “resize springs” etc., though that wouldn’t be as easy as what I outlined above.

Another neat feature would be a “block hierarchy”. What I mean by that is that users and plug-ins can define block types, a block simply being a chunk of HTML. Many of these blocks will do their thing to other blocks. E.g. the page would be a block that has one area for the navigation block, and another for the content block, and draws the design around those.

One block could be a “box block” that simply renders a box in the current theme and then puts another block with the actual contents inside it. Another block could be a table of image thumbnails in a folder, another a list of files in a folder, yet another block could be a box with a link to an RSS feed, that automatically adds the correct meta tags to get the blue ‘RSS’ button in Safari’s URL bar.

The neat part here would be that blocks generate their HTML based on the current theme. So I can have lots of boxes in my text for common elements like callouts, images with subtitles etc., and when I change the theme, they all change to match.

And as I mention above, there could be native-code plugins that are also blocks, doing all kinds of magic.

Simple Database

Basically, the code for this has already been written. You just link to libSQLite, stuff the database file and a layout description file into a document package and slap a GUI on top. If you look at AppleWorks’ database module, that’s the kinda structure I’m aiming for. You create fields, you can put them on one or more layouts, you can edit, view and print a layout, and search through the fields in the database and show the results using a layout of your choice.

Slapping a GUI on top would essentially mean you code a WYSIWYG UI editor that lets users place text fields, check-boxes, radio buttons, pop-up menus, list boxes, fields with stepper controls (“little arrows”) and any other UI element you can think of on the screen. Each of these would be hooked up to one particular database field in a table. Keep in mind that users may want different views on the same fields, though.

So while they want to be able to just compose a window full of controls, they may want to print as a table/list one day, and as a stick-on label the other day. So, you’ll want to have some simpler and fancier styles as well as standard controls, and you’ll want a table view and list view (i.e. several records shown on the screen, with their controls, not just one).

Also, the database may contain more information than you’d want to print on a label for shipping, so allow for not having all fields in a layout. You’ll also want to offer some drawing tools in case someone wants to draw separator lines, boxes, or put a logo on his disk labels, and don’t forget a text tool for e.g. labelling (groups of) fields with text that doesn’t come from the database. Of course, we also want to store text and styled text in the database.

You’ll probably want to have one object that owns all the controls for a particular field in a particular layout. That way, a user can change the display style of a field. E.g. you could have a number field which can be shown as a slider, an edit field (with or without stepper control), or as a radio button group, or as a list field, or… So, you’ll want to be able to show the same field with a new style just by changing a property, but without losing the actual data.

Main purpose of this: Just general keeping and searching data on-disk (user accounts, info on books I lent out, database of addresses to send my newspaper to…), but also printing of lists and labels.

And once you have that finished, there’s always advanced features: File references (i.e. store an AliasRecord as a BLOb) would be kinda nice, as well as references to records in other databases. If you give each entry a unique ID, you could probably just store this unique ID, and store the database file for that ID along with the field definitions and layouts “globally” in your document (i.e., I don’t think you’d need to be able to have a different database for each record).

In addition, you could add a little expression parser that lets you create field values calculated from other fields’ values (e.g. calculate someone’s age based on their birth year, or concatenate a “product prefix” and “product version” field to generate a product code, or whatever…).

You can also go wild with regard to search, import/export, trigger AppleScripts when a particular field is changed, put a plainly readable XML version of a database into your package to make it easier to spotlight and to allow third-party apps to read your databases without having to restrict yourself when changing the database format… there’s a lot of cool features in there, but the basics are pretty trivial to implement and only require some time and polish.

Audiobook/Theatre Lines/Podcast Recorder

This last one is probably niche, so I’m not too surprised it hasn’t been done in this form. Still, I think it crosses enough markets that it would be possible to make a viable product out of this:

Basically, it would be an audio-recording app. Feature set not unlike Audacity (or an updated version of Farallon’s SoundEdit), but with one distinction: A workflow that allows me to set chapter markers by pushing a button during recording, and perform other simple but common editing tasks while the recording is still going. What for? Well, several uses:

  • In Podcasts, add chapter markers or put bookmarks in spots where e.g. the Skype recording has broken up.
  • In audiobooks, mark the start of a new sentence. If I mis-pronounce, I simply click a button, and everything up to the last chapter marker is marked for deletion. I simply read the sentence again (and again, and again) until I get it right.

So, the editing that happens would only consist of marking up the recording with metadata, and updating the display (which would probably be some sort of wave-form display with selection). There would be no need for the delays often caused by stopping and restarting the recording, as it would just keep going. Only once the recording has finished would the actual sentences be deleted. Heck, it wouldn’t even have to delete them right away, it could keep the various versions of the same chapter and let me choose between alternatives.

While Garage Band has a vaguely similar feature, it is aimed at musicians: You can mark an area that is a certain time long, start recording, and start playing your instrument. Once recording hits the end of the time range, it will then restart recording from the beginning and let you play a new version of this particular range. But it is always of fixed length. When I’m reading a novel as an audiobook, there is no predefined length for a sentence. I might try reading it fast, realize that doesn’t work, then want to re-read it more slowly.

So, why do I mention theatre lines here? Well, when I learn my lines for a play, what I usually do is I record everything into an MP3 and then listen to that on the morning commute. By hearing my lines every day, having them repeated to me over and over again, I can much more quickly memorize everything, and I can learn the lines on occasions where I can’t have the textbook in front of me. The general workflow is the same as an audiobook, though: Read text out loud, and delete any sentence I screwed up and record it again until it’s OK.

Any takers?

If anyone happens to implement one of these ideas or knows of applications that already do this, let me know. (And no, FileMaker or MySQL with phpMyAdmin don’t count – I want something small and simple, like Tables, but for databases/web sites).

Update: Added mention of blocks to web app.

13 Comments Leave a comment

  1. Either I don’t understand your description for the second app or it is just what these clunky “database apps” like MS Access and FileMaker do today. I don’t have any experience with both of them, but the UI isn’t inviting. I tried Bento (which should be a “smaller and simpler” FileMaker), but I don’t like its approach, too.

    I like to have specialized apps for every distinct use case.

  2. Uli

    I so would love to see this as well — Dare I say — There is is an application on Windows (wysiwygWebBuilder — http://www.wysiwygWebBuilder.com ) that does very much what you are looking at. And it is way more flexible than iweb. I have been thinking about how much it would be to a) port it — assuming the developer was into it or b) just build something similar from scratch.

    The only problem is market/demand — iWeb (bundled on computers or part of a low cost high value bundle) satisfies the average user’s demands to a degree — SandVox and Rapidweaver are battling it out on the template approach (although the don’t allow full flexibility — they do the job quite well) and powerusers are just going to code that stuff by hand in anycase. (or use coda/ dreamweaver or other pro tool)

    Still — it is an itch to scratch is it not?

  3. Hasn’t Bento fulfilled the “simple database” idea?

  4. @ Rafael & Chuck: I’m kinda looking for something like FileMaker, yes. A simpler version, with a modern MacOS UI. Bento promised the right thing, but the delivery took most of the annoyances of FileMaker (the sluggishness, the horrible, horrible picking and mouse tracking).

    Specialized apps are nice if there is one available for a particular use case, but I often find myself in situations where a simple database would be great.

  5. @Scott: I’m kinda hoping that one of the existing apps sees this, realizes how easy it would be to get WYSIWYG positioning and implements it. I agree that another player in the market won’t have it easy, but OTOH if you’re good enough, second place next to iWeb will probably depend on whether you have free positioning like iWeb or not.

  6. I really think a fully absolutely positioned website generator is going to produce a whole new generation of Front Page-esque sites, that are going to look terrible on different computers… ie, all squeezed to the left on a widescreen monitor, or too wide on 4:3 monitors. I’m not sure what a simple Database would do to differentiate it from Access enough that it would be more usable, and yet not something that you can do in Excel… if one worked, I guess it could be OK, but I’m not sold on the idea at all.

  7. 1. I doubt that you’ll get far enough with absolute positioning (unless you do an iWeb and render everything as an image, in which case you could just skip the HTML and upload an image). Even a seemingly trivial situation: a single box of content starting at the top of the page and a single box of footer at the bottom of the page is rather hard to get right once you allow things like boxes and the browser windows and the fonts used to have non-fixed heights. As absolutely positioned elements on a web page are ‘out of touch’ with the rest of the page, they are generally a bad tool for creating a page with elements that are supposed to interact with one another.

    2. So what’s wrong about a decade old Filemaker. It used to do the job rather well before they starting cramming all sorts of features in there. (Of course Cocoa developers will just create their data model in a CoreData project these days and voilà: database – now if only bindings didn’t suck so badly…)

  8. Umm… how ’bout blocks? (no affiliation; just a satisfied customer)

    http://www.yourhead.com/blocks/

  9. @ssp: As I mentioned above, FileMaker’s UI just isn’t usable enough. Also, FileMaker has complex scripting and formulas and standalone generation. Lots of semi-professional features that are desirable for advanced users. But what this database app should have is really the simplicity of a Lineform or iTunes, just for a database.

    ClarisWorks’ database module was (at least in spirit, if maybe not in actual code) based on FileMaker. It was simple enough. Updated with a slightly more intuitive UI (less modal panels, more Interface Builder-like drag’n droppable object libraries, plus guidelines to help with positioning), this would do wonders. And while Bento has all this on paper, the performance and the actual implementation just don’t satisfy.

  10. Uli, I love reading your blog and enjoy just about all you have to say. So it is with much admiration and respect when I say that your database idea is crazy. I think a solo developer trying to out-compete Bento is more than slightly insane. I agree that Bento isn’t perfect, but there are so many potentially great apps out there yet-to-be-written, it just seems crazy to invest the copious amount of time and resources in trying to compete with such a powerhouse like Bento.

    But I’m not one to criticize without throwing out my own idea. What about an iTunes for open source projects? It could be a central searchable repository for open source code, with all the meta data clearly laid out (i.e. language written in, technologies/frameworks implemented, license type, #of lines, last modified, number of active contributors, reviews, rank, popularity etc.) You could subscribe to “codecasts” where updates would automatically be pushed into your folder, and rss of news feeds could be subscribed to. I realize that some of this can be found by visitning sourceforge, and googlecode etc. but it would be really cool to have it in one centralized app.

  11. I took a look at the comment by Scott — and did a double take, thinking it was me and I just didn’t remember writing it. :)

    I have used WysiwygWebBuilder a fair bit and prefer it far above iWeb — I just hate that it is windows only — as it suffers from some windows like issues (kludgy interface at times) and crappy crappy crappy font rendering.

    I have even broached to topic of a port to Pablo (the author) but he doesn’t seem to be up for it. I think he (as a one man show as far as I can tell) has done an amazing job — It is written mostly in C from my understanding (probably some MFC stuff — yuck) but the actual footprint of the app is tiny for what it does.

    Still I would love to see a port of it or a similar app built from scratch. It really fits that middle ground between bundled iWeb (underpowered) and Dreamweaver and other Wysiwyg apps that are overkill for most people. His price point is good too ($40) representing very good value.

    @britt — blocks is OK — but it still is working inside the template.I try and try and try again to get my head into the template approach and everytime I come up frustrated that I can’t do what I want easily.

    Furthermore designing templates are tough… If only the RapidweaverFolks had a nice app for building templates.

  12. Don’t have time to attempt any of these at the time, but I do like the database idea, as I too think that the current offerings “miss it” in comparison to ClarisWorks. I don’t think it would be terribly difficult for a single programmer to create such an application. As long as you kept the v1.0 release focused on the very basics (but done right) I would think the risk to reward factor would be in the programmer’s favor. If you were to allow the program to use a local sqlite or a remote mysql database I think the app would be very attractive.

    Scott, love the idea of an iTunes for open source projects! While it’s true that you can get some of that via the various open source sites out there (like sf.net, github, etc) having an iTunes style interface to all of them would really rock. I’ll offer up a name … “iCodes” :)

    One thing I have found frustrating in keeping up with some of the open source projects I am interested in is that there are now numerous VCS programs out there that are popular, so I’m having to learn a lot of command line commands and often forget between times I update my copies. Also, if you have more than a few it gets tiresome to update each. So, if this iCodes app could allow you to “suscribe” to a project and would automatically checkout/clone to your local machine. If you want automatic updates you could subscribe to “codecasts” as you describe, although probably need a way to specify if you want daily updates, or only “release” updates (where release would ideally allow you to specify the type(s) of releases you are interested). This would require it to have basic functionality for all the supported VCS programs built in, but it would be pretty light; just initial repo checkouts/clones and then updates.

    This program would be most useful if it could tie into the major open source project hosting sites automatically, so that projects could be included without having to have a project maintainer set it up specifically for iCodes.

    As I envision it, this project would require a lot of work, but would be fricken’ cool!

  13. I found your site while researching a project I might undertake. Please email me if you would be interested in helping. It’s about your table program.

Share your thoughts