It’s like if php and java met on a lonely night, dart would be the result.
Lately, I have started working on the OpenXFDL project again, concentrating efforts in making a C++ application with WX Widgets that can compile for Windows, Mac, and Linux. Getting frustrated with libxml2 and wanting to learn more of xpath queries, I decided to make a XFDL reader in PHP. This can be applied easily as browser/e-mail plugins to view XFDL forms without the need of an external viewer. I’ve been bad about posting but I’ll work to add more to this blog soon. For now, here is a sight to try it out with. Unlike previous stuff, you can do a straight XFDL form instead of converting to XML first. Try it out!
The other day I posted some code with PHP method for compressing XFDL files. I was unfamiliar with PHP’s chunk_split function, so I googled it and came up with this reference. I then wrote the appropriate code in Python which is a quick script like this:
#!/usr/bin/env python #string chunk_split ( string body [, int $chunklen = 76 [, string $end = "\r\n" ]] ) def chunk_split(body,chunklen=76,end="\r\n"): data = "" for i in range(0,len(body),chunklen): data += body[i:min(i+chunklen,len(body))] + end return data
You can see this code in action through this output:
zds@CF55 ~/Desktop $ python Python 2.5.2 (r252:60911, Dec 2 2008, 09:26:14) [GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> from chunk import * >>> test = """Hello, how are you today? This is a test of my python interpreta tion of the PHP function, chunk_split(). It should take this one line of writi ng and split it by 76 characters and add a DOS compatible line end (e.g. \r\n) by default. I've done my best to have code as close as possible to the PHP fun ction. This was done in an attempt to work out a method of compression XFDL fi les. I've found this function to work but still need to figure out a way to ru n a compatible gzip method to PHP's gzencode from Python.""" >>> chunk_split(test) "Hello, how are you today? This is a test of my python interpretation of the\r\ n PHP function, chunk_split(). It should take this one line of writing and s\r\ nplit it by 76 characters and add a DOS compatible line end (e.g. \r\n) by defa\ r\nult. I've done my best to have code as close as possible to the PHP functio\ r\nn. This was done in an attempt to work out a method of compression XFDL fil\ r\nes. I've found this function to work but still need to figure out a way to \ r\nrun a compatible gzip method to PHP's gzencode from Python.\r\n" >>>
It appears to work! This still doesn’t fix my compression problems with the XFDL files though. It would appear that gzencode does the correct compression, now I just need to find a way to do the same compression in Python. The GZipFile methods do not output the same as gzenecode() in PHP.
The scope of the “Apps 4 the Army” competition that I am making my XFDL Viewer for is to use web apps. So I did a quick change to PHP and read up and got a framework setup. The idea is to be able to import the XFDL file and then parse the resulting XML to input values, either on a single form or by batch through an uploaded database.
The framework is complete and I’m pretty happy with the results as I’ve done much more application programming than web development, but PHP isn’t too bad. After getting the frame work together, I started to work on parsing. I mistakenly uploaded a XFDL file rather than the decompressed XML and I found something remarkable. PHP’s SimpleXML apparently can decompress the XFDL file!! This takes out a very complicated step of my project!!! I’m still working to figure out why the recompression does not produce the same output but that may not be a problem with the web interface. Stay tuned for more updates.
So, after talking with the Army’s G6 (essential the IT Department), the competition I’m entering (which because I’m not an active duty Reservist, I cannot receive prize money) is focused on web applications, not desktop applications. The changes you can expect to see in my coding is that there will be quite a bit of php, perl and python that I’ll be using rather than the application side. At the same time though, I’ll take what I do in this web application and use it for developing a desktop application and a Microsoft Office plugin that can be used to batch load files. Just figured I’d acknowledge the reason for changes. On the plus side of all of this, perl has a specific Mime module and php has a great and simple interface to xml parsing, so this may end up easier as a web application.