Zėŋōfōbìå

15 gennaio 2011

Converting Mac Mail Notes to Evernote

Filed under: informatica — Zeno @ 8:12

If you want to export some notes from Mac Mail to Evernote, you could select all of them and export as plain text in notes/exported plain text.txt.
Then run the following script.
For every note it will create a evernote enex file in the notes directory. Just drag those files in the evernote application and the import is done.

require 'Time'

class Debug
  @@debug = false
  def self.trace(str)
    if @@debug then
      print str
    end 
  end
end

class Evernote
  attr_accessor :export_date, :creation_date, :update_date, :version, :xml_content, :title
  def initialize
    time=Time.new
    @export_date=Evernote.format_time(time);
    @creation_date=Evernote.format_time(time);
    @update_date=Evernote.format_time(time);
    @version="NoteConverter";
    @xml_content="<div>error converting</div>"
    @title="no title"
  end
  
  def from_eml(eml)
    @creation_date=Evernote.format_time eml.creation_date
    @update_date=Evernote.format_time eml.update_date
    @xml_content= eml.to_xml
    @title=eml.subject
    
    Debug.trace "Xml content: #{@xml_content}\n"
  end
  
  def from_text(text)
    @creation_date=Evernote.format_time text.creation_date
    @xml_content= text.to_xml
    @title=text.subject
    
    Debug.trace "Xml content: #{@xml_content}\n"
  end
  
  def self.format_time(time)
    time.utc.strftime("%Y%m%dT%H%m%SZ")
  end

  def to_s
    evernoteSchema=%Q(<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-export SYSTEM "http://xml.evernote.com/pub/evernote-export.dtd">
<en-export export-date="#{@export_date}" application="Evernote" version="#{@version}">
<note><title>#{@title}</title><content><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
#{@xml_content}
</en-note>
]]></content><created>#{@creation_date}</created><updated>#{@update_date}</updated><note-attributes/></note>
</en-export>)
    return evernoteSchema
  end
  
  def to_file(filename)
  
  end

end

class Textnote
  attr_accessor :content, :creation_date, :payload, :subject
  
  def initialize(content)
    @content=content
    @last_line=false
    @payload=""
    content.each{ |line|
      if line =~ /^Date: (.*)/ then
        t=Time.parse($1)
        @creation_date = t
        Debug.trace "Creation date: #{@creation_date}\n"
      elsif line =~ /^Subject: (.*)/ then
          @subject = $1
          Debug.trace "Subject: #{@subject}\n"
      elsif line=~/^$/ then
        Debug.trace "empty\n"
        @last_line = true
      else
        if @last_line then
          @payload+="#{line}"
          Debug.trace "partial: #{line}\n"
        end         
      end
    } 
  end
  
  def to_xml()
    ret=""
    payload.each{|line|
      ret+="<div>#{line}</div>\n"
    }
    ret
    
  end

end

class Emlnote
  attr_accessor :content, :export_date, :creation_date, :update_date, :payload, :subject
  
  def initialize(content)
    @content=content
    @last_line=false
    @payload=""
    content.each{ |line|
      if line =~ /^X-Mail-Created-Date: (.*)/ then
        t=Time.parse($1)
        @creation_date = t
        Debug.trace "Creation date: #{@creation_date}\n"
      elsif line =~ /^Date: (.*)/ then
        t=Time.parse($1)
        @update_date = t
        Debug.trace "Update date: #{@update_date}\n"
      elsif line =~ /^Subject: (.*)/ then
          @subject = $1
          Debug.trace "Subject: #{@subject}\n"
      elsif line =~ /^Content-Type: (.*);/ then
              @content_type = $1
              Debug.trace "Content_type: #{@content_type}\n"
      elsif line=~/^$/ then
        Debug.trace "empty\n"
        @last_line = true
      else
        if @last_line then
          @payload+="#{line}"
          Debug.trace "partial: #{line}\n"
        end         
      end
    } 
  end
  
  def to_xml()
    if @content_type=="text/html"
      Debug.trace("==== html ====\n")
      return payload
    else
      ret=""
      payload.each{|line|
        ret+="<div>#{line}</div>\n"
      }
      return ret
    ret
    end
  end

end


filename="notes/exported plain text.txt"
file=File.open(filename)

text=nil
num=1
file.each{|line|
  if line=~/^\s?From: / then
    if text!=nil then
      textnote=Textnote.new(text)
      evernote=Evernote.new
      evernote.from_text(textnote)

      print "#{num}: #{evernote.title}\n"
      File.open("notes/#{num}.enex", 'w') {|f| f.write(evernote.to_s) }
      
      num+=1;
      
    end
    text=line
  else
    text+=line
  end
  
}

13 gennaio 2011

I miei strumenti preferiti per Mac

Filed under: informatica — Zeno @ 11:14

Networking

Chrome

Skype

Adium

uTorrent

Dropbox

Transmit

Chrome extensions

AdBlock

Delicious tools

Google mail checker

RSS Subscription extender

Text editing

TextMate

0xED

Tools

AppZapper

VMWare Fusion

Keyboard Maestro

DaisyDisk

Porticus

The Unarchiver

Colors

Audio / Video

iTunes

VLC

XLD

eBook

iCHM

Calibre

Photo

Aperture


10 gennaio 2011

Disabilitare firewire su Mac

Filed under: informatica — Zeno @ 8:31

You can remove the kernel extension by renaming it, e.g.

 

cd /System/Library/Extensions/
sudo mv IOFireWireFamily.kext IOFireWireFamily.kext_disabled_v10.6.5

 

20 gennaio 2010

Test e definizioni

Filed under: informatica — Zeno @ 15:46
  • Dummy objects are passed around but never actually used. Usually they are just used to fill parameter lists.
  • Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).
  • Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what’s programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it ’sent’, or maybe only how many messages it ’sent’.
  • Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

19 gennaio 2010

I miei strumenti preferiti per Windows

Filed under: informatica — Zeno @ 19:14

Desktop Tools

Revo Uninstaller Pro : disinstallatore di programmi

Audacity : strumenti per l’elaborazione dell’audio

Recuva : recupera file cancellati

VLC : visualizzatore di video

Paint.NET : editor immagini

Notepad++ : editor di testo

Picasa : visualizzatore di foto

Fences : organizza le icone del desktop

Launchy : lancia i programmi

Unlocker : toglie il lock dai file

Messenger Plus Live : aggiunge funzionalità a messenger

MultiMonitor : aggancia monitor di computer diversi

KGB arch : archiviatore

7zip : archiviatore

Daemon Tools : Virtual CD/DVD drive which supports all popular copy protections.

JDownloader : downloader con riconoscimento di captcha

Security Tools

Malwarebytes’ Anti Malware : Anti malware free

HijackThis : strumento a basso livello per l’identificazione di malware

Sysinternals Suite : decine di piccoli strumenti per Windows

Network tools

WireShark : sniffer

Hamachi2 : crea VPN condivise

Programming tools

HxD Hex Editor : editor esadecimale

Expresso : generatore e analizzatore di espressioni regolari

Redgate SQL Toolbelt : strumenti per operare su database SQL

NUnit : unit tester

MobileMe : proxy per Windows Mobile

CrypTool : strumenti di crittografia

TortoiseSVN : interfaccia ad SVN

DocProject : interfaccia a Sandcastle, genera la documentazione per progetti .NET

R2build : continuous integration, build automation, test nunit

Plugin Visual Studio

Resharper : generatore di codice, tool di refactoring e di identificazione errori

Ghost Doc : facilita la documentazione del codice

Sandcastle : generatore di documentazione

Ankh : interfaccia SVN per Visual Studio

StyleCop : enfornce di regole sintattiche

StudioTools : accesso veloce ai metodi della soluzione

Plugin Firefox

Adblock plus : toglie la pubblicità

Click&Clean : cancella le tracce locali della navigazione

Firebug : analizza una pagina e il flusso d’accesso

Google Shortcuts : aggiunge alcune icone per gli strumenti google

IE tab : permette di aprire link in schede gestite dal motore IE

LastPass : gestore di password

PDF Download : permette di scegliere come scaricare i pdf

Ubiquity : estensione della barra di navigazione, interpreta i comandi

Xmarks : gestore dei bookmarks

Plugin Outlook

xobni

4 dicembre 2009

Pronuncia di Char

Filed under: C, informatica — Zeno @ 13:22

Ebbene, come pronunciate “char”? Come CARattere o come CIARlatano?

Beh, ho scoperto che la pronuncia corretta dipende dall’implementazione!

Infatti:

From Frequently Asked Questions in comp.lang.c

17.30: How do you pronounce “char”?
You can pronounce the C keyword “char” in at least three ways: like the English words “char,” “care,” or “car;” the choice is arbitrary.

From Bjarne Stroustrup’s C++ FAQ:

How do you pronounce “char”?
“char” is usually pronounced “tchar”, not “kar”. This may seem illogical because “character” is pronounced “ka-rak-ter”, but nobody ever accused English pronounciation and spelling of being logical.

Video corso di Haskell di Erik Meijer

Filed under: Haskell, Linguaggi — Tag:, , — Zeno @ 11:23

Su channel 9 c’è un video corso di Haskell, composto da 13 di lezioni tenute da Erik Meijer, la persona che ha sdoganato il paradigma funzionale in .NET e che ha contribuito in modo essenziale allo sviluppo di LINQ e F#.

Il corso è semplice ma profondo, riesce a mostrare le ragioni di un linguaggio funzionale, puro e lazy e le sue applicazioni, tenendo sempre un riferimento pratico a C# e F#.

Edit: ho trovato le slides del corso.

“… and that’s nicer. Beauty of your code is very  important for pure functional programmers”

— Erik Meijer

1 dicembre 2009

Perl is a four letter word. Or six.

Filed under: architettura, Linguaggi, Perl — Tag:, — Zeno @ 19:27

Sto chiaccherando su facebook con Francesco Oha sul Perl 6, versione che rivoluziona il linguaggio e, visto l’interesse che ho per l’argomento ho pensato di spostare sul Blog la conversazione, per coinvolgere chiunque sia interessato. (Rodi, parlo con te. ;-)

Io sono praticamente fermo al Perl 4, che è stato il mio primo linguaggio dinamico. Ne ho abusato, come ogni pessimo programmatore. Mi sono accorto che nel frattempo il Perl si è evoluto enormemente, anche grazie alla splendida comunità che si è consolidata. Ho letto il libro introduttivo di Stefano Rodighiero, e ho riassaporato il gusto del dinamismo portato alle estreme conseguenze.

Da diversi anni la comunità Perl, una delle più affascinanti in tutto il panorama hacker mondiale, sta lavorando alla versione 6, che si distingue dalla versione 5 per un numero impressionante di differenze. Non credo di dire un eresia nel sostenere che la versione 6 sia un linguaggio nuovo ispirato alle versioni precedenti.

Francesco, solleticando la mia attenzione con la frase “[…]il sorgente puo’ modificare in linea la grammatica del compilatore, rendendo dinamico non solo l’eseguito ma anche il compilante.“,  mi propone di leggere un testo introduttivo: http://perlgeek.de/en/article/5-to-6 .

La mia considerazione conseguente alla lettura è stata:

Sto guardando, stavo leggendo, tutto bene, le stringhe, gli array i tipi, sì… I TIPI? AH! finalmente!

Bello che la trasformazione di Schwartz viene fatta dal compilatore, è un’idea geniale, ma l’implementazione non spetta al programmatore. Non riesco a capire però perché non poteva essere fatta dal compilatore già dal perl 5. Qualcuno me lo spiega?

Però, decisamente più bello del 5! Le prestazioni poi saranno eccezionali, paragonabili al C, immagino…

La sintassi è ancora troppo criptica, però. Ti faccio un esempio: i Context e i twigils, il cross meta operator (come fai a vederlo? non si poteva usare lo zip di haskell?)

Uè, le liste lazy, bene! Le adoro.
L’overload degli operatori…
Che spettacolo le regexpes, si fanno i parser al volo!!!
Il reduction meta operator non l’avevo ancora visto, modo strano per fare folding.

Molto paradigma funzionale, ma rielaborato. Le funzioni diventano operatori. questo fa perdere un po’ di espressività, temo.

Francesco Oha mi fa notare che:

[…] trovo piu’ spiacevoli ancora i puntatori C e gli unari affini.

per come la vedo io, per ora, il perl6 e’ ancora un calderone… ci vorra’ ancora molto prima che esca quello che serve, ma gia’ solo per le RegExp e’ sensazionale (e il compilatore e’ fatto con quelle regexp, quindi puoi overloadare il compilatore, ed essendo dinamico puoi capire l’esoterismo che si puo’ ottenere)

Che ne dite? Proseguiamo con il discorso?

30 novembre 2009

F# e C# nello stesso progetto DDD

Filed under: architettura, C#, F#, informatica, Pattern — Tag:, — Zeno @ 11:37

Ho postato una domanda su StackOverflow su come pensare una soluzione che incorpori parti in C# e parti in F#.

Mi chiedo, in sostanza, se abbia senso pensare all’utilizzo di F# in una architettura DDD.

(more…)

27 novembre 2009

Programmazione e arte: Piet

Filed under: informatica, Linguaggi — Tag: — Zeno @ 16:02

Sono incappato in un linguaggio esoterico particolarmente elegante, non tanto per la struttura del linguaggio in se’, piuttosto per la codifica dei sorgenti: Piet.

Per definizione la codifica prende la forma di un’opera d’arte astratta. Infatti gli elementi del linguaggio sono i colori, in una tavolozza di 20 colori. Ogni pixel rappresenta un elemento del codice. L’esecuzione del programma parte dal pixel in alto a sinistra e prosegue verso destra fintanto che la variabile che indica la direzione non viene aggiornata.

La codifica degli operatori non e’ una relazione biunivoca tra i colori e gli opertori, come si potrebbe immaginare. L’operatore e’ determinato dalla variazione di tono e di luminosita’ nel passaggio di un colore all’altro! I valori interi sono calcolati come il numero di pixel di una forma di colore uniforme.

Ecco qualche esempio, tratto da: http://www.dangermouse.net/esoteric/piet/samples.html

Ecco un paio di esempi. Il primo stampa la stringa Piet, il secondo Hello World.

(fonte: http://stackoverflow.com/questions/187715/what-is-your-favorite-esoteric-programming-language)

Older Posts »

Crea un sito o un blog gratuitamente presso WordPress.com.