<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tucaz.blog.now() &#187; F#</title>
	<atom:link href="http://blog.tucaz.net/tag/f/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tucaz.net</link>
	<description>Software architecture, agile and all that stuff that you can find everywhere</description>
	<lastBuildDate>Tue, 11 Jan 2011 21:00:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Come&#231;ando a aprender F# com: Ubuntu, Mono e Vim</title>
		<link>http://blog.tucaz.net/2011/01/10/comeando-a-aprender-f-com-ubuntu-mono-e-vim/</link>
		<comments>http://blog.tucaz.net/2011/01/10/comeando-a-aprender-f-com-ubuntu-mono-e-vim/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 00:58:47 +0000</pubDate>
		<dc:creator>tucaz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[FSharp]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[fp]]></category>
		<category><![CDATA[functional programming]]></category>
		<category><![CDATA[mono]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://blog.tucaz.net/?p=479</guid>
		<description><![CDATA[Já faz algum tempo que estou meio de saco cheio de desenvolvimento comercial tradicional que a maioria de nós, desenvolvedores, está acostumado a fazer. De uma forma ou de outra, exceto em projetos excepcionais tudo é uma variação de CRUD o que é um pé no saco pra quem gosta de código. Chega uma hora [...]]]></description>
			<content:encoded><![CDATA[<p>Já faz algum tempo que estou meio de saco cheio de desenvolvimento comercial tradicional que a maioria de nós, desenvolvedores, está acostumado a fazer. De uma forma ou de outra, exceto em projetos excepcionais tudo é uma variação de CRUD o que é um pé no saco pra quem gosta de código. Chega uma hora que a gente começa a procurar maneiras diferentes (não necessariamente melhores) de fazer a mesma coisa só pra acabar com o tédio. Isso estava me incomodando.</p>
<p>Há alguns meses quando este sentimento veio novamente decidi que iria tentar algo diferente. Foi ai que comecei com o combo título deste post. Uma mudança radical de ares.</p>
<p>Não sou o primeiro e com certeza não serei o último.</p>
<p>Apesar de trabalhar com Windows e depender dele pro meu ganha pão adotei o Ubuntu como sistema operacional padrão deixando o Windows em uma VM <strong>[1]</strong> apenas para trabalho e comecei a estudar F# que é uma linguagem com paradigma funcional que é completamente diferente de C#, Java e parentes próximos. Não bastasse a mudança de sistema operacional e de paradigma decidi também aprender mais a respeito de shell e editores de texto pra me livrar mais ainda dos atalhos que uma IDE como o VS proporcionam e adotei o VIM como editor de texto.</p>
<p>Nest post vou mostrar como montar um ambiente como o meu e os primeiros (primeiros mesmo, nada avançado) passos nessa estrada de aprendizado. Se tudo der certo e eu não desistir transformo numa série pra poder compartilhar meu aprendizado e com a colaboração de vocês aprender mais sobre o assunto.</p>
<p>Tudo que estou fazendo é no Ubuntu 10.10, mas deve funcionar com uma boa parte dos *nix por ai.</p>
<h3>Instalando F# com Mono</h3>
<p>Provavelmente o Linux que você tem instalado já deve ter o mono instalado, portanto não precisamos nos preocupar com esta etapa. De qualquer forma, só pra garantir abra o shell (Terminal) veja se você está realmente como o Mono instalado e qual sua versão:</p>
<pre class="shell" name="code">mono -V</pre>
<p>Se tudo estiver certo teremos algo parecido com isso:</p>
<pre class="bash" name="code">Mono JIT compiler version 2.6.7 (Debian 2.6.7-3ubuntu1)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
    TLS:           __thread
    GC:            Included Boehm (with typed GC and Parallel Mark)
    SIGSEGV:       altstack
    Notifications: epoll
    Architecture:  amd64
    Disabled:      none</pre>
<p>Caso ele não esteja instalado basta ir ao Ubuntu Software Center <strong>[2] </strong>para instalá-lo ou <a title="Mono Downloads" href="http://www.go-mono.com/mono-downloads/download.html">baixá-lo no site oficial</a>.</p>
<p>Com Mono instalado corretamente e acessível de qualquer lugar precisamos agora baixar a última versão disponível da biblioteca e compilador FSharp. Temos três opções para a instalação: </p>
<ol>
<li>Efetuar o download do código fonte, compilá-lo e efetuar a instalação </li>
<li>Baixar um <a href="http://fsxplat.codeplex.com/">pacote cross-platform</a> que faz a instalação de tudo </li>
<li>Baixar o pacote oficial compilado, efetuar a instalação e configurar as variáveis de ambiente “manualmente” </li>
</ol>
<p>Vamos com a terceira opção, pra ver onde vai cada coisa e como cada um dos executáveis funciona.</p>
<p>A última versão disponível no momento deste post é a 2.0.0.0 de Novembro de 2010.</p>
<p>Como somos usuários ninjas de Linux vamos efetuar o download via linha de comando com <a href="http://www.gnu.org/software/wget/">wget</a>.</p>
<pre class="bash" name="code">wget http://download.microsoft.com/download/4/5/B/45BD9FBC-22BA-4B45-84B7-17D1AD0122A1/fsharp.zip</pre>
<p>Terminado o download, um pacote zip, extraimos todo o conteúdo pra uma pasta qualquer.</p>
<pre class="bash" name="code">unzip fsharp.zip</pre>
<p>Agora devemos ter todo o conteúdo do zip extraido em uma pasta chamada <em>FSharp-2.0.0.0</em>.</p>
<p>Antes de instalar sugiro mover a pasta com o conteúdo extraido do zip para um local mais apropriado para este tipo de arquivos já que é a partir desta pasta que iremos fazer referência mais pra frente aos executáveis do FSharp. Eu utilizo <em>/usr/lib/ </em><strong>[3]</strong>. Além de mover, vamos renomear a pasta de destino apenas para fsharp a fim de deixar tudo mais simples.</p>
<pre class="bash" name="code">sudo mv FSharp-2.0.0.0/ /usr/lib/fsharp/
cd /usr/lib/fsharp/</pre>
<p>Agora para instalar basta executar:</p>
<pre class="bash" name="code">cd fsharp
sudo sh install-mono.sh</pre>
<p>Este comando provavelmente retornará um erro indicando que a DLL não pôde ser adicionada ao GAC por conta de seu strongname. O que acontece é que a versão compilada que baixamos está com uma assinatura para o .NET Framework do Windows então antes de conseguir instalar o FSharp no Mono devemos baixar um <a title="mono.snk @ GitHub" href="https://github.com/mono/mono/raw/master/mcs/class/mono.snk">arquivo.snk</a> próprio para ele e ai sim executar novamente o setup.</p>
<pre class="bash" name="code">wget -O mono.snk https://github.com/mono/mono/raw/master/mcs/class/mono.snk --no-check-certificate
sudo sh install-mono.sh</pre>
<p>Dando tudo certo, devemos receber uma mensagem de sucesso:</p>
<pre class="bash" name="code">-- Resigning FSharp.Core.dll with mono.snk
Assembly bin/FSharp.Core.dll signed.
-- Installing FSharp DLLS into the GAC
Installed bin/FSharp.Core.dll into the gac (/usr/lib/mono/gac)</pre>
<p>Pra testar se tudo der certo, ainda de dentro do diretório onde instalamos o FSharp, podemos executar:</p>
<pre class="bash" name="code">mono bin\fsi.exe</pre>
<p>Se tudo estiver OK vamos entrar no FSharp Interactive que é uma console <a title="REPL @ Wikipedia" href="http://en.wikipedia.org/wiki/Read-eval-print_loop">REPL</a> pra F# muito legal:</p>
<pre class="bash" name="code">Microsoft (R) F# 2.0 Interactive build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

&gt; </pre>
<p>Podemos também fazer o tradicional “Hello World”:</p>
<pre class="bash" name="code">&gt; printfn &quot;Hello World!&quot;;;
Hello World!
val it : unit = ()</pre>
<p><strong>Pronto! </strong></p>
<p>Tecnicamente temos o FSharp instalado com sucesso e pronto para usar. No entanto, tanto o compilador (fsc.exe) e o REPL (fsi.exe) não fazem parte do PATH configurado em nosso Linux. Desta forma, ele está apenas acessível a partir do diretório onde está localizado.</p>
<p>Pra resolver isso vamos baixar o pacote de ferramentas adicionais para FSharp que irá nos prover algums aliases que permitirão o acesso as ferramentas a partir de qualquer diretório.</p>
<p>Dessa vez, como este pacote está hospedado no Codeplex, temos que efetuar o download do pacote “Additional scripts and tools only (.tgz archive)” manualmente localizado em <a title="http://fsxplat.codeplex.com/releases/view/55463" href="http://fsxplat.codeplex.com/releases/view/55463">http://fsxplat.codeplex.com/releases/view/55463</a>. </p>
<p></p>
<p>Feito o download podemos voltar ao nosso querido shell e instalar o pacote de bonus.</p>
<pre class="bash" name="code">cd ~/Downloads
mkdir fsharp-bonus
tar -xvzf fsharp-bonus.tgz -C fsharp-bonus
cd fsharp-bonus
sudo bash install-bonus.sh</pre>
<p>Este script de instalação espera que as DLLs do FSharp estejam na pasta <em>/usr/lib/fsharp. </em>No entanto, no nosso caso elas se encontram em <em>/usr/lib/fsharp/bin</em>, portanto caso o script solicite esta informação, fica fácil de prover. <img src='http://blog.tucaz.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Feito isso é hora de testar e já podemos chamar <em>fsharpi</em> de qualquer lugar no shell:</p>
<pre class="bash" name="code">tucaz@tucaz-nb:~$ fsharpi

Microsoft (R) F# 2.0 Interactive build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

&gt; </pre>
<p>Agora podemos chamar tanto o REPL quanto o compilador a partir de qualquer diretório já que os alias foram devidamente criados e adicionados ao PATH.</p>
<h3>Primeiro Hello World com Vim</h3>
<p>Agora que temos todo o ambiente instalado (o que na minha opinião é um dos primeiros grandes obstáculos no aprendizado de uma nova linguagem) podemos fazer nosso primeiro Hello World e gerar uma DLL .NET com F#!</p>
<p>Primeiro, vamos definir um diretório de trabalho onde vamos colocar todos nossos projetos. Eu costumo usar um diretório chamado <em>Workspace</em> dentro do meu profile:</p>
<pre class="bash" name="code">cd ~
mkdir Workspace
cd Workspace
mkdir HelloWorldFSharp
cd HelloWorldFSharp</pre>
<p>Criado o diretório, criamos também nosso primeiro arquivo com código fonte FSharp utilizando o Vim <strong>[4]</strong>:</p>
<pre class="bash" name="code">vim HelloWorldFSharp.fs</pre>
<p>Isso cria um arquivo chamado HelloWorldFSharp.fs (assumindo que um não exista ou abre para edição caso ele exista) e o abre no nosso editor de texto funcionando dentro de um terminal shell, que pra um usuário Windows (que não tenha usado o Edit do DOS) é algo geralmente desconhecido.</p>
<p>O Vim (como o Vi) oferece basicamente dois modos de trabalho: modo de comando e edição/inserção de texto. Quando abrimos um arquivo, por padrão temos o modo de comando onde o texto digitado não é o que vai para o arquivo, mas sim interpretado como um comando (a seguir).</p>
<p>Para entrar no modo de edição de texto digitamos <em>i</em> ou apertamos a tecla <em>insert</em> do teclado. Note que o texto &#8211;INSERT&#8211; irá aparecer no canto esquerdo inferior da tela indicando que agora estamos no modo de inserção de texto. Esta área é destinada aos comandos e mensagens do editor.</p>
<p>Estando no modo de edição vamos escrever nosso Hello World!</p>
<pre class="fsharp" name="code">#light 

printfn &quot;Hello World!&quot;</pre>
<p>Com “todo” nosso código completo vamos sair do modo de edição (e voltar ao modo comando) apertando <em>ESC. </em>Para salvar e sair digitamos o comando :wq (write and quit) e enter retornando ao terminal.</p>
<p>Pra compilar nosso código fonte e gerar o primeiro .exe no Linux:</p>
<pre class="bash" name="code">fsharpc HelloWorldFSharp.fs</pre>
<p>Obtendo a resposta:</p>
<pre class="bash" name="code">Microsoft (R) F# 2.0 Compiler build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
tucaz@tucaz-nb:~/Workspace/HelloWorldFSharp$ ls
HelloWorldFSharp.exe  HelloWorldFSharp.fs
tucaz@tucaz-nb:~/Workspace/HelloWorldFSharp$ </pre>
<p>E por último, vamos executar nosso primeiro programa .NET em Linux:</p>
<pre class="bash" name="code">mono HelloWorldFSharp.exe
Hello World!</pre>
<p><strong>Fim!</strong></p>
<p>Neste post vimos como instalar Mono/F# no Linux e como criar nosso primeiro programa Hello World em F# utilizando o Vim. No próximo, quero começar a falar mais a respeito de F# e Vim e deixar para trás<strong>&#160;</strong>questões de ambiente.</p>
<p>Até lá!</p>
<p><strong>[1] – </strong>Estou utilizando Ubuntu 10.10 AMD64 rodando em um notebook Core i7 (2.66ghz) com 6gb de memória RAM sendo que 2gb ficam exclusivos para VM rodando no Virtual Box. A performance é ótima!</p>
<p><strong>[2] – </strong>Menu Principal –&gt; Applications –&gt; Ubuntu Software Center</p>
<p><strong>[3] –</strong> Alguma outra sugestão?</p>
<p><strong>[4]</strong> – Se o Vim não estiver instalado, basta executar “sudo apt-get install vim” para instalá-lo</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tucaz.net/2011/01/10/comeando-a-aprender-f-com-ubuntu-mono-e-vim/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Reunião .NET Architects em 16/01/2010 &#8211; Referências</title>
		<link>http://blog.tucaz.net/2010/01/17/reuniao-net-architects-em-16012010-referencias/</link>
		<comments>http://blog.tucaz.net/2010/01/17/reuniao-net-architects-em-16012010-referencias/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 18:09:52 +0000</pubDate>
		<dc:creator>tucaz</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Agilidade]]></category>
		<category><![CDATA[Berkeley]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Funcional]]></category>
		<category><![CDATA[Linguagens]]></category>
		<category><![CDATA[MIT]]></category>
		<category><![CDATA[Palestras]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ricardo Semler]]></category>
		<category><![CDATA[Scheme]]></category>
		<category><![CDATA[Videos]]></category>

		<guid isPermaLink="false">http://blog.tucaz.net/?p=403</guid>
		<description><![CDATA[Referências sobre F# e Gestão Democratica discutidas durante a reunião do Grupo .NET Architects no dia 16/01/2010]]></description>
			<content:encoded><![CDATA[<p>Ontem durante a reunião do nosso <a title=".NET Architects - Grupo de Discussão" href="http://www.dotnetarchitects.net/">grupo de discussão de .NET</a> o <a title="Blog MVP Fabio Galuppo" href="http://fabiogaluppo.spaces.live.com/">Fabio Galuppo</a> falou sobre um pouco sobre F#. A apresentação foi muito boa e logo após, durante a &#8220;mesa redonda&#8221;, eu mencionei uma série de aulas gravadas na Universidade de Berkeley sobre o assunto Linguagens Funcionais. É o curso completo gravado. Como o pessoal se interessou e pediu os links ai vai:</p>
<ul>
<li><a title="Primeira aula do curso de programação funcional da universidade de Berkeley" href="http://www.youtube.com/watch?v=zmYqShvVDh4">Primeira aula do curso</a> &#8211; As demais podem ser encontradas nos vídeos relacionados</li>
<li><a title="Canal da UC Berkeley no YouTube" href="http://www.youtube.com/user/UCBerkeley">Outros Cursos de Berkeley</a> &#8211; Canal da universidade no YouTube com outras diversas aulas</li>
<li><a title="Functional Programming @ UC Berkeley" href="http://webcast.berkeley.edu/course_details.php?seriesid=1906978502">Vídeos e WebCasts no site oficial da Faculdade</a> &#8211; O primeiro link contém os vídeos disponibilizados no YouTube. No entanto, a faculdade também disponibiliza em seu site os mesmos vídeos além de outros da disciplina de ciências da computação.</li>
</ul>
<p>Depois da reunião oficialmente terminada fomos almoçar e como acabamos entrando no assunto de gestão de projetos comentei um pouquinho a respeito de gestão democrática e prometi deixar alguns links disponíveis:</p>
<ul>
<li><a title="Screencast sobre Agilidade @ AkitaOnRails.com" href="http://akitaonrails.com/2009/07/07/screencast-agilidade-qualidade-e-futuro">Palestra do Akita que foi uma das minhas maiores motivações sobre esse assunto</a></li>
<li><a title="Ricardo Semler @ MIT World" href="http://blog.tucaz.net/en/2009/07/13/leading-by-omission/">Palestra do Ricardo Semler no MIT</a> &#8211; Essa é a palestra que o Akita cita como referência</li>
<li><a title="Ricardo Semler @ Amazon" href="http://www.amazon.com/s/ref=nb_ss?url=search-alias%3Daps&amp;field-keywords=ricardo+semler&amp;x=0&amp;y=0">Lvros de Autoria do Ricardo Semler no Amazon</a> e no <a title="Ricardo Semler @ Submarino" href="http://www.submarino.com.br/busca?q=ricardo+semler&amp;dep=+&amp;x=0&amp;y=0">Submarino</a></li>
<li><a title="Ricardo Semler @ Harvard Business Review" href="http://hbr.org/product/managing-without-managers/an/89509-PDF-ENG">Manager Without Managers</a> &#8211; Paper da Harvard Business Review também de Autoria do Ricardo Semler sobre o assunto</li>
<li><a title="Akita @ Rails Summit 2009" href="http://vimeo.com/7961281">Palestra do Akita @ RailsSummit 2009</a> &#8211; Essa é pra quem quiser viajar mais e conhecer as entradas que levam ao assunto de maneira mais profunda</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.tucaz.net/2010/01/17/reuniao-net-architects-em-16012010-referencias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

