Friday, October 26, 2012

Colocou na Internet, já é e sem "undo".




Uma amiga nossa postou isso no FB:


     IMPORTANTE...
     A todos meus contatos, PEÇO UM FAVOR: com as mudanças do Facebook,
agora todos ficam sabendo das nossas coisas, gente que nem está nos
nossos contatos, só porque um contato faz um "comentário" ou "curte"
algo nosso. Gentileza observar: aqui mesmo, acima a esquerda, posicione
o mouse sobre a minha foto , o meu avatar, (sem clicar). Espere até
aparecer uma janela e posicione o mouse sobre o icone "Amigos" (também
sem clicar), depois vá até "Configurações" e aí sim clique. Vai aparecer
uma lista: clique em "Comentários e Curtir" desmarcando essa opção.
Assim minhas atividades ficarão restritas aos meus amigos e familiares,
não se tornando domínio público. Se quiser copiar e colar no seu mural,
irá assegurar a sua privacidade.
     Obrigada a todos. (UMA BOA IDEIA)


é isso mesmo?
-----------------------------------

Certamente, os relacionamentos não são alterados na base de dados em função da configuração.

A configuração é um ajuste pessoal, que filtra a visualização da informação que você deseja ver, e que certamente não interfere na máquina de busca e associações das medias sociais.

Desativar uma opção pode garantir uma personalização da visualização, apenas.
Por que?
Imagine que a configuração pessoal afetasse o banco de dados, então uma vez desabilitada, não poderia ser novamente ativada, sem possível perda de informações.

Imagine que A é amigo de B, e B amigo de C.
Todos deixaram inicialmente suas configurações habilitas.
Oras, se B ao desabilitar alterasse a base de dados, então exigiria a sincronização desses dados entre A, B e C.
Certamente desapareceriam das telas de A e C informações, misteriosamente, por decorrência da ação de B.
Muitos casos ficariam estranhos.
Isso examinado nesse caso trivial é muito simples, mas a replicação recursiva por toda a malha de associações do banco de dados seria imprevisível e extremamente dispendiosa.
E quando falamos de banco de dados de medias sociais, é algo gigantesco, que qualquer DBA "começa a suar frio" só de pensar em perder a consistência do banco.

Portanto, é que nem cofrinho do tipo "porquinho inquebrável".
Colocou a moedinha ali, nunca mais!

Outro fator "chave" - o interesse econômico.
Por trás disso, existe o interesse comercial, porque a massa de dados é vendida (ou arrendada, alugada, seja lá como for... ) para operações de data warehousing, que extraem perfis e estatística do tipo que alimentam os sites, além da indústria de marketing, e toda a sorte de especulação de comportamento, rastreamento e tendências sociais.

É daí que vem o subsídio sustenta o caráter "free" da rede.


-----
Social Media Tracking
Rastreamento em Media Social

Estendendo o texto acima, sobre a possibilidade de um "undo" em medias sociais, ou seja desfazer algo enviado, segue abaixo, uma pesquisa realizada (embora já o saibamos de ouvir falar) sobre as informações colhidas por aplicativos "facebook" (e cia).


 

 Observando-a, poderemos entender melhor a questão.

A situação é ainda mais "complicada" porque o rastreamento é realizado por diversas alternativas.
A coleta de dados provenientes de fontes diversas é consolidada em pesquisas.

Havendo várias fontes alternativas, mesmo que um dado pudesse ser eventualmente apagado ou modificado, poderia ser reescrito.
Por que?
É o efeito colateral da replicação da informação.
Através dela e mediante a consolidação de dados, pode-se obter uma taxa de confiabilidade do dado que foi inserido ou a ainda aponta-se a diversidade de alternativas para aquele usuário.
Por exemplo, um mesmo usuário com vários e-mails ou endereços díspares, incoerentes, etc.

A replicação de fontes promove o enriquecimento multidimensional do data warehouse.
Ou seja, gradativamente, o conjunto de dados é enriquecido com novas informações que permitam gerar um novo contexto e que favoreçam a criação de uma dimensão extra no banco de dados.
Cada dimensão pode ser uma aspecto da sua vida...

Conclusão, até mesmo a singela "mentira" como forma de proteção pessoal fica cada vez mais frágil ou inócua.

Sugestões para reduzir sua exposição, lembre-se:

1. Qualquer via Internet é pública e sem volta (sem "undo").
    Pense muito bem antes de digitar.

2. Adote como regra não trafegar informações pessoais.
    Fique restrito àquelas exclusivamente necessárias ou já públicas de fato (seu e-mail, por exemplo).

3. O dado irrelevante de hoje, ou até mesmo inocente, pode ser muito relevante amanhã.
    Porque um novo contexto passa a fazer sentido para algo que não o tinha isoladamente.

4. Qualquer informação pode adquirir um contexto à medida que é somada a outra.
    Além das análises dimensionais de data warehouses temos que lembrar os recursos de análise oferecidos pela inteligência artificial (AI).
    Por exemplo, podemos realizar classificações utilizando redes kohonem, que podem até mesmo classificar eletrocardiogramas (ECG).
    Por curiosidade, veja o site:
   
http://www.pee.ufrj.br/teses/?Resumo=2000034001

5. Tudo que é de graça tem preço caro embutido de alguma forma e não declarado explicitamente, que talvez você não desejasse arcar.

6. Evite instalação de softwares gratuitos.
    Grande parte dos softwares que prestam serviços simples de áudio, vídeo, comunicação, recursos gráficos e etc. são grandes candidatos a vetores de informação social como forma de autosustentação econômica.
    Hardware hoje é barato.
    Se precisar usar software não confiável, eleja uma máquina só para isso.
    Reserve outra máquina para uso pessoal e privado apenas com o que for considerado seguro e necessário.

7. Utilize e pesquise ferramentas de segurança pagas e dê preferência a software pago de fonte segura.
    Lembre-se: nada trabalha de graça - não há milagre.

8. Criptografe o que for pessoal com entropia acima de 1024bits.
    E não mantenha a chave no mesmo ambiente...

Configuring Apache2 Virtual Host - Creating a working Directory

Depending on the apache2 version and environment, the configuration has some different details.

Below, you get  summarized procedures to install on Windows 7 and Debian 5.



WINDOWS 7

Edit:

$INSTALL_DIR\conf\httpd.conf

Usually at:
C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf

and find:
    # Redirect permanent /foo http://localhost/bar
then add the following:       

        # mapping dev.php directory
        Alias /devphp "D:/work/dev/php"
       
                Options Indexes MultiViews
                AllowOverride None
                Order allow,deny
                Allow from all
       



See additional examples on debian section below.


DEBIAN 5

If a directory requires permission, such as $HOME (the user's home), then it's required to add the user to the apache2's data group.
Below you find three examples (yellow).



# adding a new user to apache2 data group:
 sudo adduser www-data user1
# checking:
 groups www-data
# edit the file:
 /etc/apache2/sites-available/default
# and add the following at the end but before the </VirtualHost> tag:

<VirtualHost *:80>
    ...
        # usual configuration on debian to share local files
    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

    # configuration for local development purpose without requiring to add users to apache2's www-data group
    Alias /dev "/home/dev"
  <Directory "/home/dev">
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      #Allow from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
      #DirectoryIndex index.html
 </Directory>

    # configuration for personal local development purpose requiring to add the user to apache2's www-data group
    Alias /devphp "/home/alsdias/work/dev/php"
  <Directory "/home/alsdias/work/dev/php">
      Options Indexes MultiViews FollowSymLinks
      AllowOverride None
      Order deny,allow
      Deny from all
      #Allow from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
      #DirectoryIndex index.html
  </Directory>
</VirtualHost>
   
# restart service:
sudo /etc/init.d/apache2 restart


NOTE:

Notice the following directions.
They are important and are self-explained:

      #Allow from all
      Allow from 127.0.0.0/255.0.0.0 ::1/128
      #DirectoryIndex index.html



Sunday, October 21, 2012

maven references failure - workaround

Overview

This maven use case presents three alternatives to solve its dependencies when the usual method fails - maven update.

It was created from direct experience during a CXF web service project using eclipse and rampart library.

The alternatives shown are:

1. Upgrades to a newer version that probably has already been fixed, but solving some last issue manually.

2. Comments about the maven's exclusion element alternative, useful in cases of fewer occurrences.

3. Shows a solution when there are too many occurrences and the prior alternative comes to be time consuming.



In a CXF web service project requiring rampar 1.4 library, it was added the following dependencies:

<dependency>
  <groupId>org.apache.rampart</groupId>
  <artifactId>rampart-policy</artifactId>
  <version>1.4</version>
</dependency>

<dependency>
  <groupId>org.apache.rampart</groupId>
  <artifactId>rampart-core</artifactId>
  <version>1.4</version>
</dependency>

The first approach is to add the dependencies as usual.
After adding them and performing the respective update, it was generated a huge list of messages about missing dependencies - exactly 73 lines.

Here is a small sample of the error messages generated:

Description  Resource  Path  Location  Type
ArtifactDescriptorException: Failed to read artifact descriptor for bouncycastle:bcprov-jdk13:jar:132: ArtifactResolutionException: Failure to transfer bouncycastle:bcprov-jdk13:pom:132 from http://ws.zones.apache.org/repository2 was cached in the local repository, resolution will not be reattempted until the update interval of apache-ws-snapshots2 has elapsed or updates are forced. Original error: Could not transfer artifact bouncycastle:bcprov-jdk13:pom:132 from/to apache-ws-snapshots2 (http://ws.zones.apache.org/repository2): Connect times out  pom.xml  /SecureClient  line 1  Maven Dependency Problem
Missing artifact antlr:antlr:jar:2.7.7  pom.xml  /SecureClient  line 1  Maven Dependency Problem
Missing artifact aopalliance:aopalliance:jar:1.0  pom.xml  /SecureClient  line 1  Maven Dependency Problem
Missing artifact asm:asm:jar:3.3.1  pom.xml  /SecureClient  line 1  Maven Dependency Problem
...
...




If maven references fail downloading the respective jars (broken references) a workaround is to try another version, preferably a newer one.

Solution

I began switching the rampart version to a newer one:

<dependency>
    <groupId>org.apache.rampart</groupId>
    <artifactId>rampart-core</artifactId>
    <version>1.6.2</version>
</dependency>


but still failed due to one dependency : xalan 2.7.1 .
The message returned was "an invalid file".

The workaround was to complete the task manually.

The xalan dependency was downloaded from
http://mvnrepository.com/artifact/xalan/xalan/2.7.1
and the the new jar file was copied overwriting the older one.


How do we overwrite the older jar?

Copy the new jar to the local repository.



Where is the local repository?

To find out where is the local repository, edit:
 /home/$USER/.m2/settings.xml

and check the element:
<localRepository>${user.home}/work/dev/java/repository/mvn_repo</localRepository>


Alternatively, if using eclipse, check the preferences:
menu > windows > preferences > maven > user settings > local repository


How do we get the reference for a new version?

Go to maven repository.
There you get the snippet for the pom dependency and if necessary, you may download the jar file also.
Check it on the link above.


Suppose that switching to newer versions is not possible due to compatibility issues.
 

How to fix?

Checking the pom file on the local repository, I've noticed a huge list of dependencies created automatically by maven during the update at the first attempt.

A possible solution is to use exclusions.
For instance:

<dependency>
  ...
  <exclusions>
    <exclusion>
      <groupId>javax.jms</groupId>
      <artifactId>jms</artifactId>
    </exclusion>
  ...
  </exclusions>
</dependency>

Considering that I had a pom file containing more than 300 lines, dozens of dependencies, that procedure would be time consuming.
Not advisable, at all!

So I had to work on an alternative solution.
Instead of excluding explicitly, why not doing implicitly, and let the maven procedure and the compiler warn if something wrong goes on?

To do so, I downloaded the two jar files from  maven central repository :

rampart-core-1.4.jar
rampart-policy-1.4.jar


After it was added the rampart dependencies:

<dependency>
  <groupId>org.apache.rampart</groupId>
  <artifactId>rampart-policy</artifactId>
  <version>1.4</version>
</dependency>

<dependency>
  <groupId>org.apache.rampart</groupId>
  <artifactId>rampart-core</artifactId>
  <version>1.4</version>
</dependency>


Then, it was performed the manual installations using the following commands:

mvn install:install-file -Dfile=rampart-core-1.4.jar -DgroupId=org.apache.rampart  -DartifactId=rampart-policy -Dversion=1.4 -Dpackaging=jar
mvn install:install-file -Dfile=rampart-core-1.4.jar -DgroupId=org.apache.rampart  -DartifactId=rampart-core -Dversion=1.4 -Dpackaging=jar




In the code below, it's possible to notice the "rampart-policy-1.4.pom" file generated by the manual installation omitting the dependencies:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.rampart</groupId>
  <artifactId>rampart-policy</artifactId>
  <version>1.4</version>
  <description>POM was created from install:install-file</description>
</project>


Finally, the project was updated using maven > update dependencies, without no errors.

The final result with rampart dependency correctly assigned:



The successful build:


Saturday, October 20, 2012

Tip Section: The still valuable old stuff - consider it

Usually, we get the general idea that old stuff is useless or garbage.

For instance, if you need to understand in details the concepts of stubs and skeleton, messaging, transparent fail-over, a full description of ejb principles, etc., surely you'll find it on
Mastering Enterprise JavaBeans - Ed Roman.

It's about EJB2, but still a classic, cause the concepts are useful to understand many other technologies like jabber, JMS, EJB3, Web Services, etc.

A new book usually do not waist resources repeating in details full old stuff but still important and present on the base of the new one.
At most, it offers a summary about it.
Very reasonable.



Remember that the new lays on the old, and usually the new is a next step and rarely destroys the prior knowledge, but improves it, extending it.

Using SNV with subversive and Eclipse #2 - Resource unavailable/locked


If you get the message that an operation, like commit, update, etc, was not possible due to
"unavailable resource" or "locked resource", but the resource was unlocked and it's available,
and others things like that while performing a versioning task, do an outside test.
If you have another versioning control, like tortoise, test the repository repeating the same operations.
If successful, you can conclude that the problem comes from the eclipse's versioning environment.
This happens due to some plugins' malfunction. Go to the eclipse workspace directory where the 
".metadata" folder is. This directory keeps all the workspace configurations. Close eclipse.
The direct way, delete the ".metadata" directory. When you reopen eclipse, the personal configurations
were gone and you're gonna have to do them again. If you keep a backup of this ".metadata" directory, all you
have to do is to copy it.
Now, repeat the versioning operations again to make sure the problem is solved.

How to add a script on crontab - short steps


  Vim is the default editor of crontab.
  So, I'm gonna use it here.
 
  Create your script file - any editor, but using vim:
    vim clean_wtmpx.sh
 
  Add your command line - type 'i' to get into the insert mode and then these commands:
  #!/bin/sh
  cat /dev/null > /var/adm/wtmpx
 
  To save and close - hit "esc" to get out the insert mode and then type:
  :x
 
  The first line is used to indicate a shell script on bash. It's optional.
 
  Set permissions on the new file created:
  chmod 775 clean_wtmpx.sh
 
  Test you command before, executing it. Type on prompt:
  ./clean_wtmpx.sh
 
  Open the crontab on edit mode:
      crontab -e
 
  Add this line:
  20 22 * * * dir_path/clean_wtmpx.sh 2>> dir_path/crontab.lob
 
  To save and exit the crontab:
  esc
  :x
 
  Explaining the crontab's command line:
  dir_path is your path the "clean_wtmpx.sh" file.
  Everyday at 10:20 PM the script "dir_path/clean_wtmpx.sh" will run.
  If just in the case of some output is generated (for instance error messages) is saved on "crontab.log" file.
  Certainly, this is not the case of your command, so you can ignore the log file, setting like this:
 
  20 22 * * * dir_path/clean_wtmpx.sh
 
 
  Extra - short summary:
  To list what you have on crontab, type:
  contrab -l
 
  The crontab command line is divided in space delimited fields.
  The first 5 fields is related about time settting followed by a command field, using this format:
      minutes  hour  day_of_month month day_of_week   command
 
  Tip:
  Always perform a crontab's test, creating a fake line to start your command in the next one or two minutes in order to check it.

konqueror message: "cold not register with dcop"


If you get a message trying to open a file, usually a package like jar, tar, zip, restart konqueror as root and try again.



Privacidade na Media Social - Posso desfazer?


Uma amiga nossa postou isso no FB:


     IMPORTANTE...
     A todos meus contatos, PEÇO UM FAVOR: com as mudanças do Facebook,
agora todos ficam sabendo das nossas coisas, gente que nem está nos
nossos contatos, só porque um contato faz um "comentário" ou "curte"
algo nosso. Gentileza observar: aqui mesmo, acima a esquerda, posicione
o mouse sobre a minha foto , o meu avatar, (sem clicar). Espere até
aparecer uma janela e posicione o mouse sobre o icone "Amigos" (também
sem clicar), depois vá até "Configurações" e aí sim clique. Vai aparecer
uma lista: clique em "Comentários e Curtir" desmarcando essa opção.
Assim minhas atividades ficarão restritas aos meus amigos e familiares,
não se tornando domínio público. Se quiser copiar e colar no seu mural,
irá assegurar a sua privacidade.
     Obrigada a todos. (UMA BOA IDEIA)


é isso mesmo?
-----------------------------------

Certamente, os relacionamentos não são alterados na base de dados em função da configuração.
A configuração é um ajuste pessoal, que filtra a visualização da informação que você deseja ver, e que certamente não interfere na máquina de busca e associações das medias sociais.

Desativar uma opção pode garantir uma personalização da visualização, apenas.
Por que?
Imagine que a configuração pessoal afetasse o banco de dados, então uma vez desabilitada, não poderia ser novamente ativada, sem possível perda de informações.

Imagine que A é amigo de B, e B amigo de C.
Todos deixaram inicialmente suas configurações habilitas.
Oras, se B ao desabilitar alterasse a base de dados, então exigiria a sincronização desses dados entre A, B e C.
Certamente desapareceriam das telas de A e C informações, misteriosamente, por decorrência da ação de B.
Muitos casos ficariam estranhos.
Isso examinado nesse caso trivial é muito simples, mas a replicação recursiva por toda a malha de associações do banco de dados seria imprevisível e extremamente dispendiosa.
E quando falamos de banco de dados de medias sociais, é algo gigantesco, que qualquer DBA "começa a suar frio" só de pensar em perder a consistência do banco.

Portanto, é que nem cofrinho do tipo "porquinho inquebrável".
Colocou a moedinha ali, nunca mais!

Outro fator "chave" - o interesse econômico.
Por trás disso, existe o interesse comercial, porque a massa de dados é vendida (ou arrendada, alugada, seja lá como for... ) para operações de data warehousing, que extraem perfis e estatística do tipo que alimentam os sites, além da indústria de marketing, e toda a sorte de especulação de comportamento, rastreamento e tendências sociais.

É daí que vem o subsídio sustenta o caráter "free" da rede.

-----
Social Media Tracking
Rastreamento em Media Social



Pesquisa sobre facebook
http://www.zonealarm.com/blog/index.php/2012/10/data-hungry-apps



Estendendo o texto acima, sobre a possibilidade de um "undo" em medias sociais, ou seja desfazer algo enviado, segue abaixo, uma pesquisa realizada (embora já o saibamos de ouvir falar) sobre as informações colhidas por aplicativos "facebook" (e cia).

Observando-a, poderemos entender melhor a questão.


A situação é ainda mais "complicada" porque o rastreamento é realizado por diversas alternativas.
A coleta de dados provenientes de fontes diversas é consolidada em pesquisas.

Havendo várias fontes alternativas, mesmo que um dado pudesse ser eventualmente apagado ou modificado, poderia seria reescrito.
Por que?
É o efeito colateral da replicação da informação.
Através dela e mediante a consolidação de dados, pode-se obter uma taxa de confiabilidade do dado que foi inserido ou a ainda aponta a diversidade de alternativas para aquele usuário.
Por exemplo, um mesmo usuário com vários e-mails ou endereços díspares, incoerentes, etc.

A replicação de fontes promove o enriquecimento multidimensional do data warehouse.
Ou seja, cada vez mais forma-se um conjunto de dados que permite gerar um contexto que favoreça a criação de uma dimensão extra no banco de dados.
Cada dimensão pode ser uma aspecto da sua vida...

Conclusão, até mesmo a singela "mentira" como forma de proteção pessoal fica cada vez mais frágil ou inócua.

Sugestões para reduzir sua exposição, lembre-se:

1. Qualquer via Internet é pública e sem volta (sem "undo").
    Pense muito bem antes de digitar.

2. Adote como regra não trafegar informações pessoais.
    Fique restrito àquelas exclusivamente necessárias ou já públicas de fato (seu e-mail, por exemplo).

3. O dado irrelevante de hoje, ou até mesmo inocente, pode ser muito relevante amanhã.
    Porque um novo contexto passa a fazer sentido para algo que não o tinha isoladamente.

4. Qualquer informação pode adquirir um contexto à medida que é somada a outra.
    Além das análises dimensionais de data warehouses temos que lembrar os recursos de análise oferecidos pela inteligência artificial (AI).
    Por exemplo, podemos realizar classificações utilizando redes kohonem, que podem até mesmo classificar eletrocardiogramas (ECG).
    Por curiosidade, veja o site:
    http://www.pee.ufrj.br/teses/?Resumo=2000034001

5. Tudo que é de graça tem preço caro embutido de alguma forma e não declarado explicitamente, que talvez você não desejasse arcar.

6. Evite instalação de softwares gratuitos.
    Grande parte dos softwares que prestam serviços simples de áudio, vídeo, comunicação, recursos gráficos e etc. são grandes candidatos a vetores de informação social como forma de autosustentação econômica.
    Hardware hoje é barato.
    Se precisar usar software não confiável, eleja uma máquina só para isso.
    Reserve outra máquina para uso pessoal e privado apenas com o que for considerado seguro e necessário.

7. Utilize e pesquise ferramentas de segurança pagas e dê preferência a software pago de fonte segura.
    Lembre-se: nada trabalha de graça - não há milagre.

8. Criptografe o que for pessoal com entropia acima de 1024bits.
    E não mantenha a chave no mesmo ambiente...


eclipse: java: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder" or Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder

  >PROBLEM Using Eclipse, you try to run a simple logging test using "org.slf4j.Logger" like the sample below: package Test; im...