Date: 25/5/2006||I wrote a little utility today that cleans up (X)HTML that has been written by a rich text editor and has masses of styles and strange little XML tags everywhere. i.e. the sort of HTML that Microsoft Office outputs. It's called Squeaky Clean and it uses a XML parser to read the XHTML into a DOM tree, cleans out all the styles and junk tags and then lets you do some clean up by hand. Then save it out to disk or copy some/all of it to the clipboard using the built in editor.
It is somewhat configurable via the 'Clean.xml' options file which specifies which attributes and elements should be deleted.
By default it removes all the styles, so you have to go back and reimplement the styles if you need them. But now that the markup is fixed it's relitively painless. Future versions may expand upon the level of style removal, but for my needs all the source styling is just junk, hence the alpha just removing them.
|(0) Comments | Add Comment|
Date: 23/5/2006||It's been a bit quiet lately because my whole family, including me, were sick last week. So I didn't do much programming or anything really.
This week I've fixed a number of newly reported issues and implemented some of the mail2 export back end. It now replicates a single folder of mail correctly. I just need to get it doing lots of folders, and put up some progress UI and implement Contact/Calendar replication etc and it'll be ready for going into a release.
Last night I was in somewhat of a weird mood so I dug up all the old computer parts I had and built a computer. I hadn't realised until then that I had at least one of everything, CPU, RAM, PSU, HD, Case, Video Card. But sure enough I do. So it all went in the box and I booted it and installed XP. It's my old dual Celeron 400 motherboard with my old G400 AGP card. I have 3 sticks of 256mb but I seem to only be able to get 384mb to show up at boot. It doesn't like all 3 sticks in at once. And one or 2 of the sticks is showing only half it's full size, probably because it's not fully compatible with the motherboard. While I was working on it I really didn't know what I was going to do with it once it was working. But now I realize this machine will probably run Zeta quite well. So I think I'll install that and build some of my apps just for fun.
My main dev box got an upgrade 2 weeks ago. I used to run an socket A Athlon 1.4ghz system with 512mb on an KT7-RAID board. The new system is a socket 939 Athlon 64 3000+ with 1GB of Geil dual channel RAM. It's still AGP but I can upgrade to a dual core chip down the track. My only problem is that the Xpertvision Nvidia 6200 video card is flakey as hell and I want to replace it. But I'm having a lot of trouble finding a 6600 based card with the right TV out options (I need composite [now] AND component [later]) by a brand that is somewhat trustworthy for less than $200 AUD. It's very hard trying to find out which brands of video cards are decent and which suck. But heres what I "feel" about them currently, ranked from most trusted down to least trusted:
Is my gut feel on these brands right? Or am I barking mad?
Ideally I'd like to go Leadtek, but their TV out options don't work for me. Same with Gigabyte I think... undecided on whether I should try the Asus + MSI ranges. I simply cannot find the info I nead on XFX or BFG...
|(2) Comments | Add Comment|
|Export To Scribe Folders|
Date: 11/5/2006||For all of you wailing and gnashing your teeth over the delay of the "export to mail2" function then fret not, it is underway. Tonight I built all the UI and tested it. It's very similar to the Outlook Imp/Exp UI except it's tweaked slightly to reference a folder file rather than a profile. The settings persist between sessions so that once you have set up your export config, re-running it is simple as |
The external folders load nicely and I'm now ready to write the backend that does the real work. But I'm getting too tired to work on that tonight. Maybe... this weekend. Maybe.
|(3) Comments | Add Comment|
|Can't Send Email?|
Date: 9/5/2006||Recently I've been talking with a customer who has this weird problem with sending email. The connection establishs ok and the normal SMTP session progresses up till the point where InScribe sends the end of message marker (\r\n.\r\n). At which point the server stops responding and the socket connection eventually times out. I got a hex dump back from the user that confirmes this.
I wasn't holding my breath on a solution for this as it sounds too weird to be a general problem with the software. However that all changed this morning when the mother of my children had the same issue. And when she has an email problem "It Better Get Fixed Right Now(TM)" ;)
So I fire up the debugger and watch it do the whole send the email, send the end of email line and... hang... and time out... and return the blank error message. Nice.
I consulted the oracle, and it informed me on Path MTU which I found interested. So the next hour was filled with frigging with every TCP/IP and MTU setting I could get me hands on. At one point setting the MTU to 1470 let some of the mail go through, but not all 11 messages, just some of them. So with 6 email still to send I called my cable tech support to see if they knew anything about this sort of error. Oh course they were dumb as nails and wouldn't let me speak to a real engineer about the network and server setup. However they did make me setup Outlook and sure enough that worked. *grumble* stupid Microsoft product actually working *grumble*, but it made me think about what differences there could be between Outlook and InScribe.
In amongst all the other reading about MTU settings and email I ran across a little tid bit of information relating to sendmail (also used by my ISP Optus) it appears that in some network environments it matters which packet the end of mail ("\r\n.\r\n") line is in. i.e. if it's in it's own little packet things don't work. And of course I looked at the hex dump from InScribe and each line was it's own network "send". I would've thought that Windows implements Nagles algorithm and joins all those little packets up in the network stack. But just out of curiosity I quickly implemented a memory buffer for the outgoing email so that the entire message is assembled in memory and written to the socket in one system call. This of course works doesn't it. *grrrrr*
So I guess I'm re-engineering the encoding of email so it goes through a memory buffer. However that may introduce new complexities that I hadn't had to deal with before, like whats a good buffer size (4k!)? And should I vary it when it doesn't work (no)? And what if it doesn't like that on '98 (who cares)? The list goes on and on, but then again, thats why I have "test" releases so that a change like this gets 3-6 months of field testing before going into a major stable release.
Now you too know more than is healthy about TCP/IP. <nelson>haha</nelson>
|(3) Comments | Add Comment|
Date: 5/5/2006||In the process of working on a cross platform Mutex written with inline assembly I had to peer into the bowels of gcc, cygwin and mingw to work out how to build threaded win32 apps with free software tools. So a number of pleasant things have occured in doing so.
Firstly I can now build Lgi applications with both cygwin AND mingw. Prior to today I didn't even know the different between cygwin and mingw. However I'm now in the "know" and have separate makefiles for each. Sweet.
Secondly I discovered almost by accident how to craft makefiles that replicate the Visual C++ functionality to a 't'. Something that has eluded me for some 4 years now! Ever since I started development on Linux I've been trying to build a makefile system that works the same as the Visual C++ build system I am used to. And finally I've done it. The last thing I had to fix was the creation of output file directories. That particular feat while obvious for makefile gurus always was an annoying "hack" in my makefiles. I used to have a prereq on my final target rule that called the mkdir command:
target : makeoutputfolder $(deps) ...link command... makeoutputfolder : mkdir $(outfolder)
But this had the unfortunate side effect of relinking the target every time, even if no dependencies had changed. So enter the solution:
target : $(outfolder) $(deps) ...link command... $(outfolder) : mkdir $(outfolder)
I know it seems simple but, hey the documentation is er... rather obtuse. Other than that, I've given up on wildcard rules to build source and now I get LgiIde to generate all the deps and write out rules for every source file in the project. This is garrenteed to work and you can nail the right source file even when multiple different source files have the same name. Sometimes brute force is called for and when your as dumb as GNU make that is definately true. And before you have a go at me for not using %build tool Y%, I use make simply because it's on every system under the sun and it's nice to be able to unpack my source and just build it. It's a lowest common denomiator thing.
Anyway, Lgi now supports mingw and cygwin. For all your licensing needs.
|(1) Comment | Add Comment|
|Opinion On Correct Behaviour|
Date: 2/5/2006||One user asked in the forum about a particular behaviour that shows up in Scribe when you receive email from someone with a Contact record. Currently the behaviour is that if the incomming email has no name in the from field, the name from the matching Contact record is inserted, otherwise the name from the headers is used. In fact I had to force the code to do that with a flag, because originally it didn't do that, instead it overwrote the name part of the from address with the name from the Contact record.
So both systems would appear to have some surface benifits. Firstly:
Neither of these are more correct than the other, or at least I can't decide which is better. In fact I could live quite happily with either. But maybe you dear reader have an opinion or something I havn't considered, maybe a reason one way or the other that would sway the argument?
What I'm not willing to do is add another user visible option to let people frig with this. It's such a tiny part of the product I can't in good conscience add an option. There is nicely customizable and there is confusing. I would err on the side of nicely customizable and not add an option.
|(5) Comments | Add Comment|