Friday, March 11, 2016

R library path

Resultado de imagen para turn it off and on again meme



I'll begin this post with something about me...

I'm a big fan of defaults. I love stuff that's ready to work "out of the box".

Well, having said that... my today's post is about preventing some weird stuff that happened yesterday to me for using the default R library as a shared library.
  • First things first. Enviroment
    I was using R 3.1.1 from Rstudio on Windows 8 ( yeah, I know... kindo nasty)
  • Second. What I did wrong
    I have to say in my defense, that I still don't think this is wrong, I guess It has more to do with some bad luck with the way I'd setup my consoles shortcuts. Well, to the point I had a script witch connects to a DB using RODBC and It takes some time. You know that RStudio is single threaded and I wanted to test it while continue working on something else. So I decided I would run it from a windows console ( I should've used an R terminal. But bear with me for arguments sake ).
And so It began..
Resultado de imagen para shouldn't have done that meme

  • It couldn't load any of the script libraries, eventhough they were physically in the default library
  • I tried to "install.package" to test one, and the process couldn't write in the directory... well I thought, "I guess I can't have Rstudio and this console accessing to the library". So I shutted down the console and returned to Rstudio.
  • Opened the script and... surprise. It couldn't find the library... WTF
  • Tried the infamous IT Crowd Algorithm "have you tried to turning it off and on again".. "Some temporal files have to be locked", I thought.. It's windows after all...
  • Tried again and still nothing happened.... well time to fix this stuff
The default library was unusable. The console I had used was configured to open with Admin Rights.....and I still don't know why It had locked all the stuff in the library dir...

  1. Change permitions didn't work
  2. Install packages within R as admin user didn't work either
  3. So I listed and configured another directory as user library
    R version 3.2.3 (2015-12-10) -- "Wooden Christmas-Tree"
    Copyright (C) 2015 The R Foundation for Statistical Computing
    Platform: x86_64-w64-mingw32/x64 (64-bit)
    
    R is free software and comes with ABSOLUTELY NO WARRANTY.
    You are welcome to redistribute it under certain conditions.
    Type 'license()' or 'licence()' for distribution details.
    
      Natural language support but running in an English locale
    
    R is a collaborative project with many contributors.
    Type 'contributors()' for more information and
    'citation()' on how to cite R or R packages in publications.
    
    Type 'demo()' for some demos, 'help()' for on-line help, or
    'help.start()' for an HTML browser interface to help.
    Type 'q()' to quit R.
    
    During startup - Warning message:
    Setting LC_CTYPE=en_US.UTF-8 failed
    > .libPaths()
    .libPaths()
    [1] "C:/Program Files/R/R-3.2.3/library"
    
    >.libPaths("xxxxx")
    
    .libPaths()
    [1] "C:/Users/xxx/R/win-library/3.2" "C:/Program Files/R/R-3.2.3/library"   
  4. And so it began working..... I installed a new R version after I learned I had to install most of my libs again

What did I learned


  • First: I don't have any shortcut with admin rights now.
  • Second: After some internet reading I learned that having a user library is a good practice
  • Third: I understand windows less every time
  • Fourth: The only useful thing I wrote was
    .libPaths()
Anyways, I hope this is useful to someone....I'll quit the rambling now....

Monday, March 07, 2016

Install Shinny & Rstudio over NginX

Installing Shinny & Rstudio Open Source over Nginx


Today I will install in Centos 7:
  • Shinny and Rstudio web
  • NginX
  • And will Configure Nginx to serve as proxy for Shinny and Rstudio Web
  • All of this using the most basic setup in Digital Ocean
    
    
    #create user
    useradd admin/crodriguez
    passwd xxxxxx
    
    vi /etc/sudoers
    
    
    #Add user to wheel group for admin priviledges
    gpasswd -a crodriguez wheel
    
    
    #Or make him kindoff rootie User privilege speficication ;)
    admin ALL=(ALL) ALL
    
    
    # From now remember to use the created user to run all commands
    
    # 0. If you have less than 8 GB  RAM
    #lets make swap bigger in 1 GB
    
    sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
    sudo /sbin/mkswap /var/swap.1
    sudo /sbin/swapon /var/swap.1
    sudo sh -c 'echo "/var/swap.1 swap swap defaults 0 0 " >> /etc/fstab'
    
    #Now we're over with the preparations. Lets begin with the installation
    
    # 1. Lets install NgNx
    
    #install EPEL release
    sudo yum install epel-release
    sudo yum install nginx 
    
    #start the web server
    #in centos 7
     sudo systemctl start nginx
    
    # if you're using any flavor of ubuntu
    # sudo /etc/init.d/nginx start
    
    # Leave it as a service once the server starts
    sudo systemctl enable nginx
    
    # review if directory was created /usr/share/nginx/html
    
    # 2. install R from EPEL 
    sudo yum install R
    
    #3.  Download and install Rstudio for RH/Centos
    #change the version number if there's a newer release :) 
    
    wget http://download2.rstudio.org/rstudio-server-rhel-0.99.491-x86_64.rpm
    sudo yum install --nogpgcheck rstudio-server-rhel-0.99.491-x86_64.rpm
     
    
    #4. install "shinny" package from cran
    sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""
    
    
    #5. Download shiny RPM
    
    wget https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.4.1.759-rh5-x86_64.rpm
    
    #6. Install shiny RPM :)
    
    sudo yum install --nogpgcheck shiny-server-1.4.1.759-rh5-x86_64.rpm
    
    
    #7. review shiny server status
    sudo systemctl status shiny-server
    
    #8 Create a group for shinny server config and server running
    
    sudo groupadd shiny-apps
    sudo usermod -aG shiny-apps crodriguez
    sudo usermod -aG shiny-apps shiny
    
    #change server directory owner and permissions
    #replace crodriguez for your user
    
    cd /srv/
    sudo  chown --recursive  crodriguez:shiny-apps shiny-server/
    #Change mode to all stuff in the dir
    cd shiny-server/
    sudo chmod g+w .
    sudo chmod g+s .
    
    #we're really changing permissions over some hard links. ( ls -l ) 
    
    lrwxrwxrwx 1 crodriguez shiny-apps 38 Jan 28 15:55 index.html -> /opt/shiny-server/samples/welcome.html
    lrwxrwxrwx 1 crodriguez shiny-apps 37 Jan 28 15:55 sample-apps -> /opt/shiny-server/samples/sample-apps
    
    #TODO everythin in  /srv/shiny-server will be served as an app
    
    #9. Config NGINX so we can use it as proxy for Rstudio and NGINX. For pretty URLs you know ;)
    
    sudo mkdir /etc/nginx/sites-available
    sudo mkdir /etc/nginx/sites-enabled
    
    
    #9.1 Include links to recently created config dirs in nginx.conf.
    # inside http{} block and before server{} block include the two lines *.conf and add some memory for server names domain 
    
    sudo vi /etc/nginx/nginx.conf
    
    include /etc/nginx/sites-enabled/*.conf;
    server_names_hash_bucket_size 64;
    
    
    
    #9.2 Add virtual locations on http{} block
    
            location /shiny/ {
               proxy_pass http://127.0.0.1:3838/;
               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";
            }
    
            location /rstudio/{
               proxy_pass http://127.0.0.1:8787/;
               proxy_http_version 1.1;
               proxy_set_header Upgrade $http_upgrade;
               proxy_set_header Connection "upgrade";
            }
    
    #10. restart Nginx
     sudo systemctl restart  nginx
    
    
    #10.1 Install Rmarkdown
    # Two easy steps
    
    #rebuild yum cache ( just because we haven't done this yet )
    sudo yum makecache fast
    
    #install libcurl / libcurl-devel y openssl openssl-devel
    sudo yum -y install libcurl libcurl-devel openssl openssl-devel
    
    #install R devtools
     sudo su - -c "R -e \"install.packages('devtools', repos='http://cran.rstudio.com/')\""
    
    #install rmarkdown
     sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""
    
    
    #11. If everything it's ok
    
    #verify installation
    whereis rstudio-server
    sudo rstudio-server verify-installation
    sudo rstudio-server status
    
    
    #Bonus. with devtools and git you can install packages from github but "git" its allways a nice thing to have  :)
    sudo yum install git
    
    
    
    
    This is how it should look

    1. NGINX

    2. Rstudio

    3. Shinny

    Wednesday, February 10, 2016

    Why do I use R ?

    Last two years I've been learning R and using it in my everyday work. And As much as It has been a change of mindset. I'm really happy with it. Much of my work about data clean up has been automated. And all the packages created by the community make my life easier.

    Here is a little list of the things I like the most

    1. Unlike SPSS or SAS it's open source
    2. It's a full programing language
    3. Has a nice graphical toolset
    4. It's platform independant (Yeap I just use windows at work, but who cares)
    5. It has a lot of analysis and data manipulation tools
    6. Did I mention is open source ?
    7. A helpfull community
    8. It's been growing in popularity the last 5 years not only in the studies field but as a real world work tool
    9. And most of all...It's free as in speech, so everybody can recreate anything. And help solving stuff

    I tested a bunch of IDEs and I love this one Rstudio. This one is free as in "free beer"
    It has all the features I need and more.

    Thursday, January 14, 2016

    My vim setup

    My VIM


    First entry after a long time....

    Every time I take over a new linux machine and I want to create some scripts is to setup my enviroment. And as retrograde as I am, I love VIM as long as its not a java development, in that case My weapon of choice is eclipse.... Anyways, this is my reminder not to loose much time looking for git repositories and stuff.. ( This week alone I've had to change two laptops because of different reasons ).

    As I love easy setup things I just go and Install Vundle plugin
    1. git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    Copy my .vimrc to the ~/.vimrc
    set nocompatible
    filetype off
    
    set rtp+=~/.vim/bundle/Vundle.vim
    call vundle#begin()
    
    Plugin 'VundleVim/Vundle.vim'
    Plugin 'tpope/vim-fugitive'
    Plugin 'SirVer/ultisnips'
    Plugin 'honza/vim-snippets'
    Plugin 'flazz/vim-colorschemes'
    Plugin 'bling/vim-airline'
    Plugin 'henrik/vim-ruby-runner'
    Plugin 'kchmck/vim-coffee-script'
    Plugin 'scrooloose/nerdtree'
    Plugin 'scrooloose/syntastic'
    Plugin 'tpope/vim-abolish'
    Plugin 'tpope/vim-endwise'
    Plugin 'tpope/vim-rails'
    Plugin 'vim-ruby/vim-ruby'
    Plugin 'Valloric/YouCompleteMe'
    
    call vundle#end()
    filetype plugin indent on
    
    " ┌───────────────────────────────────┐
    " │       Plugins customizations      │
    " └───────────────────────────────────┘
    "
    " NERDTree
    nmap  :NERDTreeToggle
    
    let g:UltiSnipsExpandTrigger=""
    let g:UltiSnipsJumpForwardTrigger=""
    let g:UltiSnipsJumpBackwardTrigger=""
    let g:UltiSnipsEditSplit="vertical"
    
    
    " vim-airline
    set laststatus=2
    let g:airline_powerline_fonts = 1
    set t_Co=256
    "
    " " ┌───────────────────────────────────┐
    " " │             Settings              │
    " " └───────────────────────────────────┘
    "
    " " Completion
    autocmd FileType ruby,eruby set omnifunc=rubycomplete#Complete
    autocmd FileType python     set omnifunc=pythoncomplete#Complete
    autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
    autocmd FileType html       set omnifunc=htmlcomplete#CompleteTags
    autocmd FileType css        set omnifunc=csscomplete#CompleteCSS
    autocmd FileType xml        set omnifunc=xmlcomplete#CompleteTags
    autocmd FileType php        set omnifunc=phpcomplete#CompletePHP
    autocmd FileType c          set omnifunc=ccomplete#Complete
    
    autocmd FileType ruby,eruby let g:rubycomplete_buffer_loading = 1
    autocmd FileType ruby,eruby let g:rubycomplete_rails = 1
    autocmd FileType ruby,eruby let g:rubycomplete_classes_in_global = 1
    
    "let g:SuperTabDefaultCompletitionType = ""
    let g:SuperTabDefaultCompletionType = "context"
    
    " Autoindent with two spaces, always expand tabs
    set tabstop=2
    set shiftwidth=2
    set expandtab
    
    " Folding settings
    set nofoldenable
    set wildmode=list:longest " make cmdline tab completion similar to bash
    set wildmenu " enable ctrl-n and ctrl-p to scroll thru matches
    set wildignore=*.o,*.obj,*~ " stuff to ignore when tab completing
    
    " Vertical / horizontal scroll off settings
    set scrolloff=3
    set sidescrolloff=7
    set sidescroll=1
    
    
    " Ignore case in searches
    set ignorecase
    
    set splitright
    set splitbelow
    set nobackup
    set noswapfile
    
    
    let g:syntastic_javascript_checkers = ['jshint']
    let g:syntastic_html_tidy_ignore_errors=[" proprietary attribute \"ng-"]
    let g:syntastic_mode_map={ 'mode': 'active',
                             \ 'active_filetypes': ['ruby', 'javascript'],
                             \ 'passive_filetypes': ['html'] }
    
    " ┌───────────────────────────────────┐
    " │               Theme               │
    " └───────────────────────────────────┘
    
    " Fonts for Linux
    set guifont=Bitstream\ Vera\ Sans\ Mono\ 9
    " set guifont=Monospace\ 10
    
    
    " Don't show the top bar
    " iset guioptions-=T
    
    " Syntax on
    syntax enable
    colorscheme summerfruit256
    
    if has("gui_running")
      set lines=57
      set columns=237
    
      " Highlight the line and the column of the current position of cursor
      set cursorline
    "  set cursorcolumn
      hi CursorLine guibg=#FFFF66
    "  hi CursorColumn guibg=#222222
    endif
    
    

    For one of the plugins [Valloric/YouCompleteme]. You need to compile some libs therefore you need to make sure you have the python developer libs 
    In Ubuntu it will be: sudo apt-get install python-dev




    Monday, July 07, 2008

    Asegurando Web Services con WSE 3 & VS2008 (Parte I )


    Hay algo que tengo que decir de entrada y es ........ Por que tiene que ser tan dificil!!!
    acabo de oir un webcast que dice que es sencillo, quizas deberia comenzar a pensar en WSE for dummys o algo asi.. bueno
    Detallo mis impresiones paso a paso, espero le ayuden a alguien....



    • Alto nivel de abstracción. Ok, puedo vivir con esto, no deberia conocer todos los detalles para poder usarlo, no debe ser problema, un buen nivel en la curva de aprendizaje, pero luego todo ira smooth.

    • Ok, trae ejemplos de los escenarios, excelente, no tengo que internetear mucho alli estan, bien comentariados, otro buen punto

    • Wow, trae exactamente el ejemplo que necesito, WSE + Certificados digitales para firmarlos, parece que esto sera facil

    • Mmmm, aparentemente hay dos versiones del instalador, la version de distribucion y la version de desarrollador, lastimosamente como todo buen sitio que representa recursos para programadores, aparentemente no se querian quedar atras de SUM MS. Asi que el sitio es lo suficientemente confuso, para que termines bajando el que no es y ensucies la instalacion ... entonces, recomendacion , siempre bajar el paquete MAS GRANDE

    • OK, deberian aparecer algunas herramientas graficas... que raro, en los tutoriales siempre hay herramientas graficas.. nuevamente, dato interesante .... los Addons solo funcionan en VS2005 .... que bien. Solamente para agregar al dato,

    • Bien, creemos un certificado para poder comenzar... ugh O_O este, donde esta la herramienta para crear los certificados .... si tienes instalados solamente VS2003 y 2008, seguramente, como yo, tendras una version desactualizada del comando makecert.exe , basta y sobra decir, que mejor baja uno mas actualizado, ya que la opcion de exportacion
      -sky exchange
      OK, no busques mas, si utilizas el prompt que utiliza VS2008, tendras en tus variables de entorno, una version util, sino, puedes buscarla en:
      C:\Archivos de programa\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools



    Problemas que podriamos encontrar hasta aqui... simplemente caer en la tentacion
    • Este es un punto muy importante.. NO, repito, NO, intentes administrar los permisos o mover los certificados utilizando la consola de management de windows mmc. Si mueves un certificado alli, por alguna razon que desconozco, pero que tiene que ver con el archivo fisico original, luego de moverla, en su nueva localidad, no importa que permisos se le asignen, jamas, de los jamases, podras ejecutar la llave privada del certificado (seran issues de seguridad o simplemente M$ jugando con mi mente )

    • El punto anterior, es el que deriva en un mensaje criptico o mas bien muy generico, que nos dice solamente que el uxuario xxx/xxx no posee privilegios suficientes para poder acceder a la llave privada o al certificado dentro del repositorio especificado... NO WAY, luego de ver el big NO NO de arriba, podran darse cuenta que es muy facil caer en este problema, en lo personal, me tomo 2 dias caer en la cuenta que por mas que asignara permisos, si agregaba el certificado de esta manera, no habia vuelta atras.

    • Otro dato interesante, es que si al agregar el certificado, desde la consola de management (mmc) lo agregamos directamente a la llave de la maquina, y luego queremos
      cambiar los permisos..... OH sorpresa, me dejo agregarlo, pero, no puedo cambiar los permisos de lectura sobre la llave privada, por ende, nadie lo puede utilizar ... weird verdad

    En la siguiente entrega, agregaremos los comandos para poder crear el certificado,
    como agregarlo al repositorio y agregar los permisos... No, no tiene herramienta grafica, observamos un Setup.bat en el directorio raiz, de los ejemplos que vienen con el WSE... pues, tendremos que ponerle un poco de atencion a este....


    Wednesday, April 09, 2008

    CSS Tricks

    En este blog encontre un post super interesante, que tiene muchos de los "trucos" de css que se utilizan a diario o mas bien resuelven problemas comunes a los que nos enfrentamos los "diseñadores" web o mas bien los desarrolladores, pq nosotros los desarrolladores muchas veces no somos buenos diseñadores y sufrimos haciendo eso :P

    Sigamos el enlace

    que raro suena, pero es peor Siga la liga jajaja

    Wednesday, January 30, 2008

    Variaciones sobre una frase de Cristo

    Dad a Dios lo que es de Dios y al Cesar lo que es del Cesar.



    I
    Dad a Dios lo que es de Dios
    y al gobierno fascista del presidente Molina
    lo que es del gobierno fascista del presidente Molina.

    Yo no pretendo saber desde mi pequeñez
    todo lo que es de Dios

    Pero si estoy seguro de lo que debemos dar
    al gobierno fascista del presidente Molina

    II
    Dad a Dios lo que es de Dios
    y al gobierno de los ricos
    lo que es del gobierno de los ricos
    Pero,
    ¿Qué más vamos a darle al gobierno de los ricos
    si con ayuda de su gobierno los ricos ya acabaron
    de quitárnoslo todo?


    Roque Dalton
    Poemas clandestinos

    Monday, January 28, 2008

    appfuse + maven bash


    Por lo general iniciar un nuevo proyecto J2EE, toma algun tiempo, escoger un stack, preparar las librerias, poner es proyecto
    y sus dependencias en el IDE y luego, comenzar a trabajar, Appfuse nos ayuda con sus plugins a realizar todo esto , en un abrir y cerrar de ojos, pudiendo utilizar varias tecnocnologias, integra inmediatamente la seguridad con Acegi,
    una pagina de login ya integrada y el stack tecnologico que debemos utilizar, ya viene en buena parte con el POM de MAVEN
    que utiliza el appfuse. Adicionalmente, las paginas ya vienen con un css, y existen un plugin de maven , que nos ayuda a generar, los Daos, el servicio y la pagina, para una clase utilizada de Model ( con @Entity ) en un abrir y cerrar de ojos.


    En este post, adjuntare un script de bash que hace las cosas aun MAS SENCILLAS.
    Y por restricciones de mi habilidad con el blog, luego posteare otro bash que contiene la parte de la generaci'on de los DAOS
    Servicios y etc.

    Nota importante: Uno de los mayores gotchas que encontre aqui, fue que ANTLR, tiene un bug que no permite que el
    path utilizado por maven, posea espacios en blanco, asi que si ralizas esto en una computadora con windows, y tu
    repositorio de MAVEN, se encuentra en el default "Document And Settings", tendras algunos problemas, te recomendaria
    siempre ponerlo en algun path sin espacios, para evitar estos errores. Realmente, pueden tomar algun tiempo en encontrarse los motivos.







    #!bash

    #iniciar proyecto con maven

    echo "escriba el proyecto: "
    read proj
    echo "esciba el paquete base:"
    read paq

    mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes \
    -DarchetypeArtifactId=appfuse-basic-spring \
    -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0.1 \
    -DgroupId=${paq} -DartifactId=${proj}

    cd ${proj}

    mvn -Dwtpversion=R7 eclipse:eclipse

    mvn install

    mvn war:inplace

    mvn jetty:run

    Tuesday, January 22, 2008

    oc4j xml parsers

    Suficiente es que primero cargue las librerias que tiene predeterminadas y aunque este en verbose, que los herrores solo sean class cast excepcion y cosas por el estilo, pero es que el sitio de oracle es algo tan inexpulgable que es simplemente frustrante. Por suerte, una vez encontrado es procesado, para que no se me olviden los comandos y otros tips sobre las librerias de XML dentro del OC4J , especialmente que casi todo proyecto de apache ocupa DOM y Digester y el Xerces ... 
    Aqui, un how to de como cambiar el xml parser por defecto

    Thursday, December 27, 2007

    El manifiesto del Hacker

    Casualmente hoy como cosa extraña no tengo mucho sueño, asi que me he encargado de postear algunas cosas que siempre
    me gustaria tener a mano, esto, no es que cueste encontrarlo en internet, pero simplemente me gustaria acotar algunas de las
    frases, que para mi son las mas representativas de este documento. Perdonaran el "español de españa" pero si de algo estoy
    seguro, es que no lo iba a traducir yo :P , en especial , la parte de "crios" me molesta un poco, pero creo que se entiende.

    Las frases principales que siempre me han gustado , son: 

    • Las que se refieren a la igualdad dentro de este mundo, ahora aplanado ( esto se lo robe a Thomas L. Friedman ) y para mi popularizado gracias a la tecnologia, GRACIAS GOOGLE, WIKIPEDIA, LINUX, los BLOGS, los FOROS, y todo tipo de democratizacion de la informacion y del espacio de difusion publico. Esta ha sido realmente una de las mayores proezas de la tecnologia desde la invencion de la imprenta, una nueva era, en la que el conocimiento es de todos y no de unos pocos ( la imprenta fue el primer paso hacia la popularizacion de la informacion ) , en donde todos estamos interconectados y en donde no importando en donde te encuentres, Bangladesh, Delhi, Moscu o San Salvador, tenemos las mismas oportunidades de ser escuchados ( leidos ) por una cantidad mas que suficiente de cibernautas. Donde, podemos encontrar la informacion, que antes no era accesible para todos.Una infraestructura que nos permite colaborar los unos con los otros y dejar atras el egoismo ..... pareciera que Marx tenia razon, hace tanto tiempo, cuando escribio el "manifiesto comunista"... ( otro dia explicare este punto ... parecera increible realmente n_n )

    • Las referentes a la falta de respeto del sistema
      educativo, sobre las personas excepcionales, gracias al sistema educativo en el que estamos, la mayoria de jovenes que podrian llegar a ser grandes inventores o creadores, se ven forzados a encasillarse, a aprender formulas y repetir las mismas tonterias que nosotros los que no somos privilegiados nos cuesta aprender. Tristemente, esto lo unico que hace es que estas personas, no avancen en su vida, pues se sienten frustrados, solamente si aparte de una inteligencia excepcional poseen una fuerte personalidad, superan estas frustraciones, lastimosamente, no es siempre el caso. Pero vamos, todo es en pro del sistema.
    El dibujo, que tiene que ver, no se,sique mejor que un fractal , arte matematico >_<

    /*

    Manifesto del Hacker

    */

    Hoy han cogido a otro, aparece en todos los periódicos.
    "Joven arrestado por delito informático", "hacker arrestado por irrumpir en un sistema bancario".
    "Malditos críos. Son todos iguales".
    ¿Pero pueden, con su psicología barata y su cerebro de los años cincuenta, siquiera
    echar un vistazo a lo que hay detrás de los ojos de un hacker?
    ¿Se han parado alguna vez a pensar qué es lo que les hace comportarse así, qué les ha convertido en lo que son?
    Yo soy un hacker, entre en mi mundo. Mi mundo comienza en el colegio.
    Soy más listo que el resto de mis compañeros, lo que enseñan me parece muy aburrido.

    "Malditos profesores. Son todos iguales".
    Puedo estar en el colegio o un instituto. Les he oído explicar cientos de veces cómo se reducen las fracciones. Todo eso ya lo entiendo.
    "No, Sr. Smith, no he escrito mi trabajo. Lo tengo guardado en la cabeza".
    "Malditos críos. Seguro que lo ha copiado. Son todos iguales".


    Hoy he descubierto algo. Un ordenador. Un momento, esto mola.

    Hace lo que quiero que haga. Si comete errores, es porque yo le he dicho que lo haga.
    No porque yo no le guste, me tenga miedo, piense que soy un listillo o no le guste ni enseñar ni estar aquí.

    Malditos críos. A todo lo que se dedican es a jugar. Son todos iguales. Entonces ocurre algo... se abre una puerta a un nuevo mundo... todo a través de la línea telefónica,
    como la heroína a través de las venas, se emana un pulso electrónico, buscaba un refugio ante las
    incompetencias de todos los días... y me encuentro con un teclado. "Es esto... aquí pertenezco... ". Conozco a todo mundo... aunque nunca me haya cruzado con ellos,
    les dirigiese la palabra o escuchase su voz... los conozco a todos... malditos críos. Ya está enganchado otra vez al teléfono. Son todos iguales... puedes apostar lo quieras a que son todos iguales... les das la mano y se toman el brazo... y se quejan de que se lo damos todo tan masticado que cuando lo reciben ya ni siquiera tiene sabor.

    O nos gobiernan los sádicos o nos ignoran los apáticos. Aquellos que tienen algo que enseñar buscan  desesperadamente alumnos que quieran aprender, pero es como encontrar una aguja en un pajar.

    Este mundo es nuestro... el mundo de los electrones y los interruptores, la belleza del baudio.
    Utilizamos un servicio ya existente, sin pagar por eso que podrían haber sido más barato si no fuese por esos especuladores. Y nos llamáis delincuentes. Exploramos... y nos llamáis delincuentes. Buscamos ampliar nuestros conocimientos... y nos llamáis delincuentes.

    No diferenciamos el color de la piel, ni la nacionalidad, ni la religión...
    y vosotros nos llamáis delincuentes. Construís bombas atómicas, hacéis la guerra,
    asesináis, estafáis al país y nos mentís tratando de hacernos creer que sois buenos, y
    aún nos tratáis de delincuentes.

    Sí, soy un delincuente. Mi delito es la curiosidad. Mi delito es juzgar a la gente por lo que dice y por lo que piensa, no por lo que parece. Mi delito es ser más inteligente que vosotros, algo que nunca me perdonaréis. Soy un hacker, y éste es mi manifiesto. Podéis eliminar a algunos de nosotros, pero no a todos... después de todo, somos todos iguales


    Do a little more each day than you think you possibly can

    Do a little more each day than you think you possibly can.
    - Lowell Thomas

    A child on a farm sees a plane fly overhead and dreams of
    a faraway place. A traveler on the plane sees the farmhouse
    and dreams of home.
    - Carl Burns

    Each day comes bearing its own gifts. Untie the ribbons.
    - Ruth Ann Schabaker

    A good scientist is a person with original ideas.
    A good engineer is a person who makes a design that works
    with as few original ideas as possible.
    - Freeman Dyson

    I am not born for one corner.
    The whole world is my native land.
    - Lucius Annaeus Seneca (4 BC-65 AD)

    We cannot do everything at once,
    but we can do something at once.
    - Calvin Coolidge

    Sunday, December 09, 2007

    Code Monkey

    Code Monkey

    Buenisima la cancion .... simplemente geek , me tarde un poco en postearla, pero vamos, disfrutemoslo :)



    Code Monkey get up get coffee.
    Code Monkey go to job.
    Code Monkey have boring meeting
    with boring manager Rob.

    Rob say Code Monkey very dilligent
    but his output stink.
    His code not functional or ellegant
    what do Code Monkey think?

    Code Monkey think maybe manager wanna write god damn login page himself.
    Code Monkey not say it outloud.
    Code Monkey not crazy, just proud.

    Code Monkey like freetos.
    Code Monkey like tab and mountain dew.
    Code Monkey very simple man.
    with big warm fuzzy secret heart.
    Code Monkey like you.
    Code Monkey like you.
    ================================================

    Code Monkey hang around at front desk.
    tell you "sweater look nice".
    Code Monkey offer buy you soda.
    Bring you cup, bring you ice.

    You say no thank you for the soda cause,
    soda make you fat.
    Anyway, you busy with the telephone
    no time for chat.

    Code Monkey have long walk back to cubical,he sit down pretend to work.
    Code Monkey not thinking so straight.
    Code Monkey not feeling so great.


    Code Monkey like freetos.
    Code Monkey like tab and mountain dew.
    Code Monkey very simple man.
    with big warm fuzzy secret heart.
    Code Monkey like you.
    Code Monkey like you. -- a lot
    ================================================

    Code Monkey have every reason
    to get out this place.
    Code Monkey just keep on working
    to see your soft, pretty face.

    Much rather wake up eat a coffe cake
    take bath, take nap.
    "This job fullfilling in creative way."
    Such a load of crap

    Code Monkey think some day he have everything, even pretty girl like you.
    Code Monkey just waiting for now.
    Code Monkey says "someday, somehow."

    Code Monkey like freetos.
    Code Monkey like tab and mountain dew.
    Code Monkey very simple man.
    with big warm fuzzy secret heart.
    Code Monkey like you.
    Code Monkey like you.

    Post original

    Sunday, December 02, 2007

    MD4J .. not production ready

    Estaba probando algunos frameworks, para hacer algunos mantenimientos de manera automatica, siendo que ya poseo los hbms de hibernate, se me ocurrio que un MDA que utilizase hbms como entrada seria fabuloso. Encontre el MD4J , pero por el momento, mi experiencia no ha sido agradable.

    Es interesante como md4j ha olvidado algunas cosas basicas
    dentro de su task de maven, por ejemplo, luego de generar el codigo,
    el goal, busca realizar una compilacion, pero le hacen falta algunas
    librerias. Esto se resuelve agregando este par de dependencias en
    el POM que se incluye en el proyecto del ejb


    <dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.3</version>
    </dependency>
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.12</version>
    </dependency>


    Claro, si lograste llegar hasta alli sin ningun problema, pues me has
    sacado una ventaja barbara. Antes de llegar a este problema de compilacion
    tube un problema de classpath con los tasks de ant que se corren desde maven
    para generar el codigo. Le faltan algunas referencias


    dentro de artifact Id maven-antrun-plugin falta esta dependencia
    debido a que el classpath de ant no posee un parser de XML por defecto
    al menos no aun en el 1.6.5

    <dependency>
    <groupId>commons-jxpath</groupId>
    <artifactId>commons-jxpath</artifactId>
    <version>1.2</version>
    </dependency>


    Ahora viene lo peor, luego de pasar por estos problemas de classpath, cuando
    llega el momento de el fabuloso mvn clean install en el modulo web
    me dice que no encuentra la propiedad .classpath .... POR FAVOR !!!!

    [INFO] ------------------------------------------------------------------------
    [ERROR] BUILD ERROR
    [INFO] ------------------------------------------------------------------------
    [INFO] Error executing ant tasks

    Embedded error: Reference maven. .classpath not found.
    [INFO] ------------------------------------------------------------------------

    en la linea 238 me encuentro con esto

    <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
    <classpath refid="maven.
    .classpath"/>
    </taskdef>

    Empiezo a creer que evaluar esto ha sido un error, pero vamos, ya tengo 3 horas
    quizas lo llevaremos a un mejor fin

    bien, lo sustituyo por

    <taskdef name="webdoclet" classname="xdoclet.modules.web.WebDocletTask">
    <classpath refid="maven.compile.classpath"/>
    </taskdef>

    ARGGGGHHHHH ! , nuevamente, el goal de compile, parece fallar, pero vamos, solo son
    dependencias, veamos

    my bad !!!!! son las clases del otro subproyecto las que no compilan .... deben ser las
    dependencias, correre el task desde el parent POM y veamos q sucede, claro, tampoco funciona
    ... veamos las dependencias del web-POM ..
    ok, en filter.properties cambie esta propiedad para que machara
    domain.package.name = <my package>

    interesante, sigue buscando por <gr.abiss.md4j.sampledomain.business>
    que era lo que tenia que hacer esa propiedad seguramente, cached quizas ...

    lets seee
    mvn clean

    OMG you've gotta be kidding me !!!!!!!

    sigue alli, estara quemado por alli, lets check this out
    ohhh si, quemadisimo, ok, queme el mio, no tengo ganas de seguirme peleando
    con variables, AUN NO LE HE VISTO EL BENEFICIO A ESTE MDA !!

    :)

    wow

    [INFO] ------------------------------------------------------------------------
    [INFO] Reactor Summary:
    [INFO] ------------------------------------------------------------------------
    [INFO] MD4J QuickStarter ..................................... SUCCESS [10.194s]
    [INFO] MD4J QuickStarter: Domain Module ...................... SUCCESS [11.135s]
    [INFO] MD4J QuickStarter: EJB Module ......................... SUCCESS [19.864s]
    [INFO] MD4J QuickStarter: WAR Module ......................... SUCCESS [31.787s]
    [INFO] MD4J QuickStarter: EAR Module ......................... SUCCESS [10.733s]
    [INFO] ------------------------------------------------------------------------
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 1 minute 25 seconds
    [INFO] Finished at: Sun Dec 02 19:28:37 CST 2007
    [INFO] Final Memory: 25M/47M
    [INFO] ------------------------------------------------------------------------

    Estaba pensando que jamas veria esto :')

    falta ver si funciona ....

    Abortado, mi jboss muere al querer deployar el aplicativo generardo ...

    quizas otro dia continuo probando, pero this plain sucks ...

    Tuesday, September 04, 2007

    quick enterprise java

    Sera que podemos hacer una J2EE Application en un abrir y cerrar de ojos, sin depender e un IDE en especifico, y de algunos wizards propietarios, pues casi, casi casi, con un poco de MAVEN podemos lograrlo, en la parte inferior observaremos algunos HOW TO rapidos
    que son de utilidad para comenzar con el trabajo de un nuevo dia


    -- ----------------------------------------------------------------------
    WTP maven
    -- ----------------------------------------------------------------------
    1. mkdir
    2. copiar el pom de inicio
    3. crear el proyecto
    4. struts-workbench $ mvn -Dwtpversion=R7 eclipse:eclipse
    5. importarlo en el eclipse
    5.1 los jars han sido agregados como dependencias del modulo J2EE
    6.



    Nota: Para poder utilizar estos plugins de maven, se deben bajar del site
    de WebTide, alli se encuentran una variedad de plugins que pueden sernos utiles
    www.webtide.com/resources.jsp

    Para instalarlos se realizan basicamente 3 pasos

    1. Descomprmirlos en su propio directorio
    2. ejecutar mvn install
    3. Estamos listos para utilizarlos

    -- ----------------------------------------------------------------------
    SIMPLE STRUTS APP
    -- ----------------------------------------------------------------------
    struts plugin

    1. Generar el esqueleto del proyecto
    1.1 Ingresar al directorio en el que se creara el proyecto
    ingresar al directorio en el que creare el proyecto
    cd /Users/carlosrobertorodriguez/development/workspace_32

    1.2 maven nos generara el layout del proyecto con el comando:

    mvn archetype:create \
    -DarchetypeGroupId=com.webtide \
    -DarchetypeArtifactId=maven-archetype-Struts \
    -DarchetypeVersion=1.0-SNAPSHOT \
    -DgroupId=com.scs.struts.startup.app \
    -DartifactId=startup-struts-simple-app

    2. Luego crearemos el proyecto para MI IDE favorito, eclipse.
    mvn eclipse:eclipse

    si no esta seteada en su workspace la variable M2_REPO, entonces debemos agregarla

    mvn -Declipse.workspace= eclipse:add-maven-repo

    mvn -Declipse.workspace=/Users/carlosrobertorodriguez/development/workspace_32y \
    eclipse:add-maven-repo

    o si prefieren hacerlo desde el eclipse, simplemente abran su ide, seteen el path en
    windows
    preferences
    java
    build path
    classpath
    luego presionen
    new
    M2_REPO = <>

    3. Para bajar las librerias necesarias y compilar el proyecto creado por maven, solamente
    utilizaremos el goal install del POM generado por el artefacto

    mvn install


    4. Estamos listos para ver nuestra aplicacion en accion !!!!

    mvn jetty:run




    -- ----------------------------------------------------------------------
    -- ----------------------------------------------------------------------

    SIMPLE SPRING APP
    con maven y eclipse

    1. Generar el esqueleto del proyecto
    1.1 Ingresar al directorio en el que se creara el proyecto
    ingresar al directorio en el que creare el proyecto
    cd /Users/carlosrobertorodriguez/development/workspace_32

    1.2 maven nos generara el layout del proyecto con el comando:

    mvn archetype:create \
    -DarchetypeGroupId=com.webtide \
    -DarchetypeArtifactId=maven-archetype-Spring \
    -DarchetypeVersion=1.0-SNAPSHOT \
    -DgroupId=com.scs.simple.startup.app \
    -DartifactId=startup-simple-app

    2. Luego crearemos el proyecto para MI IDE favorito, eclipse.
    mvn eclipse:eclipse

    si no esta seteada en su workspace la variable M2_REPO, entonces debemos agregarla

    mvn -Declipse.workspace= eclipse:add-maven-repo

    mvn -Declipse.workspace=/Users/carlosrobertorodriguez/development/workspace_32y \
    eclipse:add-maven-repo

    o si prefieren hacerlo desde el eclipse, simplemente abran su ide, seteen el path en
    windows
    preferences
    java
    build path
    classpath
    luego presionen
    new
    M2_REPO = <>

    3. Para bajar las librerias necesarias y compilar el proyecto creado por maven, solamente
    utilizaremos el goal install del POM generado por el artefacto

    mvn install


    4. Estamos listos para ver nuestra aplicacion en accion !!!!

    mvn jetty:run
    -- ----------------------------------------------------------------------
    -- ----------------------------------------------------------------------


    SIMPLE SPRING MVC + HIBERNATE 3.2
    con maven y eclipse



    1. Iniciar BD de ]
    sudo /usr/local/mysql/bin/mysqld_safe --user=mysql

    2. Generar el esqueleto del proyecto

    2.1 ingresar al directorio en el que creare el proyecto
    cd /Users/carlosrobertorodriguez/development/workspace_32

    2.2 maven nos generara el layout del proyecto con el comando:

    mvn archetype:create \
    -DarchetypeGroupId=com.webtide \
    -DarchetypeArtifactId=maven-archetype-SpringJpa \
    -DarchetypeVersion=1.0-SNAPSHOT \
    -DgroupId=com.scs.startup.app \
    -DartifactId=startup-springJpa-app


    2.3 Luego crearemos el proyecto para eclipse con el comando
    primero agreguemos al path del eclipse una variable que apunte al repositorio
    maven nos ayudara con esto
    mvn -Declipse.workspace= eclipse:add-maven-repo

    mvn -Declipse.workspace=/Users/carlosrobertorodriguez/development/workspace_32y \
    eclipse:add-maven-repo

    o si prefieren hacerlo desde el eclipse, simplemente abran su ide, seteen el path en
    windows
    preferences
    java
    build path
    classpath
    luego presionen
    new
    M2_REPO = <>

    mvn eclipse:eclipse


    3. Para bajar las librerias necesarias y compilar el proyecto creado por maven, solamente
    utilizaremos el goal install del POM generado por el artefacto

    mvn install


    4. Estamos listos para ver nuestra aplicacion en accion !!!!

    mvn jetty:run

    Vale recalcar que este aplicativo no esta utilizando struts, sino un servlet,
    pero para los objetivos de esta capacitacion que es el manejo de spring, nos
    sera suficientemente util


    5. Prestemos atencion a los archivos

    /startup-app/src/main/webapp/WEB-INF/
    applicationContext.xml

    springDemo-servlet.xml

    En el primero podemos observar que estos artefactos fueron hechos por un italiano +_+

    Podemos observar en el paquete com.scs.startup.app.domain , los objetos con los cuales se realizara la persistencia del aplicativo, debidamente anotados haciendo uso de las capacidades de java 1.5 + hibernate 3.2

    Luego, movamonos hacie el paquete com.scs.startup.app.service.dao , en el cual se encuentran los
    servicios de persistencia de Dat Access Object para persistir los objetos anotados en el paquete
    que revisamos con anterioridad

    Thursday, August 23, 2007

    espacio en particiones UNIX ( du -cks ) DUCKS :)

    Patos, si, patos, asi no se me olvida el comando, muy buena manera de recordar el comando, aunque en realidad du -chs me parece mejor, pq no me gusta ver el monton de numeritos a la par de los archivos o carpetas, en fin

    Super quick guide
    % de utilizacion -h para "human readable" en darwin unix

    $> df -h

    que archivo(s) son los que utilizan mayor espacio, retorna el top 15 sobre el directorio especificado en "human readable format"

    $> sudo du -sh /* | sort -nr | head -15

    ( si no eres un usuario de algo que necesite permisos para hacer eso, quitale el sudo )

    Este buen articulo sobre como encontrar en donde se esta tu el espacio en unix y similares explora tanto los comandos como los resultados, muy util si eres un begginer de administrador unix como yo ... Articulo

    Tuesday, August 14, 2007

    Feral Employees

    Se que yo fui uno de ellos, pero ya cuando estas del otro lado, esto es simplemente hilarante








    For the fallen...

    Interesante poema, fue escrito al inicio de la Primera guerra mundial, en especial ,
    me gusta el texto en negrillas

    With proud thanksgiving, a mother for her children,
    England mourns for her dead across the sea.
    Flesh of her flesh they were, spirit of her spirit,
    Fallen in the cause of the free.

    Solemn the drums thrill: Death august and royal
    Sings sorrow up into immortal spheres.
    There is a music in the midst of desolation
    And a glory that shines upon our tears.

    They went with songs to the battle, they were young,
    Straight of limb, true of eye, steady and aglow.
    They were staunch to the end against odds uncountered:
    They fell with their faces to the foe.

    They shall grow not old, as we that are left grow old:
    Age shall not weary them, nor the years condemn.
    At the going down of the sun and in the morning
    We will remember them.


    They mingle not with their laughing comrades again;
    They sit no more at familiar tables at home;
    They have no lot in our labour of the day-time;
    They sleep beyond England's foam.

    But where our desires are and our hopes profound,
    Felt as a well-spring that is hidden from sight,
    To the innermost heart of their own land they are known
    As the stars are known to the Night;

    As the stars that shall be bright when we are dust,
    Moving in marches upon the heavenly plain;
    As the stars that are starry in the time of our darkness,
    To the end, to the end they remain.

    -- Laurence Binyon

    Monday, August 06, 2007

    Trails ... TAPESTRY ON RAILS


    Bueno, he probado este framework en un par de ocasiones, para hacer aplicativos super sencillos y simplemente funciona, tal como ellos lo anuncian, segun el ultimo post de estos muchachos , estan a punto de sacar una nueva version, lo cual me alegra, no todos los dias tengo una herramienta que yo comprendo y puedo modificar y que adicionalmente me quita tanto trabajo como lo hace esto, no he probado aun el codigo que se encuentra en el svn del proyecto, soy demasiado perezoso, como para hacerlo realmente, prefiero un conveniente Archetype de MAVEN para comenzar a trabajar :), anyways, este es el link, piden que ayudemos linkeandolos, para que su nueva pagina sea la que muestre el google al inicio, me parece un poco weirdo que teniendo un producto que funciona encima de otros frameworks tan robustos, tenga poca atencion, espero que esto mejore >_< ... btw los frameworks robustos de los que hablo, son hibernate, spring y Tapestry. Tienen aun algun camino por hacer con AJAX, pero hace poco integre el listado con TACOS, y fue bien straight forward, por lo que le auguro rapidez de respuesta a este issue

    IDE tuning ECLIPSE


    La verdad, no es que trabaje lento mi IDE favorito, muy decente en un fedora 6, 1024 + 512 de RAM con un ATLON XP, pero como siempre, podria ser mas rapido :P, asi que realice el proceso de "tunear" mi instalacion de el Eclipse Europa, para hacer el cuento largo, corto, simplemente aplique los pasos de siempre, redactar el eclipse.ini, y desconectar cosas que no utilizo.

    Aqui estan los parametros de mi eclipse.ini, por si a alguien le interesa ...

    -vmargs
    -Xms512m
    -Xmx512m
    -XX:PermSize=128m
    -XX:MaxPermSize=128m


    • Xms: Es el tamaño inicial del heap
    • Xmx: Es el tamaño maximo del heap
    • XX:PermSize: Es el tamaño inicial en megas para espacio para "permanent Generation"*
    • XX:MaxPermSize: Es el tamaño maximo en megas para espacio para "permanent Generation"*

    * Es el espacio utilizado por lo que la gente de la sun llama "permanent generation" , segun entiendo , es el lugar en donde la JVM guarda la informacion necesaria para instanciar metodos y clases, podriamos llamarla "reflective data" utilizando un poco de jerga

    Pero para que me pongo a explicarles estas cosas, hay buena documentacion por alli
    que seguramente ayudara mas que yo a confundirlos ñ_ñ
    Pagina de IBM con informacion de los parametros
    Pagina de la SUN que habla de garbage collector
    Y finalmente, Aqui esta la guia que utilice la primera vez y que es la que utilice la primera vez y que es valida hasta ahora, muy buen articulo, la verdad Click aqui

    Tuesday, July 31, 2007

    Tapestry 5 Preview on OSCON 2007

    He visto muchas veces presentaciones sobre algun producto de SW, algunas comienzan con las ventajas que tienen, otras, sobre, los problemas de otras tecnologias que probablemente son la competencia, otras veces, aumentan la tencion comenzando con features o productos anteriores de el equipo o compañía que esta realizando la presentacion, haciendo enfasis en cada uno de los cambios y de ser posible en la revolucion que han creado, todo esto ultimo, lo veo cada vez que veo a ..... si , exacto, ya no dire el nombre, ustedes ya lo saben, la compañía a la que pertenece tiene una manzanita. Pero esta vez fue de las pocas veces en que una diapositiva es tan directa, que tiene frases que yo he escuchado una y otra vez de desarrolladores desperados, no tienen nada que ver con como resolver un problema, ni siquiera un deseo, de darles una clasificacion creo que serian algo asi como un grito desesperado por atencion y aliento divino ... y estas son las frases con las que comenzo Howard Lewis Ship, creador de Tapestry&nbsp; su exposicion en OSCON ....



    A few observations
    •❝If ...
    •... I have to type one more angle bracket I'll chop off my pinkie! ❞
    •... I have to run Ant/Maven one more time I'll staple myself to death! ❞
    •... I have to restart Tomcat on more @&*$**@! time I'm going to become a&nbsp; sheep farmer! ❞
    •... I have to write any more &%@&^@ boilerplate code I'll start to listen to
    those voices in my head! ❞
    •You have a budget for mental investment

    En el idioma que sea, yo se que han oido o dicho algo parecido jajaja, esto señores, hizo que me identificara inmediatamente con la situación qu ese estaba describiendo, aumento mi nivel de empatía y por que no de atención


    Será que más de una vez dije ... hubiera sido agricultor jajaja, el resto de la presentación es muy sobria y responde pocas preguntas al decir verdad, lastima que no pude ver la ponencia, seguramente fue interesante... más que antes que el estubo Rod Jhonson ...&nbsp; algun dia quizas ....

    Powered by ScribeFire.