Javascript strict mode

November 2nd, 2012 No comments

Simple way to implement safe use of strict mode…


var MyObject = ( // Safe strict mode
	(function() {"use strict"; return !this; })() ?

// JavaScript strict mode code
(function () {"use strict";
	this.isStrict=true;
}):

// JavaScript normal code
(function () {
	this.isStrict=true;
})

);

var o = new MyObject();
o.isStrict //=> ?
Categories: Informática, Outros Tags:

Esquematizando saberes

May 9th, 2012 No comments

Meu jeito de sistematizar a relação entre os saberes… É um esquema puramente didático já que há na verdade um continuum entre eles. Nenhuma posição do diagrama supõe hierarquia de algum saber, mas interdependência. As ciências/saberes/disciplinas não citadas estariam embutidas em algum lugar dentro (ou fora) do tetraedro de acordo com a proximidade de algum desses pontos que elegi, quase que arbitrariamente, como notáveis.

  • Se agruparia em Lógicas as técnicas para formalizar numa linguagem o processo do raciocínio de modo a tornar verificável cada uma de suas etapas (em geral e também com algumas especificidades notáveis).
  • Em Físicas, a formalização/esquematização dos padrões do mundo real em (ou apoiando-se em) linguagem matemática com rigor lógico.
  • Em Matemáticas, a coletânea formalizada de artifícios linguísticos (e/ou composições abstratas) para lidar com rigor lógico com as necessidades de outros saberes (a partir da emergência histórica, mas não se limitando a ela) e da vida prática.
  • Em Engenharias, coletânea de artifícios pragmáticos/genéricos para usar de modo eficaz os demais saberes para finalidades humanas.
  • Em Humanas, a coletânea de composições esquemáticas concisas dos mais relevantes atributos e processos humanos em diversos escopos (quantitativos/qualitativos, históricos/atuais, específicos/genéricos) de modo a explicar e promover a melhor lida do gênero humano consigo mesmo (e outras formas de vida).

Em suma: linguagens, clareza no uso de linguagens (+metalinguagens), o ambiente transladado para a linguagem, e o sujeito na relação consigo mesmo (e com outros sujeitos) e com o ambiente via – adivinhe… – linguagem.

[As definições circulares são propositais, pois se referem a extremidades da estrutura. A maior parte do saber com conteúdo epistêmico está embutido na relação com essas extremidades, mas omitidos no diagrama. O diagrama ilustra uma estrutura (com algum conteúdo) a ser preenchida por diversos conteúdos. Por exemplo: Físicas, seguindo uma noção mais ou menos Aristotélica, tem Química como uma especialidade sua (mas, ligada às Engenharias), a Economia seria algo entre Engenharias e Matemáticas etc].

Categories: Filosofia Tags:

Como computadores enlouquecem (AI)

January 15th, 2012 No comments

[Publicação de brainstorm, não texto argumentativo]

Ontem entendi por acidente porque o sujeito “enlouquece” numa solitária (enquanto pensava sobre inteligência artificial).

Partindo de onde achei a coisa… O que aconteceria com dois AI-bots conversando entre si se o pensamento deles tivesse funcionamento semelhante ao nosso e eles não tivessem mais acesso a dados do mundo real?

Antes, deixe-me expor um ponto. O pensamento é criativo… Se você puser um macaco com fome num ambiente com uma banana suspensa e uma cadeira disposta perto, ele fatalmente vai usar a cadeira para alcançar a banana. Apesar de ser uma ideia muito simples, o poder computacional necessário para se fazer a mesma coisa seria enorme… [A não ser obviamente que fosse um programa específico para alcançar objetos em lugares altos usando-se elementos disponíveis no chão, né? Digo um meta-algoritmo geral]. Não há qualquer ligação entre o significado de banana e o de cadeira que pudesse ser aproveitada num raciocínio analítico (fora alguma galhofa que você quiser pensar) para que o resultado fosse calculado de modo simples. É um flagrante do pensamento que extrapola a experiência. [Tenho suspeitas de como isso se dá, mas seria material de outro post. Deixemos amadurecer mais...].

A questão é: se o pensamento tem um algoritmo criativo [vai além da mera compreensão dos objetos ao redor] podendo inclusive simular ambientes físicos e verificar a viabilidade de se executar uma ação num ambiente imaginário, como impedir que o pensamento continue criando independentemente da realidade levando o sujeito/bot à explosão arbitrária de raciocínios triviais? Noutras palavras, como calcular a economia do raciocínio?

Minha conclusão temporária é que a mente sempre raciocina e cria – com ou sem dados da realidade. Se alguém é privado da rica experiência da realidade, com o tempo, ela, na falta de dados exteriores, procura otimizar os dados que já tem. Mas isso tem um risco, pois se o sujeito tem uma visão equivocada sobre o mundo real essa idéia vai se tornar mais forte em cativeiro. Ou mesmo uma ideia verdadeira, mas de importância menor pode ganhar peso desproporcional quando o sujeito se expõe somente a ela.

Numa solitária, não há bastante dados sobre o mundo. Assim, a mente continua funcionando e criando sem eles levando o sujeito à loucura (temporária ou não) já que a mente começa a criar a partir apenas do vazio e do que já tem. Ocorre, então, um círculo vicioso do pensamento que degenera a mente quanto às suas funções normais.

Ah, sobre os AI-bots, creio que aconteceria o mesmo: enlouqueceriam – se eles não houverem sido melhor desenhados do que fomos nós pelo acaso.

Categories: Filosofia, Informática, Outros, Psicologia Tags:

Às meninas aladas

December 18th, 2011 No comments

Morou por tanto tempo dentro daquela flor que já não cria existir o lado de fora. Não havia um mundo, não havia outras fadas ou zangões, nem sequer havia outras flores; não no seu coração que se tornara pequenino, menor do que sua flor-morada.

Três alternativas: o nada, o absurdo e o tempo.

O nada é apenas a exclusão das demais: fuga abstrata para dentro de si, ou do vazio (os excessos da vida que transbordam pela figura da morte). O tempo, para ela, esterilizou-se… com o passar. Já não trazia novidade. Portanto, as duas opções se tornaram igualmente nulas. Daí o absurdo surgiu como a escolha mais lógica, ou a única. O absurdo aparece como a novidade que não pode ser reduzida à rearticulação das velhas coisas.

Se foi desabrochando na pequena fada a vontade de entrar no lado de fora. Até que, vacilante, rompeu por dentre as pétalas e encontrou as coisas reais: não eram nem um sonho nem um nada, mas interessantes.

Na verdade o sonho e o nada estavam nela – os podia criar quando quisesse -, mas as coisas e a gente estavam no mundo, bem como as novas possibilidades de anular ou sonhar.

Voou para procurar a si mesma em seu lago-natal – Lago dos Sátiros – e lá pôde encontrar o que buscava; ou retomar o que perdera; ou alcançar o novo: na imagem refletida. O mundo é o laço entre o nada e o sonho, entre esses meus dois lados – cogitou admirando-se.

Não é estranho? Porque preciso realizar algo para conquistar minha própria aprovação? …e preciso ir a algum lugar para recobrar minha própria identidade?

É absurdo… mas é real. Preciso de um espelho para me ver e de um mundo para viver. Não pode a gente fazer de si o próprio mundo – ou ver no mundo a pura continuação de si -, pois se recai sempre no calabouço da existência, na autofagia evolutiva,  na armadilha de Darwin e na necessidade da escolha que no meu caso, se acaba trancando por dentro. Só se pode transcender de algo, não do vazio, não de si, apenas. Pois o outro não é outra modalidade do mesmo. Se ambos: eu e o mundo, algo e o nada, o mundo e o nada fossem o mesmo, haveria ainda do que se esconder?

Mas a realidade não é estática como esse lago sereno, como revelação do que há para além do sujeito que observa e independentemente dele. A realidade (interessante) nasce da conjunção entre mim (e a gente) e o mundo. Como temeria encontrar meus pesadelos no mundo se eles já não estivessem em mim de algum modo? O mesmo se diz dos sonhos… Eu tenho as figuras desbotadas, mas a realidade as preenche com cores revitalizantes. Ela tem essa força que me escapa, a de arbitrar sem motivo. Já eu estou presa no sentido, não consigo escolher como a verdade se dá, como a realidade de doa, mas sim como desfruto o que vem.

O absurdo é: a coincidência entre o que é e o que não deveria ser; o terrível espetáculo do inesperado; o convite para o jogo compulsório do ser, sempre p’ra valer.

Então lembrou-se porque fora esconder-se na flor quando lhe ardeu o ciúme das ninfas e sátiros. Eles não voam, mas parecem completos, e parecem bem. O que é isso, o ciúme? Seria penetrar à felicidade alheia sem querer? Ou à aparência da felicidade alheia? Afinal, podem, eles, ser felizes sem mim? Se alguém for feliz sem mim, significa que falhei? Sentir isso é pior do que trancar-se novamente para sempre. Na verdade, sentir isso é justamente trancar-se para sempre… do lado de fora de si. Há saída?

Para todo lado, menos na direção que olho fixamente… De fato, a decisão de romper e sair permanece: jamais deixei a flor. Nesse instante, ela acorda e vê que não saiu mesmo. As pétalas iluminadas indicam o nascer do novo dia. Mas ela teme o mundo – ou teme jamais caber nele – e fica lá para sempre.

E é por isso que algumas flores nunca desabrocham, porque alguma fada esconde-se lá por ciúme em vez de voar.

- Daniel Mazza

Categories: Arte Tags:

Anonymous vs NATO (Otan)

June 15th, 2011 No comments

Pessoal, eis um fato digno de nota.

Recentemente um grupo de hackers ativistas chamados “Anonymous” (anônimos) foi considerado, pelo governo americano, “uma ameaça ao governo e ao povo” pois Anonymous cooperaram com a WikiLeaks sobre as informações secretas vazadas do governo americano.

Envio a vocês agora a maravilhosa resposta de Anonymous para OTAN:

Saudações, amigos da Otan. Nós somos a Anonymous

Em uma recente publicação, vocês destacaram o Anonymous como ameaça ao ‘governo e ao povo’. Vocês também alegaram que sigilo é ‘um mal necessário’ e que transparência nem sempre é o caminho certo a seguir.

O Anonymous gostaria de lembrá-los que o governo e o povo são, ao contrário do que dizem os supostos fundamentos da ‘democracia’, entidades distintas com objetivos e desejos conflitantes, às vezes. A posição do Anonymous é a de que, quando há um conflito de interesses entre o governo e as pessoas, é a vontade do povo que deve prevalecer.  A única ameaça que a transparência oferece aos governos é a ameaça da capacidade de os governos agirem de uma forma que as pessoas discordariam, sem ter que arcar com as consequências democráticas e a responsabilização por tal comportamento.

Seu próprio relatório cita um perfeito exemplo disso, o ataque do Anonymous à HBGary (empresa de tecnologia ligada ao governo norte-americano). Se a HBGary estava agindo em nome da segurança ou do ganho militar é irrelevante – suas ações foram ilegais e moralmente repreensíveis. O Anonymous não aceita que o governo e/ou  os militares tenham o direito de estar acima da lei e de usar o falso clichê da ‘segurança nacional’ para justificar atividades ilegais e enganosas. Se o governo deve quebrar as leis, ele deve também estar disposto a aceitar as consequências democráticas disso nas urnas. Nós não aceitamos o atual status quo em que um governo pode contar uma história para o povo e outra em particular. Desonestidade e sigilo comprometem completamente o conceito de auto governo. Como as pessoas podem julgar em quem votar se elas não estiverem completamente conscientes de quais políticas os políticos estão realmente seguindo?

Quando um governo é eleito, ele se diz ‘representante’ da nação que governa. Isso significa, essencialmente, que as ações de um governo não são as ações das pessoas do governo, mas que são ações tomadas em nome de cada cidadão daquele país. É inaceitável uma situação em que as pessoas estão, em muitos casos, totalmente não cientes do que está sendo dito e feito em seu nome – por trás de portas fechadas.

Anonymous e Wikileaks são entidades distintas. As ações do Anonymous não tiveram ajuda nem foram requisitadas pelo WikiLeaks. No entanto, Anonymous e WikiLeaks compartilham um atributo comum: eles não são uma ameaça a organização alguma – a menos que tal organização esteja fazendo alguma coisa errada e tentando fugir dela.

Nós não desejamos ameaçar o jeito de viver de ninguém. Nós não desejamos ditar nada a ninguém. Nós não desejamos aterrorizar qualquer nação.

Nós apenas queremos tirar o poder investido e dá-lo de volta ao povo – que, em uma democracia, nunca deveria ter perdido isso, em primeiro lugar.

O governo faz a lei. Isso não dá a eles o direito de violá-las. Se o governo não estava fazendo nada clandestinamente ou ilegal, não haveria nada ‘embaraçoso’ sobre as revelações do WikiLeaks, nem deveria haver um escândalo vindo da HBGary. Os escândalos resultantes não foram um resultado das revelações do Anonymous ou  do WikiLeaks, eles foram um resultado do conteúdo dessas revelações. E a responsabilidade pelo conteúdo deve recair somente na porta dos políticos que, como qualquer entidade corrupta, ingenuinamente acreditam que estão acima da lei e que não seriam pegos.

Muitos comentários do governo e das empresas estão sendo dedicados a “como eles podem evitar tais vazamentos no futuro”. Tais recomendações vão desde melhorar a segurança, até baixar os níveis de autorização de acesso a informações; desde de penas mais duras para os denunciantes, até a censura à imprensa.

Nossa mensagem é simples: não mintam para o povo e vocês não terão que se preocupar sobre suas mentiras serem expostas. Não façam acordos corruptos que vocês não terão que se preocupar sobre sua corrupção sendo desnudada. Não violem as regras e vocês não terão que se preocupar com os apuros que enfrentarão por causa disso.

Não tentem consertar suas duas caras escondendo uma delas. Em vez disso, tentem ter só um rosto – um honesto, aberto e democrático.

Vocês sabem que vocês não nos temem porque somos uma ameaça para a sociedade. Vocês nos temem porque nós somos uma ameaça à hierarquia estabelecida. O Anonymous vem provando nos últimos que uma hierarquia não é necessária para se atingir o progresso – talvez o que vocês realmente temam em nós seja a percepção de sua própria irrelevância em uma era em que a dependência em vocês foi superada. Seu verdadeiro terror não está em um coletivo de ativistas, mas no fato de que vocês e tudo aquilo que vocês defendem, pelas mudanças e pelo avanço da tecnologia, são, agora, necessidades excedentes.

Finalmente, não cometam o erro de desafiar o Anonymous. Não cometam o erro de acreditar que vocês podem cortar a cabeça de uma cobra decapitada. Se você corta uma cabeça da Hidra, dez outras cabeças irão crescer em seu lugar. Se você cortar um Anon, dez outros irão se juntar a nós  por pura raiva de vocês atropelarem que se coloca contra vocês.
Sua única chance de enfrentar o movimento que une todos nós é aceitá-lo. Esse não é mais o seu mundo. É nosso mundo – o mundo do povo.

Somos o Anonymous.
Somos uma legião.
Não perdoamos.
Não esquecemos.
Esperem por nós…

Fontes:

http://blogs.estadao.com.br/link/do-anonymous-para-a-otan/
http://anonnews.org/?p=press&a=item&i=1001

PS: Nesse momento anonnews.org está fora do ar… Parece que alguém está procurando problema, rsrs.

Categories: Outros Tags:

Singelo retorno ao desenho

May 17th, 2011 5 comments

Desde pequeno que não desenho mais. Dá vontade de voltar a desenhar…

Categories: Arte Tags:

Go no GCC (golang.org)

March 29th, 2011 No comments

É isso mesmo! A linguagem Go foi incluída no GCC 4.6 (GNU Compiler Collection). Isso significa que subiu oficialmente ao hall das importantes linguagens mundiais, principalmente das open-source. Assim, virá na coleção padrão de compiladores do Linux e outros sistemas assim como já vinham C, C++, Objective-C, Java etc.

Eu esperava por isso já faz algum tempo, pois  creio ser bem merecido. Go é uma linguagem maravilhosa e tem tudo para – sem exagero – substituir com folga as grandes linguagens que temos no mercado! Eu sei que cada qual defende sua linguagem com unhas e dentes, mas se você considerar ponderadamente o que Go é, acho difícil que duvide do meu prognóstico.

Principais características:

  • É compilada para código de máquina (não bytecode) e de tipagem estática (validada em tempo de compilação), portanto sua velocidade é comparável à de C e a tendência é se tornar cada vez mais rápida por otimização em futuras releases.
  • É simples de aprender. A sintaxe é semelhante à de C de algum modo, mas muito mais afinizada com linguagens dinâmicas contemporâneas como Python.
  • Suporta orientação a objeto. Mas com características peculiares muito interessantes… Objetos sem classes. São tipos/estruturas com seus métodos (funções vinculadas a eles), interfaces e packages [veja mais a seguir].
  • É robusta e franca
    • Suporta processos concorrentes como recuso built-in.
    • Suas facilidades não iludem o programador sobre o que está ocorrendo nos bastidores.
    • É desenhada para aceitar caracteres UTF-8 por default inclusive em identificadores de variáveis e funções!
    • Tem recurso de inferência concisa de tipos para declaração simplificadas.
    • Tem “coletor de lixo” (garbage collector).
    • Explora o poder de processadores multicore.
    • Tem muuuitas bibliotecas padrão com tudo o que você geralmente sente que precisa e falta em outras linguagens.
    • O código é tão legível que já é quase sua própria documentação e é fácil tanto para programadores quanto para o compilador rastrear as dependências pelas regras de importação.
    • O compilador avisa sobre variáveis ou packages declaradas mas não utilizadas.
    • Possui biblioteca para números arbitrariamente grandes ou arbitrariamente precisos.
  • É segura quanto ao tipo e quanto ao acesso à memória (tem ponteiros mas não ponteiros aritméticos e o tamanho de uma array é parte do tipo da array).
  • É limpa. Graças ao bom Deus não me puseram shorthands como “templates” para declaração de múltiplos tipos o que arruinaria aquele monumento ao rigor que Go é. Mas alguns conceitos sobre manipulação de tipo ainda estão em discussão, porém cada vez menos se sente a necessidade de novos recursos para tal.
  • É uma linguagem de sistema (pode ser usada para desenvolver sistemas operacionais), mas é ao mesmo tempo de uso geral.
  • É modesta. [Isso eu demorei um pouco para valorizar, mas vendo a coisa na prática tenho que julgar que foi um acerto, dadas as circuntâncias]. Ou seja, não tenta vencer conceitualmente linguagens intelectuais como Scheme e tantas outras interessantes, mas simplesmente dá o que precisamos sem paradigmas desnecessariamente sofisticados que poderiam tornar o ato de programar muito burocrático. Em suma, tem sua rigorosa filosofia, mas evita “filosofices” puramente acadêmicas e anti-pragmáticas ou até mesmo boas idéias que não caberiam nesse momento histórico.
  • É open source (você por ir lá na lista de email e influenciar a linguagem), bem como usar à vontade.
  • É patrocinada e fomentada pelo Google, feita principalmente pelo time do Google que inclui grandes nomes da história da informática e novas mentes brilhantes. Esse fator é relevante porque muitas vezes uma linguagem é maravilhosa mas “não pega” amplamente como no caso de D. Com um fomentador de porte e qualidade, não há como “não pegar”.
  • É madura. Aprendeu com os erros e acertos de grandes linguagens e veio numa época em que conceitos de linguagens de programação foram testados e regenerados à exaustão. Portanto, pôde contar com um desenho firme, elegante e seguro.

Isso é apenas uma amostra, portanto espero que não julgue a linguagem somente pelo meu post. A seguir, ponho alguns exemplos relevantes, mas dê uma olhada no site oficial. E você pode testar a linguagem online.

Exemplos

Programa mínimo

package main

func main() {
    //code
}

Hello world

package main

import "fmt"

func main() {
    fmt.Println("Olá Mundo!")
}

Inferência de tipo

package main

import "fmt"

func main() {

    var s1 string // tipo declarado
    s1 = "Olá "

    s2 := "Mundo" // tipo inferido

    fmt.Println(s1 + s2)
}

Caracteres UTF-8 por padrão, inclusive em identificadores

package main

import "fmt"

func main() {
    Saudação()
}

func Saudação() {
    fmt.Println("Olá Mundo!")
}

Processos concorrentes (exemplo trivial)

package main

import (
    "fmt"
    "time"
)

func main() {

    sec := int64(1000000000) // 1 segundo em nanosegundos

    // "go" aciona o processo e continua sem esperar
    go DigaNoTempo("Mundo!", 3 * sec)
    go DigaNoTempo(" ",      2 * sec)
    go DigaNoTempo("Olá",    1 * sec)

    time.Sleep(4 * sec) // aguardando os processos...
    fmt.Printf("\n")
}

func DigaNoTempo(s string, t int64) {
    time.Sleep(t)
    fmt.Printf(s)
}

// output: Olá Mundo!

Funções anônimas

package main

import (
    "fmt"
)

func main() {

    f := (func() func() {
        n := 0
        return func () {
            n = n + 1
            fmt.Printf("%d ", n)
        }
    })()
    // função anônima (executada) que retorna função anônima como em JavaScript

    f()
    f()
    f()
    fmt.Printf("\n")
}

// output: 1 2 3

Orientação a objeto (tipo numérico)

package main

import (
    "fmt"
)

func main() {

    n := new(Natural)
    *n = 4

    if n.ÉZero() {
        fmt.Printf("%v é zero\n", *n)
    } else {
        fmt.Printf("%v não é zero\n", *n)
    }

    if n.ÉPar() {
        fmt.Printf("%v é par\n", *n)
    } else {
        fmt.Printf("%v não é par\n", *n)
    }
}

type Natural uint // uint é o inteiro sem sinal de 16 bits

func (n *Natural) ÉZero() bool {
    if *n == 0 {
        return true
    }
    return false
}

func (n *Natural) ÉPar() bool {
    if n.ÉZero() || *n%2 == 0 {
        return true
    }
    return false
}

/* output:
4 não é zero
4 é par
*/
Categories: Informática Tags:

Model Rails 3 serializado (sem ActiveRecord)

October 24th, 2010 No comments

Às vezes você quer carregar informações configuráveis em seu aplicativo Rails que não estão num banco de dados. Geralmente a alternativa é colocar num documento passível de serialização e carregar por initializer (config/initializers/*.rb). O problema é que o seu cliente não vai editar esse arquivo no servidor via vim/ssh ou baixando via ftp ou de alguma maneira parecida, então o ideal seria que esses dados se comportassem como um model ActiveRecord podendo ser editado via formulário normal.

Para dar um exemplo prático… Há informações de um site que não faz sentido que estejam numa tabela, porque seria como que uma tabela de uma linha só. Digamos… Título, slogan, descrição, status (no ar ou em manutenção) etc.

Eis o passo-a-passo da maneira mais simples que encontrei…

No Shell:

rails new app
cd app
rails g scaffold Conf title:string slogan:string desc:text
rm db/migrate/*_create_confs.rb
rm -rf app/views/confs/*
touch app/models/conf.yml

Arquivos:

# app/helpers/application_helper.rb
module ApplicationHelper
  def app_conf
    unless defined?(@app_conf)
      @app_conf = YAML.load(File.read("#{Rails.root}/app/models/conf.yml")).symbolize_keys
    end
    @app_conf
  end
end

# config/routes.rb
App::Application.routes.draw do
  get "confs/", :controller => :confs, :action => :edit
  post "confs/set", :controller => :confs, :action => :update
end

# app/controllers/confs_controller.rb
class ConfsController < ApplicationController

  def edit
    @conf = Conf.new
  end

  def update
    @conf = Conf.new(params[:conf])
    if @conf.save
      flash[:notice] = "Successfully updated configuration."
      redirect_to confs_path
    else
      render :action => 'edit'
    end
  end

end

# app/models/conf.rb
require 'active_model'
require 'yaml'

class Conf
  include ActiveModel::Conversion
  include ActiveModel::Validations
  extend ActiveModel::Naming

  attr_accessor :title, :desc, :slogan

  def initialize(attributes = {})
    @_conf_path = "#{Rails.root}/app/models/conf.yml"
    @_data = attributes
    begin
      @_data = YAML.load(File.read(@_conf_path)) if @_data.empty?
    rescue
      @_data ||= {}
    end
    if @_data.class == Hash
      @_data.each do |name, value|
        send("#{name}=", value)
      end
    end
  end

  def save
    File.open(@_conf_path, 'w') {|f| f.write(@_data.to_hash.to_yaml) }
    true
  end

  def persisted?
    false
  end

end

# app/views/confs/edit.html.erb
<h1>Editing config</h1>

<%= form_for @conf, :url => confs_set_path do |f| %>
  <% if @conf.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@conf.errors.count, "error") %> prohibited this conf from being saved:</h2>

      <ul>
      <% @conf.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :slogan %><br />
    <%= f.text_field :slogan %>
  </div>
  <div class="field">
    <%= f.label :desc %><br />
    <%= f.text_area :desc, :size => '40x5' %>
  </div>
  <div class="actions">
    <%= f.submit 'Change config' %>
  </div>
<% end %>

# app/views/layouts/application.html.erb
<!DOCTYPE html>
<html>
<head>
  <title><%= app_conf[:title] %><%= app_conf[:slogan].empty? ? '' : (' - '+ app_conf[:slogan])  %></title>
  <%= stylesheet_link_tag :all %>
  <%= javascript_include_tag :defaults %>
  <%= csrf_meta_tag %>
</head>
<body>
<% flash.each do |name, msg| %>
<%= content_tag :div, msg, :id => "flash_#{name}" %>
<% end %>
<%= yield %>

</body>
</html>

Assim os dados são carregados normalmente no formulário para que você os edite. Como esses dados não são para ser usados numa só página, mas por toda a aplicação, não há necessidade de uma action show. Essa página de edição deve, obviamente, ser assegurada por regras que administração que não estão nesse post só para não ficar confuso.

Outra vantagem dessa abordagem é que os dados são atualizados em tempo real. Se fossem carregados num initializer, seria preciso reiniciar a aplicação para que fossem atualizados.

Categories: Informática Tags:

Brasil ficha suja

September 24th, 2010 No comments

Nem consigo ser engraçado falando desse tema. Me pesa no coração.

Uma série de coisas históricas estão ocorrendo e ocorrendo do jeito errado. A campanha de Dilma Rousseff e a disputa com relação à aplicabilidade da Lei da Ficha Limpa remetem à mesma coisa: nosso país está entregue à demagogia, o povo acha que escolhe, mas não escolhe nada. Veja como os escândalos não afetam a popularidade dos demagogos e ainda a fortalecem. A gente fica aqui gritando ao vento e esse eleitorado hipnotizado escolhe quase sempre o pior, pouco se danando para as conseqüências de sua irresponsabilidade.

Só no Brasil uma candidata é fabricada na hora e/ou importada de outro partido político (não havia ninguém elegível no PT, aliás nem havia mais PT) e consegue alcançar intenções de voto bastante para ser eleita no primeiro turno.

Voltando ao ficha-limpa, por que precisamos de uma lei que impeça bandidos de serem eleitos? Por que eles são eleitos afinal, já que se sabe que são bandidos? Por que votam em bandidos? Mas já que o povo decidiu por restringir formalmente a si mesmo, que seja respeitada a decisão e não cabe a seja quem for sabotar isso por qualquer razão.

Agora há pouco no STF a decisão sobre a aplicabilidade nesse ano da lei de iniciativa popular que torna inelegíveis candidatos em dívida com a justiça acabou num empate de 5 votos para cada lado. Afinal é uma decisão muito difícil, muito polêmica, não é? Polêmica em que âmbito? Me aponte meia dúzia de cidadãos capazes de dizer que são contra a vigência imediata dessa lei. “Será que bandidos devem poder se eleger ou não?”, “Será que a gente deve respeitar a democracia ou não?”, argumentam nossos excelentíssimos.

Primeiro foi preciso proteger a lei de ser maliciosamente alterada no Senado para que não se aplicasse à sujeira do passado, mas só às novas sujeiras. É que nossos políticos, coitados, não sabiam que um dia haveria uma lei assim e foram pegos de surpresa. “Ah, se eu soubesse que iriam fazer isso eu não teria feito o povo de palhaço. Ninguém tinha dito nada… Não vale de repente mudar as regras assim. Tinha pelo menos que avisar com alguma antecedência.” – pensaram.

Agora estão na dúvida se já tiram os bandidos dessa eleição ou se deixam eles mais um tempinho no poder. Quanta lealdade, não? Imagine que injustiça não seria impedir um deles assumir o cargo…

Se a Lei da Ficha Limpa é realmente inconstitucional, então o que precisamos é de uma nova constituição, oras! Como pode a constituição, que é feita para o bem do povo, impedir o próprio povo de alcançar esse mesmo bem de maneira tão legítima quanto o referido movimento popular? O que poderia ser argumento contra essa lei senão uma burocracia vazia, uma brecha para a injustiça se fazer por uma via legal?

Sem sacanagem, a coisa se dá num nível de ridículo que me deixa sem ter mais o que dizer, mas com muito a lamentar. Se “de um absurdo, tudo se segue” [como estudamos em lógica], então não há contra-argumento ao absurdo. Não há como apontar um erro e discuti-lo num absurdo pq para haver um erro é preciso haver sentido e o erro seria uma quebra nesse sentido, mas no absurdo não porque ele não tem sentido. Não há o que responder ao absurdo se não com o silêncio e talvez uma resposta tão violenta quanto ele.

Só para deixar registrado, os ministros que votaram contra a aplicação imediata da lei foram:

  • Antonio Cezar Peluso
  • Celso de Mello
  • Marco Aurélio Mendes de Farias Mello
  • Gilmar Ferreira Mendes
  • José Antonio Dias Toffoli

Agora falta decidir quem vai decidir o último voto. Eis uma excelente brecha para a politicagem…

Referências:

Categories: Política Tags:

Kindle

September 23rd, 2010 5 comments

Posso dizer que o Kindle (geração 3) superou minhas expectativas. E isso significa alguma coisa, já que eu sou muito chato.

Eu queria uma solução barata para ler e-books que não sentado no computador ou com laptop (é, eu não comprei para postar sobre ele, na verdade @pedromenezes sugeriu que postasse) e que permitisse ler os livros que o Papai Noel oferece para dar uma olhada antes de comprar (meu advogado me pediu para dizer isso :-) .

A proposta do Kindle é minimalista. Ele faz uma só coisa e a faz muito bem: permitir ler e-books. Pelas características da coisa, dá para ver que é fruto de um projeto bem pensado. Acho que chamaram um bando de leitores religiosos de livro impresso e perguntaram: o que impede vcs de ler num aparelho eletrônico? E disseram:

  • Quero poder ler no Sol sem o brilho da tela incomodando
  • Quero poder fazer comentários no livro e grifá-lo
  • Quero algo portátil como um pocket book
  • Quero não ter de me preocupar com bateria
  • Um leitor digital tem de oferecer mais do que o que um livro comum oferece…

E a Amazon disse: faça-se o Kindle! E o Kindle se fez. E vi, eu, que o Kindle era bom…

Deixe-me esclarecer um equívoco que anda rondando a Internet: iPad e Kindle são coisas diferentes; não competem entre si. Quando você tiver um Kindle nas mãos vai entender o que estou dizendo. A tela do Kindle não é como a de um monitor, não tem luminosidade nem reflexo, parece uma folha impressa. Engraçado que ele vem com as instruções na tela e eu bem achei que fosse uma folha colada sobre a tela e fiquei tentando tirar, acredita? Sério… é esse o nível de definição. Por enquanto não senti falta das cores… o preto-e-branco dá um contraste muito bom, fica uma coisa retrô bacana. Já o iPad é um computador mesmo: faz um monte de coisas, pesa, a tela reflete, a bateria não faz milagres. Ou seja, é excelente enquanto computador (eu quero um, aliás), mas não substitui o Kindle como leitor de livros digital, opinião minha.

Vamos fazer um pequeno inventário das…

Características mais notáveis:

  • Como dito, a tela é foda, parece ter um sistema semelhante ao do “MagicBoard”. Isso é uma grande sacada porque não fica gastando energia para manter a tela impressa, só quando vai mudar de página ou animar alguma coisa (viu porque às vezes é melhor fazer só uma coisa, mas bem feita?).
  • Tem o tamanho certo (estou falando do pequeno, não testei o DX), grande o bastante para não fazer da leitura um desafio, pequeno o bastante para caber no bolso de um casaco e é bem leve.
  • Tem botões específicos para a leitura como o de ir para a próxima página ou para a anterior de ambos os lados (vc só precisa de uma mão, sendo destro ou canhoto). Também um pequeno teclado com o qual você pode fazer comentários no texto (e tem a opção de publicá-los para os outros leitores!) e com botões: Menu, Home, Back e Aa com o qual você altera tamanho de fonte, orientação de tela etc.
  • Aceita os formatos: AZM (proprietário, MOBI alterado), MOBI, EPUB, TXT e converte outros formatos (como PDF, Word) automaticamente para arquivos equivalentes legíveis.
  • Seu Kindle fica vinculado à sua conta na Amazon. Assim, você pode comprar um livro via Internet pelo próprio Kindle (wireless ou 3g) e não precisa comprar mais de uma ver o mesmo livro ao trocar de Kindle. Também é possível publicar um livro seu no mesmo site e vendê-lo como autor amador ou profissional.
  • Você ganha um e-mail Kindle tal que ao enviá-lo e-mail com aquivo anexo como Word (.doc), PDF, HTML zipado etc ele envia para o seu Kindle com a opção de fazê-lo já convertido para formato AZM se você por ‘convert’ no título do e-mail.
  • Você pode criar coleções de livros para não ficar aquela zona (eu gostaria que se pudesse por uma coleção dentro de outra tb, mas não). E pode procurá-los por filtros como: autor, título, mais recentes e por coleção, claro.
  • A bateria dura pacas Do tipo eu estar ouvindo audio-books há alguns dias desde que comprei e ainda não ter gastado a metade. Imagina apenas lendo e-books. Dizem que ligado direto ele dura umas 3 semanas. Desligado, meses.
  • Text-to-speech, ele lê um documento de texto para você (eu nem tentei em português…). Não rola com PDF, tem que converter.
  • Tem como recursos experimentais leitor de mp3 e um navegador (um decente webkit) mas, como não é feito para isso não tem cores e sem muitas animações (sem gif animado nem flash, claro). Mas pode ser o bastante para você baixar aquele livrinho… (MOBI, AMZ, TXT e alguns outros… parece haver uma certa resistência proposital a alguns formatos como o PDF; eles não estão de bobeira né…).
  • Quando você desliga o Kindle, ele deixa na tela uma imagem randômica de muito bom gosto, seja a pintura de um autor famoso, ou uma imagem retrô.
  • Custa $139.00 (dólares) =  muito barato. Acho que a Amazon está vendo como meio, não como produto final.

Kindle: um motivo a menos para ter vida social eheh.

Considerações…

  • O Kindle DX parece perder o benefício de ser portável e é caro… Nesse caso pode valer a pena ir pro iPad (viu como não é um post patrocinado? eheh).
  • O recurso do 3g (internet via protocolo de celular) é pago pelo acesso. Eu to fora, uso wireless só.
  • Eu não mandaria um arquivo pirata para o email do Kindle para ser convertido para ebook e enviado para seu Kindle se fosse vc. Podem não estar se preocupando com isso agora, mas o futuro nem Deus sabe… Ah, eu mencionei que vem com cabo USB? Não tem nada a ver uma coisa com a outra é que eu lembrei agora e botei aqui mesmo.
  • O navegador e a possibilidade de baixar PDF e outros tipos de arquivo relevantes promete ser uma novela daquelas… Estaremos acompanhando.
  • Não rola ebook local em HTML (até onde tentei), mas na Web sim inclusive com JavaScript pesado. Mas ele interpreta tags HTML em documentos TXT, o que é meio bizarro… mas sem JavaScript.
  • Os juízes brasileiros liberaram em princíprio o imposto do Kindle (por se tratar de um produto exclusivamente para ler livros) para quem ou trouxer em viagem. Mas por aguma razão obscura comprar dietamente no site acarreta na combrança do imposto. Há rumores de que isso está em vias de se regularizar, mas eu não quis ficar esperando pela nossa ágil justiça brasileira. Como o serviço de entrega que escolhi foi o DHL, a Amazon cobra o dobro e devolve o restante depois que passar na alfândega. Nesse caso o valor ficou para mim $312.15 (dólares), R$546 (reais), meio salgadinho, mas depois se devolverá se Deus ou o pessoal da alfândega quiser, uma parte da metade disso. Demorou-se 4 dias úteis para chegar após ser enviado.

Críticas…

  • A navegação é boa, mas não tão fluente como a de um celular, digamos. Às vezes vc tem que apertar seguidas vezes as setas (contando que o refresh da tela é rápido mas não instantâneo) e isso incomoda um pouco um carinha frenético que nem eu.
  • Já que há suporte para audio-books, senti falta de botões de Play, Pause, etc em vez de virtualizados na tela (eu colocaria na parte na lateral direita superior para poder ser apertado com a capinha [compra opcional, mas padrão] fechada). Acredito que deva vir na geração 4.
  • Sinto falta também de um editor de texto simples…
  • Também seria legal, mas isso é da ordem da utopia… que você pudesse compartilhar arquivos com outros Kindles (ou computadores) via rede wireless, como uma pasta compartilhada. Mas há uma razão monetária para isso não acontecer… Mas também sabemos como a democracia hacker pode fazer tudo acontecer… rs

Para mim está valendo muito a pena. O conceito que me vem à mente com relação ao Kindle é o fim da ilusão da ferramenta universal… Você tem um órgão no corpo para cada coisa, não é? Imagina você respirar e digerir os alimentos pelo mesmo órgão… Vamos aprender com a mãe natureza e fazer ferramentas distintas para finalidades distintas. Assim cada uma funciona bem para aquilo a que é destinada em vez de ter uma coisa que faz tudo mais ou menos.

Nem sempre um bom projeto dá certo. Se não fosse um produto da Amazon, não ia rolar. Tem coisas que tem que ter alguém grande distribuíndo para dar o start no mercado e nesse caso felizmente há. Com relação à maturidade de projetos acho o número 3 muito bom. A terceira versão geralmente traz a melhor curva de desenvolvimento, é quando a coisa toma forma, e isso aconteceu com o Kindle.

Aconselho, portanto, testar essa ferramenta, pois parece valer a pena. Fico feliz de saber que uma enorme biblioteca pode ocupar agora o espaço de um livro e que isso é ecologicamente interessante sem ser um “porre” politicamente correto.

Espero que num futuro não muito distante algo semelhante faça parte definitiva do estudo acadêmico.

Boa leitura!

Categories: Informática Tags: