<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wikidot="http://www.wikidot.com/rss-namespace">

	<channel>
		<title>Aletéia.rss</title>
		<link>http://aleteia.wikidot.com</link>
		<description></description>
				<copyright></copyright>
		<lastBuildDate></lastBuildDate>
		
					<item>
				<guid>http://aleteia.wikidot.com/whitenoise</guid>
				<title>Ruído branco</title>
				<link>http://aleteia.wikidot.com/whitenoise</link>
				<description>

&lt;p&gt;Ruído branco é um som que possui todas as freqüências em níveis iguais, popularmente conhecido como chiado. Apesar de geralmente indesejado, o ruído branco tem seus usos, por exemplo, quando se quer silêncio. Por ser um barulho “nêutro”, ele não distrai o seu cérebro, mas ao mesmo tempo ele se sobrepõe a qualquer outro barulho que possa estar sendo feito, dando a impressão de tranqüilidade.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 21 Jun 2009 21:09:33 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Ruído branco é um som que possui todas as freqüências em níveis iguais, popularmente conhecido como chiado. Apesar de geralmente indesejado, o ruído branco tem seus usos, por exemplo, quando se quer silêncio. Por ser um barulho “nêutro”, ele não distrai o seu cérebro, mas ao mesmo tempo ele se sobrepõe a qualquer outro barulho que possa estar sendo feito, dando a impressão de tranqüilidade.</p> <p>Para sua utilidade ser máxima, as caixas de som devem ficar na frente da origem dos ruidos, por exemplo, na frente da janela. Quando isso não é possível, indica-se o uso de fones de ouvido.</p> <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Gerando ruído branco no Linux</a></div> <div style="margin-left: 2em;"><a href="#toc1">Escutando enquanto é gerado</a></div> <div style="margin-left: 2em;"><a href="#toc2">Salvando em um arquivo</a></div> </div> </div> </td> </tr> </table> <h1><span>Gerando ruído branco no Linux</span></h1> <h2><span>Escutando enquanto é gerado</span></h2> <p>Antes, é necessário instalar um programa chamado <tt>sox</tt>. Ele é o responsável por fazer o ruído e depois por adicionar alguns efeitos para deixar o ruído mais “interessante”. Esses efeitos posteriores não são obrigatórios, mas ajudam a deixar o som mais suave.</p> <p>Basicamente, o código é:</p> <div class="code"> <pre> <code>sox -t sl -r 44100 -c 2 /dev/zero -t ossdsp /dev/dsp synth "1:00:00" brownnoise</code> </pre></div> <p>O <tt>"1:00:00"</tt> indica por quanto tempo o ruído será gerado, uma hora no caso. Além disso, no exemplo a cima foi usada a opção <tt>brownnoise</tt> que é similar ao ruído branco, mas mais agradável por ter menos agudos. Pode-se trocar a opção <tt>brownnoise</tt> por <tt>whitenoise</tt> para se ter ruído branco.</p> <p>Com os efeitos, o código fica:</p> <div class="code"> <pre> <code> sox -t sl -r 44100 -c 2 /dev/zero \ -t ossdsp /dev/dsp \ synth "1:00:00" brownnoise : \ band -n 2200 200 : \ reverb : \ flanger : \ chorus 0.7 0.9 : \ earwax : \ phaser 0.89 0.85 1 0.24 2 -t : \ vol 0.5</code> </pre></div> <p>As quebras de linha não são necessarias, servem apenas para mostrar os efeitos e facilitar a leitura.</p> <h2><span>Salvando em um arquivo</span></h2> <p>Caso se queira salvar o arquivo, basta trocar o <tt>-t ossdsp /dev/dsp</tt> do código a cima pelo nome do arquivo que se deseja criar. Para se criar o arquivo <tt>ruido.wav</tt>, fica:</p> <div class="code"> <pre> <code>sox -t sl -r 44100 -c 2 /dev/zero \ ruido.wav \ synth "1:00:00" brownnoise : \ band -n 2200 200 : \ reverb : \ flanger : \ chorus 0.7 0.9 : \ earwax : \ phaser 0.89 0.85 1 0.24 2 -t : \ vol 0.5</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/linux:dell-inspiron-1525</guid>
				<title>Linux no Dell Inspiron 1525</title>
				<link>http://aleteia.wikidot.com/linux:dell-inspiron-1525</link>
				<description>

&lt;h1&gt;&lt;span&gt;Linux no Dell Inspiron 1525&lt;/span&gt;&lt;/h1&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Jun 2009 16:08:12 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <h1><span>Linux no Dell Inspiron 1525</span></h1> <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Linux no Dell Inspiron 1525</a></div> <div style="margin-left: 2em;"><a href="#toc1">Teclado</a></div> <div style="margin-left: 2em;"><a href="#toc2">Webcam</a></div> <div style="margin-left: 2em;"><a href="#toc3">Particionando o disco</a></div> <div style="margin-left: 2em;"><a href="#toc4">Salvando o disco</a></div> <div style="margin-left: 2em;"><a href="#toc5">Wireless</a></div> <div style="margin-left: 2em;"><a href="#toc6">Áudio</a></div> <div style="margin-left: 2em;"><a href="#toc7">Kernel Mode Setting</a></div> <div style="margin-left: 2em;"><a href="#toc8">Synaptics</a></div> </div> </div> </td> </tr> </table> <h2><span>Teclado</span></h2> <p>Diferente de alguns notebooks que vieram com o / e o ? nas teclas Q e W, este notebook funcionará perfeitamente com um layout para teclado ABNT2. Inclusive as teclas Fn+alguma coisa.</p> <h2><span>Webcam</span></h2> <p>A webcam funcionou de primeira até no Arch Linux. Caso não tenha funcionado na sua distro por algum motivo qualquer, o módulo necessário é o <tt>uvcvideo</tt>.</p> <div class="code"> <pre> <code># modprobe uvcvideo OU $ sudo modprobe uvcvideo</code> </pre></div> <h2><span>Particionando o disco</span></h2> <p>A primeira vez que tentei particionar o disco com o <tt>cfdisk</tt> dava erro e ele saía. A solução foi usar o <tt>fdisk</tt> para apagar a tabela de partições do disco e então usar o <tt>cfdisk</tt>. Digite ‘m’ e ele mostrará os comandos. O comando para deletar é ‘d’ e o comando para sair, salvando as alterações, é ‘w’. Não se preocupe muito com o <tt>fdisk</tt>: apague tudo e depois divirta-se com o <tt>cfdisk</tt>.</p> <p>Não cheguei a testar, mas outra alternativa é o <tt>gparted</tt>.</p> <h2><span>Salvando o disco</span></h2> <p>Algum tempo atrás surgiu um artigo no Slashdot sobre o Ubuntu estar diminuindo a vida útil de discos rígidos por estar usando regras muito agressivas de spin down. Isso reduz o consumo de bateria, mas o resultado é uma diminuição na vida útil do seu HD. Para desativar isso no Arch Linux, instale o pacote hdparm e rode:</p> <div class="code"> <pre> <code>hdparm -B 255 /dev/sda</code> </pre></div> <p>No entanto, isso deve ser rodado toda vez que o computador for iniciado. Portanto, adicione a linha a cima ao seu <tt>/etc/rc.local</tt> também.</p> <h2><span>Wireless</span></h2> <p>Existem duas possibilidades. Se sua placa for uma Broadcom (cheque com <tt>lspci</tt>), dê uma olhada no AUR pelo pacote <tt>broadcom-wl</tt>. Usuários de outras distros podem baixar o driver da própria Broadcom, mas procure antes se não há um método mais fácil de fazer a instalação na sua distribuição.</p> <p>A outra possibilidade é que sua placa seja da Intel, nesse caso…</p> <h2><span>Áudio</span></h2> <p>Tanto o ALSA quanto o OSS4 funcionam (no sentido que com os dois você conseguirá escutar música). Há quem diga que a qualidade de som no OSS4 é muito melhor, há quem defenda que se há diferença, esta é imperceptível (eu, por exemplo).</p> <p>No fim eu acabei preferindo o ALSA, já que com ele há suporte às duas saídas de fone de ouvido ao mesmo tempo e consegui utilizar tanto o microfone built-in, quanto o jack para microfone externo.</p> <p>Para que as coisas funcionem, adicione a segunda linha a seu <tt>/etc/modprobe.conf</tt>:</p> <p><tt>options snd-hda-intel model=dell-bios</tt></p> <p>e depois fuce no alsamixer, e lembre-se adicionar alsa aos seus DAEMONS no /etc/rc.conf e de tirar as caixas de som do mudo.</p> <h2><span>Kernel Mode Setting</span></h2> <h2><span>Synaptics</span></h2> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/awesome</guid>
				<title>Awesome</title>
				<link>http://aleteia.wikidot.com/awesome</link>
				<description>

&lt;p&gt;Algumas dicas sobre o Awesome, um &lt;em&gt;tiling window manager&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Jun 2009 15:29:20 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Algumas dicas sobre o Awesome, um <em>tiling window manager</em>.</p> <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Barra de título só quando floating</a></div> </div> </div> </td> </tr> </table> <h1><span>Barra de título só quando <em>floating</em></span></h1> <p>Pediram em um tópico do fórum do Arch Linux como fazer a barra de título aparecer em janelas que estivessem “flutuando” no awesome. A idéia é boa e permite que tenhamos o melhor dos dois mundos: de um lado, o tiling continua funcionando normalmente; do outro, nós temos controle sobre programas que estejam “flutuando” de forma bastante similar ao que teríamos em gerenciadores de janela comuns, tais como o Openbox, o do GNOME e o do KDE.</p> <p>A implementação disso é bastante simples, basta adicionar ao fim de seu <tt>rc.lua</tt>:</p> <div class="code"> <pre> <code>awful.hooks.property.register(function (c, prop) -- Remove the titlebar if fullscreen if c.fullscreen then awful.titlebar.remove(c) elseif not c.fullscreen then -- Add title bar for floating apps if c.titlebar == nil and awful.client.floating.get(c) then awful.titlebar.add(c, { modkey = modkey }) -- Remove title bar, if it's not floating elseif c.titlebar and not awful.client.floating.get(c) then awful.titlebar.remove(c) end end end)</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/emacs</guid>
				<title>Emacs</title>
				<link>http://aleteia.wikidot.com/emacs</link>
				<description>

&lt;p&gt;Eis o meu &lt;tt&gt;.emacs&lt;/tt&gt;:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 15 Jun 2009 15:21:33 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Eis o meu <tt>.emacs</tt>:</p> <div class="code"> <pre> <code>;;; Put all auto-save files in the same place (defvar autosave-dir "/home/andre/.local/.emacs.d/auto-save-files/") (make-directory autosave-dir t) (defun make-auto-save-file-name () (concat autosave-dir "#" (buffer-name) "#")) (setq make-backup-files nil) ;;; Save position in file (setq save-place-file "/home/andre/.local/.emacs.d/saveplace") (setq-default save-place t) (require 'saveplace) ;;; Other configs (load "/home/andre/.local/.emacs.d/color-schemes/my.el" nil t t) (require 'color-theme) (setq color-theme-is-global t) (color-theme-i-me-mine) (setq default-frame-alist '((font-backend . "xft") (font . "Envy Code R-8") (cursor-color . "white"))) (setq-default fill-column 80) (mouse-wheel-mode t) (set-cursor-color "white") (column-number-mode 1) (line-number-mode 1) (setq show-paren-delay 0) (show-paren-mode 1) (setq show-paren-style 'expression) (set-face-background 'show-paren-match-face "#444444") ;;; C Mode (add-hook 'c-mode-hook '(lambda () (c-set-style "bsd"))) ;;; LaTeX Mode (load "auctex.el" nil t t) (load "preview-latex.el" nil t t) (defun auto-fill-mode-on () (auto-fill-mode 1)) (add-hook 'LaTeX-mode-hook 'auto-fill-mode-on) (add-hook 'latex-mode-hook 'auto-fill-mode-on) (add-hook 'TeX-mode-hook 'auto-fill-mode-on) (add-hook 'tex-mode-hook 'auto-fill-mode-on) ;;; Lua Mode (setq auto-mode-alist (cons '("\.lua$" . lua-mode) auto-mode-alist)) (autoload 'lua-mode "lua-mode" "Lua editing mode." t) ;;; Haskell Mode (setq auto-mode-alist (append auto-mode-alist '(("\\.[hg]s$" . haskell-mode) ("\\.hi$" . haskell-mode) ("\\.l[hg]s$" . literate-haskell-mode)))) (autoload 'haskell-mode "haskell-mode" "Major mode for editing Haskell scripts." t) (autoload 'literate-haskell-mode "haskell-mode" "Major mode for editing literate Haskell scripts." t) (add-hook 'haskell-mode-hook 'turn-on-haskell-decl-scan) (add-hook 'haskell-mode-hook 'turn-on-haskell-doc-mode) (add-hook 'haskell-mode-hook 'turn-on-haskell-indent) (setq haskell-lieterate-default 'tex) ;;; Slime (Lisp development) (setq inferior-lisp-program "/usr/bin/sbcl") (add-to-list 'load-path "/usr/share/emacs/site-lisp/slime/") (require 'slime) (slime-setup) (custom-set-variables ;; custom-set-variables was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(column-number-mode t) '(inhibit-startup-screen t) '(initial-scratch-message nil) '(show-paren-mode t)) (put 'upcase-region 'disabled nil) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. )</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/matematica:derivadas</guid>
				<title>Derivadas</title>
				<link>http://aleteia.wikidot.com/matematica:derivadas</link>
				<description>

&lt;table style=&quot;margin:0; padding:0&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;margin:0; padding:0&quot;&gt;
&lt;div id=&quot;toc&quot;&gt;
&lt;div id=&quot;toc-action-bar&quot;&gt;&lt;a href=&quot;javascript:;&quot;  &gt;fold&lt;/a&gt;&lt;a style=&quot;display: none&quot; href=&quot;javascript:;&quot;  &gt;unfold&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Table of Contents&lt;/div&gt;
&lt;div id=&quot;toc-list&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 29 Mar 2009 14:52:06 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Definição</a></div> <div style="margin-left: 1em;"><a href="#toc1">Regras</a></div> <div style="margin-left: 2em;"><a href="#toc2">Derivada de uma constante</a></div> <div style="margin-left: 2em;"><a href="#toc3">Derivada da função identidade</a></div> <div style="margin-left: 1em;"><a href="#toc4">Trigonométricas</a></div> <div style="margin-left: 2em;"><a href="#toc5">Seno</a></div> <div style="margin-left: 2em;"><a href="#toc6">Cosseno</a></div> </div> </div> </td> </tr> </table> <h1><span>Definição</span></h1> <span class="equation-number">(1)</span> <div class="math-equation" id="equation-217677-1"><img src="http://aleteia.wikidot.com/local--math/eqs/582b106e2704d0feeeeffcfbf86e0754.png" alt="\frac{d}{dx} f(x) = \lim_{h\to0} \frac{f(x+h) - f(x)}{h}" /></div> <h1><span>Regras</span></h1> <h2><span>Derivada de uma constante</span></h2> <span class="equation-number">(2)</span> <div class="math-equation" id="equation-217677-2"><img src="http://aleteia.wikidot.com/local--math/eqs/9e56976dc10b624410c6517b7fdcdf10.png" alt="\begin{align} \frac{dc}{dx} &amp;= \lim_{h\to0} \frac{c - c}{h} \ &amp;= \lim_{h\to0} \frac{0}{h} \ &amp;= \lim_{h\to0} 0 \ &amp;= 0 \end{align}" /></div> <h2><span>Derivada da função identidade</span></h2> <span class="equation-number">(3)</span> <div class="math-equation" id="equation-217677-3"><img src="http://aleteia.wikidot.com/local--math/eqs/b89b76c7c88977bfdaeaac53f6ee87d8.png" alt="\begin{align} \frac{dx}{dx} &amp;= \lim_{h\to0} \frac{x+h - x}{h} \ &amp;= \lim_{h\to0} \frac{h}{h} \ &amp;= \lim_{h\to0} 1 \ &amp;= 1 \end{align}" /></div> <h1><span>Trigonométricas</span></h1> <p>Se algumas passagens parecerem obscuras, revise algumas <a class="newpage" href="http://aleteia.wikidot.com/matematica:trigonometria">propriedades trigonométricas</a>.</p> <h2><span>Seno</span></h2> <p>Dado<sup class="footnoteref"><a id="footnoteref-554441-1" href="javascript:;" class="footnoteref" >1</a></sup>:</p> <span class="equation-number">(4)</span> <div class="math-equation" id="equation-217677-4"><img src="http://aleteia.wikidot.com/local--math/eqs/9bec602da9245f6f4a72a5a8c3355c6f.png" alt="\lim_{h\to0} \frac{\sin h}{h} = 1" /></div> <p>Temos que:</p> <span class="equation-number">(5)</span> <div class="math-equation" id="equation-217677-5"><img src="http://aleteia.wikidot.com/local--math/eqs/d5b3945c2c332e09d3d965abc062446d.png" alt="\begin{align} \frac{d}{dx} \sin x &amp;= \lim_{h\to0} \frac{\sin (x+h) - \sin x}{h} \ &amp;= \lim_{h\to0} \frac{\sin x \cdot \cos h + \sin h \cdot \cos x - sin x}{h} \ &amp;= \lim_{h\to0} \frac{\sin x \cdot \cos h - \sin x}{h} + \lim_{h\to0} \frac{\sin h \cdot \cos x}{h} \ &amp;= \sin x \cdot \lim_{h\to0} \frac{\cos h - 1}{h} + \cos x \cdot \lim_{h\to0} \frac{\sin h}{h} \ &amp;= \sin x \cdot \lim_{h\to0} \frac{\cos h - 1}{h} \cdot \frac{\cos h + 1}{\cos h + 1} + \cos x \cdot 1 \ &amp;= \sin x \cdot \lim_{h\to0} \frac{\cos^2 h - 1}{h (\cos h + 1)} + \cos x \ &amp;= \sin x \cdot \lim_{h\to0} \frac{-\sin^2 h}{h (\cos h +1)} + \cos x \ &amp;= \sin x \cdot \lim_{h\to0} -\sin h \cdot \lim_{h\to0} \frac{\sin h}{h} \cdot \lim_{h\to0} \frac{1}{\cos h + 1} + \cos x \ &amp;= \sin x \cdot 0 \cdot 1 \cdot \frac{1}{2} + \cos x \ &amp;= \cos x \end{align}" /></div> <h2><span>Cosseno</span></h2> <p>Sabendo que:</p> <span class="equation-number">(6)</span> <div class="math-equation" id="equation-217677-6"><img src="http://aleteia.wikidot.com/local--math/eqs/cf72c3a1e62e84cf3fd7f7261f8089b7.png" alt="\begin{align} \cos x &amp;= \sin \left(x + \frac{\pi}{2}\right)\ \frac{d}{dx} \cos x &amp;= \frac{d}{dx} \sin \left(x + \frac{\pi}{2}\right) \end{align}" /></div> <p>Sendo <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/155a771814c6af4635856ea79048c54c.png" alt="u = x + \frac{\pi}{2}" /> e usando a regra da composição:</p> <span class="equation-number">(7)</span> <div class="math-equation" id="equation-217677-7"><img src="http://aleteia.wikidot.com/local--math/eqs/e038df254bab159ec696662fd0c3e786.png" alt="\begin{align} \frac{d}{dx} \cos x = \frac{d}{dx} \sin (u) &amp;= \frac{d}{du}\sin u\cdot \frac{du}{dx} \ &amp;= \frac{d}{du}\sin u\cdot \frac{d}{dx} \left(x + \frac{\pi}{2}\right) \ &amp;= \cos u \cdot 1 \ &amp;= \cos \left(x + \frac{\pi}{2}\right) \ &amp;= -\sin x \end{align}" /></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> <div class="footnotes-footer"> <div class="title">Footnotes</div> <div class="footnote-footer" id="footnote-554441-1"><a href="javascript:;" >1</a>. Veja a página sobre <a class="newpage" href="http://aleteia.wikidot.com/matematica:limites">limites</a> para uma prova.</div> </div> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/lisp:soma-de-digitos</guid>
				<title>Somando dígitos de um número com Lisp</title>
				<link>http://aleteia.wikidot.com/lisp:soma-de-digitos</link>
				<description>

&lt;p&gt;Vez ou outra aparece um problema no &lt;a class=&quot;newpage&quot; href=&quot;http://aleteia.wikidot.com/http:projecteuler-net&quot;&gt;Project Euler&lt;/a&gt; que pede para somar os dígitos de um número grande. Esta é uma maneira rápida de resolver o problema, em apenas 5 linhas de código. Primeiro transformamos o número e uma lista com os digitos, e depois usamos a função &lt;tt&gt;reduce&lt;/tt&gt; para somar esses números:&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 28 Mar 2009 23:35:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Vez ou outra aparece um problema no <a class="newpage" href="http://aleteia.wikidot.com/http:projecteuler-net">Project Euler</a> que pede para somar os dígitos de um número grande. Esta é uma maneira rápida de resolver o problema, em apenas 5 linhas de código. Primeiro transformamos o número e uma lista com os digitos, e depois usamos a função <tt>reduce</tt> para somar esses números:</p> <div class="code"> <pre> <code>(defun num-&gt;list (num &amp;optional (lst nil)) (if (zerop num) lst (num-&gt;list (floor num 10) (push (mod num 10) lst)))) (print (reduce #'+ (num-&gt;list (expt 2 1000))))</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/matematica:prova-formula-euler</guid>
				<title>Prova da Fórmula de Euler</title>
				<link>http://aleteia.wikidot.com/matematica:prova-formula-euler</link>
				<description>

&lt;p&gt;Prova da fórmula de Euler (pronuncia-se &lt;em&gt;Óiler&lt;/em&gt;) retirada da Wikipédia.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 28 Mar 2009 23:25:07 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Prova da fórmula de Euler (pronuncia-se <em>Óiler</em>) retirada da Wikipédia.</p> <span class="equation-number">(1)</span> <div class="math-equation" id="equation-146895-1"><img src="http://aleteia.wikidot.com/local--math/eqs/725a2fdd6209837257cd99b447f0745c.png" alt="e^{ix} = \cos x + i\cdot\sin x" /></div> <h1><span>Usando Cálculo</span></h1> <p>Definida uma função <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/4f3a4ee05353ba440145b49f81a61463.png" alt="f: \mathbb{R} \to \mathbb{C}" />, tal que <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/bab37e9b43d308dcd485d945d8a91078.png" alt="f(x) = e^{-ix} \cdot (\cos x + i \cdot \sin x)" />, temos que a derivada de <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/8fa14cdd754f91cc6554c9e71929cce7.png" alt="f" />, usando a <a href="http://aleteia.wikidot.com/matematica:derivadas">regra do produto</a> é:</p> <span class="equation-number">(2)</span> <div class="math-equation" id="equation-146895-2"><img src="http://aleteia.wikidot.com/local--math/eqs/813faccbad9cc28eb70479067368a8eb.png" alt="\begin{align} \frac{d}{dx} f(x) &amp;= (\cos x + i \cdot \sin x) \cdot \frac{d}{dx} e^{-ix} + \frac{d}{dx} (\cos x + i \cdot \sin x) \cdot e^{-ix} \ &amp;= (\cos x + i \cdot \sin x) \cdot (-ie^{-ix}) + (-\sin x + i\cos x)\cdot e^{-ix}\ &amp;= (-i\cos x - i^2 \cdot \sin x) \cdot e^{-ix} + (-\sin x + i\cos x)\cdot e^{-ix} \ &amp;= (-i\cos x + \sin x - \sin x + i\cos x) \cdot e^{-ix}\ &amp;= 0. \end{align}" /></div> <p>Portanto, <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/8fa14cdd754f91cc6554c9e71929cce7.png" alt="f" /> deve ser uma função constante. Como sabemos qual o valor de <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/01ba77110113019916a9054319ae7c05.png" alt="f(0)" />, sabemos qual o valor para qualquer <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/9dd4e461268c8034f5c8564e155c67a6.png" alt="x" /> real. Assim,</p> <span class="equation-number">(3)</span> <div class="math-equation" id="equation-146895-3"><img src="http://aleteia.wikidot.com/local--math/eqs/c032c064e3623d432efa1a69ff28b941.png" alt="e^{-ix} \cdot (\cos x + i \cdot \sin x) = f(x) = f(0) = e^0 \cdot (\cos 0 + i \cdot \sin 0) = 1." /></div> <p>Multiplicando ambos os lados por <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/db7b57ceb4fef7805bf10a04046a1a9a.png" alt="e^{ix}" />, temos:</p> <span class="equation-number">(4)</span> <div class="math-equation" id="equation-146895-4"><img src="http://aleteia.wikidot.com/local--math/eqs/1c4d526b9c235bfbe2ad623f93196002.png" alt="\begin{align} e^{-ix} \cdot (\cos x + i \cdot \sin x) &amp;= 1 \ e^{ix} \cdot e^{-ix} \cdot (\cos x + i \cdot \sin x) &amp;= e^{ix} \ (\cos x + i \cdot \sin x) &amp;= e^{ix} \end{align}" /></div> <p>c.q.d.</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/gnuplot</guid>
				<title>Gnuplot</title>
				<link>http://aleteia.wikidot.com/gnuplot</link>
				<description>

&lt;table style=&quot;margin:0; padding:0&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;margin:0; padding:0&quot;&gt;
&lt;div id=&quot;toc&quot;&gt;
&lt;div id=&quot;toc-action-bar&quot;&gt;&lt;a href=&quot;javascript:;&quot;  &gt;fold&lt;/a&gt;&lt;a style=&quot;display: none&quot; href=&quot;javascript:;&quot;  &gt;unfold&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Table of Contents&lt;/div&gt;
&lt;div id=&quot;toc-list&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 28 Mar 2009 22:57:43 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Funções paramétricas</a></div> </div> </div> </td> </tr> </table> <p>O <tt>gnuplot</tt> é um ótimo programa para fazer gráficos, seja de funções ou de uma (ou mais) tabela de dados.</p> <h1><span>Funções paramétricas</span></h1> <p>As funções paramétricas são funções que dependem de um parâmetro (matematicamente, geralmente ele é representado pela letra <img class="math-inline" src="http://aleteia.wikidot.com/local--math/inline/e358efa489f58062f10dd7316b65649e.png" alt="t" />). Para entrarmos no modo paramétrico, primeiro rodamos:</p> <div class="code"> <pre> <code>set parametric</code> </pre></div> <p>Aparecerá uma mensagem dizendo que <tt>t</tt> é para gráficos no plano e <tt>u</tt> e <tt>v</tt> para gráficos tridimensionais. Podemos definir o quanto essas variaveis podem variar com o comando <tt>set</tt>:</p> <div class="code"> <pre> <code>set trange [-10:10] set urange [-2*pi:2*pi] set vrange [0:10]</code> </pre></div> <p>Então podemos fazer o gráfico de um círculo, por exemplo:</p> <div class="code"> <pre> <code>plot cos(x),sin(x)</code> </pre></div> <p>Ou então de uma mola:</p> <div class="code"> <pre> <code>splot u,cos(u),sin(u)</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/c:termios</guid>
				<title>Termios.h</title>
				<link>http://aleteia.wikidot.com/c:termios</link>
				<description>

&lt;table style=&quot;margin:0; padding:0&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;margin:0; padding:0&quot;&gt;
&lt;div id=&quot;toc&quot;&gt;
&lt;div id=&quot;toc-action-bar&quot;&gt;&lt;a href=&quot;javascript:;&quot;  &gt;fold&lt;/a&gt;&lt;a style=&quot;display: none&quot; href=&quot;javascript:;&quot;  &gt;unfold&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Table of Contents&lt;/div&gt;
&lt;div id=&quot;toc-list&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 26 Mar 2009 13:51:41 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Exemplos</a></div> <div style="margin-left: 2em;"><a href="#toc1">Detectando eventos no terminal</a></div> <div style="margin-left: 3em;"><a href="#toc2">Código</a></div> <div style="margin-left: 3em;"><a href="#toc3">Explicações</a></div> <div style="margin-left: 2em;"><a href="#toc4">Calculadora RPN</a></div> </div> </div> </td> </tr> </table> <p>A <tt>termios.h</tt> é uma biblioteca especificada pelo padrão POSIX que permite que nós alteremos as opções do terminal em que o programa está sendo executado. O exemplo mais típico é quando vamos fazer o <em>login</em> em um console virtual e quando digitamos a senha não aparece nada; isso pode ser feito tirando a “opção” <tt>ECHO</tt> do terminal que estamos usando.</p> <h1><span>Exemplos</span></h1> <h2><span>Detectando eventos no terminal</span></h2> <p>Digamos que um software esteja sendo desenvolvido (para o terminal) e que em um dado momento, o usuário deve escolher uma opção, alguma coisa parecida com isto:</p> <div class="code"> <pre> <code>Houve um erro na hora de executar asdf: [R]epetir [C]ontinuar [A]bortar</code> </pre></div> <p>Usando <tt>getchar</tt> ou <tt>scanf</tt> ou qualquer outra função da biblioteca <tt>stdio.h</tt>, a leitura será feita linha por linha. Por isso, mesmo que nós queiramos apenas um caractere, o usuário terá que apertar esse caractere e depois Enter. Eu queria uma forma de fazer isso em que o usuário simplesmente digitasse ‘r’ ou ‘c’, enfim, apenas uma tecla. Pensei em usar <tt>ncurses</tt> até, mas achei essa solução exagerada, e além disso, como o <tt>ncurses</tt> faz isso?</p> <p>A solução apareceu com o uso de <tt>termios.h</tt> e de uma função de leitura também especificada pelos padrões POSIX, mas na biblioteca <tt><a class="newpage" href="http://aleteia.wikidot.com/c:unistd-h">unistd.h</a></tt>, a função <tt>read()</tt>.</p> <h3><span>Código</span></h3> <div class="code"> <div class="hl-main"> <pre> <span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdio.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">unistd.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">termios.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">get_char</span><span class="hl-brackets">(</span><span class="hl-types">void</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> </span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-identifier">new_setting</span><span class="hl-code">; </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Houve um erro na execução de foo.</span><span class="hl-special">\</span><span class="hl-string">n[C]ontinuar</span><span class="hl-special">\</span><span class="hl-string">t[R]epetir</span><span class="hl-special">\</span><span class="hl-string">t[A]bortar</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-identifier">ch</span><span class="hl-code"> != '</span><span class="hl-identifier">a</span><span class="hl-code">' &amp;&amp; </span><span class="hl-identifier">ch</span><span class="hl-code"> != '</span><span class="hl-identifier">A</span><span class="hl-code">'</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code"> = </span><span class="hl-identifier">get_char</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">switch</span><span class="hl-brackets">(</span><span class="hl-identifier">ch</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-identifier">r</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-identifier">R</span><span class="hl-code">': </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Repetindo...</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Houve um erro na execução de foo.</span><span class="hl-special">\</span><span class="hl-string">n[C]ontinuar</span><span class="hl-special">\</span><span class="hl-string">t[R]epetir</span><span class="hl-special">\</span><span class="hl-string">t[A]bortar</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-identifier">c</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-identifier">C</span><span class="hl-code">': </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Continuando...</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">2</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Houve um erro na execução de foo.</span><span class="hl-special">\</span><span class="hl-string">n[C]ontinuar</span><span class="hl-special">\</span><span class="hl-string">t[R]epetir</span><span class="hl-special">\</span><span class="hl-string">t[A]bortar</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">tcgetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code"> = </span><span class="hl-identifier">init_setting</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_lflag</span><span class="hl-code"> &amp;= ~</span><span class="hl-brackets">(</span><span class="hl-identifier">ICANON</span><span class="hl-code"> | </span><span class="hl-identifier">ECHO</span><span class="hl-code"> | </span><span class="hl-identifier">ISIG</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_cc</span><span class="hl-brackets">[</span><span class="hl-identifier">VMIN</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">1</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_cc</span><span class="hl-brackets">[</span><span class="hl-identifier">VTIME</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">tcsetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">TCSADRAIN</span><span class="hl-code">, </span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">tcsetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">TCSADRAIN</span><span class="hl-code">, </span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">get_char</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code">; </span><span class="hl-identifier">read</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ch</span><span class="hl-code">, </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code">; </span><span class="hl-brackets">}</span> </pre></div> </div> <h3><span>Explicações</span></h3> <p>Para que a idéia funcione, precisamos alterar algumas opções do terminal, e é aí que entra a biblioteca <tt>termios.h</tt>. Vamos definir duas funções, <tt>verbose()</tt>, que volta as configurações ao normal, e <tt>silent()</tt>, que tira o <em>echo</em> do terminal. O comportamento desejado é que quando o usuário aperte uma tecla, ela não apareça na tela, mas isso traz uma consequência: se você tentar usar o <tt>printf()</tt> ou qualquer outra função do tipo, ela também não aparecerá. Por isso, temos que ficar alternando entre os modos.</p> <p>O <em>echo</em> é desativado na linha “<tt>new_setting-&gt;c_lflag &amp;= ~(ICANON | ECHO);</tt>“, onde nós também desligamos o modo canônico, o que nos permite fazer a leitura caractere por caractere, ao invés de linha por linha, como é o padrão.</p> <p>Outro detalhe importante são as linhas <tt>new_setting-&gt;c_cc[]</tt>. A função <tt>read()</tt> é uma função que bloqueia a execução do programa até que certa condição seja encontrada. No caso, definimos que ela só pode retornar após ler 1 caractere (<tt>VMIN</tt>), não importa quanto tempo (em décimos de segundo) isso demore (<tt>VTIME</tt>). Neste exemplo, poderíamos também usar <tt>c_cc[VMIN] = 0</tt> e <tt>c_cc[VTIME] = 100</tt>, que faz com que a função retorne assim que receber o primeiro caractere ou depois de 10 segundos, permitindo que o programa continue com uma opção padrão.</p> <p>Um último detalhe é o tipo de <em>loop</em> que eu usei. De maneira geral, um loop do tipo <tt>while(1)</tt> pode maximizar o uso de uma das CPUs, mas no caso não temos esse problema, já que <tt>read()</tt> é uma função que bloqueia a execução do programa até que ela retorne.</p> <h2><span>Calculadora RPN</span></h2> <p>Uma <a href="http://aleteia.wikidot.com/c:calculadora-rpn">calculadora que usa notação polonesa reversa</a> para o terminal que eu escrevi usando a biblioteca usando <tt>termios.h</tt></p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/python:time-it</guid>
				<title>Fazendo Benchmarks em Python</title>
				<link>http://aleteia.wikidot.com/python:time-it</link>
				<description>

&lt;p&gt;Um pequeno script que fiz em python. Para usá-lo, rode:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;
&lt;code&gt;python time-it.py &amp;lt;número de vezes&amp;gt; &amp;lt;comando&amp;gt;&lt;/code&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Por exemplo, para saber a média de se executar &lt;tt&gt;a.out&lt;/tt&gt; 5 vezes:&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;
&lt;code&gt;python time-it.py 5 ./a.out&lt;/code&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ele calcula o tempo que demorou para executar o comando e depois calcula uma média aritmética e uma média desconsiderando o valor mais alto e o mais baixo.&lt;/p&gt;
&lt;h1&gt;&lt;span&gt;O Código&lt;/span&gt;&lt;/h1&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;div class=&quot;hl-main&quot;&gt;
&lt;pre&gt;
&lt;span class=&quot;hl-comment&quot;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;subprocess&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;import&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;math&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-builtin&quot;&gt;len&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;time-it.py &amp;lt;num of runs&amp;gt; &amp;lt;what to run&amp;gt;&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-builtin&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;])&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;argv&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lst&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;math&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;fsum&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lst&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; / &lt;/span&gt;&lt;span class=&quot;hl-builtin&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;def&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;san_mean&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lst&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;global&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lst&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;math&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;fsum&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;lst&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:-&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;])&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; / &lt;/span&gt;&lt;span class=&quot;hl-builtin&quot;&gt;float&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;timing&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;t1&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;subprocess&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;call&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;t2&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;timing&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;append&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;t2&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;t1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; += &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;sleep&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; = &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &amp;lt; &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;runs&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;:
  &lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;%g&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; % &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;timing&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
  &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; += &lt;/span&gt;&lt;span class=&quot;hl-number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
 
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;mean: %g&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; % &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;mean&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;timing&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-string&quot;&gt;sanatized mean: %g&lt;/span&gt;&lt;span class=&quot;hl-quotes&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; % &lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;san_mean&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;hl-identifier&quot;&gt;timing&lt;/span&gt;&lt;span class=&quot;hl-brackets&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;hl-reserved&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;hl-code&quot;&gt; &lt;/span&gt;&lt;span class=&quot;hl-comment&quot;&gt;#linha em branco&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pode-se questionar a necessidade dos sleeps, mas fiz assim para que o processo de carregar o python não interferisse nos resultados, e para que uma execução não interferisse na outra.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 26 Mar 2009 13:22:04 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Um pequeno script que fiz em python. Para usá-lo, rode:</p> <div class="code"> <pre> <code>python time-it.py &lt;número de vezes&gt; &lt;comando&gt;</code> </pre></div> <p>Por exemplo, para saber a média de se executar <tt>a.out</tt> 5 vezes:</p> <div class="code"> <pre> <code>python time-it.py 5 ./a.out</code> </pre></div> <p>Ele calcula o tempo que demorou para executar o comando e depois calcula uma média aritmética e uma média desconsiderando o valor mais alto e o mais baixo.</p> <h1><span>O Código</span></h1> <div class="code"> <div class="hl-main"> <pre> <span class="hl-comment">#!/usr/bin/env python</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">time</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">sys</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">subprocess</span><span class="hl-code"> </span><span class="hl-reserved">import</span><span class="hl-code"> </span><span class="hl-identifier">math</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-code"> </span><span class="hl-builtin">len</span><span class="hl-brackets">(</span><span class="hl-identifier">sys</span><span class="hl-code">.</span><span class="hl-identifier">argv</span><span class="hl-brackets">)</span><span class="hl-code"> &lt; </span><span class="hl-number">3</span><span class="hl-code">: </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string">time-it.py &lt;num of runs&gt; &lt;what to run&gt;</span><span class="hl-quotes">"</span><span class="hl-code"> </span><span class="hl-identifier">exit</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">runs</span><span class="hl-code"> = </span><span class="hl-builtin">int</span><span class="hl-brackets">(</span><span class="hl-identifier">sys</span><span class="hl-code">.</span><span class="hl-identifier">argv</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">])</span><span class="hl-code"> </span><span class="hl-identifier">command</span><span class="hl-code"> = </span><span class="hl-identifier">sys</span><span class="hl-code">.</span><span class="hl-identifier">argv</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-code">:</span><span class="hl-brackets">]</span><span class="hl-code"> </span><span class="hl-reserved">def</span><span class="hl-code"> </span><span class="hl-identifier">mean</span><span class="hl-brackets">(</span><span class="hl-identifier">lst</span><span class="hl-brackets">)</span><span class="hl-code">: </span><span class="hl-reserved">global</span><span class="hl-code"> </span><span class="hl-identifier">runs</span><span class="hl-code"> </span><span class="hl-identifier">return</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">math</span><span class="hl-code">.</span><span class="hl-identifier">fsum</span><span class="hl-brackets">(</span><span class="hl-identifier">lst</span><span class="hl-brackets">)</span><span class="hl-code"> / </span><span class="hl-builtin">float</span><span class="hl-brackets">(</span><span class="hl-identifier">runs</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-reserved">def</span><span class="hl-code"> </span><span class="hl-identifier">san_mean</span><span class="hl-brackets">(</span><span class="hl-identifier">lst</span><span class="hl-brackets">)</span><span class="hl-code">: </span><span class="hl-reserved">global</span><span class="hl-code"> </span><span class="hl-identifier">runs</span><span class="hl-code"> </span><span class="hl-identifier">lst</span><span class="hl-code">.</span><span class="hl-identifier">sort</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">return</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">math</span><span class="hl-code">.</span><span class="hl-identifier">fsum</span><span class="hl-brackets">(</span><span class="hl-identifier">lst</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-code">:-</span><span class="hl-number">1</span><span class="hl-brackets">])</span><span class="hl-code"> / </span><span class="hl-builtin">float</span><span class="hl-brackets">(</span><span class="hl-identifier">runs</span><span class="hl-code">-</span><span class="hl-number">2</span><span class="hl-brackets">))</span><span class="hl-code"> </span><span class="hl-identifier">time</span><span class="hl-code">.</span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">2</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code"> </span><span class="hl-identifier">timing</span><span class="hl-code"> = </span><span class="hl-brackets">[]</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> &lt; </span><span class="hl-identifier">runs</span><span class="hl-code">: </span><span class="hl-identifier">t1</span><span class="hl-code"> = </span><span class="hl-identifier">time</span><span class="hl-code">.</span><span class="hl-identifier">time</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">subprocess</span><span class="hl-code">.</span><span class="hl-identifier">call</span><span class="hl-brackets">(</span><span class="hl-identifier">command</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">t2</span><span class="hl-code"> = </span><span class="hl-identifier">time</span><span class="hl-code">.</span><span class="hl-identifier">time</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-identifier">timing</span><span class="hl-code">.</span><span class="hl-identifier">append</span><span class="hl-brackets">(</span><span class="hl-identifier">t2</span><span class="hl-code">-</span><span class="hl-identifier">t1</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> += </span><span class="hl-number">1</span><span class="hl-code"> </span><span class="hl-identifier">time</span><span class="hl-code">.</span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code"> </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string"> </span><span class="hl-quotes">"</span><span class="hl-code">.</span><span class="hl-identifier">join</span><span class="hl-brackets">(</span><span class="hl-identifier">command</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">while</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> &lt; </span><span class="hl-identifier">runs</span><span class="hl-code">: </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string">%g</span><span class="hl-quotes">"</span><span class="hl-code"> % </span><span class="hl-identifier">timing</span><span class="hl-brackets">[</span><span class="hl-identifier">count</span><span class="hl-brackets">]</span><span class="hl-code"> </span><span class="hl-identifier">count</span><span class="hl-code"> += </span><span class="hl-number">1</span><span class="hl-code"> </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string">mean: %g</span><span class="hl-quotes">"</span><span class="hl-code"> % </span><span class="hl-identifier">mean</span><span class="hl-brackets">(</span><span class="hl-identifier">timing</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-quotes">"</span><span class="hl-string">sanatized mean: %g</span><span class="hl-quotes">"</span><span class="hl-code"> % </span><span class="hl-identifier">san_mean</span><span class="hl-brackets">(</span><span class="hl-identifier">timing</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-reserved">print</span><span class="hl-code"> </span><span class="hl-comment">#linha em branco</span> </pre></div> </div> <p>Pode-se questionar a necessidade dos sleeps, mas fiz assim para que o processo de carregar o python não interferisse nos resultados, e para que uma execução não interferisse na outra.</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/c:threads</guid>
				<title>Threads</title>
				<link>http://aleteia.wikidot.com/c:threads</link>
				<description>

&lt;table style=&quot;margin:0; padding:0&quot;&gt;
&lt;tr&gt;
&lt;td style=&quot;margin:0; padding:0&quot;&gt;
&lt;div id=&quot;toc&quot;&gt;
&lt;div id=&quot;toc-action-bar&quot;&gt;&lt;a href=&quot;javascript:;&quot;  &gt;fold&lt;/a&gt;&lt;a style=&quot;display: none&quot; href=&quot;javascript:;&quot;  &gt;unfold&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;title&quot;&gt;Table of Contents&lt;/div&gt;
&lt;div id=&quot;toc-list&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Thu, 26 Mar 2009 13:13:14 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <table style="margin:0; padding:0"> <tr> <td style="margin:0; padding:0"> <div id="toc"> <div id="toc-action-bar"><a href="javascript:;" >fold</a><a style="display: none" href="javascript:;" >unfold</a></div> <div class="title">Table of Contents</div> <div id="toc-list"> <div style="margin-left: 1em;"><a href="#toc0">Pthreads</a></div> <div style="margin-left: 2em;"><a href="#toc1">Tipos e funções</a></div> <div style="margin-left: 2em;"><a href="#toc2">Implementação</a></div> <div style="margin-left: 3em;"><a href="#toc3">fac</a></div> <div style="margin-left: 3em;"><a href="#toc4">main</a></div> <div style="margin-left: 2em;"><a href="#toc5">Compilando</a></div> </div> </div> </td> </tr> </table> <p>Usando <em>threads</em> podemos dividir o trabalho entre os dois ou mais processadores que estivermos usando. De maneira geral, o uso delas é bastante simples, os problemas só aparecem quando uma <em>thread</em> depende do resultado de outra, ou então as duas estão acessando o mesmo recurso (uma conexão a um banco de dados, por exemplo).</p> <h1><span>Pthreads</span></h1> <p><tt>Pthreads</tt> são as <em>threads</em> como especificadas pelo padrão POSIX. Aqui veremos apenas um exemplo simples de como usá-las, mas dá para pegar a idéia geral de como utilizá-las.</p> <h2><span>Tipos e funções</span></h2> <p>Aqui só usaremos um tipo de variável e duas funções, mas é claro que as <tt>pthreads</tt> podem fazer muito mais que isso. O tipo que usaremos é o <tt>pthread_t</tt> que guarda informações sobre uma thread e as funções são <tt>pthread_create</tt> e <tt>pthread_join</tt>. A primeira cria uma nova <em>thread</em>, guardando informações sobre ela no seu primeiro argumento, lendo atributos do segundo (não os usaremos), chamando a função do terceiro argumento e passando o quarto argumento como argumento para função. A segunda associa o valor retornado por uma <em>thread</em> determinada pelo primeiro argumento no segundo argumento.</p> <h2><span>Implementação</span></h2> <p>A função que usei no caso foi o fatorial, simples e rápida, e por isso os detalhes relativos à implementação de threads ficam mais aparentes. Ei-la:</p> <div class="code"> <div class="hl-main"> <pre> <span class="hl-mlcomment">/* gcc -pthread */</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdio.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">pthread.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">unistd.h</span><span class="hl-quotes">&gt;</span><span class="hl-prepro"> /* sleep() */</span><span class="hl-code"> </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">3</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code">; </span><span class="hl-types">void</span><span class="hl-code"> *</span><span class="hl-identifier">fac</span><span class="hl-brackets">(</span><span class="hl-types">void</span><span class="hl-code"> *</span><span class="hl-identifier">arg</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> *</span><span class="hl-identifier">args</span><span class="hl-code"> = </span><span class="hl-identifier">arg</span><span class="hl-code">; </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> *</span><span class="hl-identifier">result</span><span class="hl-code"> = </span><span class="hl-identifier">malloc</span><span class="hl-brackets">(</span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">i</span><span class="hl-code">; </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">1</span><span class="hl-code">; </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">1</span><span class="hl-code">; </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">1</span><span class="hl-code">; </span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-identifier">args</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> &gt; </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">--</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> *= </span><span class="hl-identifier">i</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-identifier">args</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> &gt; </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">--</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> *= </span><span class="hl-identifier">i</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-identifier">args</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code"> &gt; </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">i</span><span class="hl-code">--</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> *= </span><span class="hl-identifier">i</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">result</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-brackets">((</span><span class="hl-types">void</span><span class="hl-code"> *</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-identifier">result</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> </span><span class="hl-identifier">arg1</span><span class="hl-code">; </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> </span><span class="hl-identifier">arg2</span><span class="hl-code">; </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> *</span><span class="hl-identifier">res1</span><span class="hl-code">; </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">nums</span><span class="hl-code"> *</span><span class="hl-identifier">res2</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">ret</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">pthread_t</span><span class="hl-code"> </span><span class="hl-identifier">thread1</span><span class="hl-code">, </span><span class="hl-identifier">thread2</span><span class="hl-code">; </span><span class="hl-identifier">arg1</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">5</span><span class="hl-code">; </span><span class="hl-identifier">arg1</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">15</span><span class="hl-code">; </span><span class="hl-identifier">arg1</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">12</span><span class="hl-code">; </span><span class="hl-identifier">arg2</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">7</span><span class="hl-code">; </span><span class="hl-identifier">arg2</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">8</span><span class="hl-code">; </span><span class="hl-identifier">arg2</span><span class="hl-code">.</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">10</span><span class="hl-code">; </span><span class="hl-identifier">pthread_create</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">thread1</span><span class="hl-code">, </span><span class="hl-prepro">NULL</span><span class="hl-code">, &amp;</span><span class="hl-identifier">fac</span><span class="hl-code">, &amp;</span><span class="hl-identifier">arg1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">pthread_create</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">thread2</span><span class="hl-code">, </span><span class="hl-prepro">NULL</span><span class="hl-code">, &amp;</span><span class="hl-identifier">fac</span><span class="hl-code">, &amp;</span><span class="hl-identifier">arg2</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">ret</span><span class="hl-code"> = </span><span class="hl-identifier">pthread_join</span><span class="hl-brackets">(</span><span class="hl-identifier">thread1</span><span class="hl-code">, </span><span class="hl-brackets">(</span><span class="hl-types">void</span><span class="hl-code"> *</span><span class="hl-brackets">)</span><span class="hl-code"> &amp;</span><span class="hl-identifier">res1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">ret</span><span class="hl-code"> == </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">returned: %d, %d, %d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">res1</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">res1</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">res1</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">ret</span><span class="hl-code"> = </span><span class="hl-identifier">pthread_join</span><span class="hl-brackets">(</span><span class="hl-identifier">thread2</span><span class="hl-code">, </span><span class="hl-brackets">(</span><span class="hl-types">void</span><span class="hl-code"> *</span><span class="hl-brackets">)</span><span class="hl-code"> &amp;</span><span class="hl-identifier">res2</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">ret</span><span class="hl-code"> == </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">returned: %d, %d, %d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">res2</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">res2</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">, </span><span class="hl-identifier">res2</span><span class="hl-code">-&gt;</span><span class="hl-identifier">num</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">])</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">return</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span> </pre></div> </div> <h3><span><tt>fac</tt></span></h3> <p>Temos uma função <tt>fac</tt> que aceita um argumento do tipo <tt>void*</tt> e que retorna um valor do tipo <tt>void*</tt>. Infelizmente, até onde sei, não há como passar mais argumentos, então, se for necessário, o melhor é usar uma <tt>struct</tt>, como eu fiz.</p> <p>A “pegadinha” aqui são esses <tt>void*</tt>s. Uma função do tipo <tt>void</tt> não retorna nada, logo, devemos supor, <tt>void*</tt> é um ponteiro que aponta para nada, ou seja, se ele aponta para nada, ele não aponta, então não é um ponteiro. Ele é o ponteiro que é e não é ao mesmo tempo.</p> <p>Mentira, um <tt>void*</tt> é um ponteiro para qualquer coisa, <tt>int</tt>, <tt>char</tt>, um <tt>struct</tt> qualquer, por isso que o usamos neste caso.</p> <p>Então temos o código em si do fatorial e depois um <tt>sleep()</tt>. O motivo pelo qual o coloquei é que quando escrevi o código eu não tinha um processador <em>dual-core</em>, então eu não teria como saber se as <em>threads</em> estão sendo executadas simultaneamente. Com o <tt>sleep()</tt>, como elas não fazem nada enquanto dormem, uma thread pode calcular o fatorial enquanto a outra dorme.</p> <p>E por último, temos que retornar o valor, mas como o tipo da função é <tt>void*</tt> e não <tt>struct nums*</tt>, temos que fazer um <em>cast</em>, uma mudança de tipo. Por isso aquele <tt>(void *)</tt> dentro de <tt>return()</tt>.</p> <h3><span><tt>main</tt></span></h3> <p>Na função <tt>main()</tt>, a primeira coisa que merece destaque é o <tt>pthread_t</tt>. Como eu falei antes, são eles que vão guardar informações sobre as <em>threads</em>.</p> <p>Depois, temos a chamada de <tt>pthread_create()</tt>. Os argumentos são <tt>&amp;thread1</tt>, que é um <tt>pthread_t</tt>, <tt>NULL</tt>, já que não vamos passar “opções” na hora de criar a <em>thread</em>, <tt>&amp;fac</tt> que é a nossa função e <tt>&amp;arg1</tt> que é nossa <tt>struct</tt> com os argumentos. Fazemos basicamente a mesma coisa de novo, mas agora com a segunda <em>thread</em>.</p> <p>Depois, nós pegamos os valores retornados pelas <em>threads</em> com <tt>pthread_join</tt>. O valor que ela retorna, no caso “<tt>ret</tt>” é para sabermos se houve erro ou não. O primeiro argumento é a <em>thread</em> que queremos (mas sem o <tt>&amp;</tt> agora) e onde o valor de retorno será guardado, no caso, em <tt>res1</tt>.</p> <h2><span>Compilando</span></h2> <p>No fim, para compilar:</p> <div class="code"> <pre> <code>gcc arquivo.c -pthread</code> </pre></div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/sobre</guid>
				<title>Sobre</title>
				<link>http://aleteia.wikidot.com/sobre</link>
				<description>

&lt;p&gt;Aletéia significa “Via/Caminho da verdade” em grego e aqui no blog/wiki postarei coisas de assuntos variados que eu achar interessante, espero que gostem.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 20:34:57 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Aletéia significa “Via/Caminho da verdade” em grego e aqui no blog/wiki postarei coisas de assuntos variados que eu achar interessante, espero que gostem.</p> <p>Falando sobre mim, nasci em 1990 e acabei de ingressar na faculdade de Engenharia Elétrica. Meu interesse por dispositivos eletrônicos começou quando eu era pequeno e abria coisas para ver como funcionavam. Isso não significa, é claro, que elas sempre voltavam a funcionar depois ;) . Já nessa época eu me interessava por computadores também, mas na época eu estava mais interessado em jogos.</p> <p>Meu interesse por ambos aumentou quando comecei a tocar guitarra, com 11 anos. A causa mais direta é guitarras dependerem de equipamentos elétricos para funcionarem completamente. Além disso, alguns anos depois, descobri simuladores de amplificadores para guitarra no computador. Insatisfeito com a qualidade das simulações, resolvi aprender a programar. Você deve estar se perguntando “E aí? Conseguiu fazer uma melhor?”. Bom… não. Mas também nem tentei.</p> <p>Aprendendo programação, apareceram outros interesses. Um dos mais importantes é o Linux, que tornou-se meu único SO há dois anos. Comecei com o Slackware, mas a falta de um gerenciador de pacotes mais avançado me fez buscar outra distro. Hoje uso o Archlinux e sei umas tantas linguagens (as que sei melhor: python, C e lisp).</p> <p>Além disso, me interesso por línguas (humanas), em especial as que não usam o alfabeto latino. No momento, falo bem português e inglês e estudo francês. Sei algumas poucas coisas de russo e japonês também.</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:new-thread</guid>
				<title>New Forum Thread</title>
				<link>http://aleteia.wikidot.com/forum:new-thread</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:recent-threads</guid>
				<title>Recent Threads</title>
				<link>http://aleteia.wikidot.com/forum:recent-threads</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:recent-posts</guid>
				<title>Recent Forum Posts</title>
				<link>http://aleteia.wikidot.com/forum:recent-posts</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:category</guid>
				<title>Forum Category</title>
				<link>http://aleteia.wikidot.com/forum:category</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:start</guid>
				<title>Forum Categories</title>
				<link>http://aleteia.wikidot.com/forum:start</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/forum:thread</guid>
				<title>Forum Thread</title>
				<link>http://aleteia.wikidot.com/forum:thread</link>
				<description>


&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:58:35 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/c:daemon</guid>
				<title>Escrevendo um Daemon</title>
				<link>http://aleteia.wikidot.com/c:daemon</link>
				<description>

&lt;p&gt;Um pequeno código mostrando como criar um programa que roda no &lt;em&gt;background&lt;/em&gt;, ou seja, um &lt;em&gt;daemon&lt;/em&gt;. O código de exemplo se &quot;desprende&quot; do terminal chamando a função &lt;tt&gt;daemon()&lt;/tt&gt; e então escreve os números de 1 a 10&amp;nbsp;em um arquivo no &lt;tt&gt;/tmp&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:50:58 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Um pequeno código mostrando como criar um programa que roda no <em>background</em>, ou seja, um <em>daemon</em>. O código de exemplo se "desprende" do terminal chamando a função <tt>daemon()</tt> e então escreve os números de 1 a 10&nbsp;em um arquivo no <tt>/tmp</tt>.</p> <div class="code"> <div class="hl-main"> <pre> <span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdio.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">unistd.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">i</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">FILE</span><span class="hl-code"> *</span><span class="hl-identifier">fptr</span><span class="hl-code"> = </span><span class="hl-identifier">fopen</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">/tmp/daemon-test</span><span class="hl-quotes">"</span><span class="hl-code">,</span><span class="hl-quotes">"</span><span class="hl-string">w</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">daemon</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-code">, </span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">for</span><span class="hl-brackets">(</span><span class="hl-code">;</span><span class="hl-identifier">i</span><span class="hl-code">&lt;</span><span class="hl-number">11</span><span class="hl-code">;</span><span class="hl-identifier">i</span><span class="hl-code">++</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">fprintf</span><span class="hl-brackets">(</span><span class="hl-identifier">fptr</span><span class="hl-code">,</span><span class="hl-quotes">"</span><span class="hl-string">%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">,</span><span class="hl-identifier">i</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">sleep</span><span class="hl-brackets">(</span><span class="hl-number">10</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">fclose</span><span class="hl-brackets">(</span><span class="hl-identifier">fptr</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span> </pre></div> </div> <p>O primeiro argumento da função <tt>daemon()</tt> determina o diretório ativo: se for 0, o diretório será o <tt>/</tt>; qualquer outro número será o diretório em que o daemon foi iniciado. O segundo argumento determina o que será feito com as saídas e entradas (<tt>stdin</tt>, <tt>stdout</tt> e <tt>stderr</tt>): 0 as redireciona para <tt>/dev/null</tt> e qualquer valor não nulo não as redireciona.</p> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
					<item>
				<guid>http://aleteia.wikidot.com/c:calculadora-rpn</guid>
				<title>Calculadora com Notação Polonesa Reversa</title>
				<link>http://aleteia.wikidot.com/c:calculadora-rpn</link>
				<description>

&lt;p&gt;Esta é a implementação de uma calculadora que funciona com Notação Polonesa Reversa. Ela é bastante simples, só funciona com inteiros e possui apenas as quatro operações aritméticas básicas, mas serve para mostrar como funciona. Para implementá-la, usei a biblioteca &lt;tt&gt;termios.h&lt;/tt&gt;, especificada pelo padrão POSIX, então esse código provavelmente funciona em BSDs, Linux e Mac OS X. Não posso garantir que vá funcionar com o Windows, e o código só foi testado no Linux.&lt;/p&gt;
&lt;p&gt;by &lt;span class=&quot;printuser avatarhover&quot;&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;&lt;!--[if gte IE 7]&gt;&lt;!--&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common--images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;background-image:url(http://www.wikidot.com/userkarma.php?u=303441)&quot; /&gt;&lt;!--&lt;![endif]--&gt;&lt;!--[if lt IE 7]&gt;&lt;img class=&quot;small&quot; src=&quot;http://www.wikidot.com/common&amp;#45;&amp;#45;images/avatars/303/303441/a16.png&quot; alt=&quot;Andre Ramaciotti&quot; style=&quot;filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod=&#039;scale&#039;)&quot;/&gt;&lt;![endif]--&gt;&lt;/a&gt;&lt;a href=&quot;http://www.wikidot.com/user:info/andre-ramaciotti&quot;  &gt;Andre Ramaciotti&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 25 Mar 2009 19:02:41 +0000</pubDate>
												<content:encoded>
					<![CDATA[
						 <p>Esta é a implementação de uma calculadora que funciona com Notação Polonesa Reversa. Ela é bastante simples, só funciona com inteiros e possui apenas as quatro operações aritméticas básicas, mas serve para mostrar como funciona. Para implementá-la, usei a biblioteca <tt>termios.h</tt>, especificada pelo padrão POSIX, então esse código provavelmente funciona em BSDs, Linux e Mac OS X. Não posso garantir que vá funcionar com o Windows, e o código só foi testado no Linux.</p> <p>Para uma calculadora RPN 100% funcional, recomendo a <tt>galculator</tt>, em GTK+.</p> <div class="code"> <div class="hl-main"> <pre> <span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdio.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">stdlib.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">unistd.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#include </span><span class="hl-quotes">&lt;</span><span class="hl-string">termios.h</span><span class="hl-quotes">&gt;</span><span class="hl-code"> </span><span class="hl-prepro">#define</span><span class="hl-code"> </span><span class="hl-identifier">CTOI</span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">(</span><span class="hl-identifier">x</span><span class="hl-code">-</span><span class="hl-number">48</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">push_stack</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">stack</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">make_number</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">new_digit</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">get_char</span><span class="hl-brackets">(</span><span class="hl-types">void</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">do_operation</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">stack</span><span class="hl-code">, </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">operation</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">main</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">argc</span><span class="hl-code">, </span><span class="hl-types">char</span><span class="hl-code"> *</span><span class="hl-identifier">argv</span><span class="hl-brackets">[])</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> </span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-identifier">new_setting</span><span class="hl-code">; </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">pressed</span><span class="hl-code"> = '', </span><span class="hl-identifier">last</span><span class="hl-code"> = ''; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">current_number</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">3</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-string">Basic RPN Calculator. Press 'q' to quit.</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">while</span><span class="hl-brackets">(</span><span class="hl-identifier">pressed</span><span class="hl-code"> != '</span><span class="hl-identifier">q</span><span class="hl-code">'</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">last</span><span class="hl-code"> = </span><span class="hl-identifier">pressed</span><span class="hl-code">; </span><span class="hl-identifier">pressed</span><span class="hl-code"> = </span><span class="hl-identifier">get_char</span><span class="hl-brackets">()</span><span class="hl-code">; </span><span class="hl-reserved">switch</span><span class="hl-brackets">(</span><span class="hl-identifier">pressed</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">0</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">1</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">2</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">3</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">4</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">5</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">6</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">7</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">8</span><span class="hl-code">': </span><span class="hl-reserved">case</span><span class="hl-code"> '</span><span class="hl-number">9</span><span class="hl-code">': </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, &amp;</span><span class="hl-identifier">pressed</span><span class="hl-code">, </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">last</span><span class="hl-code"> == '+' || </span><span class="hl-identifier">last</span><span class="hl-code"> == '-' || </span><span class="hl-identifier">last</span><span class="hl-code"> == '*' || </span><span class="hl-identifier">last</span><span class="hl-code"> == '/'</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">push_stack</span><span class="hl-brackets">(</span><span class="hl-identifier">current_number</span><span class="hl-code">, </span><span class="hl-identifier">stack</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">current_number</span><span class="hl-code"> = </span><span class="hl-identifier">CTOI</span><span class="hl-brackets">(</span><span class="hl-identifier">pressed</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-reserved">if</span><span class="hl-brackets">(</span><span class="hl-identifier">last</span><span class="hl-code"> == '\</span><span class="hl-identifier">n</span><span class="hl-code">'</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">current_number</span><span class="hl-code"> = </span><span class="hl-identifier">CTOI</span><span class="hl-brackets">(</span><span class="hl-identifier">pressed</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-reserved">else</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">make_number</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">current_number</span><span class="hl-code">, </span><span class="hl-identifier">CTOI</span><span class="hl-brackets">(</span><span class="hl-identifier">pressed</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '\</span><span class="hl-identifier">n</span><span class="hl-code">': </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">write</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, &amp;</span><span class="hl-identifier">pressed</span><span class="hl-code">, </span><span class="hl-number">1</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">push_stack</span><span class="hl-brackets">(</span><span class="hl-identifier">current_number</span><span class="hl-code">, </span><span class="hl-identifier">stack</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '+': </span><span class="hl-reserved">case</span><span class="hl-code"> '-': </span><span class="hl-reserved">case</span><span class="hl-code"> '*': </span><span class="hl-reserved">case</span><span class="hl-code"> '/': </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">printf</span><span class="hl-brackets">(</span><span class="hl-quotes">"</span><span class="hl-special">\</span><span class="hl-string">n%c</span><span class="hl-special">\</span><span class="hl-string">t%d</span><span class="hl-special">\</span><span class="hl-string">n</span><span class="hl-quotes">"</span><span class="hl-code">, </span><span class="hl-identifier">pressed</span><span class="hl-code">, </span><span class="hl-identifier">do_operation</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">current_number</span><span class="hl-code">, </span><span class="hl-identifier">stack</span><span class="hl-code">, </span><span class="hl-identifier">pressed</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-code">, &amp;</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">default</span><span class="hl-code">: </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-code">&amp;</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-brackets">(</span><span class="hl-number">0</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">silent</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-code">, </span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">tcgetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code"> = </span><span class="hl-identifier">init_setting</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_lflag</span><span class="hl-code"> &amp;= ~</span><span class="hl-brackets">(</span><span class="hl-identifier">ICANON</span><span class="hl-code"> | </span><span class="hl-identifier">ECHO</span><span class="hl-code"> | </span><span class="hl-identifier">ISIG</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_cc</span><span class="hl-brackets">[</span><span class="hl-identifier">VMIN</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">1</span><span class="hl-code">; </span><span class="hl-identifier">new_setting</span><span class="hl-code">-&gt;</span><span class="hl-identifier">c_cc</span><span class="hl-brackets">[</span><span class="hl-identifier">VTIME</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-identifier">tcsetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">TCSADRAIN</span><span class="hl-code">, </span><span class="hl-identifier">new_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">verbose</span><span class="hl-brackets">(</span><span class="hl-types">struct</span><span class="hl-code"> </span><span class="hl-identifier">termios</span><span class="hl-code"> *</span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">tcsetattr</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, </span><span class="hl-identifier">TCSADRAIN</span><span class="hl-code">, </span><span class="hl-identifier">init_setting</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">push_stack</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">stack</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">number</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">void</span><span class="hl-code"> </span><span class="hl-identifier">make_number</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">new_digit</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> *</span><span class="hl-identifier">number</span><span class="hl-code"> = </span><span class="hl-brackets">(</span><span class="hl-code">*</span><span class="hl-identifier">number</span><span class="hl-code">*</span><span class="hl-number">10</span><span class="hl-brackets">)</span><span class="hl-code"> + </span><span class="hl-identifier">new_digit</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">get_char</span><span class="hl-brackets">()</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code">; </span><span class="hl-identifier">read</span><span class="hl-brackets">(</span><span class="hl-identifier">fileno</span><span class="hl-brackets">(</span><span class="hl-identifier">stdin</span><span class="hl-brackets">)</span><span class="hl-code">, &amp;</span><span class="hl-identifier">ch</span><span class="hl-code">, </span><span class="hl-reserved">sizeof</span><span class="hl-brackets">(</span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-brackets">))</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-code"> </span><span class="hl-identifier">ch</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-types">int</span><span class="hl-code"> </span><span class="hl-identifier">do_operation</span><span class="hl-brackets">(</span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">number</span><span class="hl-code">, </span><span class="hl-types">int</span><span class="hl-code"> *</span><span class="hl-identifier">stack</span><span class="hl-code">, </span><span class="hl-types">unsigned</span><span class="hl-code"> </span><span class="hl-types">char</span><span class="hl-code"> </span><span class="hl-identifier">operation</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">switch</span><span class="hl-brackets">(</span><span class="hl-identifier">operation</span><span class="hl-brackets">)</span><span class="hl-code"> </span><span class="hl-brackets">{</span><span class="hl-code"> </span><span class="hl-reserved">case</span><span class="hl-code"> '+': *</span><span class="hl-identifier">number</span><span class="hl-code"> = *</span><span class="hl-identifier">number</span><span class="hl-code"> + </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '-': *</span><span class="hl-identifier">number</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> - *</span><span class="hl-identifier">number</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '*': *</span><span class="hl-identifier">number</span><span class="hl-code"> = *</span><span class="hl-identifier">number</span><span class="hl-code"> * </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-reserved">case</span><span class="hl-code"> '/': *</span><span class="hl-identifier">number</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> / *</span><span class="hl-identifier">number</span><span class="hl-code">; </span><span class="hl-reserved">break</span><span class="hl-code">; </span><span class="hl-brackets">}</span><span class="hl-code"> </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">0</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">1</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code">; </span><span class="hl-identifier">stack</span><span class="hl-brackets">[</span><span class="hl-number">2</span><span class="hl-brackets">]</span><span class="hl-code"> = </span><span class="hl-number">0</span><span class="hl-code">; </span><span class="hl-reserved">return</span><span class="hl-brackets">(</span><span class="hl-code">*</span><span class="hl-identifier">number</span><span class="hl-brackets">)</span><span class="hl-code">; </span><span class="hl-brackets">}</span> </pre></div> </div> <p>by <span class="printuser avatarhover"><a href="http://www.wikidot.com/user:info/andre-ramaciotti" ><!--[if gte IE 7]><!--><img class="small" src="http://www.wikidot.com/common--images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="background-image:url(http://www.wikidot.com/userkarma.php?u=303441)" /><!--<![endif]--><!--[if lt IE 7]><img class="small" src="http://www.wikidot.com/common&#45;&#45;images/avatars/303/303441/a16.png" alt="Andre Ramaciotti" style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=http://www.wikidot.com/userkarma.php?u=303441,sizingMethod='scale')"/><![endif]--></a><a href="http://www.wikidot.com/user:info/andre-ramaciotti" >Andre Ramaciotti</a></span></p> 
				 	]]>
				</content:encoded>							</item>
				</channel>
</rss>