Archive for the ‘Development’ Category

VBScript read/write binary, encode/decode Base64

Hi folks,

this time a longer posting, especially the code listing below. Today I’ll show some VBScript sample code on how to read/write a (binary) file and encode/decode it to/from Base64. You may ask why… Okay, this is mainly usefull if you need to call WebServices with byte array parameters when your file lies on disk. BTW: with http://www.pocketsoap.com/ it’s relativly easy to call WebServices with VBScript and I should really blog an example later. 

Imagine a WebService to convert certain file types, e.g. image formats. With this sample functions (+ PocketSoap) calling it would be no problem and may turns out usefull for thumbnail generation, picture post editing and whatever you want to do with a binary file received by a WebService on server-side…

Okay, enough blabla, now the script, which is blasting fast btw. This should work out-of-the-box on every XP machine (vista untested), should be self-documenting enough to understand and you may use an image file for proof of concept, like I used a little smiley png. And yes, I named the Script “ReadFileEncodeBase64DecodeBase64WriteFile.vbs” (try typing first letters and press TAB when using cmd) as it’s only used for sample purposes. Happy coding!

Greetz, GHad

'
' Call via cmd: cscript ReadFileEncodeBase64DecodeBase64WriteFile.vbs [pathToFile]
'
' - Reads file from arg into byte array
' - Encodes byte array to Base64 String
' - Decodes Base64 String to byte array
' - Writes byte array to new file
'
' Sample WITHOUT any warrenty! Use at own risk! Copyright 2008 Gerhard Balthasar
'
 
Option Explicit
' common consts
Const TypeBinary = 1
Const ForReading = 1, ForWriting = 2, ForAppending = 8
 
' getting file from args (no checks!)
Dim arguments, inFile, outFile
 
Set arguments = WScript.Arguments
inFile = arguments(0)
outFile = "new_" & inFile
 
Dim inByteArray, base64Encoded, base64Decoded, outByteArray

inByteArray = readBytes(inFile)
base64Encoded = encodeBase64(inByteArray)
 
Wscript.echo "Base64 encoded: " + base64Encoded
 
base64Decoded = decodeBase64(base64Encoded)
writeBytes outFile, base64Decoded
 
Wscript.echo "Finished!"
 
private function readBytes(file)
  dim inStream
  ' ADODB stream object used
  set inStream = WScript.CreateObject("ADODB.Stream")
  ' open with no arguments makes the stream an empty container 
  inStream.Open
  inStream.type= TypeBinary
  inStream.LoadFromFile(file)
  readBytes = inStream.Read()
end function
 
private function encodeBase64(bytes)
  dim DM, EL
  Set DM = CreateObject("Microsoft.XMLDOM")
  ' Create temporary node with Base64 data type
  Set EL = DM.createElement("tmp")
  EL.DataType = "bin.base64"
  ' Set bytes, get encoded String
  EL.NodeTypedValue = bytes
  encodeBase64 = EL.Text
end function
 
private function decodeBase64(base64)
  dim DM, EL
  Set DM = CreateObject("Microsoft.XMLDOM")
  ' Create temporary node with Base64 data type
  Set EL = DM.createElement("tmp")
  EL.DataType = "bin.base64"
  ' Set encoded String, get bytes
  EL.Text = base64
  decodeBase64 = EL.NodeTypedValue
end function
 
private Sub writeBytes(file, bytes)
  Dim binaryStream
  Set binaryStream = CreateObject("ADODB.Stream")
  binaryStream.Type = TypeBinary
  'Open the stream and write binary data
  binaryStream.Open
  binaryStream.Write bytes
  'Save binary data to disk
  binaryStream.SaveToFile file, ForWriting
End Sub
 

Useful OS/free tools for admins/technicans

Back from vacation I found this one some minutes ago at DZone. Must investigate further, I think I’ll compile my own list of useful and to investigate tools soon. Until then, here’s the link: http://www.downloadsquad.com/2008/10/01/24-great-open-source-apps-for-admins-and-technicians/

Greetz GHad

PS: Will post some useful Java stuff next weeks. Stay tuned…

Edit: Got one to investigate further… MetaWidget (http://www.metawidget.org/). Sounds very useful and interesting!

Development Ecosystem

No time/knowledge/money to setup a full build/project/issue management system? Try Buildix:

Buildix includes:

  • Subversion for Source Control
  • Mingle for Agile Project Management
  • Cruise Control for Continuous Integration
  • Trac as a wiki and bug-tracker
  • …plus a little bit of our own ThoughtWorks magic, to glue it all together

You can rapidly deploy your new infrastructure: either run Buildix from a LiveCD, or install it on an existing Ubuntu system. Use it as the base of your own software projects. The ‘Add New Project’ wizard will get your team’s projects started quickly and easily.

Sounds good. Must look for similar environments for git/mercury/bazaar. I’m still not sure about which envionment I like to use for my home pet projects.

Greetz GHad

Collaborative development Q&A

Have any question ’bout anything on development, IT, computers?

Try: http://stackoverflow.com/ and it will be answered in seconds! This really rocks!