quarta-feira, 21 de outubro de 2015

Como se livrar de eventos recorrentes no Google Calendar

Havia instalado um app de corrida no celular para me iludir tentar fazer algum exercício. A questão foi que o aplicativo, para me lembrar das corridas, criou centenas de eventos na agenda do Google e eu não conseguia apagar todos de uma vez pois eles não estavam ligados, como se fossem independentes.


A solução de programador foi criar um script na plataforma Google Apps Script que permite interagir com algumas aplicações através de javascript. Mais informações aqui .


Criei o script abaixo 

var calendar_name = 'put calendar name here';
var event_name = 'put event title here';
var start_date = 'AAAA-MM-DD';
var end_date = 'AAAA-MM-DD'
var not_found_calendar = true;


function wipeBastardEvent(cal){
 
  Logger.log(cal.getName());
  
  date_start_parts = start_date.split('-');
  date_end_parts = end_date.split('-');
  
  var date_initial = new Date(date_start_parts[0], date_start_parts[1], date_start_parts[2]);
  var date_end = new Date(date_end_parts[0], date_end_parts[1], date_end_parts[2]);
  
  var events = cal.getEvents(date_initial, date_end)
  
  var bastardEventsSentToHellCount = 0;
  Logger.log(start_date);
  Logger.log(end_date);
  for(i in events){
    
    Logger.log(events[i].getTitle());
    if(events[i].getTitle() == event_name){
      bastardEventsSentToHellCount += 1;
      events[i].deleteEvent();
    }
    
  }
  msg = "Deleted " + bastardEventsSentToHellCount + " events with name '" + event_name + "'";
  Logger.log(msg);
  
}

function main() {
 
  var calendars = CalendarApp.getAllOwnedCalendars();

  for (i in calendars){
    if(calendar_name == calendars[i].getName()){
      wipeBastardEvent(calendars[i]);
      not_found_calendar = false;
      break;
    }
  }
  
  if(not_found_calendar){
     msg  = "Calendar with name '" + calendar_name + "' not found. Is it correct?";
     Logger.log(msg);
   
  }               
}


e executá-lo aqui

sexta-feira, 17 de abril de 2015

Python 3: A novela ou por que o PIP insiste em atualizar o python2

Python 3 foi lançado no final de 2008 e, desde então, nunca pensei em dar uma chance a essa nova versão. Vivia feliz e contente com o Python 2.7.
Belo dia, decidi me aventurar na nova versão, acreditando que já estava suficientemente maduro e que deveria, enfim, absorver as mudanças inseridas na linguagem. Confesso! Eu me sentia incomodado com a necessidade de usar parênteses para evocar o print.
Após instalado e já com um projeto para servir de piloto, tento instalar as libs necessárias para o projeto. A saber, flask e pexpect. E me deparo com o seguinte erro:



Perplexo, olho para a última linha sem entender nada. Python2.7? Estou usando o pip3!! Instala, desinstala, brew, ports, configure, make... sem sucesso.

Até que tenho a ideia de debugar para ver de onde o des... o programa está tirando esse path.

Para encurtar, existem 3 arquivos de configuração e o responsável pela minha desgraça era o <home>/.pip/pip.conf com a linha target=/Library/Python/2.7/site-packages.

Bastou removê-la e voilà!



terça-feira, 3 de janeiro de 2012

Exibir/Esconder a pasta Library no Finder

Acho que o Osx esconde a pasta ~/Library para evitar que o usuário acidentalmente apague alguma configuração.

Para mostrar, digitar no terminal:

chflags nohidden ~/Library/

Para esconder:

chflags hidden ~/Library/

sexta-feira, 9 de dezembro de 2011

Configurar 2 aplicações Flask com uWsgi e Nginx

Estava procurando uma forma de fazer deploy de duas ou mais aplicações do Flask sob o mesmo processo do uwsgi por facilidades de administração e usando o nginx como web server. Bem, depois de tentar várias coisas, obtive uma dica do Roberto De Loris na lista de usuários do uWsgi.

Ainda estou testando e brincando com as configurações, mas quem fez o truque foi o parâmetro --manage-script-name. Ele faz com que o uWsgi faça o parse da url e determine o SCRIPT_NAME daí.

Fiz duas aplicações Hello, World no Flask: teste.py e teste2.py

Então, tenho a seguinte configuração no uWsgi:

uwsgi --socket 127.0.0.1:9001  --master --process 8  --manage-script-name --pythonpath /Users/andre/tmp  --mount /apps/teste=teste:app --mount /apps/teste2=teste2:app

E a seguinte diretiva Location no Nginx:


location /apps {
  include uwsgi_params;
  uwsgi_pass 127.0.0.1:9001;
}

Funcionando bem, mas quero experimentar mais algumas coisas.

Atalho para trocar entre Programas e Janelas

Para trocar entre programas, existem várias opções, mas duas que eu utilizo muito são:
command + tab e mantenho command pressionado e vou navegando com toques na tecla tab ( ou shift + tab para voltar ) e command + tab e utilizo o mouse para escolher o programa que quero.

Agora descobri como alternar entre janelas de uma mesma aplicação como, por exemplo, várias janelas de terminal.

Basta usar command + `. Simples.

quinta-feira, 8 de dezembro de 2011

Terminal a partir de uma pasta no Finder

Essa é daquelas onde trabalhamos ora no modo gráfico( Finder ) e ora no shell. Eu faço isso e estava sentindo falta daquele acesso "Abrir terminal nesse local" onde será aberto uma janela de terminal com o diretório corrente onde você escolheu no finder.

Bem, é só habilitar o serviço em Preferências do Sistema > Teclado > Atalhos > Serviços.


Habilitar as opções Novo terminal na Pasta ou Novo Aba de Terminal  na Pasta - esta última opção com sotaque alemã : )


Para usar, basta control + click ou botão direito sobre a pasta e serviços/opção desejada.

quarta-feira, 30 de novembro de 2011

Configurar atalho de teclado no Safari.

Comprei recentemente um macbook e ainda estou na fase de aprendizado superintensivo.

Coisas básicas como print screen ( command + shift + 3, mas existem outras combinações.
Veja mais aqui ).

Penei um pouquinho para descobrir como fazer para customizar os atalhos do Safari. Em especial, o atalho que posiciona o foco na caixa de texto de busca do google, no canto superior direito. Originalmente  é command + option + f e eu queria alterar para command + k, como no Firefox.

Basta ir em Preferências de Sistema > Teclado > Atalhos >Atalhos de Aplicativos.


Daí, basta adicionar a aplicação acionando o botão '+' ...



... e digitar o texto do item de menu que, no meu caso, é Pesquisa Google...'  com reticências. Pronto.