Archive for the ‘Personal’ Category

AutoKey in Haskell

Friday, July 11th, 2008

Yesterday I tried programming Haskell. Looking for something simple, I decided on an AutoKey cipher implementation. Despite a lot of problems dealing with file I/O and stumbling through a number of other subtleties of the language, I am pretty happy with the result.

My impression of Haskell is that it is a very powerful language after you have mastered it. It has many features and the separation between real world/state and purity are great.

Of course, it has a few downsides too. The lazy evaluation sometimes makes it difficult to visualize how its all working. The lack of proceduralism can make finding/fixing bugs kind of difficult, but this might be a side effect of inexperience. I imagine there are some good tools that could help, but the debugging strategies I learned with a language like C are not always applicable.

Here’s some sample output for encryption and decryption:

[rick@copernicus ~/workspace/AutoKey/bin]$ ./theResult e lorem malus
LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO
EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD
MINIM VENIAM, QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP
EX EA COMMODO CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN
VOLUPTATE VELIT ESSE CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR
SINT OCCAECAT CUPIDATAT NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT
MOLLIT ANIM ID EST LABORUM.

XOCYE TDJYY LDDID VWE ODWB, VOZWXEHRLYT THBJZSLKXVY MNQG, YIO LH
WMXVASL NWYDRK MZRWUQQWVW CW FNUIKP EU RFPSKH ALUEE MLODUA. FB UHIG TH
ZQZIP HMAQMH, UHQS ZEMBJHR WQVLFMQEKKWG UETOZWZ WANQFTS OWJQ MG IDQKNIA
MN YI RSJQOFC OABVSSINL. HKCS TXNM AROKI LFFFV LB CSGZRYICUIYMG LR
MWECCOOEY KXLBX ZWDM VMDDYO LZWIDH SF TLKMUY HATLT CUCTAIUI. MXVYGXBWV
HBRN FUKNXQCV CYRIWCNPB QOG PKBWQTEH, AXRG BF WHEXN SOT DFVCKWF IMUMRXRL
QFFYBF OYTU BD RAF TDFGKFM.

[rick@copernicus ~/workspace/AutoKey/bin]$ ./theResult d xocye malus
XOCYE TDJYY LDDID VWE ODWB, VOZWXEHRLYT THBJZSLKXVY MNQG, YIO LH
WMXVASL NWYDRK MZRWUQQWVW CW FNUIKP EU RFPSKH ALUEE MLODUA. FB UHIG TH
ZQZIP HMAQMH, UHQS ZEMBJHR WQVLFMQEKKWG UETOZWZ WANQFTS OWJQ MG IDQKNIA
MN YI RSJQOFC OABVSSINL. HKCS TXNM AROKI LFFFV LB CSGZRYICUIYMG LR
MWECCOOEY KXLBX ZWDM VMDDYO LZWIDH SF TLKMUY HATLT CUCTAIUI. MXVYGXBWV
HBRN FUKNXQCV CYRIWCNPB QOG PKBWQTEH, AXRG BF WHEXN SOT DFVCKWF IMUMRXRL
QFFYBF OYTU BD RAF TDFGKFM.

LOREM IPSUM DOLOR SIT AMET, CONSECTETUR ADIPISICING ELIT, SED DO
EIUSMOD TEMPOR INCIDIDUNT UT LABORE ET DOLORE MAGNA ALIQUA. UT ENIM AD
MINIM VENIAM, QUIS NOSTRUD EXERCITATION ULLAMCO LABORIS NISI UT ALIQUIP
EX EA COMMODO CONSEQUAT. DUIS AUTE IRURE DOLOR IN REPREHENDERIT IN
VOLUPTATE VELIT ESSE CILLUM DOLORE EU FUGIAT NULLA PARIATUR. EXCEPTEUR
SINT OCCAECAT CUPIDATAT NON PROIDENT, SUNT IN CULPA QUI OFFICIA DESERUNT
MOLLIT ANIM ID EST LABORUM.

I’ve made the code available on my projects page. Comments are welcomed. Enjoy.

First Post

Wednesday, January 23rd, 2008

Currently working on the personal website, which is what this blog is meant to be a part of. I regularly post at the Punchscan blog, if you are looking for something to read!

Hello World!