sexta-feira, 27 de novembro de 2015

SWT Command

- A maneira mais simples de definir o handler do comando através da propriedade defaultHandlerId. Dessa maneira não é necessário estender org.eclipse.ui.handlers
- Caso se queira que o comando tenha label dinâmico é necessário implementar a interface org.eclipse.ui.commands.IElementUpdater:
    @SuppressWarnings("rawtypes")
    publicvoid updateElement(UIElement element, Map parameters) {
        String text = condicao ? "Texto caso a condição seja satisfeita" : "Texto caso a condição não seja satisfeita";
        
        element.setText(text);
        element.setTooltip(text);
    }

- E quando o texto precisar ser atualizado:

    private void refreshUI(ExecutionEvent event) {
        IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
        ICommandService service = (ICommandService) window.getService(ICommandService.class);
        service.refreshElements("com.o2filmes.storytouch.editor.togglescenenumbers", null);
    }

SAX XML parser

javax.xml.parsers.SAXParser

Parece simples de usar, o único problema é que as tags são carregas através de inversão de controle

instanciar através de SAXParserFactory.newSAXParser()

Javadoc:
http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html
http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/helpers/DefaultHandler.html

MessageBox on SWT

import org.eclipse.swt.widgets.MessageBox;

MessageBox dialog = new MessageBox(shell, SWT.ICON_INFORMATION | SWT.YES | SWT.NO);
dialog.setText("Title");
dialog.setMessage("Message");

int returnCode = dialog.open();

sábado, 11 de outubro de 2014

Sumindo do Facebook

Excluindo os likes

// Ir em: activity log/likes

var className='mrs _2fmu img sp_iV8Rvzq6IkS sx_be605d';
var elements=document.getElementsByClassName(className);

for (var i=0; i < elements.length; i++) {
    var element = elements[i].parentNode.parentNode;
    element.click();

    var links = document.getElementsByClassName('_54nc');
    links[links.length-1].click();
} 



Excluindo os comentários

// Ir em activity log/comments

var className='mrs _2fmu img sp_iV8Rvzq6IkS sx_be605d';
var elements=document.getElementsByClassName(className);

for (var i=0; i < elements.length; i++) {
    var element = elements[i].parentNode.parentNode;
    element.click();

    var links = document.getElementsByClassName('_54nh');
    links[links.length-1].click();
} 



Excluindo os posts

// Ir em activity log/posts

var className='mrs _2fmu img sp_iV8Rvzq6IkS sx_be605d';
var elements=document.getElementsByClassName(className);

for (var i=0; i < elements.length; i++) {
var element = elements[i].parentNode.parentNode; element.click(); var links = document.getElementsByClassName('_54nh'); links[links.length-1].click(); } setTimeout( function () { class x='_42ft _4jy0 layerConfirm uiOverlayButton _4jy3 _4jy1 selected _51sy'; var elements=document.getElementsByClassName(x); for (var i=0; i < elements.length; i++) { var element = elements[i]; element.click(); } }, 10000); 



Observações

  • Estes scripts são pra ser rodados pelo console (rodei eles no firefox)
  • O meu facebook está (estava) em inglês, é possível que algumas coisas não funcionem
  • Esses scripts excluem os principais items do facebook, mas não excluem tudo (a atividade dos aplicativos não é excluída, por exemplo)
  • Fiz estes scripts em poucos minutos para limpar o meu facebook, isto é, eles não funcionam 100%. Precisei rodar eles várias vezes para excluir tudo, especialmente o script de exclusão de posts.
  • Estes scripts só excluem o que estiver carregado na página, isto é, para excluir tudo é necessário rolar a tela para baixar até onde se deseja excluir as coisas.
  • Quanto aos likes rodei o script uma vez para cada ano.
  • O script de comentários rodei uma vez para cada seis meses.
  • O script de posts rodei uma vez para cada quatro meses.
  • É provavel que estes scripts estejam obsoletos em poucos meses.

sábado, 15 de março de 2014

Excluir um compartilhamento oculto no Windows

Nota: testei apenas no XP, portanto há uma boa chance que não funcione em versões mais recentes
fonte: http://support.microsoft.com/kb/314984/pt-br

O WinXP tem o péssimo costume de abrir alguns compartilhamentos ocultos na raiz do C: e na própria pasta Windows, segue um tutorial bem simples de como excluir estes compartilhamentos:

   1. No Painel de controle, clique duas vezes em Ferramentas administrativas e em Gerenciamento do computador.
   2. Expanda Pastas compartilhadas e clique em Compartilhamentos.
   3. Na coluna Pasta compartilhada, clique com o botão direito do mouse no compartilhamento que você deseja excluir, clique em Interromper compartilhamento e em OK.

  

quinta-feira, 31 de outubro de 2013

Git: mover branch para um commit

git branch -f

A lista de branchs pode ser obtida por:

git branch

Os commits podem ser listados com:

git-log

Porém, o comando acima não lista todos os commits, apenas os commits da branch corrente. Os commits que não são filhos de nenhuma branch podem ser listados com:

git-reflog --all

O --all lista todos os commits de todas as branchs.

git add interativo

É possível selecionar quais blocos de alteração (conhecidos no git como "hunks") serão colocados no índice para o próximo commit através do comando:

git add -p [nome do arquivo, caso nenhum seja informado, todos os arquivos são verificados]

Acho que é possível informar mais de um nome de arquivo nesta opção, mas não testei (se alguém testar me diga, por favor :-) ).

Este comando abre uma interface bem simples para quem está acostumado com a linha de comando dos SOs da família *nix. Os comandos mais frequentes nesta interface são:

y: inclui o hunk atual no índice
n: não inclui o hunk atual
q: finaliza a interface, mantém os hunks já adicionados
?: ajuda

domingo, 4 de agosto de 2013

Montando um pen drive do Mac OS no Ubuntu com permissões de escrita e tudo o mais!

Quem usa um pen drive em uma Mac OS e Linux já deve ter enfrentado este problema: se formatar como ext* não abre no Mac, se formata em HFS no Mac depois não tem permissão de escrita no Linux. Uma alternativa (poir do que as duas anteriores) é formatar NTFS, aí dá pra ler e gravar nos dois SOs (e no Windows, se é que isso conta como vantagem), mas as flags de permissão simplesmente não existem nesse sistema de arquivos, isso causa problemas com programas como o git, por exemplo (pra ser suscinto).
Como resolver este problema então?
A alternativa mais simples que encontrei foi formatar o pen drive como hfs+ no Mac e depois forçar a permissão de gravação no Linux. Consigo ler e gravar nos dois SOs (não testei, mas é 99% de certeza que no Windows não vai nem montar o pen drive) e mantenho as flags de permissão.
Para montar o pen drive hfsplus no Linux com permissão de gravação basta apenas usar um -o force no mont. A minha linha de comando ficou assim:

mount -t hfsplus -o force /dev/sdc1/ /media/pendrive

Encontrei esse macete aqui:

http://ubuntuforums.org/showthread.php?t=1660958

Lá o cara fala pra instalar os pacotes hfsplus, hfsprogs e hfsutils. Consegui rodar o comando sem isso, pois provavelmente o Debian já vem com esse suporte (os pacotes não estavam instalados quando rodei o comando) e em algumas distros apenas rodar o comando acima não funcione.

sexta-feira, 1 de junho de 2012

Git do zero

  • GIT
    • Repositório distribuído: o git não trabalha com um servidor centralizado de repositório, como o SVN. Sempre que um usuário clona um repositório ele baixa todo o conteúdo (claro!) juntamente com todo o histórico de commits já feitos.
    • Instalação em Ubuntu
      • sudo aptitude install git
    • Instalador do Windows
    • Instalação em Mac
      • sudo brew install git
    • GIT com repositório local
      • Inicialização do repositórioc e criação de novos arquivos
        • git init .
        • git status
        • echo "arquivo readme" > readme # echo: simplesmente manda pra tela o parâmetro que recebeu. No caso, a saída está sendo redirecionada para um arquivo também chamado readme (O > serve para salvar a saída em tela de um comando qualquer em arquivo. Isto é, o que fica depois do > é o arquivo que é usado como saída do comando que está antes do >).
        • git status
        • git add . # o que estiver depois do # o interpretador de comandos ignora (pelo menos no linux, no windows eu acho que substituindo por ;REM funciona)
        • git commit -m "criação do readme"
      • Configuração de ferramentas gráficas
        • git config --global diff.tool # diff
        • git config --global merge.tool # merge
        • # (recomendo o meld como ferramenta de diff/merge)
      • Modificando arquivo e visualizando as diferenças
        • echo "Arquivo readme" > readme
        • git status
        • git diff
        • git difftool # Esta linha e a anterior são duas forma diferentes de se fazer a mesma coisa, só pra constar
        • git add readme
        • git status
        • git commit -m "Melhoria no readme"
      • Excluindo arquivos
        • rm readme # equivalente windows: del readme
        • git status
        • git rm readme
        • git status
        • git commit -m "Exclusão do arquivo readme"
      • Descartando alterações não commitadas
        • echo "arquivo leiame" > leiame
        • git add leiame
        • git commit -m "Criação do leiame"
        • echo "Alteração indesejada\!" >> leiame # Não sei se o >> funciona no win, a idéia é concatenar conteúdo ao final do arquivo
        • git status
        • cat leiame # win: more leiame
        • git checkout leiame
        • # Observação: o Eclipse não enxerga automaticamente mudanças feitas por ferramentas externas, então é preciso ir no Eclipse e dar um F5 no projeto que foi modificado
        • cat leiame
        • git status
      • Adicionando pastas inteiras ao controle de versão
        • mkdir pasta # win: md (eu acho, mas isso só cria uma pasta)
        • echo file1 > pasta/file1 # win: trocar / por \
        • echo file2 > pasta/file2
        • git status # Notar que neste ponto não são mostrados os arquivos da pasta criada
        • git add .
        • git status # Agora o git já olhou dentro da pasta e já sabe quais são os arquivos que ele precisa adicionar
        • git commit -m "Nova pasta"
        • git status
        • Pastas vazias
          • mkdir emptyfolder
          • ls -l # win: dir (sem o -l no windows)
          • git add . # Ignora a pasta pois está vazia
          • git status # Diz que não há nada a commitar, um git commit depois disso não iria funcionar
          • rmdir emptyfolder # win: rd emptyfolder
          • # Isto é: o git não versiona pastas vazias
        • Excluindo pastas inteiras
          • rm -rv pasta # win: del, já falei!
          • ls -l
        • Criando novas branches e navegando entre elas (localmente)
          • git branch # lista as branchs existentes, a que tem o * é a branch ativa
          • git branch branch1 # Cria uma nova branch chamada branch1
          • git checkout branch1 # Muda a branch ativa
          • git branch
          • ls -l # Vamos ver que branch1 foi criada com base no que tinha na master, mas poderia ter sido criada com base em qualquer branch
          • echo "Ideia maluca" > ideia_maluca
          • echo "leiame versão branch1" >> leiame
          • git add .
          • git commit -m "Ideia maluca"
          • ls -l
          • cat leiame
          • cat ideia_maluca
          • git checkout master
          • ls -l
          • cat leiame
          • git branch -D branch1 # Notar que o -D força a exclusão da branch, enquanto o parâmetro -d é menos agressivo, nesse caso o -d não permitiria excluir pois as alterações feitas na branch1 serão perdidas, como é isso o que eu quero, usei o -D
        • Merge entre branches (localmente)
          • git branch branch1
          • git checkout branch1
          • echo "Ideia maluca" > ideia_maluca
          • echo "leiame versão branch1" >> leiame
          • git add .
          • git commit -m "Ideia maluca"
          • #ok, criamos uma branch que está mais atualizada que a master, agora vamos colocar tudo no lugar
          • git checkout master
          • git merge branch1
          • ls -l
          • cat leiame
          • cat ideia_maluca
        • Merge entre branches (locais) com conflito
          • echo "versão branch master" >> leiame
          • git add .
          • git commit -m "Alteração no readme"
          • git checkout branch1
          • echo "versão branch1" >> leiame
          • git add .
          • git commit -m "Alteração no readme"
          • git checkout master
          • # Nesse ponto o leiame tem uma versão na master e outra na branch1
          • git mergetool leiame # *1
          • git status
          • ls -l
          • cat leiame
          • # *1 Uma opção bem útil é fazer o merge com a opção --no-commit. Esta opção apenas faz o merge, mas não commita nada, permitindo resolver o merge manualmente (e mais facilmente). Ainda é possível usar ferramenta gráfica de merge dessa maneira.
        • Merge com conflito de pastas (localmente, passo opcional, é uma situação menos frequente)
        • Visualizando o histórico de commits: git log
          • git log --graph --name-only --all --decorate
          • Mostra o log bem formatado, o git log tem inúmeras opções
        • Voltando o repositório para commits antigos
          • O "git checkout" pode receber os seguintes parâmetros: branchs, tags ou hashs de commit. O hash de commit é aquela sequencia enorme de numeros que aparece no log.
        • Visualizando a árvore de branches e o histórico de commits: gitk
        •  
           
Este pequeno tutorial só cobriu os principais aspectos do git usando o repositório local, nada foi falado sobre os comandos de sincronia remota (pull e push) e seus efeitos, fica pra um próximo post.

terça-feira, 31 de maio de 2011

Post rápido

Como faz tempo que não posto nada, vai um link rapidinho, mas ótimo:

http://oanaconda.blogspot.com/2011/05/como-veja-trataria-abolicao.html