quarta-feira, 31 de julho de 2013

back to the future (ii)

Savages - "City's Full" (2012)

quarta-feira, 17 de julho de 2013

O BPN

Alguém pôs no Memorando de Entendimento uma data limite para a venda do BPN. O Governo ainda em funções fez da venda do BPN um ponto de honra e assinou um contrato para tal, na véspera do fim do prazo estabelecido. Era obrigatória, dizia, quando tempos depois o cancelamento da venda da TAP mostrou a margem de manobra que sempre há nestas coisas. O acordo de venda do BPN envolveu comprovados telefonemas entre o actual Primeiro-Ministro e responsáveis políticos angolanos, país de onde veio o capital para a compra. Foi uma venda com fins políticos, politicamente enquadrada. Desde que o negócio foi feito, fomos sabendo pormenores. Hoje ficámos a saber que os actuais donos do BPN estão a resolver problemas legais herdados e a mandar a conta ao Estado (ver Público). Podemos não perceber nada desses problemas e até pode acontecer que os actuais donos estejam a fazer um serviço ao Estado. Tudo pode ser. O que é verdadeiramente estranho é que o Estado seja obrigado a pagar contas sobre actos que não pode controlar, sobre cujo preço não se pode sequer pronunciar. Não é estranho? É. Mas outra coisa não seria de esperar de um contrato feito nas circunstâncias descritas, por um Governo que não olhou a meios para atingir determinados fins, quase todos contraproducentes. Pode-se passar uma esponja sobre actos destes? Ou tudo isto é normal e só o povo é que não está a ver bem a coisa?

Pedro Lains, 15/07/2013.

# edit 20/07/2013:

Nicolau Santos, "Contas do Dia" Antena 1, 18/07/2013 [.mp3]

domingo, 7 de julho de 2013

Mac OS X: notificações automáticas de actualizações do sistema para utilizadores standard

UpdateCheck, Mac OS X Software Update notifications for non-admin users
Ideia/script original de Sven Anderson. Modificado por mim para ser compatível com o Mountain Lion. Usa o Finder em vez do Growl para notificar o utilizador; descarrega e instala as actualizações via terminal em vez de abrir a App Store por causa disto.

1.- Aceder à conta administrator.

2.- Abrir o ficheiro "sudoers" via visudo:
~$ sudo visudo

2a) Premir a tecla 'i' para editar.

2b) Adicionar o seguinte:
username ALL=NOPASSWD:/usr/sbin/softwareupdate
(ex: paulo_ ALL=NOPASSWD:/usr/sbin/softwareupdate)

2c) Premir a tecla 'Esc' para sair do modo edição.

2d) Escrever ':w' para gravar o ficheiro.
 
2e) Escrever ':q' para sair.

Nota: Se por qualquer motivo for preciso sair sem gravar, escrever ':q!'.

3.- Voltar à conta standard.


4.- Criar o ficheiro updateChecker.scpt via AppleScript Editor...
 set theList to every paragraph of (do shell script "sudo softwareupdate -l")  
 set updates to ""  
 repeat with anItem in theList  
      if anItem starts with "  * " then  
           if updates is not "" then  
                set updates to updates & return  
           end if  
           set updates to updates & (characters 6 thru -1 of anItem)  
      end if  
 end repeat  
 if updates is not "" then  
      tell application "Finder"  
           set answer to button returned of (display dialog "Software Update available:" & return & updates with title "Software Update available" buttons {"Cancel", "Launch Terminal"} default button {"Launch Terminal"} cancel button {"Cancel"} with icon file ":System:Library:CoreServices:Software Update.app:Contents:Resources:SoftwareUpdate.icns")  
           if answer is equal to "Launch Terminal" then  
                tell application "Terminal"  
                     do script "sudo softwareupdate -i -a"  
                     activate  
                end tell  
           end if  
      end tell  
 end if  
... e copiá-lo para ~/AppleScripts

5.- Criar o ficheiro de.anderson.sven.updateCheck.plist
 ~$ nano ~/Library/LaunchAgents/de.anderson.sven.updateCheck.plist
 <?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
 <plist version="1.0">  
 <dict>  
      <key>Label</key>  
      <string>de.anderson.sven.updateCheck</string>  
      <key>LowPriorityIO</key>  
      <true/>  
      <key>Nice</key>  
      <integer>1</integer>  
      <key>ProgramArguments</key>  
      <array>  
           <string>osascript</string>  
           <string>/Users/username/AppleScripts/updateChecker.scpt</string>  
      </array>  
      <key>RunAtLoad</key>  
      <true/>  
      <key>StartInterval</key>  
      <integer>86400</integer>  
 </dict>  
 </plist>  
Nota 1: Substituir 'username' pelo nome do utilizador. (Atenção: Não funciona se metermos '~'. É mesmo preciso pôr a path toda...).
(ex: /Users/paulo_/AppleScripts/updateChecker.scpt)

Nota 2: A directoria "AppleScripts" é, obviamente, apenas uma sugestão. Se decidirem copiar para outra directoria, não se esqueçam de fazer a respectiva alteração no ficheiro.

6.- Sair da sessão e voltar a entrar.
Ou executar no terminal:
~$ launchctl load ~/Library/LaunchAgents/de.anderson.sven.updateCheck.plist

# edit 23/07/2013

sábado, 22 de junho de 2013

terça-feira, 28 de maio de 2013

Mac OS X: Samba 3, versão open source (II)

1.- Confirmar que a opção "File Sharing" está desactivada (System Preferences, Sharing).

2.- Desactivar o serviço com.apple.netbiosd (Apple's SMB server)
~$ sudo mv /System/Library/LaunchDaemons/com.apple.netbiosd.plist com.apple.netbiosd.bak

ou...

... editamos o ficheiro /etc/services e modificamos as entradas correspondentes às portas 137, 138, 139 e 445 para 19137, 19138, 19139 e 19445 de forma a que os serviços não entrem em conflito caso activemos acidentalmente a opção "File Sharing":

Criar backup do ficheiro original
~$ sudo cp /etc/services /etc/services.bak

~$ sudo nano /etc/services

netbios-ns      19137/udp     # NETBIOS Name Service   
netbios-ns      19137/tcp     # NETBIOS Name Service   
netbios-dgm     19138/udp     # NETBIOS Datagram Service
netbios-dgm     19138/tcp     # NETBIOS Datagram Service
netbios-ssn     19139/udp     # NETBIOS Session Service
netbios-ssn     19139/tcp     # NETBIOS Session Service
microsoft-ds    19445/udp     # Microsoft-DS
microsoft-ds    19445/tcp     # Microsoft-DS


3.- Instalar o Samba (3.6.20) via Homebrew
~$ brew install samba

4.- Criar ficheiro org.samba.smbd.plist:
~$ sudo nano /Library/LaunchDaemons/org.samba.smbd.plist
 <?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
 <plist version="1.0">  
   <dict>  
     <key>Label</key>  
     <string>org.samba.smbd</string>  
     <key>OnDemand</key>  
     <false/>  
     <key>ProgramArguments</key>  
     <array>  
       <string>/usr/local/Cellar/samba/3.6.20/sbin/smbd</string>  
       <string>-F</string>  
     </array>  
     <key>RunAtLoad</key>  
     <true/>  
     <key>ServiceDescription</key>  
     <string>samba</string>  
   </dict>  
 </plist>  

5.- Criar ficheiro org.samba.nmbd.plist:
~$ sudo nano /Library/LaunchDaemons/org.samba.nmbd.plist
 <?xml version="1.0" encoding="UTF-8"?>  
 <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">  
 <plist version="1.0">  
   <dict>  
     <key>Label</key>  
     <string>org.samba.nmbd</string>  
     <key>OnDemand</key>  
     <false/>  
     <key>ProgramArguments</key>  
     <array>  
       <string>/usr/local/Cellar/samba/3.6.20/sbin/nmbd</string>  
       <string>-F</string>  
     </array>  
     <key>RunAtLoad</key>  
     <true/>  
     <key>ServiceDescription</key>  
     <string>netbios</string>  
   </dict>  
 </plist>  

6.- Criar a directoria "private" (O Homebrew não cria automaticamente...):
~$ mkdir /usr/local/Cellar/samba/3.6.20/private

7.- Configurar smb.conf (com acesso "guest"):
~$ sudo nano /usr/local/Cellar/samba/3.6.20/etc/smb.conf

[global]
  workgroup = WORKGROUP
  server string = Samba 3.6.20
  netbios name = gandalf
  security = user
  Map to guest = Bad User
  smb passwd file = /usr/local/Cellar/samba/3.6.20/private/smbpasswd
  private dir = /usr/local/Cellar/samba/3.6.20/private
  passdb backend = tdbsam
  client NTLMv2 auth = Yes
  log level = 2
  debug timestamp = No
  debug hires timestamp = Yes
  max open files = 16384
  ldap ssl = start tls
  lock directory = /usr/local/Cellar/samba/3.6.20/var/locks
  pid directory = /usr/local/Cellar/samba/3.6.20/var/locks
  usershare path = /usr/local/Cellar/samba/3.6.20/var/locks/usershares
  idmap cache time = 604800
  wide links = No

[share]
  comment = MacBook
  path = /Users/Shared/share
  guest ok = yes
  wide links = no
  writeable = Yes
  force create mode = 0755
  force directory mode = 0755


8.- Verificar se há erros:
~$ testparm /usr/local/Cellar/samba/3.6.20/etc/smb.conf

se houver, é quase de certeza por causa da inexistência das directorias mencionadas acima. Por isso, criamos manualmente:
~$ mkdir /usr/local/Cellar/samba/3.6.20/var
~$ mkdir /usr/local/Cellar/samba/3.6.20/var/locks
~$ mkdir /usr/local/Cellar/samba/3.6.20/var/locks/usershares

9.- Iniciar serviço
~$ sudo launchctl load /Library/LaunchDaemons/org.samba.smbd.plist
~$ sudo launchctl load /Library/LaunchDaemons/org.samba.nmbd.plist

Et voilà.

Mais informações:
- http://www.x2416.com/2012/06/samba-on-osx-lion-server.html
- http://blog.rubbingalcoholic.com/post/39412902216/fix-smb-windows-sharing-permissions-issue-in-os-x-10-7
...
- http://penadigital.blogspot.pt/2012/09/mac-os-x-samba-3-versao-open-source.html

#edit 16.11.2013

terça-feira, 21 de maio de 2013

Mac OS X: como instalar o FFmpeg

... via Homebrew com as principais opções activadas:

~$ brew install ffmpeg --with-fdk-aac --with-ffplay --with-freetype --with-frei0r --with-libass --with-libvo-aacenc --with-libvorbis --with-libvpx --with-opencore-amr --with-openjpeg --with-opus --with-rtmpdump --with-schroedinger --with-speex --with-theora --with-tools

Alguns exemplos:
Converter .wav para .mp3:
~$ ffmpeg -i ficheiro.wav -f mp3 ficheiro.mp3

Converter .avi para dvd (com legendas):
~$ ffmpeg -i ficheiro.avi -vf subtitles=legendas.srt -target pal-dvd -aspect 16:9 ficheiro.mpeg

Mais info:
- FFmpeg Documentation
- FFmpeg Wiki
...
- 19 ffmpeg commands for all needs

# edit 14/06/2013

quarta-feira, 15 de maio de 2013

Imbecilidade é isto

(...) Se a troika diz que precisamos cortar quatro mil milhões estruturais pela e para a sustentabilidade do Estado, então o que a minha geração tem de dizer é que se corte os milhões que forem precisos - porque se a troika define os mínimos do sustentável é obrigação dos jovens exigir um país que seja muito para lá dos 'mínimos' da sustentabilidade.

Joana Barata Lopes, presidente da JSD/Lisboa
in DN, 15/05/2013

sábado, 4 de maio de 2013

Sacana do mais reles que há

Conta de Twitter de Passos Coelho (@passoscoelho), 02 de Maio de 2011.

domingo, 28 de abril de 2013

Samsung Galaxy Ace: compilar CyanogenMod 7

OS: Ubuntu Linux 12.04

Requisitos:

1) Para os sistemas de 32 e 64 bits:
~$ sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-6-jre openjdk-6-jdk pngcrush schedtool libxml2 libxml2-utils xsltproc

Para os sistemas de 64bits:
~$ sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-4.7-multilib g++-4.5-multilib

2) Sacar o Android SDK em http://developer.android.com/sdk/index.html

3) Acrescentar a respectiva directoria na PATH:
~$ export PATH=${PATH}:~/adt-bundle-linux-x86/sdk/platform-tools

Instruções:

1) Criar as seguintes directorias:
~$ mkdir -p ~/bin
~$ mkdir -p ~/android/cyanogenmod7


2) Sacar o "repo" e torná-lo executável:
~$ cd bin
~$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
~$ chmod a+x ~/bin/repo
~$ export PATH=${PATH}:~/bin


3) Sincronizar código fonte do CM7:
~$ cd android/cyanogenmod7
~$ repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
~$ repo sync -j4


4) Definir CM7 para o SGA:
~$ cd android/cyanogenmod7
~$ source build/envsetup.sh
~$ lunch

- Seleccionar "cm_cooper-userdebug". Se por algum motivo não aparecer na lista, experimentar:
~$ lunch cm_cooper-userdebug (ou "lunch full_cooper-userdebug")

Alternativa:
~$ cd android/cyanogenmod7
~$ cd device/samsung
~$ git clone https://github.com/vo-1/android_device_samsung_cooper cooper


5) Extrair códigos proprietários:
- Conectar o SGA ao computador via USB (activar "Depuração USB").
~$ cd ~/android/cyanogenmod7/device/samsung/cooper
~$ ./extract-files.sh


Alternativa:
~$ cd android/cyanogenmod7
~$ cd vendor/samsung
(não existe? criar manualmente)
~$ git clone https://github.com/vo-1/android_vendor_samsung_cooper cooper

6) Sacar o ROM Manager (requisito necessário para compilar o CyanogenMod):
~$ cd android/cyanogenmod7/vendor/cyanogen
~$ ./get-rommanager


---
Este passo é só para quem escolheu a via "Alternativa" -- ver 4) e 5)
~$ cd android/cyanogenmod7
~$ . build/envsetup.sh

---
Em Debian 7 "Wheezy", criar o atalho python2 para o python2.7:
~$ su
~$ cd /usr/bin
~$ ln -s python2.7 python2

---

7) Iniciar compilação:
~$ brunch cooper

Depois de algumas horas a queimar a CPU, eis que finalmente temos a nossa versão do CyanogenMod (~/android/cyanogenmod7/out/target/product/cooper/cm-7-2013XXXX-UNOFFICIAL-cooper.zip) :)


Desde a última versão "nightly", lançada oficialmente em 01 de Março de 2013, que já foram feitas correcções e alterações importantes (ver changelogs aqui). Ao compilarmos o CyanogenMod directamente da fonte, ficamos com a garantia de ter o sistema sempre actualizado sem estar à espera que alguém o faça por nós ;)

Para mais informações, consultar:
- http://wiki.cyanogenmod.org/w/Build_for_cooper
- http://forum.xda-developers.com/showthread.php?t=2241832
- http://source.android.com/source/initializing.html
...
- http://wiki.cyanogenmod.org/w/Install_CM_for_cooper

Links úteis:
- android-wired-tether

Google Drive/cooper

# edit 01/06/2013:
- ver "Alternativa" do ponto 5.
- adicionado link para a pasta partilhada no Google Drive.

# edit 14/06/2013:
- ver nota para Debian 7 "Wheezy".