<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6686302833484353783</id><updated>2025-12-05T23:55:17.707-03:00</updated><category term="last.fm"/><category term="S60"/><category term="aspyplayer"/><category term="python"/><category term="N95"/><category term="pyS60"/><category term="ipod"/><category term="itunes"/><category term="ruby"/><category term="active record"/><category term="myself"/><category term="nhibernate"/><category term="orm"/><category term="powershell scripts"/><category term="resharper tools"/><category term="scripts"/><title type='text'>Random thoughts about nothing (usually) so special</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-8727434897318167058</id><published>2009-07-07T00:40:00.002-03:00</published><updated>2009-07-07T09:52:32.699-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ipod"/><category scheme="http://www.blogger.com/atom/ns#" term="itunes"/><category scheme="http://www.blogger.com/atom/ns#" term="last.fm"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Procedure and ruby script to remove duplicated tracks from iPod in Last.fm client before scrobbling</title><content type='html'>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Since I bought an iPod Touch, it became my main Last.fm scrobbler device. However, I am facing a recurrent problem, every track that I listen in my iPod is scrobbled between 2 and 20 times with the same timestamp! The picture bellow shows the result:&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXzKC_ICQ62Xetxpp4eStAvqy1LJxNwfbexqDhQERoT-Sgi41GLldwltkekLvL1n35vXCOuKbkGXWLZCOtMe_zCevhw8xh17I_iwhM8DVk7q7QNNK0RFVT0SkaKDBA3IYqJcx4II6zAfY/s800/duplicated_tracks.png&quot; width=&quot;536&quot; height=&quot;344&quot; /&gt; &lt;/p&gt;  &lt;p&gt;I am using the Last.fm official client with the iTunes plug-in. I have searched a solution in several sites (e.g, &lt;a href=&quot;http://www.lastfm.com.tr/forum/34905/_/415563&quot;&gt;here&lt;/a&gt;), lots of people are facing the same problem, but I did not find any solution yet. &lt;/p&gt;  &lt;p&gt;To make the problem even worse, lately the remove button in the &lt;a href=&quot;http://www.last.fm/user/doug_fernando/tracks&quot;&gt;Last.fm tracks page&lt;/a&gt; don’t remove a single occurrence of a track anymore, instead it removes all occurrences in a given timestamp. So, once a track is scrobbled multiple times, I can not remove the duplicates anymore, because once I remove one, it removes all the entries.&lt;/p&gt;  &lt;p&gt;&lt;img style=&quot;border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUFrvj83LIfZEZJbDIozsU5_vj6ww6RePJvaOFFSPR-c2D4SlZ-7WUw9RpU9oabD13eszXcb2MKNDVBI36GtfrT-3p-RJ5JZQEhNRFmtDI8KYWLicoLTCjvhIsZzYkkQ85ldUBTMwK5Cg/s800/remove_button.png&quot; width=&quot;614&quot; height=&quot;265&quot; /&gt;&lt;/p&gt;  &lt;p&gt;So, while I don’t find a good solution, I created a manual procedure that I am using to solve the problem: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Turn off the Internet connection; &lt;/li&gt;    &lt;li&gt;Ask the last.fm client to scrobble the tracks; &lt;/li&gt;    &lt;li&gt;Since it cannot scrobble the tracks because the lack of connection, the tracks (with the multiple occurrences) are kept in the local history (&lt;em&gt;C:\users\&lt;strong&gt;windows_user&lt;/strong&gt;\Local Settings\Application Data\Last.fm\Client\&lt;strong&gt;lastfm_user&lt;/strong&gt;_submissions.xml&lt;/em&gt;); &lt;/li&gt;    &lt;li&gt;Close the Last.fm client; &lt;/li&gt;    &lt;li&gt;Run the ruby script bellow that I have written that excludes the duplicates tracks from the local history xml file; &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;&lt;strong&gt;ruby&lt;/strong&gt; &lt;em&gt;scrobbler_fix.rb&lt;/em&gt; &amp;quot;C:\users\&lt;strong&gt;windows_user&lt;/strong&gt;\Local Settings\Application Data\Last.fm\Client\&lt;strong&gt;lastfm_user&lt;/strong&gt;_submissions.xml&amp;quot;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Connect to the internet; &lt;/li&gt;    &lt;li&gt;Open the last.fm client and scrobble the history; &lt;/li&gt;    &lt;li&gt;Check the tracks page to see if everything was ok. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As usual, I kept the source code in my utility scripts repository at &lt;a href=&quot;http://github.com/dougfernando/utility-scripts/blob/a8287d97fa243f631b4ae7d293d9d474642f30c2/scrobbler_fix.rb&quot;&gt;GitHub&lt;/a&gt;, but the code is listed bellow as well. I hope I find a better solution soon, because this problem even with this procedure sucks! &lt;/p&gt;  &lt;pre&gt;# Script to remove duplicate items from last.fm submission xml file&lt;br /&gt;# author: Douglas Fernando da Silva &lt;doug.fernando at=&quot;&quot; com=&quot;&quot;&gt;&lt;br /&gt;&lt;br /&gt;require &amp;quot;rexml/document&amp;quot;&lt;br /&gt;include REXML&lt;br /&gt;&lt;br /&gt;history = nil&lt;br /&gt;File.open(ARGV[0]) do |file|&lt;br /&gt; history = Document.new(file)&lt;br /&gt; tracks_to_remove = []&lt;br /&gt;&lt;br /&gt; last_timestamp = nil&lt;br /&gt; history.elements.each(&amp;quot;submissions/item&amp;quot;) do |element|&lt;br /&gt;   ts = element.elements[&amp;quot;timestamp&amp;quot;].text&lt;br /&gt;   if ts == last_timestamp&lt;br /&gt;     puts element.elements[&amp;quot;track&amp;quot;].text&lt;br /&gt;     tracks_to_remove.push(element);&lt;br /&gt;   else&lt;br /&gt;     last_timestamp = ts&lt;br /&gt;   end&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt; for i in 0..tracks_to_remove.length-1 do&lt;br /&gt;   element_to_rm = tracks_to_remove[i]&lt;br /&gt;   element = history.elements[&amp;quot;submissions/item&amp;quot;].parent.delete(element_to_rm)&lt;br /&gt; end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;formatter = REXML::Formatters::Default.new&lt;br /&gt;File.open(ARGV[0], &amp;quot;w&amp;quot;) do |result|&lt;br /&gt; formatter.write(history, result)&lt;br /&gt;end&lt;/doug.fernando&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Douglas&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/8727434897318167058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/8727434897318167058' title='40 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/8727434897318167058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/8727434897318167058'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2009/07/procedure-and-ruby-script-to-removed.html' title='Procedure and ruby script to remove duplicated tracks from iPod in Last.fm client before scrobbling'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXzKC_ICQ62Xetxpp4eStAvqy1LJxNwfbexqDhQERoT-Sgi41GLldwltkekLvL1n35vXCOuKbkGXWLZCOtMe_zCevhw8xh17I_iwhM8DVk7q7QNNK0RFVT0SkaKDBA3IYqJcx4II6zAfY/s72-c/duplicated_tracks.png" height="72" width="72"/><thr:total>40</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-916036937159120814</id><published>2009-06-22T02:47:00.001-03:00</published><updated>2009-06-22T02:47:48.117-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ipod"/><category scheme="http://www.blogger.com/atom/ns#" term="itunes"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><category scheme="http://www.blogger.com/atom/ns#" term="scripts"/><title type='text'>Ruby script for setting lyrics in iTunes Library tracks</title><content type='html'>&lt;p&gt;One of the cool features of the iPod Touch and iPhone is that is possible to see the lyrics of a track while it’s playing. The picture bellow shows that.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6mhi6PmcHkX6-iyhe_m5_EoLoeVDX_Rj6xue8I-3kFSQyCggH73W-JVbAsaJAGo19x1H0DfGmAc54tuJQ4_mI686KLoNTBszeJt-7B1GInHI8AdwC2OntTZPvoV0bXOTOKuSbQ5Eawy8/s800/ipod_ilyrics.jpg&quot; width=&quot;232&quot; height=&quot;341&quot; /&gt; &lt;/p&gt;  &lt;p&gt;But the problem is that you have to insert the lyrics manually using the iTunes, for each track you have to use the “Get Info” option and then set the track, just like the pictures bellow.&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWOyu_6DATabI5PDiLR9HWuACFiTD8SynlbXISbvJaOnT6wxitCz6bi90hyHin1fZETEQqkrp1RxgHrP6KQAGXZjLPq1nUy9aiTggzCYYAeoV3pLXXdTC3rKQKCy7HCpf9peCxt3z_kIU/s800/itunes_getinfo.png&quot; width=&quot;297&quot; height=&quot;253&quot; /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOJdHpUhQvVtSg_xzVkHc7hRFdo7VdlDcY86lRTdQCn2IHHJDTIRfzWQL5hp8M3uh_S1KRGUeVNDWuJvczDe1RGisLI8Dzj3SPWZgV6HJv5nhI80R6iOj-s0sv02XCbhXxVD92AWUNf14/s800/itunes_lyrics.png&quot; width=&quot;389&quot; height=&quot;323&quot; /&gt; &lt;/p&gt;  &lt;p&gt;That’s a problem, because if you have hundreds of tracks, it will take lots of clicks and time. In order to solve that problem, I created a Ruby script that tries to set lyrics for all the tracks in my iTunes Library.&lt;/p&gt;  &lt;p&gt;The script interacts with the &lt;a href=&quot;http://developer.apple.com/sdk/&quot;&gt;iTunes COM&lt;/a&gt; components to get all the tracks in my Library, after that, it uses the &lt;a href=&quot;http://lyricwiki.org/LyricWiki:SOAP/Ruby&quot;&gt;LyricWiki web service&lt;/a&gt; to get the lyrics for each track and set to it.&lt;/p&gt;  &lt;p&gt;The script works only on Windows and it’s available in my github repository:&lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;git://github.com/dougfernando/itunes-helper.git&quot; href=&quot;git://github.com/dougfernando/itunes-helper.git&quot;&gt;git://github.com/dougfernando/itunes-helper.git&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://github.com/dougfernando/itunes-helper&quot;&gt;http://github.com/dougfernando/itunes-helper&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, every time I get a new album, all I have to do is to run the script again,&amp;#160; like the following images :&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMSt1zYqfxZ1X-a1qfMhx8vmGbxezLNhRu6scFX5mgcw7-PRCWfl7LKCHEDphacWi66Fkt1lmReMJxkbbNw7VOPfszZ2DAvY_0XFeRPoBmiExy0qv88ZOcTmvDzkkmMIIML4C0U9-nE4/s800/lyrics_script_running.png&quot; width=&quot;561&quot; height=&quot;219&quot; /&gt; &lt;/p&gt;  &lt;p&gt;The script code is also bellow:&lt;/p&gt;  &lt;pre&gt;require &#39;win32ole&#39;&lt;br /&gt;require &#39;soap/wsdlDriver&#39; &lt;br /&gt;require &#39;iconv&#39;&lt;br /&gt;&lt;br /&gt;class ITunesHelper&lt;br /&gt;  def initialize(lyrics_service)&lt;br /&gt;    @itunes = WIN32OLE.new(&#39;iTunes.Application&#39;)&lt;br /&gt;    @tracks = @itunes.LibraryPlaylist.Tracks&lt;br /&gt;    @lyrics_service = lyrics_service&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def show_all_tracks&lt;br /&gt;    @tracks.each do |track|&lt;br /&gt;      print track.Name() + &amp;quot;\n&amp;quot;&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def set_all_lyrics&lt;br /&gt;    puts &amp;quot;Number of tracks to be analyzed: #{@tracks.count}&amp;quot;&lt;br /&gt;    index = 1&lt;br /&gt;    @tracks.each do |track|&lt;br /&gt;      if self.is_lyrics_empty(track.lyrics)&lt;br /&gt;        lyrics = @lyrics_service.get_lyrics(track.Artist(), track.Name())&lt;br /&gt;        &lt;br /&gt;        if self.is_lyrics_empty(lyrics)&lt;br /&gt;          self.print_track(index, @tracks.count, track, &amp;quot;lyrics WAS NOT found&amp;quot;)&lt;br /&gt;        else&lt;br /&gt;          track.lyrics = @lyrics_service.get_lyrics(track.Artist(), track.Name())&lt;br /&gt;          self.print_track(index, @tracks.count, track, &amp;quot;lyrics WAS found and set&amp;quot;)&lt;br /&gt;        end&lt;br /&gt;      else&lt;br /&gt;        self.print_track(index, @tracks.count, track, &amp;quot;already had lyrics&amp;quot;)&lt;br /&gt;      end&lt;br /&gt;      index = index + 1&lt;br /&gt;    end&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def is_lyrics_empty(lyrics)&lt;br /&gt;    lyrics.empty? or lyrics == &amp;quot;Not found&amp;quot;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def print_track(index, total, track, result) &lt;br /&gt;    puts &amp;quot;Track #{index}/#{total}: #{track.Artist()} - #{track.Name()}: #{result}&amp;quot;&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;class LyricsServiceProxy&lt;br /&gt;  def initialize&lt;br /&gt;    @driver = SOAP::WSDLDriverFactory.new(&amp;quot;http://lyricwiki.org/server.php?wsdl&amp;quot;).create_rpc_driver&lt;br /&gt;    puts &amp;quot;Lyrics web service initialized&amp;quot;&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def get_lyrics(artist, track_name)&lt;br /&gt;    Iconv.iconv(&amp;quot;LATIN1&amp;quot;, &amp;quot;UTF-8&amp;quot;, @driver.getSong(artist, track_name).lyrics).to_s&lt;br /&gt;  end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;itunesH = ITunesHelper.new(LyricsServiceProxy.new)&lt;br /&gt;itunesH.set_all_lyrics&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Douglas&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/916036937159120814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/916036937159120814' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/916036937159120814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/916036937159120814'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2009/06/ruby-script-for-setting-lyrics-in.html' title='Ruby script for setting lyrics in iTunes Library tracks'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6mhi6PmcHkX6-iyhe_m5_EoLoeVDX_Rj6xue8I-3kFSQyCggH73W-JVbAsaJAGo19x1H0DfGmAc54tuJQ4_mI686KLoNTBszeJt-7B1GInHI8AdwC2OntTZPvoV0bXOTOKuSbQ5Eawy8/s72-c/ipod_ilyrics.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-8902537102402545932</id><published>2009-06-12T16:25:00.005-03:00</published><updated>2009-07-07T00:49:18.645-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="powershell scripts"/><title type='text'>Powershell script for converting Word documents to PDF format</title><content type='html'>&lt;p&gt;In my job, we only send documents to clients in pdf formats. Sometimes we have to send several documents at once and it takes a good time to open each one and save it as a pdf, it’s not a very pleasant task.&lt;/p&gt;  &lt;p&gt;In order to minimize this problem, I’ve created a simple powershell script that opens a Word document and saves it as pdf without any user interaction. With such script, I can convert a lot of files at once, just like this:&lt;/p&gt;  &lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIzbuTur_ljHSSnFb70ZBJmzNXqDHGECcpcTe3g_KY4EDsiKrVfWA9RtwB-3anGIJphiHi1ekyrgn0IldBMiMl0w548f8ZeuNFlEkqVtIpN624QopJjc3ET7RMEb_6C_KmyIMyPK5ytc/s1600-h/first.png&quot;&gt;&lt;img style=&quot;width: 400px; height: 86px; cursor: pointer;&quot; id=&quot;BLOGGER_PHOTO_ID_5346524738863245282&quot; alt=&quot;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIzbuTur_ljHSSnFb70ZBJmzNXqDHGECcpcTe3g_KY4EDsiKrVfWA9RtwB-3anGIJphiHi1ekyrgn0IldBMiMl0w548f8ZeuNFlEkqVtIpN624QopJjc3ET7RMEb_6C_KmyIMyPK5ytc/s400/first.png&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;pre&gt;&lt;span style=&quot;font-size:100%;&quot;&gt;ls . *.doc* –Recurse | %{ ~\scripts\doc2ps1.ps1 $_.fullname }&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;With this command, I list recursively each doc/docx file in a directory and save each one as PDF.&lt;br /&gt;&lt;p&gt;By default, Office 2007 apps are not able to save files as PDF, so you have to install the add-in from Microsoft first to use the script. The add-in is available &lt;strong&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/details.aspx?FamilyID=f1fc413c-6d89-4f15-991b-63b07ba5f2e5&amp;amp;displaylang=en&quot;&gt;here&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;Bellow is the script, it’s also available in my PowerShell scripts repository at GitHub (&lt;a href=&quot;http://github.com/dougfernando/utility-scripts/tree/master&quot;&gt;http://github.com/dougfernando/utility-scripts/tree/master&lt;/a&gt;) as &lt;em&gt;doc2pdf.ps1&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;param (&lt;br /&gt; [string]$source = $(Throw &quot;You have to specify a source path.&quot;))&lt;br /&gt;&lt;br /&gt;$extensionSize = 3&lt;br /&gt;if ($source.EndsWith(&quot;docx&quot;)) {&lt;br /&gt;$extensionSize = 4&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$destiny = $source.Substring(0, $source.Length - $extensionSize) + &quot;pdf&quot;&lt;br /&gt;$saveaspath = [ref] $destiny&lt;br /&gt;$formatPDF = [ref] 17&lt;br /&gt;&lt;br /&gt;$word = new-object -ComObject &quot;word.application&quot;&lt;br /&gt;$doc = $word.documents.open($source)&lt;br /&gt;$doc.SaveAs($saveaspath, $formatPDF)&lt;br /&gt;$doc.Close()&lt;br /&gt;&lt;br /&gt;echo &quot;Converted file: $source&quot;&lt;br /&gt;&lt;br /&gt;ps winword | kill&lt;/pre&gt;&lt;br /&gt;An important note, the script closes every Word instance in the end, so save any work previous using it.</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/8902537102402545932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/8902537102402545932' title='153 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/8902537102402545932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/8902537102402545932'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2009/06/powershell-script-for-converting-word.html' title='Powershell script for converting Word documents to PDF format'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvIzbuTur_ljHSSnFb70ZBJmzNXqDHGECcpcTe3g_KY4EDsiKrVfWA9RtwB-3anGIJphiHi1ekyrgn0IldBMiMl0w548f8ZeuNFlEkqVtIpN624QopJjc3ET7RMEb_6C_KmyIMyPK5ytc/s72-c/first.png" height="72" width="72"/><thr:total>153</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-4837649855370280403</id><published>2008-04-09T02:33:00.001-03:00</published><updated>2008-04-09T02:33:13.814-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aspyplayer"/><category scheme="http://www.blogger.com/atom/ns#" term="last.fm"/><category scheme="http://www.blogger.com/atom/ns#" term="N95"/><category scheme="http://www.blogger.com/atom/ns#" term="pyS60"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="S60"/><title type='text'>ASPY Player Beta 4 released - S60 Player with Last.fm scrobbling built-in. Open signed online now possible!</title><content type='html'>&lt;p&gt;I&#39;ve just released the &lt;a href=&quot;http://aspyplayer.googlecode.com/files/aspyplayer_beta4.sis&quot;&gt;beta 4&lt;/a&gt; version of the &lt;a href=&quot;http://aspyplayer.googlecode.com/&quot;&gt;ASPY Player&lt;/a&gt;. Currently I have only few hours (~3h) a week to work on it, so that&#39;s the reason for few enhancements in this release, however I think some of them are very important. &lt;/p&gt;  &lt;p&gt;The changes in this release are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Possible to sign the &lt;a href=&quot;http://aspyplayer.googlecode.com/files/aspyplayer_beta4.sis&quot;&gt;sis file&lt;/a&gt; through &lt;a href=&quot;https://www.symbiansigned.com/app/page/public/openSignedOnline.do&quot;&gt;open signed online&lt;/a&gt;;&lt;/li&gt;    &lt;li&gt;Blinking &amp;quot;now playing&amp;quot; screen bug fixed;&lt;/li&gt;    &lt;li&gt;Better handled id3v2 only files (id3v2 not supported yet);&lt;/li&gt;    &lt;li&gt;Track number info being used in the app;&lt;/li&gt;    &lt;li&gt;Better tracks ordering handling;&lt;/li&gt;    &lt;li&gt;Better handling of non-US ASCII characters in directories names;&lt;/li&gt;    &lt;li&gt;Application code design improved;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As usual, all kinds of feedbacks are welcome. They have been essential to improve the player quality, thank you guys!&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/4837649855370280403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/4837649855370280403' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/4837649855370280403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/4837649855370280403'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2008/04/aspy-player-beta-4-released-s60-player.html' title='ASPY Player Beta 4 released - S60 Player with Last.fm scrobbling built-in. Open signed online now possible!'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-3704635628024260740</id><published>2008-03-21T21:08:00.000-03:00</published><updated>2008-03-21T21:13:39.126-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aspyplayer"/><category scheme="http://www.blogger.com/atom/ns#" term="last.fm"/><category scheme="http://www.blogger.com/atom/ns#" term="N95"/><category scheme="http://www.blogger.com/atom/ns#" term="pyS60"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="S60"/><title type='text'>ASPY Player Beta 3 released - S60 Player with Last.fm scrobbling built-in</title><content type='html'>&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2395/2319124705_593feb2728_t.jpg&quot; /&gt; After coming back to work from vacations, it has been hard to find time to work on the &lt;a href=&quot;http://aspyplayer.googlecode.com/&quot;&gt;player&lt;/a&gt;. Currently I&#39;m leading 5 projects in my work! However I got some time (most of it while traveling) and released the &lt;a href=&quot;http://aspyplayer.googlecode.com/files/aspyplayer_beta3.sis&quot;&gt;beta 3&lt;/a&gt; of my player. Bellow is a list of the major changes: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Non-US ASCII bug fixed, now files path and id3 content can have &amp;#233;, &amp;#232;, &amp;#227;, etc.. &lt;/li&gt;    &lt;li&gt;Now it&#39;s possible to view the current music history, ie, tracks not sent to last.fm yet &lt;/li&gt;    &lt;li&gt;After selecting an artist, now it&#39;s possible to select all tracks of that artist as before or drill-down by artist album, just like the native player &lt;/li&gt;    &lt;li&gt;AudioScrobbler protocol hard error handled correctly &lt;/li&gt;    &lt;li&gt;Application icon added &lt;/li&gt;    &lt;li&gt;Correct version number set (major/minor) &lt;/li&gt;    &lt;li&gt;Now it&#39;s possible to play tracks in random mode &lt;/li&gt;    &lt;li&gt;Several bugs fixed &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As usual, the source are &lt;a href=&quot;http://code.google.com/p/aspyplayer/source/browse&quot;&gt;here&lt;/a&gt; and &lt;a href=&quot;http://www.lastfm.com/group/Symbian+OS+Cell+Phones/forum/33921/_/247712/2#f5899326&quot;&gt;here&lt;/a&gt; there&#39;s a step-by-step tutorial on how to run it without signing using the python shell (thanks &lt;a href=&quot;http://www.last.fm/user/BrixtonRaver/&quot;&gt;Brixton&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;The python snake image I found using Google Images so I don&#39;t know who created it. Any information about it, please, tell me so that I can ask the creator the usage authorization. &lt;/p&gt;  &lt;p&gt;I also have to find a more beautiful image for the &amp;quot;Now playing screen&amp;quot;, preferentially a dark one to help with the energy consumption. I have also to make the now playing screen stop blinking too. I&#39;ll try to stabilize the current feature set (fix bugs and refine the design) then start adding more features. &lt;/p&gt;  &lt;p&gt;Ahh, BTW, because of my efforts to build this player, the guys from &lt;a href=&quot;http://build.last.fm/item/310&quot;&gt;Build Last.fm&lt;/a&gt; gave me 12 months of subscription!! Great incentive! Thank you guys again! &lt;/p&gt;  &lt;p&gt;I&#39;d like to thank the guys who are using the player and sending me feedbacks. &lt;/p&gt;  &lt;p&gt;Douglas &lt;/p&gt;  &lt;p&gt;Some new pics from this version:&lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2033/2351107886_58070783f7_m.jpg&quot; /&gt; &lt;img src=&quot;http://farm4.static.flickr.com/3128/2350274197_ac92239a5d_m.jpg&quot; /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2258/2350274269_984860b214_m.jpg&quot; /&gt; &lt;img src=&quot;http://farm3.static.flickr.com/2121/2351108084_80ce194ce0_m.jpg&quot; /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3057/2351108142_33025b3f5a_m.jpg&quot; /&gt; &lt;img src=&quot;http://farm3.static.flickr.com/2096/2351108240_c51b84714c_m.jpg&quot; /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3012/2350274553_50935fa92d_m.jpg&quot; /&gt;&lt;/p&gt;  </content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/3704635628024260740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/3704635628024260740' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3704635628024260740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3704635628024260740'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2008/03/aspy-player-beta-3-released-s60-player.html' title='ASPY Player Beta 3 released - S60 Player with Last.fm scrobbling built-in'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2395/2319124705_593feb2728_t.jpg" height="72" width="72"/><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-818810881862468177</id><published>2008-03-01T22:50:00.004-03:00</published><updated>2008-03-02T13:09:20.974-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aspyplayer"/><category scheme="http://www.blogger.com/atom/ns#" term="last.fm"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="S60"/><title type='text'>Second release of my Last.fm S60 Client - aspyplayer</title><content type='html'>&lt;p&gt;Today I released the &lt;a href=&quot;http://aspyplayer.googlecode.com/files/aspyplayer_beta.sis&quot;&gt;second beta&lt;/a&gt; version of my last.fm client for S60 devices (although only tested in my N95-1). I rewrote the whole UI, now it&#39;s a little less ugly and it kinda looks like the native player.  Now it&#39;s also possible to play/stop/forward/back/volume up/volume down using the keyboard in the &quot;Now playing&quot; screen like the native player.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The major bug in the moment is that it cannot handle well files with path or title that contain special characters, such as &#39;é&#39;, &#39;è&#39;, &#39;ç&#39;, &#39;ã&#39;. I&#39;m Brazilian, so it&#39;s a problem for me because in portuguese, words with that kind of characters are so common. However, for me it&#39;s strange how the pyS60 handles unicode, I didn&#39;t get it yet. It pissed me off and I gave up for the moment, so the bug is there. I have to correct some spelling errors too and now, I don&#39;t know why, the sis only works on C:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For those who can&#39;t sign the sis files and want to try the player, &lt;a href=&quot;http://n95-nokia-phone.blogspot.com/2007/09/advanced-and-inquisitive-symbian.html&quot;&gt;here&lt;/a&gt; can be found a good tutorial explaining how to sign sis files. Besides that way, it&#39;s possible to run the application using the sources. To do so, get the &lt;a href=&quot;http://code.google.com/p/aspyplayer/source/browse/trunk/src/aspyplayer.py&quot;&gt;aspylayer.py&lt;/a&gt; and &lt;a href=&quot;http://code.google.com/p/aspyplayer/source/browse/trunk/src/now_playing_bg.jpg&quot;&gt;now_playing_bg.jpg&lt;/a&gt; files from the &lt;a href=&quot;http://code.google.com/p/aspyplayer/source/browse&quot;&gt;repository&lt;/a&gt; and copy them to c:\python or e:\python. After that, run it using the &lt;a href=&quot;http://downloads.sourceforge.net/pys60/PythonScriptShell_1_4_2_3rdEd.SIS?modtime=1200899145&amp;amp;big_mirror=0&quot;&gt;Python Shell&lt;/a&gt; like in the image bellow.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3117/2303582676_ae69f4b444_m.jpg&quot; /&gt; &lt;/p&gt;&lt;p&gt;Thank you guys for the feedbacks (I&#39;m waiting for more :)). I think soon a more stable/usable version will be released...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Some screeenshots for this release:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2387/2303582756_9a07d88ef3_m.jpg&quot; /&gt;  &lt;img src=&quot;http://farm4.static.flickr.com/3140/2302784805_0fcafe3e04_m.jpg&quot; /&gt; &lt;/p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2324/2303582856_5884e1374b_m.jpg&quot; /&gt;  &lt;img src=&quot;http://farm3.static.flickr.com/2152/2302784939_3fa207719b_m.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2290/2303582980_b9b95b6e21_m.jpg&quot; /&gt; &lt;img src=&quot;http://farm3.static.flickr.com/2015/2303583066_e77001247f_m.jpg&quot; /&gt; &lt;/p&gt;&lt;img src=&quot;http://farm3.static.flickr.com/2102/2303583106_8916b6e405_m.jpg&quot; /&gt;  &lt;img src=&quot;http://farm4.static.flickr.com/3176/2302785125_916e38b17f_m.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3071/2302785205_2c6bccda5e_m.jpg&quot; /&gt; &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/818810881862468177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/818810881862468177' title='77 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/818810881862468177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/818810881862468177'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2008/03/second-release-of-my-lastfm-s60-client.html' title='Second release of my Last.fm S60 Client - aspyplayer'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3117/2303582676_ae69f4b444_t.jpg" height="72" width="72"/><thr:total>77</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-6348997881301880957</id><published>2008-02-27T17:53:00.004-03:00</published><updated>2008-03-02T14:27:47.432-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="aspyplayer"/><category scheme="http://www.blogger.com/atom/ns#" term="last.fm"/><category scheme="http://www.blogger.com/atom/ns#" term="N95"/><category scheme="http://www.blogger.com/atom/ns#" term="pyS60"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="S60"/><title type='text'>My Last.fm S60 Client - aspyplayer</title><content type='html'>&lt;p&gt;In the last few days I&#39;ve been working on a S60 music player with &lt;a href=&quot;http://www.last.fm/user/doug_fernando/&quot;&gt;Last.fm&lt;/a&gt; scrobbling capabilities because most of time I listen to musics in my N95. I&#39;d the idea to build this application months ago, but only now, in my last week of vacation I had time and today I released the first beta version (ugly UI and barely working) at: &lt;a href=&quot;http://code.google.com/p/aspyplayer/&quot;&gt;http://code.google.com/p/aspyplayer/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Some screenshots for this first beta release are available at: &lt;a href=&quot;http://code.google.com/p/aspyplayer/wiki/screenshots&quot;&gt;http://code.google.com/p/aspyplayer/wiki/screenshots&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I&#39;m writing the application in python (&lt;a href=&quot;http://sourceforge.net/projects/pys60&quot;&gt;pyS60&lt;/a&gt;), which for me, currently is the best development platform for Symbian devices. However, it has a lot of limitations compared to C++ on S60 devices.&lt;/p&gt;  &lt;p&gt;The application architecture kinda follows &lt;a href=&quot;http://www.domaindrivendesign.org/&quot;&gt;DDD&lt;/a&gt;, with a basic &lt;a href=&quot;http://c2.com/cgi/wiki?ModelViewPresenter&quot;&gt;MVP&lt;/a&gt; for the presentation layer. The last time I did some development in python was about 5 years ago, so the code is not that good yet. The sources can be seen at: &lt;a href=&quot;http://code.google.com/p/aspyplayer/source/browse&quot;&gt;http://code.google.com/p/aspyplayer/source/browse&lt;/a&gt;. Code reviews are welcome. &lt;/p&gt;  &lt;p&gt;Now I&#39;ll work on the UI, which currently is very ugly and I have to refactor some code to decouple the file system libraries from the model putting it in the infrastructure layer. Besides that, I have to create more unit tests.&lt;/p&gt;  &lt;p&gt;Any kind of feedback is welcome. &lt;/p&gt;  &lt;p&gt;BTW, yesterday I found an amazing last.fm client for iPhone/iPod Touch, it&#39;s called &lt;a href=&quot;http://dev.c99.org/MobileScrobbler&quot;&gt;MobileScrobbler&lt;/a&gt;. It&#39;s too bad that the S60 interfaces sucks when compared to iPhone interface which is fantastic. &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/6348997881301880957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/6348997881301880957' title='82 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/6348997881301880957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/6348997881301880957'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2008/02/my-lastfm-s60-client-aspyplayer.html' title='My Last.fm S60 Client - aspyplayer'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>82</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-472188767965795874</id><published>2008-02-20T21:44:00.004-03:00</published><updated>2008-02-20T21:56:06.667-03:00</updated><title type='text'>My current &quot;must read&quot; technical readings</title><content type='html'>Although I read more than one hundred of blogs (~4500 posts in the last 30 days) using the kickass Google Reader and be a member of several mailing lists, I don&#39;t read everything with the same priority. I read ASAP only few blogs/lists that I consider important/cool, others sometimes I read months after I noticed them in my google reader or gmail.&lt;br /&gt;&lt;br /&gt;The following items are my current &quot;must read&quot; technical readings:&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Top 10 Feeds (no specific order):&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Ayende @ Rahien&lt;/span&gt; =&gt; &lt;a href=&quot;http://ayende.com/Blog/Default.aspx&quot;&gt;http://ayende.com/Blog/Default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Did it with .NET&lt;/span&gt; =&gt; &lt;a href=&quot;http://diditwith.net/&quot;&gt;http://diditwith.net/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Martin Fowler&#39;s Bliki&lt;/span&gt; =&gt; &lt;a href=&quot;http://martinfowler.com/bliki/&quot;&gt;http://martinfowler.com/bliki/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Jeremy D. Miller &lt;/span&gt;=&gt; &lt;a href=&quot;http://codebetter.com/blogs/jeremy.miller/default.aspx&quot;&gt;http://codebetter.com/blogs/jeremy.miller/default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Planet ThoughtWorks&lt;/span&gt; =&gt; &lt;a href=&quot;http://blogs.thoughtworks.com/&quot;&gt;http://blogs.thoughtworks.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Coding Horror&lt;/span&gt; =&gt; &lt;a href=&quot;http://www.codinghorror.com/blog/&quot;&gt;http://www.codinghorror.com/blog/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Object Mentor&lt;/span&gt; =&gt; &lt;a href=&quot;http://blog.objectmentor.com/&quot;&gt;http://blog.objectmentor.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;InfoQ&lt;/span&gt; =&gt; &lt;a href=&quot;http://www.infoq.com/&quot;&gt;http://www.infoq.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;{Codesqueeze} =&gt; &lt;a href=&quot;http://www.codesqueeze.com/&quot;&gt;http://www.codesqueeze.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;LeadingAnswers&lt;/span&gt; =&gt; &lt;a href=&quot;http://leadinganswers.typepad.com/leading_answers/&quot;&gt;http://leadinganswers.typepad.com/leading_answers/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Brazilian bloggers&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Fragmental &lt;/span&gt;=&gt; &lt;a href=&quot;http://blog.fragmental.com.br/&quot;&gt;http://blog.fragmental.com.br/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Daniel Sato&lt;/span&gt; =&gt; &lt;a href=&quot;http://www.dtsato.com/blog/default/&quot;&gt;http://www.dtsato.com/blog/default/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Guilherme Chapiewski&lt;/span&gt; =&gt; &lt;a href=&quot;http://gc.blog.br/&quot;&gt;http://gc.blog.br/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;A Maldita Comédia&lt;/span&gt; =&gt; &lt;a href=&quot;http://malditacomedia.blogspot.com/&quot;&gt;http://malditacomedia.blogspot.com/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mailing lists&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Castle Project Users&lt;/span&gt; =&gt; &lt;a href=&quot;http://groups.google.com/group/castle-project-users&quot;&gt;http://groups.google.com/group/castle-project-users&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Alt.Net&lt;/span&gt; =&gt; &lt;a href=&quot;http://tech.groups.yahoo.com/group/altdotnet/&quot;&gt;http://tech.groups.yahoo.com/group/altdotnet/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Domain Driven Design&lt;/span&gt; =&gt; &lt;a href=&quot;http://tech.groups.yahoo.com/group/domaindrivendesign/&quot;&gt;http://tech.groups.yahoo.com/group/domaindrivendesign/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;BTW, the address of my google reader shared items is: &lt;a href=&quot;http://www.google.com/reader/shared/11574825750058829373&quot;&gt;http://www.google.com/reader/shared/11574825750058829373&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In paper I usually read non-technical (computer) stuff, currently I&#39;m reading the &lt;a href=&quot;http://personalmba.com/recommended-business-books/applied-psychology/&quot;&gt;applied psychology&lt;/a&gt; books from &quot;&lt;a href=&quot;http://www.thepersonalmba.com/&quot;&gt;The Personal MBA&lt;/a&gt;&quot;, the current one it&#39;s my third and till now all were great readings.&lt;br /&gt;&lt;br /&gt;Douglas</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/472188767965795874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/472188767965795874' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/472188767965795874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/472188767965795874'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2008/02/my-current-must-read-technical-readings.html' title='My current &quot;must read&quot; technical readings'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-7630925509278258093</id><published>2007-10-12T19:46:00.000-03:00</published><updated>2007-10-12T21:23:15.793-03:00</updated><title type='text'>I&#39;m in love with my Nokia N95</title><content type='html'>&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;I fought with myself for weeks, but about 2 weeks ago I could not resist anymore and finally bought a Nokia N95. I have been using it since then and what I can tell is that the device is amazing!&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;For those who don’t now the device yet, it’s a GSM smartphone with a 5MP camera, Wi-Fi and embedded GPS running on S60v3 (Symbian OS). A great generic review is available in the link bellow:&lt;o:p&gt;&lt;/o:p&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;        &lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;b style=&quot;&quot;&gt;            Nokia N95 review: Nokia’s crown jewel&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;&quot;&gt;            &lt;/span&gt;&lt;a href=&quot;http://www.gsmarena.com/nokia_n95-review-141.php&quot;&gt;http://www.gsmarena.com/nokia_n95-review-141.php&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;My digital camera is broken; I needed an mp3 player because I have been spending about 10h a week in a bus because of my current project and I like to listen to music while traveling, so I decided to buy this phone, because it can be used for these functions pretty well.&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot; style=&quot;margin-left: 21pt; text-indent: -18pt; color: rgb(0, 0, 0);&quot;&gt;&lt;!--[if !supportLists]--&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;Currently I’ve been running some very cool softwares on it. For example:&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;color: rgb(0, 0, 0);&quot;&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Putty&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; for ssh;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Python&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; for some cool scripts (graphics, text editor, etc.) that I found;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Quake 1&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Google Maps&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; integrated with the GPS, which, btw, absolutely rocks;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;DivX Player&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; to watch TV series episodes while traveling;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Fring&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; to make Skype calls over Wi-Fi, which it’s also very very cool;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Gmail client&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; for reading e-mails which is very close to the standard gmail, but gmail mobile is ok too;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Nokia podcasting&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; software for listening to podcasts;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;b style=&quot;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Nokia&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt; &lt;b style=&quot;&quot;&gt;mp3 player&lt;/b&gt; is very nice too; most of my favorite albums are in the phone already, etc.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; lang=&quot;EN-US&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; lang=&quot;EN-US&quot;&gt;And now I can take nice pictures (5MP) whenever I want!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot; lang=&quot;EN-US&quot;&gt;Using it for web browsing over Wi-Fi is very cool also. Currently more than half of my feeds I read on it using Mobile Google Reader, which is also very cool. The standard browser of N95 is very good in general; it uses the same engine of Safari and it’s a real browser (not a “wap” browser)! I can access most of my “standard” sites using it and everything works pretty well. I have installed Opera mini, but I think it’s too heavy. So, for reading and listening to music I&#39;ve been using my N95 more than my laptop.&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot; lang=&quot;EN-US&quot;&gt;There are some things that I want to do in the future with it, for example, install a ruby interpreter, install a software for use it as a webcam that I cannot remember the name, buy more memory; install a software to download maps of Sorocaba and Volta Redonda to use with GPS without having to use any Internet connection (it already has a pretty good map for São Paulo), download more games like Quake, write some apps in python for it, send photos to flickr directly using it, etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; lang=&quot;EN-US&quot;&gt;I’m also impressed about how easy is to write graphical applications with python for S60. I’m thinking about writing some apps in python to explore the GPS and also, if possible, a Nokia mp3 player integration with last.fm site.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot; lang=&quot;EN-US&quot;&gt;In my opinion, for advanced users, there’s no comparison with iPhone, which is VERY cool because of its UI, but it’s also much closed for custom software. I could not do most of the things that I’m doing with my N95 if I had an iPhone!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot; class=&quot;MsoNormal&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Of course, it has some problems, for example, the battery sucks, the camera flash sucks, internal RAM is not enough for running more than 3 applications in parallel, it’s very expensive (~2,3K reais in Brazil), it’s kind of big, etc. But, for me, up to now, it rocks!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Some images of my N95 running:&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4gRx6pN6MjwUe4sykQ56kSNvfgrMSnWRcWbJLwLmiy5qm_fOLGxEMp_o7gAu7dGvHusrEv0ObUOG_gqAk4RoguWWl9g6Kz7qjWD1csmd5vxSXSolFzpk75V8IUUU4q2IcyGADL2Ti14Q/s1600-h/Screenshot0001.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4gRx6pN6MjwUe4sykQ56kSNvfgrMSnWRcWbJLwLmiy5qm_fOLGxEMp_o7gAu7dGvHusrEv0ObUOG_gqAk4RoguWWl9g6Kz7qjWD1csmd5vxSXSolFzpk75V8IUUU4q2IcyGADL2Ti14Q/s320/Screenshot0001.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120598581957945890&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Some of my applications&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOuz3wVKqpuRtCBHgUTqY81lPtkC4yxa2pbCPIDuO-bvkkN7tUbcV1OKS8Ygh-rGg4NP-FwCvhBqXKV85ztFdSsd_rCRKFV_xwsluqH1onstk64Gzzl-o5plhTNcwRNF3crnN6ZoCgQBk/s1600-h/Screenshot0002.jpg&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOuz3wVKqpuRtCBHgUTqY81lPtkC4yxa2pbCPIDuO-bvkkN7tUbcV1OKS8Ygh-rGg4NP-FwCvhBqXKV85ztFdSsd_rCRKFV_xwsluqH1onstk64Gzzl-o5plhTNcwRNF3crnN6ZoCgQBk/s320/Screenshot0002.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120599110238923314&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A skype call&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYW3_9seJUprlz0CJIKhMhpkF2Fi3Gu8jSPROcLiz1C9rs2-our_h5n9sLNzcKAL42QnaDj1QWax5ukX8frT4m4b-nuoyPC9TtGt7-VebKaXSztYvlKtmENhdg5N3oMghUGub9nnGgFTo/s1600-h/Screenshot0007.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYW3_9seJUprlz0CJIKhMhpkF2Fi3Gu8jSPROcLiz1C9rs2-our_h5n9sLNzcKAL42QnaDj1QWax5ukX8frT4m4b-nuoyPC9TtGt7-VebKaXSztYvlKtmENhdg5N3oMghUGub9nnGgFTo/s320/Screenshot0007.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120600738031528546&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Route: Parents&#39; home in Sorocaba -&gt; my apartment in São Paulo&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIfx2s6I2o11WQba9EOUhkgRlC0RwfWYQ8dgNJbuJGv345nKEEtsDHvA-t68OsoDulgiikEdfiV-nLgW_zTIVFLH69RHHDNveiOm-R8LmwU_mmscyYqgIeTdmMS7MYUdFJxSpWrZX_dI/s1600-h/Screenshot0006.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHIfx2s6I2o11WQba9EOUhkgRlC0RwfWYQ8dgNJbuJGv345nKEEtsDHvA-t68OsoDulgiikEdfiV-nLgW_zTIVFLH69RHHDNveiOm-R8LmwU_mmscyYqgIeTdmMS7MYUdFJxSpWrZX_dI/s320/Screenshot0006.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120600634952313426&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Fibonnaci in python&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4rqmR_YceCOHDTYhp2F3OPj8lE1x8kbkKhWpmdpBCWHWbSgU_Ggk323KL5M7RoqpUAzOVQTuKISPk22JYSX9XXNtr7cndaveqBh0oDyvgAXrHfnLA8-5GdbmnkIBvo3v6Vg9bRVbwbik/s1600-h/Screenshot0012.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4rqmR_YceCOHDTYhp2F3OPj8lE1x8kbkKhWpmdpBCWHWbSgU_Ggk323KL5M7RoqpUAzOVQTuKISPk22JYSX9XXNtr7cndaveqBh0oDyvgAXrHfnLA8-5GdbmnkIBvo3v6Vg9bRVbwbik/s320/Screenshot0012.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120601657154529954&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;The mp3 player&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYzqdGV2OZGA-AlfcZkdByXi1V1nb9tYtuCUMh6RRlAQg4gOrSkOCXjH-s0TQMR7lOryFq4u86ZRmVUfuf344ATW3tyvel0rpr-SfSH5XNExKxTy9MZspdeOU01Hqn3o9KJaMKwK2sePo/s1600-h/Screenshot0010.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYzqdGV2OZGA-AlfcZkdByXi1V1nb9tYtuCUMh6RRlAQg4gOrSkOCXjH-s0TQMR7lOryFq4u86ZRmVUfuf344ATW3tyvel0rpr-SfSH5XNExKxTy9MZspdeOU01Hqn3o9KJaMKwK2sePo/s320/Screenshot0010.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120601519715576466&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Some of my photos&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX3Hqhn3Y9QtLiiJxDBCg7m4VSnGuWg-KJAu060ibwCzFee4AvTrEOxngz05b_qN66iciGcATSs5W9sf6ZRXh4Q80u3Vwrr_rfzkSOFWFr6Rqf9sh8Y8vPn9lBjn_oWleqBmdqde6QmrQ/s1600-h/Screenshot0009.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX3Hqhn3Y9QtLiiJxDBCg7m4VSnGuWg-KJAu060ibwCzFee4AvTrEOxngz05b_qN66iciGcATSs5W9sf6ZRXh4Q80u3Vwrr_rfzkSOFWFr6Rqf9sh8Y8vPn9lBjn_oWleqBmdqde6QmrQ/s320/Screenshot0009.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120601395161524866&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Using google reader&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH1imWF14P0O0N647WtSZwS5Li3dcWcWrU4CoUCkv1If5I0aRjQStB-8y7BNdC8EulnsMH_BcL_3ZGZc_GKsopgDEL_BR7UBehzambR6V-8zp7rm4meblTXnloCCfNiuM40T4xm0t7_Rk/s1600-h/Screenshot0008.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH1imWF14P0O0N647WtSZwS5Li3dcWcWrU4CoUCkv1If5I0aRjQStB-8y7BNdC8EulnsMH_BcL_3ZGZc_GKsopgDEL_BR7UBehzambR6V-8zp7rm4meblTXnloCCfNiuM40T4xm0t7_Rk/s320/Screenshot0008.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5120600939894991474&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Using google reader&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/7630925509278258093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/7630925509278258093' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/7630925509278258093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/7630925509278258093'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/10/im-in-love-with-my-nokia-n95.html' title='I&#39;m in love with my Nokia N95'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4gRx6pN6MjwUe4sykQ56kSNvfgrMSnWRcWbJLwLmiy5qm_fOLGxEMp_o7gAu7dGvHusrEv0ObUOG_gqAk4RoguWWl9g6Kz7qjWD1csmd5vxSXSolFzpk75V8IUUU4q2IcyGADL2Ti14Q/s72-c/Screenshot0001.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-4763888051501692687</id><published>2007-06-25T00:30:00.000-03:00</published><updated>2007-06-25T00:53:48.840-03:00</updated><title type='text'>Tools that I Love</title><content type='html'>&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Common Tools&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.launchy.net/&quot;&gt;Launchy &lt;/a&gt;- I rarely use the &quot;Start Menu&quot; with it. It&#39;s the closest Windows tool to Mac Quicksilver. I used to use SlickRun, which is also a great tool, but I moved to Launchy because of the better user experience;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.flos-freeware.ch/notepad2.html&quot;&gt;Notepad2&lt;/a&gt; - The best &quot;simple&quot; text editor around, it looks like the traditional Notepad, but much more powerful;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/technet/sysinternals/ProcessesAndThreads/ProcessExplorer.mspx&quot;&gt;Process Explorer &lt;/a&gt;- Much better than the traditional Windows Task Manager. Using it you can know what is really going on in your machine.&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://ccollomb.free.fr/unlocker/&quot;&gt;Unlocker&lt;/a&gt; - Do you want to delete some file and Windows does not allow you because some other process is using it? Unlocker solves this kind of problems perfectly;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.truecrypt.org/&quot;&gt;TrueCrypt&lt;/a&gt; - Strong cryptography made easy, specially for usb sticks;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.getpaint.net/&quot;&gt;Paint.NET&lt;/a&gt; - Similar to Notepad2; simple as the traditional Paint, however much much more powerful;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.foxitsoftware.com/pdf/rd_intro.php&quot;&gt;Foxit&lt;/a&gt; - Is it so hard to read a pdf file? I can&#39;t even remember the Acrobat Reader nowadays with Foxit;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.freedownloadmanager.org/&quot;&gt;Free Download Manager&lt;/a&gt; - Kick ass download manager without ads and stuff like that, although the name is not the most &quot;creative&quot; I ever seen;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.mozilla.com/en-US/firefox/&quot;&gt;Firefox&lt;/a&gt; - I cannot figure out why people still use Internet Explorer. Firefox is great, but its add-ons are even better: del.icio.us, greasemonkey, flashgot, firebug, fasterfox, etc. are fantastic...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;br /&gt;&lt;span style=&quot;font-size:130%;&quot;&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;.NET Developer Tools&lt;/span&gt;&lt;/span&gt; (I haven&#39;t developed in Java for the last 2 years, so my Java tools will be in another post)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.jetbrains.com/resharper&quot;&gt;Resharper&lt;/a&gt; - It&#39;s impossible to use Visual Studio without Resharper if you ever seen Java IDEs like IntelliJ and Eclipse. It makes you at least 25% more productive. I rarely use mouse in VS because of it...&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.aisto.com/roeder/dotnet/&quot;&gt;Reflector&lt;/a&gt; - Visual Studio Class Browser is a shame when compared with Reflector. Reflector is much more user friendly, more powerful, great disassembler and have nice plug-ins;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt; - Simply the best version control system around if your team is not 200+, TortoiseSVN is a great client as well;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET&quot;&gt;Cruise Control .NET&lt;/a&gt; - I cannot imagine myself working in a team without a CI server anymore and Cruise Control .NET does a fantastic job. However, it could get a better default report page, like the new Cruise Control Enterprise. CCTray is great as well;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.testdriven.net/&quot;&gt;Test Driven .NET&lt;/a&gt; - The best way to launch your unit tests inside Visual Studio. I love  the Resharper, but its unit testing tools are not so clean/light/not intrusive as Test Driven .NET. Run Last Test feature is fantastic;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://ncover.org/site/&quot;&gt;NCover&lt;/a&gt; - Very simple but efficient way to check your tests coverage;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.gotdotnet.com/Team/FxCop/&quot;&gt;FxCop &lt;/a&gt;- Great inspection tool, Microsoft could create more tools like that, however it sucks for creating custom inspection rules because of its API;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.altinoren.com/activewriter/&quot;&gt;ActiveWriter&lt;/a&gt; - Do you want to create a full domain model compatible with Active Record and/or NHibernate? Using ActiveWriter is the simplest way to implement it;&lt;/li&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/4763888051501692687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/4763888051501692687' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/4763888051501692687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/4763888051501692687'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/06/tools-that-i-love.html' title='Tools that I Love'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-3989610374945643938</id><published>2007-05-23T00:25:00.000-03:00</published><updated>2007-05-23T00:44:18.617-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="resharper tools"/><title type='text'>Resharper Jedi</title><content type='html'>Reading the &lt;a href=&quot;http://macournoyer.wordpress.com/&quot;&gt;bl&lt;/a&gt;o&lt;a href=&quot;http://weblogs.asp.net/rosherove/archive/2007/05/19/impressions-from-devteach-wow.aspx&quot;&gt;gs&lt;/a&gt; from some guys that went to DevTeach, I&#39;ve learned a new term that emerged (I think) from there, &quot;&lt;a href=&quot;http://www.jetbrains.com/resharper/index.html&quot;&gt;Resharper&lt;/a&gt; Jedi&quot;.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.ayende.com/Blog/&quot;&gt;Oren (Ayende)&lt;/a&gt; seems to be the official Resharper Jedi, elected by the guys during DevTeach. In his &lt;a href=&quot;http://www.ayende.com/hibernating-rhinos.aspx&quot;&gt;Hibernating Rhinos&lt;/a&gt; series you can see how fast he uses a lot of features from Resharper.    &lt;br /&gt;&lt;br /&gt;In my teams I try to convince every developer to learn at least the most important &lt;a href=&quot;http://www.jetbrains.com/resharper/documentation/ReSharper25DefaultKeymap.pdf&quot;&gt;Resharper shortcuts&lt;/a&gt;, it really really improves the programming speedy. I personally rarely use a mouse inside visual studio due Resharper features shortcuts.&lt;br /&gt;&lt;br /&gt;I cannot imagine myself using Visual Studio without Resharper anymore; it seems only a text editor with an integrated compiler/debugger.  However, I&#39;m happy with VS + Resharper, but I still would like a  &quot;JetBrains IDE  for .NET&quot;,  kinda  &quot;IntelliN&quot;.&lt;br /&gt;&lt;br /&gt;Talking about Resharper, I just found a new blog from a JetBrains&#39; developer about Resharper. It looks like a nice blog:&lt;br /&gt;    &lt;a href=&quot;http://resharper.blogspot.com/&quot;&gt;http://resharper.blogspot.com/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/3989610374945643938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/3989610374945643938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3989610374945643938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3989610374945643938'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/05/resharper-jedi.html' title='Resharper Jedi'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-3037130670865188161</id><published>2007-05-13T22:29:00.000-03:00</published><updated>2007-05-13T22:37:36.660-03:00</updated><title type='text'>Fast system &lt;&gt; real time system</title><content type='html'>&lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Why a lot of people think that systems that have fast response are &quot;real time&quot; systems? I often hear things like &quot;It&#39;s a real time system, the values are constantly updated in real time.&quot;, &quot;It&#39;s a real time system, it responds immediately after it receive a request&quot;. Real time is about compromise to give a response in a window of time, I mean, the system has to produce a response in x seconds, no matter what, it has to produce it in x seconds, point. A formal definition from &lt;a href=&quot;http://www.dedicated-systems.com/&quot;&gt;http://www.dedicated-systems.com/&lt;/a&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style=&quot;font-style: italic;&quot; class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;A Real-Time System responds in a (timely) predictable way to unpredictable external stimuli arrivals. In short, a Real-Time System has to fulfill under extreme load conditions:&lt;o:p style=&quot;font-style: italic;&quot;&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ol&gt;&lt;li style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;Timeliness: meet deadlines, it is required that the application has to finish certain tasks within the time boundaries it has to respect;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Simultaneity or simultaneous processing: more than one event may happen simultaneously, all deadlines should be met.&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;;&lt;/span&gt;&lt;/li&gt;&lt;li style=&quot;font-style: italic;&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;Predictability: the real-time system has to react to all possible events in a predictable way;&lt;/span&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Dependability or trustworthiness: it is necessary that the real-time system environment can rely on it.&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;          &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;&lt;o:p&gt; &lt;/o:p&gt;Common examples of real time system are: automobile airbag systems, temperature control system of a nuclear power plants,&lt;span style=&quot;&quot;&gt;  &lt;/span&gt;etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;      &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;In one of my current projects we have to control PLCs for pallets transportation in a warehouse, we have to reply the PLCs quick, otherwise the efficiency of the warehouse goes down, but it&#39;s far from being a real time system, even so I bet someone (colleagues, partners, client, providers, etc.) will call it a real time in some moment in the future.&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;The majority of systems people call real time are .NET or Java (not JSR-001/JSR-282) systems. However, the garbage collector in .NET and Java is not deterministic, so you cannot be sure about when some things will happen. For this reason, you cannot build real time systems in .NET or Java, at least not a “hard” real time system.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class=&quot;MsoNormal&quot;&gt;&lt;span style=&quot;&quot; lang=&quot;EN-US&quot;&gt;With JSR-001/JSR-282, Java will be able to build hard real time system; however, I&#39;ve never saw anything similar for .NET, unfortunately.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3037130670865188161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/3037130670865188161'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/05/fast-system-real-time-system.html' title='Fast system &lt;&gt; real time system'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-7357521964263382840</id><published>2007-05-09T00:42:00.000-03:00</published><updated>2007-05-09T01:01:32.914-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="active record"/><category scheme="http://www.blogger.com/atom/ns#" term="nhibernate"/><category scheme="http://www.blogger.com/atom/ns#" term="orm"/><title type='text'>My default .NET data access strategy - NHibernate based approach</title><content type='html'>In my new project I and my team are being able to use a set of tools that I have been looking at for some time for data access in .NET. The approach is based on well know open source ORM framework: &lt;a href=&quot;http://www.nhibernate.org&quot;&gt;NHibernate&lt;/a&gt;, however, we are using other fantastic tools above it.&lt;br /&gt;&lt;br /&gt;Instead of creating &lt;a href=&quot;http://www.hibernate.org/hib_docs/nhibernate/html/mapping.html#mapping-declaration&quot;&gt;NHibernate mapping files&lt;/a&gt;, we are using &lt;a href=&quot;http://www.castleproject.org/activerecord/index.html&quot;&gt;Castle Active Record&lt;/a&gt; (AR) attributes to decorate our domain model classes. Analyzing the attributes AR can generate the mapping files dynamically, so we don’t have to deal with a lot of xmls files. We have something like &lt;a href=&quot;http://www.castleproject.org/activerecord/gettingstarted/classes.html&quot;&gt;this&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But we also don’t create the domain model directly, we use the &lt;a href=&quot;http://altinoren.com/activewriter/&quot;&gt;Active Writer&lt;/a&gt;, which is a VS add-in that works like VS Class Designer, but it generates classes decorated with the AR attributes. So, it’s very fast to create a full domain model mapped using the AR attributes.&lt;br /&gt;&lt;br /&gt;However, we don’t use the &lt;a href=&quot;http://www.castleproject.org/activerecord/documentation/trunk/manual/aroperationsdocs/Generated_ActiveRecordBase.html&quot;&gt;ActiveRecordBase &lt;/a&gt;class as base class for our model in order to avoid getting the persistence methods in our domain model. We prefer to use &lt;a href=&quot;http://www.martinfowler.com/eaaCatalog/repository.html&quot;&gt;repositories &lt;/a&gt;(DDD flavor).&lt;br /&gt;&lt;br /&gt;For the repositories we use a slightly modified version of Rhino Commons &lt;a href=&quot;http://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-commons/Rhino.Commons/Repositories/ARRepository.cs&quot;&gt;ARRepository &lt;/a&gt;(generic specialization). The implementation uses the &lt;a href=&quot;https://svn.castleproject.org/svn/castle/trunk/ActiveRecord/Castle.ActiveRecord/Framework/ActiveRecordMediator.cs&quot;&gt;ActiveRecordMediator&lt;/a&gt; which already have most of basic persistence operations, such as Save, Delete, FindAll, FindOne, etc.&lt;br /&gt;&lt;br /&gt;For custom queries, we try to avoid using the NHibernate query API directly; instead we use the Ayende’s NHibernate &lt;a href=&quot;http://www.ayende.com/Blog/archive/7388.aspx&quot;&gt;Query &lt;/a&gt;&lt;a href=&quot;http://www.ayende.com/projects/downloads/nhibernate-query-generator.aspx&quot;&gt;Generator &lt;/a&gt;tool. It allows us to have strong typed queries that feels like SQL Queries, much better/natural in my opinion.&lt;br /&gt;&lt;br /&gt;So, we have something like this in the EquipmentRepository:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;Equipment FindDougEquip()&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;        return FindOne(&lt;span style=&quot;color: rgb(255, 0, 0);&quot;&gt;Where.Equipment.Name == “DouglasEquip” &amp;&amp;amp; Where.Equipment.Id &gt; 0&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(102, 102, 102);&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, I think this approach is very productive; we have a full persistable domain model and basic repository classes, besides the strong typed queries in few minutes. Really really fantastic open source tools.</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/7357521964263382840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/7357521964263382840' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/7357521964263382840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/7357521964263382840'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/05/my-default-net-data-access-strategy.html' title='My default .NET data access strategy - NHibernate based approach'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6686302833484353783.post-6199581135638434866</id><published>2007-05-07T00:24:00.000-03:00</published><updated>2007-05-07T01:18:22.350-03:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="myself"/><title type='text'>First post - Introducing myself</title><content type='html'>Well, this is my first post so I think it would be a good idea to introduce myself to anyone who could find this blog or even read it and don&#39;t know me yet.&lt;br /&gt;&lt;br /&gt;As you can find somewhere in this page, my name is Douglas and I&#39;m from São Paulo, Brazil. I&#39;m an Electrical/Computer Engineer graduated at &lt;a href=&quot;http://www.poli.usp.br/&quot;&gt;Poli&lt;/a&gt;-&lt;a href=&quot;http://www.usp.br/&quot;&gt;USP&lt;/a&gt;. I work as a Team Leader at &lt;a href=&quot;http://www.chemtech.com.br/english/&quot;&gt;Chemtech&lt;/a&gt;, an industrial services company from &lt;a href=&quot;http://www.siemens.com/index.jsp&quot;&gt;Siemens&lt;/a&gt; group. I usually work at São Paulo office, mainly in software development projects for a range of industries such as metals and mining, logistics, water and electric power, etc. Chemtech is a really nice place to work, I&#39;ll post about it in the future. &lt;br /&gt;&lt;br /&gt;I&#39;m a huge fan of modern/agile software development practices like refactoring, continuous integration, TDD, DDD and techniques like IoC/DI, ORM, AOP, etc.. Most of my projects uses .NET platform (my favorite), but I already  did  some huge  projects in Java EE world, which  I like as well.&lt;br /&gt;&lt;br /&gt;I&#39;m always looking for great tools, whenever possible, open source one. In .NET world I (and my teams) use a lot of them, such as &lt;a href=&quot;http://www.castleproject.org/&quot;&gt;Castle Project&lt;/a&gt; stack (Windsor, Active Record, Active Writer, Dynamic Proxy), NHibernate, &lt;a href=&quot;http://www.ayende.com/&quot;&gt;Ayende &lt;/a&gt;tools (Rhino Mocks, NQG, NQA, Commons), Cruise Control .NET, NAnt, NUnit, etc.. While &lt;a href=&quot;http://www.jetbrains.com/&quot;&gt;JetBrains &lt;/a&gt;does not create a kick ass .NET IDE, I use Visual Studio with its fantastic &lt;a href=&quot;http://www.jetbrains.com/&quot;&gt;Resharper &lt;/a&gt;add-in. In Java world I use the similar ones.&lt;br /&gt;&lt;br /&gt;I&#39;m also very interested in project management, I like to compare and merge/use whenever possible agile practices such as Scrum and XP with PMI PMBoK guidance in my projects.&lt;br /&gt;&lt;br /&gt;Well, so it&#39;s the end of my first post. In the future I&#39;ll post more about my life in software development industry and other random stuff.&lt;br /&gt;&lt;br /&gt;More about me in &lt;a href=&quot;http://www.linkedin.com/&quot;&gt;Linkedin&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;    &lt;a href=&quot;http://www.linkedin.com/in/dougfernando&quot;&gt;http://www.linkedin.com/in/dougfernando&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://dougfernando.blogspot.com/feeds/6199581135638434866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6686302833484353783/6199581135638434866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/6199581135638434866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6686302833484353783/posts/default/6199581135638434866'/><link rel='alternate' type='text/html' href='http://dougfernando.blogspot.com/2007/05/first-post-introducing-myself.html' title='First post - Introducing myself'/><author><name>Douglas</name><uri>http://www.blogger.com/profile/08966810344063840581</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY8yiEL0Io-zFaSbRpi10uOz5RKhYEYYs7k5XL3ALKBnHR9IqLk_PO7uwhZo62qSPY5S8z5jit9rdfHW00SF3QTsb7hIXGzHIPkUF2s9SqJxvssuDAJvPFT0DZ1Bz1o1g/s220/doug_prof_bw.jpg'/></author><thr:total>0</thr:total></entry></feed>