March 3, 2003
I’ve been kind of quiet this weekend since I was trying to stop myself from going into rant mode but I guess I’ve got to rant when I’ve got to rant – so here goes :p This guy had posted a review about Blog on BetaNews on the Blog page and he gave Blog as low a rating as he could because Blog had been identified by one of his apps as spy/nuisance ware. Now I was really mad at that time because I make all efforts to provide a good, bug free app and also try to provide good support – and all of this for free. So when my app gets called spyware, I have a tendency to go ballistic :p In hindsight, I realize I can’t blame the guy because he was going by his what his utility told him and for most users, I guess that would be enough – how can a computer program be wrong? :p I just wish he’d contacted me to clarify the matter instead of just slamming Blog.
Anyway, I tried out the utility he used – it’s called PestPatrol … sorry, don’t have a link since I’m at home and offline – and sure enough, it identifies the Blog directory as having malware that could install a Flash applet or something which displays an annoying message. The program it tags? The uninstall.exe from NullSoft! Now, I know tons of people use the NullSoft installer package and if that was malware, I’d think it would have been noticed y now. Plus, I’ve run both AdAware and SpyBot Search & Destroy on my machine many times and neither of them ever identified the uninstall.exe as malware. So I can only conclude that PestPatrol has a slightly faulty database or a faulty identification routine. I should probably write to them and point it out to them – perhaps when I’ve cooled down a bit :p
In other news, I haven’t really felt like testing out the web update component (I was lazy – or just too tired after all that coding) and so haven’t done much work on it since I got the code completed. But I’ve been working on something else. Yeah, another one of those ideas of mine :p Actually, the idea was already there but I just didn’t like the implementation <g>. There was this app called Visual CD which lets you store directory listings for your removable media as well as hard disk folders. It then lets you search these lists so that you can find where a specific file is without having to go through all your removable media one by one. I liked the app and the UI but I hated the fact that while Visual CD provided compressed archive file support so that you can browse an archive file’s contents if the removable media was in the drive, it would not store information about the contents of archives in its file list so that you can search for a file even inside the archives. I wrote to the developer and offered to help with the coding since s/he seemed not to have enough time to do so plus they’d mentioned that they used VB and Delphi for their apps and I was hoping that Visual CD would be done in Delphi. But I never heard back from the developer. So I decided that I would write my own version that had archive support as well :p
So far all I’ve done is to work out the file listing storage format and a method to compress the file listing file so that it would take less space. I still have to add support for adding compressed archive listings to the file listing set, to do the code so that I can access the contents of any folder or archive in the listings quickly to allows directory changes in the UI and then do the UI itself. It is another one of those interesting side projects which most people would have no use for but that I need badly since I have a lot of unlabeled CD’s that I have to sort through every time I need to find a specific file …
Tags:
Posted by Fahim at
7:00 am
|
February 28, 2003
My apologies to anybody who downloaded the Blog 7.1 build before my announcement on this blog yesterday. About an hour after my announcement, I learnt from a user that the archive table of content generation code had a bug in the build I had put up. I had originally worked on that code to fix the very first entry range not showing up in the archive table of contents and got it working fine but then had decided to optimize the code so that I could drop a few extra lines and maybe save a few CPU cycles … and didn’t test it after that :p Turns out that I forgot to use NOT where it was supposed to be used and the whole archive table of contents generation loop was being bypassed and you ended up with a blank archive TOC. I fixed that yesterday within an hour of learning of the problem and uploaded a new build which incidentally also contains the new ActionBar based menu system with the Windows XP look – let me know what you think about it as well as if it works for all of you under all flavours of Windows.
Once I got that quick fix behind me, I began looking into the whole auto-update thing. I was first thinking of using an existing component but out of all the components that I looked at, I liked only a few and my final choices were a freeware component and a shareware one. I liked the Pro version of the shareware one since it supported updating multiple files as opposed to the single file update approach taken by the freeware one and the non-Pro version of the shareware component. Since I am also thinking of splitting the Blog code into an executable and several DLLs (both to make the auto-updating easier and to make code management easier), neither of the components (except for the Pro version for which I’d have had to pay) was going to work for me. So I decided to write my own :p
I’ve been working on that code most of yesterday evening. I got the basic structure in place and the code to access a given URL, read an info file and then either redirect to a different location (in case the download needs to be moved …) or get the latest build info from the file and give the user the option to update. Since this requires quite a bit of UI prompting, my first idea was to build in the UI stuff into the component but then I realized that would: a) add to the final component size b) not allow the end-user to customize the UI the way s/he wants. So I’m doing the whole thing on an event based architecture. There are a ton of events for everything you can think of and then the user can handle the events to display information such as a list of changes as well as the files to be downloaded etc.
At the moment, the component still supports only one file to be downloaded but I intend to extend it to support multiple files once I get the basic code working. I also want to add support for both optional and mandatory downloads so that the user can select whether s/he wants to download the optional components or not. Of course, that too is in the future since I still haven’t even settled on the update info file format except for a fairly nebulous idea as to the general structure. This probably will take me a few days to get working correctly and once I get that done, I guess I can go back to Blog and look into either merging in BlogMan or splitting up the code into an executable and DLL before doing the merging in.
Tags:
Posted by Fahim at
6:38 am
|
February 27, 2003
Well, as Phil and Duane have already commented, Blog 7.1 is out :p Incidentally, Phil wrote me a detailed e-mail pointing out certain things that can be changed in Blog for the better (sorry about not responding yet Phil – just wanted to take the time and respond at length …) and while I was inclined to hold back 7.1 to add some of his suggestions, none of them were really bug fixes (except perhaps for one) and so I felt it would be better to integrate his suggestions into Blog 8.0. The one thing he pointed out that could qualify as a bug is the fact that Blog does not work around FTP failures gracefully – I did look into the code to see if that could be fixed quickly but turns out that is going to need some major overhauling of the publishing code to allow Blog to skip publishing a site if it encounters an FTP error on that site and to go to the next one. I sometimes get Blog to do that by clicking the Close button while in the middle of a publish (if it fails FTP or waits on FTP) but that’s not always reliable :p
Anyway, now that Blog 7.1 is out, I’ve been considering the next step for Blog and the direction it is to take. I’ve decided to put aside my fanatical observation of the executable file size and to add a few things which would probably increase the executable size greatly but make Blog functional and look good – of course, you may not agree with me :p I’ve already started on this road by replacing the current Blog menu with ActionBars so that the menu will have the Windows XP style and will look good. The reason that I didn’t use ActionBars before was because I couldn’t figure out how to do the dynamically created custom snippet menu and now that I’ve finally figured out how to loop through action bar items, I think it will work fine. In fact, I learnt a bit more about action bar handling through this change and was able to change even the custom snippet toolbar code to make it easier to read and to code :p
Other than the UI changes, I am also planning on adding an auto-update feature to Blog so that users can be automatically informed of new releases and download them immediately from inside Blog. There are two reasons for this particular feature – the obvious one being the ease of use for the user but the other one is the fact that I am thinking of releasing interim/preview releases for those who might be interested in bleeding edge stuff to test while on the road to 8.0 🙂 Based on how long it took to release 7.1 and the fact that I’ve been growing increasingly busy, I have a feeling that 8.0 might be a good ways off, especially since it’s going to involve major UI, database and code overhauls. So I thought I’d do a quick release first with some of the minor UI modifications and the auto-update feature built-in and then put up preview releases as and when I get to a new plateau of stability and usability. That way, interested users can keep up with development and hopefully find bugs that I might have missed. What do you think? 🙂
Tags:
Posted by Fahim at
6:41 am
|
February 26, 2003
I’m considering releasing Blog 7.1 today – not sure if I’ll be able to since I just remembered a couple of old bugs which are supposed to be squashed but I’m not sure if I really tested :p So I’ll do the testing and then if it still works as it should, expect a release sometime today – unless I get really busy. Incidentally, while going through my e-mail collection of old bug reports and feature requests for Blog, I notice that there were several requests for smileys – I mean the ability to insert a customized smiley face instead of using text emoticons. This should be fairly simple with Blog without providing any additional functionality – especially now that I seem to have got custom snippets working without any problems <g> All you need to do is upload the smiley icons to your server and then create a set of smiley snippets on your installation of Blog which basically uses the IMG tag to specify the location for each particular smiley. Then you can add these extra snippet buttons to your toolbar (wait till 7.1 is released though since toolbar customizations seems to be the reason for the Blog slowdown) and simply click on the button when you need a particular smiley. You can even add that smiley icon to the button using the custom icon feature in the custom snippet definition dialog but the only thing to remember is that while the smiley you upload to the server has to be GIF, JPG or PNG, the image you use for your buttons will have to be an icon (ICO) file – so you will need two versions of the smiley. Hmm .. I might actually try this out myself :p
Tags:
Posted by Fahim at
6:26 am
|
February 25, 2003
Looks as if the Blog 7.1 did the trick – or at least so it seems from what Dominion tells me :p He says things are working fine for him and so I hope that the mysterious slowdown bug is laid to rest at last because I’d hate for it to be carried on to Blog 8.0 since some people might not want to migrate to 8.0 if it turns out to be too bloated :p This is something Phil mentioned in a comment – that if I merged Blog and BlogMan, people can always decide not to upgrade but I worry about bugs since all bug fixes usually go into the newer version and I’d hate anybody determined to stick to 7.0 to be stuck with any bugs. Hopefully, the 7.1 release will take care of all bugs and we can start off 8.0 with a clean slate.
Incidentally, I’d be interested in your response to the new UI changes in 7.1 but I guess I’ll have to wait till 7.1 is release and everybody has had a chance to test it out for themselves. Personally, I like the new UI but that’s only because I use the bare minimum of Blog features :p I’m more interested in the comments of somebody who uses the Preview feature a lot and/or the built-in Blog comments. Since the Preview pane is in a tab by itself, you might find it a bit awkward and if so, I’d like to try to do something to make the user experience a better one.
Since I’d switched over to Delphi 7.0 at work yesterday (I uninstalled all the old Delphi 6.0 and 7.0 stuff and reinstalled Delphi 7.0 :p), I had messed up and put in the demo version of PlusMemo. So the users who got the pre-release version of Blog 7.1 get a PlusMemo nag screen. This will be rectified as soon as I can find my copy of the registered version and you should have a nag-free release when I do do the public release. I’m also playing with a few internal components to see if I can try to reduce the application file size since the switch to Delphi 7.0 meant a sudden jump in the final executable size. Granted, it’s not even 100kb (more like half that) but I still hate executable size increases and am trying to see if I can somehow cut down on that by using a different component to do the same job.
Tags:
Posted by Fahim at
6:15 am
|
February 24, 2003
I’ve been working with Blog 7.1 under Delphi 7.0 and it isn’t too bad – the compile time is still a bit too long to suit my tastes but other than that, I like Delphi 7.0 quite a bit. I’ve also been looking at it’s RAD web development stuff and it looks really interesting – I intend to do something with that soon. But in the mean time, I think Blog 7.1 is almost ready for release. I would have released it today except for the fact that I got a chance to actually test whether a particular bug that I *thought* would be fixed by this release, is really fixed. The bug? Blog slowing down at startup to several minutes (I really didn’t know it took that long till a Blog user told me so a few days ago) after a few weeks or months. I’d noticed no difference myself but had received complaints from several users.
I suspected that this might have something to do with the custom code snippet feature but was unable to test for sure since I didn’t have the problem myself. However, Dominion (the user who said that his Blog installation took over five minutes to start) is willing to do some testing for me and so I want to check if he still has the problem with the latest build of Blog. If he doesn’t, I can be sure that the bug is gone but if not, then I can try to isolate the problem before I do the next release. I believe that the bug has to do with custom snippet buttons on the toolbar and only if you have any custom buttons on the toolbar – I don’t. That might be why I don’t have the problem. I guess I could simply have added a few custom snippet buttons and then waited for a couple of weeks to see if Blog slows down but I didn’t even think that far till now :p
What I’ve noticed is this. The custom snippet buttons on the toolbar are dynamically created at start up since the custom snippet definitions themselves are loaded from a database table. The toolbar definition (such as what buttons are on the toolbar and where they are) is saved when Blog is closed but since the snippet buttons are dynamically created, the next time Blog is started, those button definitions are invalid and I have to recreate them dynamically. I simply go through all the button definitions on the toolbar and find empty definitions matching custom snippets and then recreate them. However, I’d noticed that the number of empty toolbar button definitions increased each time I ran Blog. I discovered later that this was because I was supposed to delete the buttons instead of free them (I thought freeing them automatically removed them …) and so, the code in Blog 7.1 deletes the empty buttons. However, since the older versions of Blog does not, I think it might be that over time that the number of empty button definitions grows enormously and Blog keeps on looping through it all till it finally creates the toolbar stuff and then starts up. However, this is just a guess – I’ll probably know for sure once Dominion tries out the new build on his machine.
Tags:
Posted by Fahim at
6:33 am
|
February 22, 2003
While I’ve contemplated the switch to Delphi 7.0 before and have decided not to due to the inordinately long compile times (as compared to Delphi 6.0) and the (slightly) bigger final executable size, I’ve had to change my stance suddenly :p Yesterday, I needed to import some type libraries into Delphi so that I could work with some ActiveX controls (this was Cache related incidentally) and got an Access Violation. I tried with several different ActiveX controls but was met with AV’s each time and then I tried in Delphi 7.0 and it worked just fine. I guess I could have uninstalled Delphi 6.0, reinstalled it, reapplied the service packs and patches and then checked to see if I could import ActiveX controls now but I decided to skip all that :p
I considered all the components that I currently used for my apps and realized that I had Delphi 7.0 releases for most of them. I also considered the fact that Delphi 7.0 has a lot of support for web development via web forms and that I could probably get around to doing some server-based apps (like a blogging tool :p) if I worked with it. By this time, I was ready to switch over :p I had been working with only Delphi 6.0 at home whereas I had both 6.0 and 7.0 at work. It was too late to do anything at work by that time since it was time to go home but I started on the task of installing Delphi 7.0 as soon as I got home. I had to do a little searching through a multitude of CD’s to find all the components (maybe I should write a simple CD cataloging program while I’m at it? :p) but now I think I’m set – or at least enough so that I can work with most of my apps though not all. Let’s see how it goes …
Tags:
Posted by Fahim at
7:09 am
|
February 21, 2003
Yesterday, as I concluded my entry (or somewhere about then) a thought struck me – why shouldn’t I combine Blog and BlogMan under one interface? I think the reason this whole line of thought was set off was because I received an e-mail from a Blog user who suggested some extra fields like the Excerpt field in Movable Type since he utilizes them to display per-entry stuff like his current mood and music. I guess I simply could add an extra Excerpt entry box or extra info box without merging Blog and BlogMan but the whole excerpt thing made me realize that if I do do that, the UI for Blog and BlogMan will look even more similar. So why maintain two different programs which are both for blogging and which both have almost the same interface? On the other hand is of course the question of how much more additional overhead will the merger bring and will all users need that extra bloat?
I’ve been going back and forth with this question. It will be a lot of work to combine the two programs and to come up with a unified database structure to handle the data for both systems. Plus data conversion for existing users is going to be a real pain. But on the other hand, a unified Blog and BlogMan would mean that would be to go from a blogging utility supporting the Blogger API to Blog (and vice versa) so much simpler and easier. And at the same time, there are common features like image thumbnail creation that people want for both Blog and BlogMan – and it would make sense to put all of that into one program rather than two – well, maybe not make sense but it’s easier … and I’m lazy :p
I still am not sure if I really want to go that route or even if it is possible but I’m thinking about it. In the meantime, since I can’t do a merging of Blog and BlogMan except as a new version, I’ve been working on the 7.x bug fixes again 🙂 I still am messing around with the collapsible category entry panel since I am not totally happy with how it works – meaning that Blog does not remember if it was collapsed when Blog closes … it will again be open when you restart Blog. I’d like to fix that but the component that I’m using has certain limitations and it looks as if I will have to modify the component itself if I want it to work the way I want.
I did look into a bug reported some time back where the very first date range with an entry does not get listed in the archive table of contents though the archive file for that range is created. When I first tried to reproduce the problem, I couldn’t since everything seemed to work fine. I then did some further checking and realized that this happens only when there is only one entry for the very first date range – otherwise things work fine :p I finally traced the problem to a logical bug in looping through records and managed to fix it. I also changed the encryption method used for passwords so that we don’t get stray carriage returns embedded in the password to create havoc with the INI file storage – I just need to test the upgrade routine for that and if that works, we’re set. Unfortunately, the upgrade routine will not correctly update the passwords of people with embedded carriage returns and so they will have to re-enter their password(s) one last time after upgrading to Blog 7.1 – sorry 🙁 I should hopefully have the 7.1 release out pretty soon … unless I get caught up in something else again …
Tags:
Posted by Fahim at
6:02 am
|
February 20, 2003
I’ve downloaded and installed Cache. I like the fact that it comes with a lot of management and configuration tools which aren’t cryptic like some other DBMSes I can think of (though they have improved in recent years – I guess I shouldn’t hold grudges for what they were like in 1992 :p) and there is a whole bunch of documentation which isn’t as dry as dust but tries to be colourful and interesting. I like the fact that Cache integrates with IIS and provides what’s called CSP (Cache Server Pages) so that you can use Cache (and it’s scripting system) to build web pages which are data aware. I haven’t played with any of these features extensively to comment on any of them – I especially haven’t done any direct DBMS coding with Cache and maybe I should do that before I go opening my big mouth about it but I wanted to note down my first impressions here since I have no idea when I’d get around to doing something in-depth with it.
I did look around a bit (again not too much since I didn’t have the time …) to see how I could work with Cache with Delphi. Most resources I ran across seemed to talk of either using ADO or ODBC and that really isn’t the route I wanted to take. I was hoping that I could access Cache objects directly from inside Delphi and do some database manipulation. Maybe it’s possible – again, I haven’t looked deep enough (or hard enough) to comment on it one way or another. The first thought that came to me when I wanted to test Cache was that maybe I should try to do some sort of web-based blog using Cache as the backend and Delphi 7 and it’s web components as the frontend – guess I’m too hung up on blogging tools :p Of course, I now realize that that wouldn’t work but still a thought …
Tags:
Posted by Fahim at
6:29 am
|
February 19, 2003
When I first started working, we had to work with (and code for) DBase and FoxPro databases. Now, I’m not sure what the whole category was called – flat databases? non-relational databases? pre-relational databases? I have no idea :p But then I did learn about RDBMS or relational databases and about SQL queries – OK, the latter part is not quite true, I’d learned SQL queries with DBase IV and FoxPro but you get the idea … I learnt about tables, schemas, queries, views, procedures etc. Now I hear that there are new kinds of databases being talked of: post-relational databases and OODBMS or object oriented databases.
I guess it is only an evolutionary step and that it was bound to happen sooner or later but I find myself fascinated by OODBMS. On one hand, I wonder if they will ever take hold and come to be widely used like the RDBMSes of today – Oracle, SQL server, Sybase etc. On the other hand, I simply want to get to grips with them and start playing just for the sake of working with them :p But before I get into that, you might be wondering what an OODBMS is and how it differs from an RDBMS? I probably am not the best person to explain the difference but let me try 🙂 An RDBMS basically stores its data in the form of tables of records (or rows) and records which are made up of fields (or columns). If you need to represent some sort of a relationship between data in one table and the data in another table, you usually use a key field and if you really want to normalize things (now I won’t even get into a description of it – just accept it as good database design philosophy if you don’t know about normalization <g>), you’ll probably end up with a separate table for the relationship as well. Now with an OODBMS, data is represented in the form of classes and (here is the good part) you can actually define methods for the classes to manipulate the data contained within! What’s more, since your data is represented as properties of the class, you can have other properties which are references to a different class or a collection to represent relationships with other data. I am not sure whether I explained it well enough but to me it seems a much more elegant solution – but that’s probably because I am a programmer and I can think in terms of classes :p
Incidentally, I’d done some work along similar lines to access Oracle data using an object framework written in Java for one of my employers and I was startled to find that I had basically written something like an OODBMS system emulator for my particular case 🙂 Anyway, I stumbled upon not quite an OODBMS (because they call it a post-relational database) by accident when I clicked on a banner ad at SourceForge for Cache. I was fascinated by the ability to work with data as classes and am actually looking into how well Cache works because their site says that you can access Cache data from Java, C/C++, VB, Delphi etc. I intend to test it out (since they have a free download) with Delphi and see how well it works and they might actually have a convert if it works well 🙂
Tags:
Posted by Fahim at
6:45 am
|
« Previous Page —
Next Page »