Capa / Portfolio / 244 posts / 1,043 comentários

Este artigo é parte da série Diários da Nova Zelândia

  1. Auckland a Mangawhai Heads
  2. Whangarei, Parque Kauri e o Acampamento no Mirante de Tutukaka
  3. O Farol de Matapouri, a Perda da Câmera e a Ponte Whananaki
  4. Kerikeri, Rainbow Falls e Kapowairua
  5. Escalada da Colina Te Karaka em Kapowairua
  6. O Atolamento no Extremo Norte Proibido
  7. Dunas de Te Paki, Cape Reinga e Tapotupotu
  8. O Perigo de Se Atolar em 90 Mile Beach
  9. Buscando o Bernardo, Dormindo no Roger e Visitando a Adidas
  10. Lago Rerewhakaaitu, Barragem Aratiatia, Huka Falls, Rotorua e Taupo
  11. Ferry de Wellington a Picton e Andando em Nelson
  12. A Exaustiva Trilha de 12 Horas em Abel Tasman
  13. Greymouth, Hokitika e Ross
  14. A Chegada em Arthur’s Pass
  15. A Subida do Mt Aicken
  16. As Geleiras: Fox Glacier e Franz Josef Glacier
  17. Quatro Dias em Queenstown
  18. Fiordland, Te Anau e Henry Creek
  19. A Grandeza de Milford Sound
  20. Contorcionismo Pelas Fendas de Clifden Caves
  21. Invercagill e Bluff
  22. Waipapa Pt e Jack’s Blowhole
  23. Curio Bay e Nugget Pt
  24. Brighton e Dunedin
  25. Cape Wanbrow, Geraldine e Big Tree Walk
  26. Christchurch e as Seacliffs

Este dia passou rápido. A costa leste da ilha sul da Nova Zelândia não oferece mais atrativos turísticos do que o sul da ilha e sua costa oeste, motivo pelo qual a viagem foi mais uma subida de volta para o ferry.

Não poderíamos ter deixado de passar por Christchurch, uma cidade bastante famosa pela sua praça central bem bonita e o ar clássico de seus edifícios. Não andamos muito, ficamos descansando pela praça central e esperando o Japa renovar o visto dele na imigração.

Catedral na praça central de Christchurch

Eu estou aí. Basta procurar.

Bondinho na praça central de Christchurch

Quero encontrar o santo turista que não tirou essa foto em Christchurch.

Xadrez na praça central de Christchurch

E aí o Bernardo tentando provar que sabia xadrez. Uma tristeza.

Saindo de Christchurch, um pouco antes de encontrarmos um local para acampar encontramos as chamadas Seacliffs, ou falésias. Uma formação peculiar, combinação do escoamento da água da chuva com os fortes ventos do local.

Seacliffs perto de Christchurch

I know editing files remotely on servers is not a good development practice, but it’s often required to adjust some server-side feature or anything else that differs from the development server. I love FileZilla, it’s a perfect FTP client apart from the fact that it keeps popping-up an annoying dialog in this case.

FileZilla "File has changed" dialog

The true need of this dialog has been discussed mainly on the feature request #4694 and (also by me) on a forum topic. I’m not targeting here how safe it is to remotely edit files, I’ve been doing this for quite a long time without any problems with FireFTP, and I’m considering (maybe very erroneous) - even with displayed warnings - that users know what they are doing.

This patch has been tested on FileZilla 3.3.4 and only, and this is how you can proceed to apply it:

Download FileZilla 3.3.4 Source.
Get the patch.

Decompress the FIleZilla source and put the patch on the root of the extracted folder. Run this from the terminal to apply the patch:

patch -p1 -i fz-3.3.4-direct-upload.txt

After this and if there’s no errors, just compile FileZilla.

mkdir compile
cd compile
../configure
make
make install

To enable the feature go to “Edit > Settings > File editing”.

Of course, the patch is not perfect and I don’t expect it to be accepted anywhere, it just makes FileZilla run nicer for me, and I’ll be glad if this can help anyone else.

Please report any errors.

Download

O estudo resultante, os programa em VHDL, o gerador de testbench, o roteiro de compilação e o relatório em PDF podem ser baixados aqui.

Introdução

O artigo trata da implementação das instruções DBNZ e SWIP – presente em processadores da família Intel. A DBNZ é bastante útil para loops que dependem de valores decrescentes pois evita que este procedimento de decremento e verificação do valor precise ser distribuído através da combinação de outras instruções como o SUB, SLT e o próprio BNE. Já a SWIP serve, por exemplo, para armazenar uma série de valores calculados em diferentes instâncias de um loop.

Partiu-se de um protótipo de implementação do MIPS em VHDL, composto basicamente dos módulos de controle, registradores e ALU; suportando um conjunto de nove instruções básicas como ADD, LW, SW e OR. Esta implementação acompanha de um testbench que insere os dados necessários nos circuitos a partir de um arquivo texto que indica o endereço e a instrução em formato hexadecimal.

Foi necessária a criação de um opcode diferenciado àqueles já presentes para as instruções, além de modificações de código nos módulos de controle, ALU e incremento do PC (program counter) no que diz respeito ao desvio que deve ocorrer quanto o registrador não é zero. Por fim, um simples programa teste foi desenvolvido e convertido para o formato de instruções com o intuito de averiguar o funcionamento das
modificações.

Desenvolvimento
A instrução DBNZ e a SWIP devem ser utilizadas da seguinte maneira:

    dbnz <registrador>, <offset>
    swip <registrador1>, <constante> (<registrador2>)

O formato escolhido para a DBNZ é o seguinte:

  • Bits 31 a 26: opcode – valor assumido: 100000
  • Bits 25 a 21: registrador a ser decrementado
  • Bits 20 a 00: endereço de offset para o desvio

O opcode é verificado pelo módulo de controle que instancia sinais que ajudarão o restante dos componentes a realizarem as operações desejadas para o funcionamento da DBNZ. Neste caso aproveitou-se a estrutura já implementada da ALU – cuja operação depende de um sinal de controle – para realizar o decremento do registrador quando o opcode de entrada corresponder ao DBNZ.

   alu_int_alu <= [...]
      alu_op1 – 1 when alu_op_alu = DBNZ else [...]

Como a implementação do MIPS utilizada não possui uma estrutura de desvio completamente implementada, utilizou-se os mesmos sinais de controle para modificar o quanto o PC deve ser incrementado. Por padrão, este contador navega de 4 em 4
posições de memória e lendo as instruções correspondentes, e deseja-se que esta navegação corresponda ao offset quando a instrução for DBNZ, e quando o valor do registrador em questão for maior do que zero. O sinal “DP_pc_shift” corresponde ao
deslocamento de dois bits à esquerda da extensão de sinal.

   DP_incpc <=
      DP_pc + DP_pc_shift when
        DP_uins.i = DBNZ and
        DP_R1 > 0 else
      DP_pc + 4;

O comportamento desejado da SWIP é que ela grave o valor do primeiro registrador no segundo, e então incremente o segundo registrador de acordo com a constante passada.

Foram tomadas as seguintes atribuições para o formato desta instrução:

  • Bits 31 a 26: opcode – valor assumido: 100001
  • Bits 25 a 21: registrador a ter o valor guardado
  • Bits 21 a 15: endereço que indica o local a guardar o valor
  • Bits 15 a 00: constante imediata

Como é necessário gravar no banco de registradores, os sinais de controle que habilitam estes recursos foram habilitados para a instrução SWIP:

   CT_uins.ce <= '1' when i=SW or i=SWIP or i=LW else '0';
   CT_uins.rw <= '0' when i=SW or i=SWIP else '1';

Foi preciso alterar o o endereço de destino do banco de registradores para quando esta instrução fosse executada:

   DP_adD <= DP_instruction(25 downto 21) when
      DP_uins.i = SWIP else [...]

E também que o registrador de destino tivesse um incremento, como especificado.

   DP_reg_dest <=
     DP_R1 + 4 when DP_uins.i = SWIP else [...]

Resultados
O seguinte programa teste foi utilizado para submeter as modificações apresentadas ao testbench da implementação do MIPS:

   ori $16, $1, 0            # carrega o endereço da primeira
                             # entrada de .DATA em $16 ($s0)
   lw $17,0($16)             # carrega 0x0000000a em $17 ($s1)
   dbnz $s1, 0               # decrementa $s1 com desvio para
                             # a mesma instrução até 0
   ori $16, $1, 0            # carrega .DATA novamente em $16 ($s0)
   lw $18, 0($16)            # carrega 0x0000000a em $18 ($s2)
   lw $19, 4($16)            # carrega 0x0000000b em $19 ($s3)
   swip $19, 4($18)          # grava $19 ($s3) em $18 ($s2) e
                             # incrementa $18 ($s2)
   lw $19, 0($16)            # carrega a primeira entrada de .DATA
                             # em $19 ($s3) para checagem do valor
   j  $ra                    # finaliza o programa
   .DATA:
   0x10010000 0x0000000a 0x0000000b

Traduzindo-se as instruções criadas neste programa para instruções em hexadecimal, temos a coluna da esquerda como o endereço, e a da direita como a própria instrução. Sustenidos são comentários.

0x00400008     0x82310000 # dbnz $s1, offset
       # opcode    = 100000 DBNZ
       # rs reg    = 10001    $s1 (17)
       # rt reg    = 10001    $s1 (17)
       # offset    = 0000000000000000 = 0
       # binário = 1000 0010 0011 0001 0000 0000 0000 0000
       # hexadec = 8        2      3     1     0    0     0     0

De acordo com a figura 1, vê-se que a instrução DBNZ implementada decrementa o valor 10 ( 0×0000000a) até 0 no registrador 1 do MIPS.

Funcionamento da Instrução DBNZ no GTKWave
Teste da instrução DBNZ. Os sinais são, respectivamente: Endereço do PC, código da instrução e valor do registrador $rs

A mesma tradução para hexadecimal fica da seguinte forma para a instrução SWIP:

0x00400018 0x86720004 # swip rs, k(rt)
        # opcode        = 100001
        # rs reg        = 10011 $s3 (19)
        # rt reg        = 10010 $s2 (18)
        # imm (k) = 0000000000000100 = 4
        # 1000 0110 0001 0010 0000 0000 0000 0100
        # 8        6       7       2       0      0       0       4

A figura 2 ilustra o comportamento desta instrução durante os testes. O registrador $19 que contém o valor 0x0000000a é armazenado no endereço contido em $18 (0x0000000b), que então é incrementado para a próxima posição de memória 0x0000000f.

Funcionamento da Instrução SWIP no GTKWave
Instrução SWIP. As linhas são, respectivamente: Endereço do PC, instrução, registrador $18 e registrador $19.

Conclusão

A implementação de instruções adicionais quando trata-se de código VHDL é relativamente simples quando há pleno entendimento do código e de como funcionam os microprocessadores. O benefício disto é o rápido desenvolvimento de componentes e dispositivos mediante simples alterações de código, sem requerer que um novo mapa eletrônico seja gerado ao invés de uma nova versão de um programa.

No caso das instruções implementadas – que são funcionalidades um pouco mais elaboradas de processadores além daquelas que o MIPS padrão propõe, pode-se avaliar a necessidade de incorporá-las ou não a novos dispositivos sem grandes preocupações em relação ao custo de implementação em código VHDL.

Referências

  1. Hennessy, John L; Patterson, David A (2005) “Organização e projeto de computadores” Terceira edição. Editora Campus
  2. Wätzig, Jan (2007) “MIPS/SPIM Reference Card” Refcards.com <refcards.com/docs/waetzigj/mips/mipsref.pdf>
800px-MIPS_Architecture_%28Pipelined%29.svg Funcionamento de um Processador MIPS

O formato das instruções

Este artigo descreve os princípios de implementação da arquitetura MIPS. O caminho proposto pode ser usado para instruções básicas de 32 bits do tipo R (add, sub, …) como o lw (load word), sw (store word) e desvios ou branchs (beq, bne, …).

Tipo R:
- Bits
[31:26] Opcode
[25:21] Registrador rs

[20:16] Registrador rt
[15:11] Registrador rd
[10:16] Shamt
[05:00] Funct

Load, store e desvios:
- Bits
[31:26] Opcode
[25:21] Registrador rs
[20:16] Registrador rt
[15:00] Endereço

Módulo ProgramCounter
O contador de programa é a unidade responsável por fornecer os endereços das instruções. Ele recebe um valor de endereço que pode ser igual ao corrente, um incremente de 4 bits para ir ao próximo, ou o endereço de um rótulo qualquer para um desvio.

Módulo InstructionMemory
Esta é a memória das instruções, que fornecerá ainstrução a ser processada segundo o endereço fornecido pelo ProgramCounter.

A sua saída fornece o sinal da instrução, que é dividido em cinco partes principais:

Bits [31:26]:
- Sempre corresponde ao opcode. Este código é fornecido à unidade de controle que determinará como deverão se comportar os demais dispositivos para tratamento do restante de bits.

Bits [25:21]:
- Sempre correspondem ao registrador rs.

Bits [20:16]:
- Semelhantemente ao registrador rs, estes bits sempre corresponde ao registrador rt

Bits [15:0]:
- No caso de uma instrução do tipo R (add, sub, and, or e slt):
* Bits [15:11] serão o registrador rd;
* Bits [10:6] serão o shamt, entre os bits [15:11];
- No caso de um lw, sw ou branch.
* Todos os bits [15:0] representam o offset de leitura.

Módulo Registers
É o banco de registradores que trabalha com valores de entrada e saída que correspondem no final à leitura e escrita de determinados registradores.

Entrada 1: Registrador de leitura 1
- Sempre será o registrador rs;

Entrada 2: Registrador de leitura 2
- Sempre será o registrador rt;

Entrada 3: Registrador de escrita
É o registrador que deve receber o valor calculado pela operação, que são dois casos:
- Para um lw, corresponde ao registrador rt;
- Para instruções do tipo R, corresponde ao registrador rd.
Para escolher entre uma possibilidade ou outra, contamos com a adição de um multiplexador que recebe o bit de controle RegDest, que escolherá quem será o registrador de escrita;

Entrada 4: Dados para escrita
O valor a ser armazenado acompanha a variação da entrada 3, pois pode consistir no resultado necessário para um lw ou para uma instrução R, então módulo de controle deve emitir um sinal MemParaReg, específico para um multiplexador, e indicando qual a fonte dos sinais que devem ser escritos por esta entrada - se for o valor calculado pela ALU, ou o valor buscado pelo módulo de memória de dados.

Saída 1: Dados da leitura 1
Saída 2: Dados da leitura 2

Controle: EscreveReg

- Determina se o valor fornecido pela Entrada 3: Registrador de escrita, deve ser escrito como o valor da Entrada 4, Dados para escrita.

ALU
A ALU é a unidade base para os cálculos de dados vindos dos registradores que trabalha basicamente com duas entradas de 32 bits.

Entrada 1: Dados para leitura 1
- Advinda do módulo de registradores.

Entrada 2:
Novamente, são também dois possíveis casos para esta entrada controlados por um multiplexador, aqui orientado pelo sinal de controle OrigAlu.
- Caso dois registradores sejam usados na instrução - que é o caso daquelas do tipo R, a ALU obtém o valor do segundo registrado através da Entrada 2 da saída de Dados de leitura 2 do módulo de Registradores;
- Caso trate-se de uma instrução de leitura, como um lw, é necessário saber o offset desta leitura, então o segundo valor será composto pelos bits [15:0] da instrução extendidos para 32 bits - o que será feito por uma estrutura de extensão anteriormente ao fornecimento destes bits ao multiplexador.

Saída 1: Zero
- Serve para indicar que trata-se de uma instrução de desvio. Este sinal quando habilitado em conjunto com o sinal de controle Branch, instruirá o contador de programa quanto a um novo endereço.

Saída 2: Resultado da ALU

Módulo DataMemory
É a memória propriamente dita, e ela precisa saber se a instrução corrente quer escrever ou ler determinado dado em algum endereço de memória. Esta lógica fica deste jeito:

Entrada 1: Endereço da leitura ou gravação
- Este endereço é fornecido diretamente pela ALU, de acordo com suas operações e entradas de controle;

Entrada 2: Valor a ser escrito
- Fornecida diretamente a partir da Saída 2 do banco de registradores, e pode ou não estar habilitada. No caso de um lw, por exemplo, não há nada para se escrever na memória, mas somente ler. Neste caso, portanto, esta entrada estaria desabilitada.

Saída 1: Dados da leitura
- Valor lido da memória que, no caso do lw é encaminhado para o banco de registradores como um Dado para escrita através da ativação do sinal MemParaReg, como explicado na Entrada 4 do módulo Registers.

Controles: EscreveMem e LeMem
- A memória deve fazer ou um ou outro, pois ler um valor ao mesmo tempo em que se está escrevendo pode resultar em dados inconsistentes, motivo pelo qual estes dois sinais de controle atuam separadamente dependendo de cada instrução, nunca podendo existir uma situação em que ambos estejam ativados.

Condições de Desvio

Caso trate-se de um desvio, um somador auxiliar receberá um deslocamente de dois bits para a esquerda do offset a partir da estrutura SignExt. Este shift << 2 serve para aumentar a amplitude de desvio, que será somado com o endereço atual do contador de programa mais 4 bits. Este mesmo valor só será usado de tanto o bit Zero da ALU quanto o bit de control Branch estiverem ativados para confirmar que a instrução trata de uma operação de desvio.

Curitiba tem sido o principal pólo de um inchaço urbano experienciado pelo Paraná nos últimos anos, onde tem-se uma taxa de crescimento do êxodo rural em volta de 25% ([WURMEISTER, 2008]) para uma diminuição de 10% a partir de 2000.

Existem esforços do estado como um todo para conter o fenômeno do êxodo rural que aparentam resultados significativos no Paraná. A criação de condições pautadas em desenvolvimento social e favoráveis à permanência das populações no campo são bastante importantes tanto para questões relacionadas à concentração de terras, reforma agrária e à saúde do trabalhador ([POLÍTICA PARA PEQUENOS..., 2008]).

Normalmente o êxodo rural desencadeia um inchaço das periferias e regiões pobres das grandes cidades que não têm condições de absorver socialmente e profissionalmente tantas pessoas ao fluxo em que elas chegam, e que por falta de emprego acabam envolvendo-se com o trabalho informal – dentre eles a catação ([ABRAMOVAY, 1999]).

O objetivo aqui em descrever o crescimento da cidade é demonstrar como as áreas mais pobres da cidade foram sistematicamente excluídas em certos momentos do plano de desenvolvimento urbanístico, e como este plano acaba servindo para desenvolver a cidade em aspectos socioambientais antagônicos ao bem estar da população pobre . Também, logicamente, procura-se desmistificar a imagem de cidade modelo passada por Curitiba.

A seguinte tabela: Índice de Desenvolvimento Humano - Municipal, 1991 e 2000. (Fonte: [PNUD, 2000]), com dados retirados do Atlas do Desenvolvimento Humano por si só esclarece a preocupante situação que Curitiba tem em relação à sua Região Metropolitana.

MunicípioPosição no BrasilPosição no Paraná
Curitiba161
Pinhais29614
Araucária54823
São José dos Pinhais64028
[...][...][...]
Almirante Tamandaré2470245
Bocaiúva do Sul2655273
Tijucas do Sul2694277
Quitandinha2722291
Agudos do Sul2772291
Rio Branco do Sul2953330
Tunas do Paraná3221370
Cerro Azul3254372
Adrianópolis3268374
Itaperuçu3365381
Dr. Ulysses4179398
Total de Municípios5507398

Índice de Desenvolvimento Humano - Municipal, 1991 e 2000.
(Fonte: [PNUD, 2000])

O objetivo em iconizar os municípios que compõem o norte da região metropolitana é justamente contrastar com o desenvolvimento do bloco como um todo. Ao passo que existem municípios altamente industrializado e que com fortes planos de incentivo atraíram grande capital como Araucária – extensão da Cidade Industrial de Curitiba ao sudoeste da capital – e São José dos Pinhais, existem outros com os piores indicadores do país a menos de 50Km da capital.

Mapa de Curitiba e Região Metropolitana

Mapa de Curitiba e dos municípios que enquadram a Região Metropolitana. (Fonte: [COMEC, 2009])

Se somente Curitiba na época do último censo e da angariação das informações necessárias à formulação do IDH possuía o 7º PIB do Brasil ([IBGE, 2005]), podem-se observar diversas relações que classificam a distribuição da riqueza econômica como desigual, e as estratégias de diminuição de diferenças sociais como deficitárias.

Abismos sociais não são nenhuma novidade na realidade brasileira, e não questiona-se aqui a concentração de riqueza na lógica do capital, mas sim procura-se enfatizar que este fenômeno torna impossível que os benefícios gerados tanto por iniciativas público-privadas ou pelas próprias riquezas naturais de uma região propaguem-se em raios socialmente significativos.

Se observado com mais atenção as áreas pobres de Curitiba - especialmente aquelas ao sul e centro-sul, não por acaso estas densidades coincidem muito com estratégias de desenvolvimento urbano que acabam por promover a desigualdade social na cidade.

Os projetos aqui citados dependeram em muito do direcionamento de recursos e sobretudo da política por parte das administrações da prefeitura. Isso envolve o fechamento de contratos, licitações e renovações que vão além aquém do período gestionário, assim como a ininterrupção de obras e comprometimento com a iniciativa privada para consolidação dos projetos. Outra questão ainda mais importante é a permanência dos profissionais nos cargos públicos indicados e a facilidade de transição entre as gestões, o que poupa tempo significativo e evita o retrabalho e rediscussão sobre diversas questões da cidade. Um comparativo bastante interessante pode ser feito entre as capitais de São Paulo, Rio de Janeiro e do Paraná para ilustrar como o cenário político de Curitiba contribuiu para a realização destes projetos centrais que nortearam o crescimento da cidade ([OLIVEIRA, 2000]).

A favor disto, Curitiba tem uma peculiaridade muito significativa em sua história: a continuidade do alinhamento político de suas gestões públicas. Este aspecto em especial possibilitou a consolidação de obras extra gestionárias maiores do que as que seriam possíveis caso o direcionamento mudasse com mais frequência. A principal incidência deste fato no presente trabalho foi analisar a extensão dada à execução do plano diretor, que acabou por ocorrer de uma maneira mais incisiva do que as outras grandes cidades brasileiras foram capazes de implementar ([OLIVEIRA, 2000]).

Observando a Tabela 2, pode-se constatar que a partir de 1989 Curitiba permanece praticamente sobre o mesmo alinhamento político até hoje, pois mesmo embora hajam divergências entre os partidos de direita que se sucederam, seus direcionamentos na gestão pública foram essencialmente liberais, e no caso de Curitiba seguem o mesmo plano de desenvolvimento proposto anteriormente pela Aliança Renovadora Nacional, e mais tarde pela gestão de Jaime Lerner.

MandatoPrefeitoPartidoObservação[1]
1962-65Ivo Arzu-Plano Diretor de 1965
1966-71Omar Sabbag-Oposição ao plano
1971-75Jaime Lerner[2]ARENAReimplementação do plano
1975-79Saul Raiz[2]ARENAContinuidade
1979-83JaimeLerner[2]ARENACuritiba: Cidade Planejada
1983-85Maurício FruetPMDBPDDU
1985-88Roberto RequiãoPMDBContinuidade
1989-92Jaime LernerPDTCuritiba: Capital Ecológica
1993-96Rafael GrecaPFLCuritiba: Cidade Turística
1997-00Cassio TaniguchiPFLReforço no Transporte
2001-04Cassio TaniguchiPFLContinuidade
2005-08Beto RichaPSDBLinha Verde
2009-12Beto RichaPSDBMetrô?

Tabela 2: Relação dos prefeitos de Curitiba desde 1962. (Fonte:[PMC, 2009])
[1] Coluna não retirada da referência citada
[2] Indicados pela ditadura militar

Completam então em 2009, mais de 20 anos ininterruptos deste fenômeno peculiar de Curitiba, sem contar os mais de 10 anos também ininterruptos ocorridos anteriormente à conquista da prefeitura pelo velho Movimento Democrático Brasileiro ([PMC, 2009]), período em que ocorreu o planejamento e iniciação do PDDU, onde o grupo de Jaime Lerner aproveitou o intervalo de gestões para melhor organizar e aperfeiçoar este plano ([OLIVEIRA, 2000]).

Projetos urbanísticos aplicados à cidades do patamar de Curitiba caracterizam-se por serem irreversíveis a partir do momento que foram iniciados, ficando a cargo das próximas gestões dar continuidade ou desvirtuarem o que já foi iniciado, o que neste caso foi uma tarefa difícil que requer habilidade pública e amplo conhecimento do espaço social e urbano da cidade. Na interrupção oposicionista de Fruet e Requião o Plano Diretor foi complementado para esferas sociais e ambientais à qual não haviam sido enfatizadas anteriormente, sendo realizados os primeiros estudos para gerenciamento de resíduos sólidos de Curitiba ([NASCIMENTO, 2005]), assim como os primeiros contatos e projetos da prefeitura direcionados aos catadores ([JORNAL DO ESTADO, 1985]).

No mesmo período de 11 mandatos, desde o golpe militar de 1972, Curitiba teve 7 prefeitos, enquanto São Paulo teve 16, e Rio de Janeiro teve 12. A capital paranaense também alternou de linhagem política somente uma vez neste mesmo período, sendo que 5 prefeitos governaram a cidade durante 36 anos.

Em partes como consequência disso e até como fato mais relevante nos resultados da execução desse plano foi a falta de conflitos entre o poder público e a iniciativa privada, dando lugar à uma composição de interesses das obras públicas com diversos empreendimentos ([OLIVEIRA, 2000]), e mais marcadamente neste estudo com o ramo imobiliário.

A seguinte figura trata-se de uma representação presente no PPU de 1965 para expressar as diretivas de planejamento do espaço adotadas pelo programa. Percebe-se a clara exclusão da massa urbana do Boqueirão.

Proposta de Plano Viário do Plano Diretor de Curitiba

Proposta de esquema viário para Curitiba no PPU de 1965. (Fonte:[PMC, 1965])

Esta exclusão foi pautada em termos categoricamente econômicos e justificados pela adoção do cadastro do TRE e não do IBGE para moldagem da densidade populacional da cidade, assim estariam automaticamente exclusos os não eleitores, analfabetos e recém-imigrados, ou seja: os mais pobres ([SOUZA, 2001]).

“[...] o eleitor tende a ser das camadas sociais mais altas, e assim deixando de ser representada a população de camadas mais baixas. Isto em parte é contrabalançado pelo alto índice de alfabetização dos habitantes da Região Sul do país, e que constituem a maior parte dos imigrantes. ([PMC, 1965]; citado por [SOUZA, 2001])”

Mais tarde os eixos do sistema trinário seguiriam sobre estas direções propostas para o crescimento no PPU, resultando na super valorização do solo de vazios urbanos, especialmente os presentes a sul e a oeste da cidade. As populações que já viviam ao longo dessas avenidas foram pobremente indenizadas, e as que permaneceram o fizeram até ser possível arcar com o aumento tributário pelo uso do solo ([OLIVEIRA, 2000]), dando vez para grandes imobiliárias que aos poucos foram adquirindo lotes e maturando o custo do terreno até o momento mais conveniente para efetuar as construções.

Em primeira instância, o desenvolvimento de regiões já povoadas por populações mais pobres não pareceu ser prioridade, tendo ao invés disso estendido um braço de ruas estruturadas e bem planejadas para os bairros do Portão e Campo Comprido – o conhecido sistema trinário, que foram regiões que mais tarde viriam a ser o foco do mercado imobiliário de Curitiba até os dias de hoje, que compõem centros residenciais de alto padrão como o Ecoville, Água Verde, Bigorrilho e Cabral ([FILHO, 2009]).

Em curtos termos, este raro caso de cooperação entre o poder público e a iniciativa privada foi crucial para toda a notoriedade pertencente à capital parananense internacionalmente e também para a promoção pessoal e profissional de seus mentores. As regiões mais pobres e povoadas de Curitiba continuam sendo as mais pobres, já por outro lado, as regiões antes compostas por várzeas e banhados tornaram-se hoje grandes centros comerciais e residenciais. A proposta do PD reflete-se na densidade econômica encontrada na cidade ([FILHO, 2009]).

A adoção destas estratégias de desenvolvimento mostraram-se muito eficientes na criação de um núcleo elitizado no centro-norte da cidade, submetendo as regiões mais pobres às periferias e regiões metropolitanas, como mostra a seguinte figura.

Mapa da Pobreza de Curitiba

Taxa de pobreza de Curitiba (Fonte: [IBGE, 2005])

A Curitiba ecológica e das propagandas é eficiente em diversos quesitos quando observada somente ao espectro do núcleo azul que abrange uma boa fatia da riqueza da região metropolitana. Os indicadores nestes bairros são realmente satisfatórios a nível de uma cidade que pode exportar sua imagem urbanista sem grandes preocupações, só que infelizmente os poréns ocorrem muito próximos dali ([FILHO, 2009]).

Também é interessante observar o mapa da violência de Curitiba e da Região Metropolitana, que não por acaso acompanha o analfabetismo em sua gravidade devida à próxima relação entre os indicadores no que diz respeito à qualidade de vida. Na região centro-norte raramente há um bairro com mais de um homicídio por ano, enquanto nas regiões mais ao sul chega-se facilmente a um por mês.

Mapa da Violência de Curitiba

Mapa da violência de Curitiba e Região Metropolitana. (Fonte: [GAZETA DO POVO, 2007])

A discrepância das situações em regiões tão próximas colocam bem os contrastes vividos pela capital paranaense e aos poucos bairros de elite a que serve a forte economia da cidade. Estaria neste contexto a cultura desenvolvimentista, inovadora e socialmente correta de Curitiba colocada de maneira plural?

Ao analisar a história de um município pode-se também conhecer seus principais rumos. Neste processo foi importante esclarecer – e até desmistificar – saberes comuns que dizem respeito ao espaço urbano, e assim melhor analisar seus problemas ambientais e sociais.

Curitiba mostra com sua história um tratamento urbano bastante indigno para as massas mais pobres. As conquistas efetuadas no processo político-histórico deram-se principalmente devido à atuação de movimentos sociais, e subsídios para movimentação devem ser retiradas destas análises de construção do espaço urbano.

Esta situação impera tanto pelo fato de que Curitiba com o seu processo histórico de desenvolvimento urbano pôde isolar geograficamente aqueles que não poderiam contribuir com o fortalecimento do seu núcleo de elites, e também pela aparente apatia - ou até mesmo despropósito - do poder público quanto à mobilização popular.

Bibliografia

ABRAMOVAY, 1999: ABRAMOVAY, Ricardo; CAMARANO, Ana A., Êxodo Rural, Envelhecimento e Masculinização no Brasil: Panorama dos Últimos 50 Anos, 1999
COMEC, 2009: Coordenação da Região Metropolitana de Curitiba, Mapa de Curitiba e Região Metropolitana, 2009
FILHO, 2009: FILHO, Paulo Bearzoti, O planejamento urbano exclusivo de Curitiba, 2009
GAZETA DO POVO, 2007: Gazeta do Povo, Mapa da Violência: Homicídios em Curitiba e na Região Metropolitana, 2007
IBGE, 2005: Instituto Brasileiro de Geografia e Estatística, Produto Interno Bruto dos Municípios 1999-2002, 2005
JORNAL DO ESTADO, 1985: Jornal do Estado, Lançado programa para amparar catadores de papel de Curitiba, 1985
NASCIMENTO, 2005: NASCIMENTO, Camila Victória; ROSENMANN, Leonardo Chemin, Sistema de Gerenciamento de Resíduos Sólidos Urbanos - Estudo de Caso: Curitiba, 2005
OLIVEIRA, 2000: OLIVEIRA, Denninson, Curitiba e o Mito da Cidade Modelo, 2000
PMC, 2009: Prefeitura Municipal de Curitiba, Relação dos Prefeitos de Curitiba, 2009
PMC, 1965: Prefeitura Municipal de Curitiba, Plano Preliminar de Urbanismo de Curitiba / Serete & Wilhem Associados, 1965
PNUD, 2000: Programa das Nações Unidas para o Desenvolvimento, Índice de Desenvolvimento Humano - Municipal, 1991 e 2000, 2000
POLÍTICA PARA PEQUENOS…, 2008: Secretaria da Agricultura e do Abastecimento do Paraná, Política para pequenos agricultores evita êxodo rural no Paraná, aponta IBGE, 2008
SOUZA, 2001: SOUZA, Nelson Rosário
WURMEISTER, 2008: WURMEISTER, Fabiula, Ritmo do êxodo rural cai no PR, 2008

O WordPress tem uma interface de desenvolvimento de Widgets muito prática. Com ela fica trivial programarmos um recurso e torná-lo disponível para ativação em uma Sidebar qualquer. O problema é que as funções padrão e documentadas no site WordPress.org [1] não citam como fazer com que você possa usar o mesmo Widget em mais de uma Sidebar. É até meio ridículo o que encontramos sobre isso lá, que se resume a duas linhas:

Widgets - Multiple Instances
Widgets can be coded for multiple instances or a single instance.

Bom, já que o WordPress é tão bem documentado e caprichadinho, podemos dar uma colher de chá pra essa gafe de documentação. Afinal, nada é perfeito, e uma nota de publicação desta classe foi divulgada até que bem detalhadamente [2], mas ainda assumindo que desenvolvedores sabem interpretar informações sucintas.

Procurando pela internet vi poucas soluções e explicações a respeito disso, e algumas delas bem feias, como por exemplo uma que copia as funções e declarações de Widgets várias vezes. Totalmente deselegante…

O método proposto também não é dos mais bonitos e diretos, mas usa a abstração do próprio WordPress e seus construtores.
Vamos então fazer um Widget que exibe o texto “Oi Mamãe!”, só pra mostrar como a coisa funciona.

Como é feito normalmente:

Para registrar um Widget fazemos o seguinte. No arquivo `functions.php` do tema ou em um plugin construímos a função que queremos:

<?php
	function oi_mamae() {
		echo 'Oi Mamãe!';
	}
?>

Registramos essa função como sendo um recurso que pode ser usado nas sidebars dos temas usando a função `wp_register_sidebar_widget` [2]:

<?php
	wp_register_sidebar_widget (
		'widget-oi-mamae',		// identificador
		'Texto: Oi Mamãe',		// título do widget
		'oi_mamae',			// nome da função a ser chamada
		array ( 'description' => 'Widget de exemplo que exibe o texto "Oi Mamãe!".')
	);
?>

E assim está feito, simples, rápido e prático.

Para habilitar múltiplas instâncias:

O outro caminho é um pouquinho diferente, mas nada complicado, embora seja uma das coisas mais verbosas que se faça no WordPress para uma coisa relativamente simples. Deve-se então sobrescrever três métodos e declarar um construtor.

<?php
	class WP_Widget_Oi_Mamae extends WP_Widget {
 
		// Precisamos declarar o construtor aqui, dizendo para o WordPress do que se trata o Widget.
		function WP_Widget_Oi_Mamae () {
			$widget_ops = array('description' =>; __('Widget de exemplo que exibe o texto "Oi Mamãe!".'));
			$this->WP_Widget('banner_300', __('Texto: Oi Mamãe!'), $widget_ops);
		}
 
		// O método é a própria função que seria usada no `wp_register_sidebar_widget`
		function widget ($args, $inst) {
			extract($args); $title = esc_attr($instance['title']);
			echo $before_widget.$before_title.$title.$after_title.$after_widget;
		}
 
		// Essa função seria usada para atualizar os dados do Widget
		// function update ($novo, $velho) { }
 
		// Essa função seria o formulário de opções do Widget
		// function form ($inst) { }
 
	}
?>

Agora precisamos chamar essa clase para de fato registrar o Widget na instância de carregamento do WordPress. Adicionamos o gancho `widgets_init`, que será rodado quando WordPress for procurar por Widgets declarados, e nele chamamos a `register_widget`.

<?php
	add_action('widgets_init', 'widget_oi_mamae_init');
 
	function widget_oi_mamae_init () {
		register_widget('WP_Widget_Oi_Mamae');
	}
?>

Agora este Widget pode ser usado em qualquer lugar, e quantas vezes for desejado. Simples? Não para a metodologia WordPress!

Tomara que nas próximas versões surja algo mais fácil como uma flag na função `wp_register_sidebar_widget` ou coisa parecida para que não precisemos ficar declarando classes e mais classes para tornar os Widgets multi-instância.

[1] http://codex.wordpress.org/Widgets_API
[2] http://codex.wordpress.org/Version_2.8#New_Widgets_API
[3] http://codex.wordpress.org/Function_Reference/wp_register_sidebar_widget

O objetivo deste artigo é esclarecer e interpretar – mesmo em nível teórico – que a própria lógica da reciclagem que sustenta as diversas ocupações do setor são insustentáveis, ainda mais quando promovido pelo meio corporativo, responsável pela geração direta e indireta da maior parte dos resíduos, a começar pela validação do termo “desenvolvimento sustentável” e consequentemente das práticas de reciclagem.

Nenhuma representação de qualquer segmento do sistema capitalista irá opor-se abertamente e midiaticamente à formação de corporações que procurem trabalhar contra uma das suas consequências mais marcantes: o desenvolvimento insustentável. O mal entendimento – ou ao menos o bom discurso – de que o sistema não é gerador de mazelas sociais – ou de que as suas atividades não busquem tais consequências mesmo que as gerem, deixa claro o desejado desligamento de tais causas por parte do sistema em si (MOTA, 2007). Mas por que então este objetivo torna-se tão difícil de ser alcançado mesmo sendo uma vontade comum de todos?

O termo “desenvolvimento sustentável” foi proposto (CAVALCANTI, 1994) como uma expressão recente surgida na década de 70 nos relatórios da IUCN, mais tarde popularizada pelo Relatório Brundtland de 1987. Este conceito está presente em qualquer discurso ecológico que ouvimos hoje, embora sua definição ainda não seja consensual e seu significado dentro do atual modelo econômico seja controverso.

Esta controvérsia é causada justamente pela falta de discussão e pela sua simples incorporação a um sistema que tem como objetivo a geração incessante de bens e serviços. Não indaga-se sequer se essa tal sustentabilidade será realmente possível dentro da economia de capital que seguimos. Assim podemos estar tornando um termo tão importante como vazio e desfigurado, transformando-o somente em uma legitimidade de expansão insustentável (SOUZA, 2007).

As corporações são tão presentes que assumem posições de indivíduos tanto em aspectos formais quanto em aspectos sociais. Os aspectos formais contemplam-se pela possibilidade de a partir da atribuição de pessoa jurídica, as organizações serem capazes de absorver os mesmos direitos e deveres de uma pessoa física, podendo realizar atividades como comprar, vender, endividar-se, processar e ser processada. A grande vantagem de uma organização neste sentido é a ausência de um indivíduo que venha a assumir a responsabilidade moral de seus atos (ACHBAR, 2006).

O problema de tais consequências é a própria natureza do sistema corporativo que, embora divulgue o contrário, ignora a execução de termos bem conhecidos como responsabilidade social e a sustentabilidade ambiental. Esta ignorância ocorre porque os níveis de lucro desejados são impossíveis, se for considerada a preservação dos recursos naturais de um determinado país ou, se a força de trabalho de seu povo for tratada com dignidade e ética (ACHBAR, 2006).

Corporações são especialistas em externalizar seus custos, principalmente, quando tratam de fazer isso com o estado. As diversas externalizações de cunho ambiental e social que as empresas normalmente executam expressa-se de maneira muito evidente em uma questão importante que toma dimensões bastante significativas: o da falta de internalização de custos sobre os produtos que consumimos (ACHBAR, 2006).

O preço que o consumidor paga pelo quilograma de determinado produto não remete ao custo ambiental de toda sua produção. Um exemplo persistente que pode ser citado é a produção de carne e outros produtos derivados de animais. No caso do gado, toda a água consumida e a área desmatada necessária para prover alimento à eles não representam uma parcela significativa deste custo, quando na verdade, se tais atividades fossem calculadas e custeadas de acordo com a sua oneração ambiental, este mesmo preço seria impraticável economicamente (GONÇALVES, 2004).

As políticas públicas das autoridades de onde um produto é produzido, assim como a força da economia e diversos outros fatores, regulam o quanto a iniciativa poderá utilizar os recursos naturais regionais sem internalizar os custos no preço final deste produto. O mesmo gado já citado seria menos viável se criado em algum outro país senão no Brasil (GONÇALVES, 2004), e isto acontece porque a legislação, economia e mobilização social brasileira favorecem a exploração de vastas áreas sem que o investidor precise pagar altos valores de impostação para realizar tal atividade naquela região.

Diversos países anunciam e consideram suas projeções de taxas de crescimento simplesmente sem cogitar uma possível sustentabilidade, o que aliás acaba ficando como um aspecto secundário nas diretrizes nacionais. A China é o exemplo mais incisivo de crescimento exacerbado com despreocupação ambiental, onde há autores que afirmam a existência de sustentabilidade em uma taxa de 10% de crescimento econômico ao ano (VIEIRA, 2006). Uma situação transparentemente absurda.

Entre 1990 e 2003 o PIB brasileiro cresceu 1% para cada 0,44% de crescimento de empregos (IBGE, 2005). A quantidade de investimentos necessários para a criação de postos de trabalho em países subdesenvolvidos são muito mais atraentes para as empresas do que o mesmo retorno de investimento em países desenvolvidos. Nota-se uma forte estratificação de valores nestes aspectos econômicos, mostrando que o trabalhador rende e gera riquezas cada vez mais para ganhar cada vez menos. De fato há crescimento econômico, assim como respaldos neoliberais e desenvolvimentistas que defendem a melhoria da sociedade advinda da promoção da externalização de recursos, mas estaria mesmo o trabalhador e sua família colhendo os frutos deste desenvolvimento?

Nos é colocada, em conjunto com essa lógica da sustentabilidade ambiental, a ideia de ciclo contínuo e infinito da reciclagem, onde um produto uma vez enviado para reciclagem, retorna como o mesmo produto sem novo ônus algum para o meio ambiente. A eficiência das tecnologias de reciclagem e degradação dos produtos sintéticos nos processos não é citada, nestes casos (BLAUTH, 1996).

Uma garrafa PET quando enviada para reciclagem muitas vezes não gerará uma nova garrafa PET, mas sim solas de sapato e enchimento de vestimentas sintéticas, e como a demanda da resina plástica da qualidade necessária à produção de garrafas no mercado será sempre maior do que a mesma demanda da resina para seus subprodutos de reciclagem, ainda existe a dependência da extração de matéria-prima virgem para abastecer a demanda de consumo (BLAUTH, 1996).

[...] Segundo a Associação Brasileira das Empresas Recicladoras de Plástico (Abremplast), o consumo brasileiro de plásticos é de 1,8 milhão de toneladas/ano. Desse montante, apenas 22 mil toneladas de resina PET - usada nas garrafas descartáveis de refrigerante - foram recicladas (21% do total produzido) e 200 mil toneladas dos plásticos rígidos e filmes (15% da produção), dados de 1996. … (CERQUEIRA, 2000).

Em outras palavras, cada sociedade cria seu método específico e compatível à mão de obra disponível para contribuir à este ciclo que produz lixo à escalas admitidamente ilimitadas e que necessita de mecanismos que eliminem pelo menos parte deste lixo (GONÇALVES, 2004).

Se os problemas ambientais caíram de certa forma como bandeira das corporações, e por muitos lados já é essencial para a sobrevivência no mercado devido a toda a categoria de normas ambientais e à cobrança da sociedade civil, como então ainda registram-se crescentes impactos e escândalos ambientais por parte da indústria?

Embora tenha-se contato com esta expressão diariamente (ecologicamente correto), é muito claro que a sociedade ainda não exprime uma noção consistente do que é melhor ou pior para os sistemas naturais do nosso planeta, sendo frequentemente usada como uma citação de publicidade, sem demonstrar, porém, empiricamente que isto está realmente sendo feito.

As pessoas absorvem estas mensagens da mídia e procuram agir de acordo com a sua formação e concepção individual quanto às atitudes que seriam mais benéficas para o meio ambiente sem observar a relevância destes atos pelo viés corporativo. Isso faz com que a mesma educação ambiental recebida passe a ser controversa a partir do ponto de que as corporações de que somos dependentes magnificam os impactos e não pensem como indivíduo.

Grande parte da poluição gerada no mundo é, diretamente, de responsabilidade das corporações e seus processos industriais. Relevando a responsabilidade indireta, se for considerado que todos os consumidores são uma extensão de práticas industriais como a obsolescência programada, atingiremos porcentagens de responsabilidade muito maiores.
O fato de que as indústrias consomem e poluem muito mais do que a sociedade civil conduz à uma relação crucial de cobrança para modificação de estratégias – o que deve ser diferente do que cumprir metas ambientais relacionadas à normas ISO ou legislação aplicável – a fim de obter resultados cada vez mais sustentáveis.

A educação ambiental tradicional voltada à população visa atitudes domésticas pontuais – que são também, logicamente, muito importantes – tais como a separação do lixo, economia de água e luz, sendo que o foco do problema reside na concepção industrial de consumo colocada pelas corporações.

As principais mudanças antagônicas ao desenvolvimentismo desenfreado e abusivo que a sociedade sofreu são causadas por articulações de movimentos sociais, e se a população não está devidamente fundamentada a respeito das questões ambientais, ela jamais será capaz de mobilizar-se e contrapor este modelo de consumo que tanto depreda o planeta.

Visto que grande parte das campanhas de educação ambiental são promovidas por empresas privadas, e tomando a dependência do estado pelo capital, é improvável que nas atuais circunstâncias venham a surgir grandes campanhas que questionem tal modelo.

Há a execução de uma lógica desenvolvimentista bastante tradicional, onde a economia foi vista como algo à parte da natureza, despesas ambientais foram custos e não investimentos, ecossistemas foram fontes inexauríveis de recursos naturais, populações de países em desenvolvimento foi força de trabalho barata.

Esta lógica, assim como a economia mundial, está baseada em um sistema imerso em uma crise de insustentabilidade social e ambiental. A necessidade de discussão de termos como “desenvolvimento sustentável” reside no melhor entendimento e incorporação efetiva neste sistema, isso vai além da educação ambiental, campanhas de conscientização, implantação de normas ISO e legislação ambiental.

É necessária uma total mudança de concepção da sociedade – leia-se estado, pessoas físicas e jurídicas – dos reais motivos e situações da biosfera. Ambos estes segmentos parecem sofrer uma total falta de coerência entre discurso e ato, encabeçado pela proposta corporativa de bens de consumo e instaurando uma contradição geral na sociedade no que diz respeito ao paradigma do crescimento econômico contra proteção ambiental.

A partir daí podemos estender a discussões para diversos níveis de questionamento que acabam indo de encontro à diversos discursos sustentados, por exemplo:

  • Se a energia utilizada para um determinado processo de reciclagem advém de fontes não renováveis – portanto considerada insustentável a grosso modo, podemos considerar esta mesma reciclagem como sustentável?
  • Muitas vezes a energia não é suficiente para retornar uma matéria-prima ao seu ciclo produtivo, e se for necessário então o emprego de produtos químicos ou mais matérias primas para que isto aconteça?
  • E mesmo se o produto for reciclado com energia renovável e sem nenhuma adição de produtos químicos ou matéria-prima, se o trabalhador que coletou o material, ou o que separou, ou mesmo aquele que trabalha na indústria de reciclagem for assalariado e tem sua força de trabalho explorada, mesmo assim podemos considerar este ciclo socioambiental sustentável?

Nota-se aí os diversos questionamentos que podem ser feitos em torno do discurso da sustentabilidade já tão disseminado para diversos produtos, e realmente verificar se há uma parcela de contribuição para a redução do custo ambiental embutido de produção que faça valer a pena todo o processo de manufatura deste produto.

Esbarra-se portanto, na lógica produtiva do sistema de acúmulo em que vivemos, sistema este criador de necessidades variadas e indutor a um consumo desenfreado pela sociedade, movido por desejos individuais e simplistas do ponto de vista social.

Trabalhadores que coletam resíduos pelas ruas exercem esta atividade porque há lixo que necessita de coleta. Existem processos produtivos que necessitam que este resíduo seja reciclado. Há moderação econômica que motiva a reciclagem sobre a extração direta de matéria prima. Há mercado o suficiente que incentive e garanta o consumo da reciclagem sustentada na exploração do trabalho.

A importância de se estudar também as vertentes sociais que envolvem discussões sobre desenvolvimento sustentável reside principalmente na prática de atuação de gestores e promotores do cooperativismo. De nada adianta organizar sem propósito, sem conscientização e sem a devida percepção de localização do indivíduo organizado no meio em que ele atua.

Bibliografia
ACHBAR, 2006: ACHBAR, Mark; ABBOTT, Jennifer; BAKAN, Joel, The Corporation, 2006
BLAUTH, 1996: BLAUTH, Patricia, Rotulagem ambiental e consciência ecológica, 1996
CAVALCANTI, 1994: CAVALCANTI, Clóvis, Uma Breve Introdução à Economia da Sustentabilidade, 1994
CERQUEIRA, 2000: CERQUEIRA, Luciana Sequeira de, Disposição pós-consumo: quem é o responsável?, 2000
GONÇALVES, 2004: GONÇALVES, Denise; GUIMARÃES, João Landi, A Carne é Fraca, 2004
IBGE, 2005: Instituto Brasileiro de Geografia e Estatística, Produto Interno Bruto dos Municípios 1999-2002, 2005
MOTA, 2007: MOTA, Fabiana Mendonça, Financeirização e Desemprego: A Omissão dos Atores Internacionais, 2007
SOUZA, 2007: SOUZA, Altamir da Silva; SILVA, Cassiano Paes, O comportamento de consumo socialmente responsável: uma análise exploratória no contexto acadêmico, 2007
VIEIRA, 2006: VIEIRA, Flávio Vilela, China: crescimento econômico de longo prazo, 2006

About

This plugin syncronizes the users of a Wordpress installation with a SSH2 server users in a simple manner like:
If the user exists in the SSH2 server, then it can be created in the installation.

Download it here

Description

This plugin syncronizes the users of a Wordpress installation with a SSH2 server users in a simple manner like:
If the user exists in the SSH2 server, then it can be created in the installation.
You can also choose the group the user must be in the SSH2 server to be able to register.

That’s useful to automatically allow registrations of users in a lab, company, departament, etc, without adding them manually.

You must have PHP-SSH2 modules installed in your server for this plugin to work properly. Reffer to the installation tab for instructions.

Installation

In an Ubuntu/Debian server:

aptitude update
aptitude install php5-dev php5-cli php-pear build-essential openssl-dev zlib1g-dev
aptitude install libssh2-1-dev libssh2-php`

In other distros that does not support these packages, you can download and compile them yourself:

wget http://surfnet.dl.sourceforge.net/sourceforge/libssh2/libssh2-0.14.tar.gz
tar -zxvf libssh2-0.14.tar.gz
cd libssh2-0.14/
./configure
make all install
pecl install -f ssh2
echo 'extension=ssh2.so' >> /etc/php5/conf.d/ssh2.ini

For the plugin:

* Download and activate the plugin;
* Enter the information of your SSH2 server in “Settings > SSH2 Sync” admin page.
* Enable the registration form via widget or pasting the code “ wherever you like in your theme.

Note:
* There’s no sense in using this plugin with the “Allow user to register” option enabled. You can change it in the “Settings > Gereral” admin page.

Changelog

= 0.01 =
* Plugin released. That’s it.

Este artigo é parte da série Diários da Nova Zelândia

  1. Auckland a Mangawhai Heads
  2. Whangarei, Parque Kauri e o Acampamento no Mirante de Tutukaka
  3. O Farol de Matapouri, a Perda da Câmera e a Ponte Whananaki
  4. Kerikeri, Rainbow Falls e Kapowairua
  5. Escalada da Colina Te Karaka em Kapowairua
  6. O Atolamento no Extremo Norte Proibido
  7. Dunas de Te Paki, Cape Reinga e Tapotupotu
  8. O Perigo de Se Atolar em 90 Mile Beach
  9. Buscando o Bernardo, Dormindo no Roger e Visitando a Adidas
  10. Lago Rerewhakaaitu, Barragem Aratiatia, Huka Falls, Rotorua e Taupo
  11. Ferry de Wellington a Picton e Andando em Nelson
  12. A Exaustiva Trilha de 12 Horas em Abel Tasman
  13. Greymouth, Hokitika e Ross
  14. A Chegada em Arthur’s Pass
  15. A Subida do Mt Aicken
  16. As Geleiras: Fox Glacier e Franz Josef Glacier
  17. Quatro Dias em Queenstown
  18. Fiordland, Te Anau e Henry Creek
  19. A Grandeza de Milford Sound
  20. Contorcionismo Pelas Fendas de Clifden Caves
  21. Invercagill e Bluff
  22. Waipapa Pt e Jack’s Blowhole
  23. Curio Bay e Nugget Pt
  24. Brighton e Dunedin
  25. Cape Wanbrow, Geraldine e Big Tree Walk
  26. Christchurch e as Seacliffs

Dormimos perto de Oamaru, uma cidade famosa por ser próxima de um berço de pinguins, e o Bernardo estava muito afoito para vê-los já há algum tempo. Vai ver foi a boa experiência que ele iniciou com o Linux na Nova Zelândia.

Fomos direto para Cape Wanbrow, onde os pinguins tiram umas férias e fica de papo pro ar pro pessoal tirar fotos. A expectativa era grande, e o grande objetivo do dia parecia ver as tais aves.

Bernardo willing to find penguins on Cape Wanbrow, Oamaru

Infelizmente não foi o que aconteceu. Chegamos nas arquibancadas, fizemos uma trilha e percorremos toda a praia atrás de um único pinguinzinho. Não vimos nenhum. Coitado do Bernardo que até quis ficar esperando.

Bernardo waiting for penguins at Cape Wanbrow, Oamaru

O restante do dia foi em Geraldine, uma simpática cidade. Recarregar as baterias das câmeras e celular, cozinhar e (argh) comprar souvenires bestas que custam o olho da cara.

Perto de Geraldine há uma caminhada para chegar na maior árvore conhecida na Nova Zelândia, a Big Tree. É uma trilha curtinha de uns 15 minutos, e no caminho para a tal Big Tree encontramos outras árvores enormes também.

Big Tree Walk, near Geraldine

É.. de fato. O negócio é grande mesmo.

Este artigo é parte da série Diários da Nova Zelândia

  1. Auckland a Mangawhai Heads
  2. Whangarei, Parque Kauri e o Acampamento no Mirante de Tutukaka
  3. O Farol de Matapouri, a Perda da Câmera e a Ponte Whananaki
  4. Kerikeri, Rainbow Falls e Kapowairua
  5. Escalada da Colina Te Karaka em Kapowairua
  6. O Atolamento no Extremo Norte Proibido
  7. Dunas de Te Paki, Cape Reinga e Tapotupotu
  8. O Perigo de Se Atolar em 90 Mile Beach
  9. Buscando o Bernardo, Dormindo no Roger e Visitando a Adidas
  10. Lago Rerewhakaaitu, Barragem Aratiatia, Huka Falls, Rotorua e Taupo
  11. Ferry de Wellington a Picton e Andando em Nelson
  12. A Exaustiva Trilha de 12 Horas em Abel Tasman
  13. Greymouth, Hokitika e Ross
  14. A Chegada em Arthur’s Pass
  15. A Subida do Mt Aicken
  16. As Geleiras: Fox Glacier e Franz Josef Glacier
  17. Quatro Dias em Queenstown
  18. Fiordland, Te Anau e Henry Creek
  19. A Grandeza de Milford Sound
  20. Contorcionismo Pelas Fendas de Clifden Caves
  21. Invercagill e Bluff
  22. Waipapa Pt e Jack’s Blowhole
  23. Curio Bay e Nugget Pt
  24. Brighton e Dunedin
  25. Cape Wanbrow, Geraldine e Big Tree Walk
  26. Christchurch e as Seacliffs

Para seguir a estratégia de não pagar pra dormir em lugar algum, optávamos por lugares abertos e mais isolados - porque é proibido acampar em qualquer lugar. Ao subir a costa leste por mais algumas 4 horas saindo dos penhascos do sudeste, passamos por Brighton, um pequeno vilarejo com gramados em frente à praia. Ali somente eu acampei, Beto e Bernardo ficaram dentro do carro mesmo.

O amanhecer aí rendeu a melhor foto de alvorada que já tirei na vida, o que é curioso pois um dia antes eu havia tirado uma bela foto de um pôr do sol. Detalhe que o céu estava acinzentado já há uns três dias e abriu exatamente nestes momentos.

Sunrise at brighton, near Dunedin

Depois disso fomos para Dunedin, reduto dos irlandeses na Nova Zelândia. A cidade tem muitos prédios e praças antigas. Fiquei perambulando tirando fotos enquanto, novamente, os outros dois foram às compras.

Dunedin funny square

Feitas as compras das dondocas, era hora de tomar banho. A estratégia de não pagar lugares para dormir implicava em também não ter lugar para tomar banho. A solução: piscinas públicas. Toda cidade tinha uma disponível por uns NZ$4 ou NZ$6. Eu nem pagava nada, ia só no vestiário tomar banho mesmo… Hehe…

Depois disso, mais uma organização no carro. A cada 5 dias mais ou menos tínhamos que fazer isso para compensar a bagunça de tira e põe de roupas e comida. Dá pra ver que não carregávamos pouca coisa.

Unpacking the car at Dunedin