GHads mind

developers thoughts & finds

Archive for October 2008

VBScript read/write binary, encode/decode Base64

with 4 comments

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
 
Advertisements

Written by ghads

October 17, 2008 at 11:37 pm

Simple yet powerful JavaScript Console

leave a comment »

Just discovered Blackbird, an easy to integrate console for JavaScript debugging. Not tried yet, but looks very promising: http://www.gscottolson.com/blackbirdjs/

Next time I need to develop some JS, I’ll integrate it for sure…

Greetz, GHad

Written by ghads

October 15, 2008 at 11:41 am

Grails resources

leave a comment »

Hello again 🙂

This time I found a nice blog entry about Grails and an overview of must-reads and resources for developing your first grails website: http://blog.saddey.net/2008/10/11/grails-links-from-my-first-week-with-grails/

Looks worthy for a closer investigation of grails. Well, I wanted to develop my own grails site as a little private side project since summer, but I still have no time. I first need to get my infrastructure right, as my 2 1/2 year old notebook is getting buggy and slow and needs a replacemt and that needs money, which I don’t have (not even banks have money nower days…). Maybe next three month I’ll get new hardware and energy for my side projects. At least I hope so.

Greetz, GHad

Written by ghads

October 13, 2008 at 9:32 am

Useful OS/free tools for admins/technicans

leave a comment »

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!

Written by ghads

October 8, 2008 at 8:37 am