Retomando el blog

16 03 2012

Hace ya mas de un año que deje de escribir, mayoritariamente por asuntos personales, universidad y trabajo; donde al parecer ya las cosas que se están aligerando un poco.

Habrán cambios, decidí pasarme de Android and iPhone, ésto es para varios proyectos que tengo en ésta plataforma, con ello también me compré una Mac Mini para poder utilizar el XCode.

Otro cambio importante es que murió mi Laptop😦  , donde ahí tenia Ubuntu, Windows y Mac, por lo que para desarrollar y hacer mis proyecto estoy mayoritariamente en Mac. Haran falta los post de Linux pero de cuando en cuando voy a hacer alguno con mención a scripts que funcionen en ámbas plataformas.

Por otro lado voy a hacer más referencias a otro lenguajes, tips y snippets de código que tenga por ahi o que valla haciendo por el camino.

Voy a hacer todo lo posible por mantener todo en la balanza y mejorar el contenido.🙂





Repositorio personal con Git y Dropbox

17 02 2012

Como muchos tengo ideas que se vuelven en proyectos pequeños personales, lo idóneo es tener un repositorio, en la que encarecidamente sugiero Git; en algunas ocaciones se quiere tener el repositorio en lugar no tan accesible para las personas, o bien hacer “Desarrollo en Solo”, por lo que ésta es una de las soluciones:

Obtener una cuenta de Dropbox, para los que no saben que es: una carpeta mágica en tu computadora (Linux, Windows, Mac), donde todo lo que coloques ahí va a estar automaticamente en internet (Nube), con la única limitante del espacio, que al fin y al cabo no es un problema mayor ya que se puede expandir de manera gratis o de pago. Nada mas de descargarlo de http://db.tt/ldy9CHA y crear la cuenta.

Luego tener instalado Git:

  • si se está en Mac éste viene por defecto
  • para windows recomiendo cygwin o bien éste paquete http://code.google.com/p/msysgit/
  • para linux normalmente se instala en el repositorio.

Cuando ya está todo instalado, lo ideal es abrir la consola:

$ cd ~/Dropbox
$ mkdir proyecto.git
$ cd proyecto.git
$ git init --bare

Lo que hace éste comando es crear un repositorio “Bare”: clonar y hacer “push” de cambios sin posiblidad de modificar el repositorio directamente, casí como el repositorio de SVN, normalmente éste proceso va a hacer que el Dropbox comience a sincronizar, para luego hay que clonar (hacer una copia) del repositorio donde se quiera:

$ git clone ~/Drobpox/proyecto.git

Éste crea una carpeta llamada “proyecto” en la cual ya es un repositorio de Git, en la carpeta hay “proyecto.git” hay archivos presentes pero son exclusivos de repositorio y no recomiendo modificarlos; después hay que crear un archivo hacerle commit y subirlo al repositorio de donde hicimos clone:

$ cd proyecto
$ echo "hello world" > archivo.txt
$ git add archivo.txt
$ git commit -m "Importado inicial"

Ya tenemos el primer archivo en el repositorio, pero está local, para subirlo al “servidor” hay que hacerle push, para ello es necesario solo la primera vez se determinar el origen:

$ git push origin master

Ahora cada vez que se quiera hacer un “push” nada mas se ejecuta:

$ git push

Por otro lado si tienes varias máquinas con Dropbox instalado, puedes hacer el clon y trabajar tranquilamente, cuando termines haces un push; si bien quieres obtener los últimos cambios del repositorio central se hace un “pull”:

$ git pull

Con eso tendríamos sólo una pincelada para trabajar con repositorios con Dropbox, yo por mi parte, tengo mi maquina de la casa y la laptop, mis proyectos los tengo en Dropbox y me la paso haciendo commits, pull y push. :)





Aplicaciones más utilizadas en Mac

27 02 2011

En la pasada semana me puse la tarea de realizar mi tareas diarias exclusivamente en Mac, salvo el trabajo que es obligatoriamente trabajar en Fedora.

Este es mi escritorio:

Screenshot Mac

Mi escritorio en Mac, Febrero 2011

Las aplicaciones que tengo y recomiendo son:

  • Steam: los juegos son parte importante para no abarrotarse de trabajo😛
  • Google chrome: extremadamente rápido y las extensiones que tiene no me pueden faltar el parte de mi uso diario, además la sincronización de perfil es algo indispensable.
  • Hamachi: tengo ciertas redes a las que no tengo acceso por otros medios, con Hamachi asunto solucionado.
  • Reeder: normalmente utilizaba Google Reader para leer mis feeds, con ésta aplicación es mucho más facil la lectura, salvo algunas veces que se congela y deja de funcionar, pero no es mayor cosa.
  • jDownloader: genial gestor de descarga, nada que decir a parte que es el mejor que he visto.
  • Things: administrador de Getting things Done (GTD), útil para administrar proyectos personales, o proyectos en solo.
  • Evernote: anteriormente utilizaba Tomboy en GNU\Linux, en Windows no era muy estable y en Mac la misma historia, por lo que comencé hace poco a utilizarlo y la verdad me parece útil para tips que me voy encontrando en el camino.
  • Coda: herramienta tipo IDE, yo personalmente la utilizo para CSS, HTML y para trabajar remotamente por medio SSH (luego hago una entrada al respecto).
  • Netbeans: mi IDE por defecto casi para todo, lo utilizo para PHP, NodeJs, Extensiones de Google Chrome, HTML, CSS y a veces Java.
  • Eclipse: éste IDE prácticamente lo utilizo para desarrollar Aplicaciones Android.
  • Adium: es como tener Pidgin supervitaminado, me encanta lo versátil y simple de utilizar, tiene configuraciones por todo lado y está ampliamente integrado con el sistema.
  • Dropbox: es mi mano derecha para todo, de hecho tengo planeada una entrada con los beneficios que me da al utilizarlo, me sirve como repositorio privado de Git, repositorio de Scripts, Configuraciones, Herramientas, archivos importantes, etc.
  • Alfred: alguien que haya utilizado Gnome-do o Quicksilver sabrá que permite agilizar el uso del ordenador bastante con ésta aplicación, el uso que le doy es para acceder a aplicaciones y archivos de unos cuantas entradas al teclado.

También tengo otras aplicaciones por ahi, sin embargo esas aplicaciones son las que más uso por ahora, espero que sean de utilidad a mas de uno.





Retomando en multiplataforma

25 02 2011

Después de mucho tiempo de inactividad, 3 sistemas operativos instalados en mi maquina y bastante tiempo ocupado en otras cosas, ya tengo un respiro para retomar la creación de entradas, con un enfoque diferente y fresco, uno de esos es la utilización de Gist, así como la inclusión de temas relacionados con Windows, Linux y Mac.

Además poco a poco voy a ir introduciéndome en el desarrollo de dispositivos Mobiles como Android y IOS (iPhone/iPod), con pinceladas varias en herramientas para el desarrollo de juegos.

Con la variedad de temas que tengo sobre la mesa, se vienen tiempos con mucha diversión😉





Script para montar compartidos windows

19 05 2010

Desde Ubuntu (Linux) es mucho mas dificil montar archivos compartidos desde Windows y mucho mas cuando la version es Windows 7, por su nuevo sistema de compartido.

Para ello me hecho otro Script (si, otro a la lista) utilizando Python (si si me gusta Python para scripts), lo que hice fue envolver el montado del compartido pero esta vez si tener que scribir el password del usuario para conectarse a la vista de todos (eso mal, muy mal😦 ).


#!/usr/bin/env python

import getpass, getopt, sys, os

__author__ = "Edder Rojas <edder.rojas@gmail.com"
__version__ = "0.2"

class SmbMount():

    def __init__(self, mnt_src, mnt_dest, username, password):
        self.mnt_src = mnt_src
        
        if not os.path.exists(mnt_dest):
            raise IOError("Path doesn't exist")
            
        self.mnt_dest = mnt_dest
        self.username = username
        self.password = password
        self.user = getpass.getuser()
        
    def mount(self):
        command =  "sudo smbmount " 
        command += self.mnt_src + " " 
        command += self.mnt_dest + " "
        command += "-o user=" + self.username + ","
        command += "pass=" + self.password + ","
        command += "uid=" + self.user + ","
        command += "iocharset=utf8"
        
        result = os.system(command)


if __name__ == "__main__":
    args = sys.argv
    if ( len(args) < 4 ):
        print (
                args[0].replace("./", "").split("/")[-1] + " " 
                + __version__
                + " <remote folder> <mount folder> <username>"
               )
    else:
        mnt_src = args[1]
        mnt_dest = args[2]
        username = args[3]
        password = getpass.getpass()
        smbMount = SmbMount(mnt_src, mnt_dest, username, password)
        smbMount.mount()

Basicamente hace de wrapper para smbmount y le da permisos al usuario actual para poder escribir, leer y todo el asunto. Algo a notar es que necesita el comando smbmount, además permisos de Root y por ultimo una carpeta de destino; mi conveción para esto, yo uso la carpeta /media y creo una carpeta con el mismo nombre del maquina a la que me estoy conectado y luego le doy permisos a mi usuario para usarlo:

mkdir /media/WinTarro
chown usuario.grupo /media/WinTarro

Ya con eso se podria usar el comando.





AppIndicator de Servicios

17 05 2010

Retomo este blog de vuelta, he tenido mucho con el trabajo y la Universidad y ahora es tiempo de seguir con lo que voy encontrando, pero ahora el enfoque no es a lo que se puede encontrar un rato googleando, quiero aportar con mi granito de arena con lo que yo mismo voy haciendo (programitas y scripts🙂 ), asi que comienzo:

Asi como lo dice el titulo agrego un AppIndicator que muestra servicios corriendo (solo para Ubuntu 10.04 en adelante), para los que no saben que son AppIndicators, es basicamente la implementación de la bandeja del sistema pero mas usable, con una interface mas estandar y lo mejor de todo mucho mas fácil de programar (soy programador no puedo evitarlo😛 ), ahora bien tengo una EeePC 900, como muchos saben es una netbook con pocos recursos (y vieja) por lo que tengo que quitar ciertos procesos para que cargue mas rapido en el booteo el sistema (de ahi sale porque hice la aplicacion), como nota el programa entero no lo hice yo, es de Sami Khan, Etopian Inc. http://www.etopian.com y yo le agregue el app-indicator y use el icono de gnome-do que viene en el set default de iconos en ubuntu Lucid, bueno ya que explique voy a lo importante, el codigo:

#!/usr/bin/env python

# Gnome Tray Services - For Ubuntu and Debian Distros
# A simple application to help start and stop services from the tray.

# Sami Khan, Etopian Inc. http://www.etopian.com
# Start and shutdown init.d services.
# GPL Version 3 - http://www.fsf.org/licensing/licenses/gpl-3.0.html
# AppIndicator by Edder Rojas https://paindev.wordpress.com

# Todo:
# - Scan for running services each time the menu opens, so if services are
# started manually from the console, it knows about them.
# - Make a dialog for adding/removing any init.d service from the menu.s
# - Perhaps wrap the Services into a Class.

# Configure services
services = ['apache2',
           ['mysql', '/var/run/mysqld/mysqld.pid']]
           # 'memcached',
           #['cups', '/var/run/cups/cupsd.pid'],
           #['mpd', '/var/run/mpd/pid'],
#            'gpsd',
#            'bluetooth',
           #['bind9', '/var/run/bind/run/named.pid']]

# === Don't edit below here, unless you know what you are doing! ===

import gtk
import pygtk
import subprocess
import os.path
import time
import appindicator
import pynotify
from types import *

class TrayServicesIndicator:

	#available services
	services = ['apache2',
			   ['mysql', '/var/run/mysqld/mysqld.sock']]

	# class constructor
	def __init__(self):
		self.ind = appindicator.Indicator(
				       "example-simple-client",
				       "gnome-do-symbolic",
				       appindicator.CATEGORY_APPLICATION_STATUS)

		self.ind.set_status(appindicator.STATUS_ACTIVE)
		self.ind.set_attention_icon("gnome-do-symbolic")

		#create a menu
		self.menu = gtk.Menu()

		for service in self.services:
			if(type(service) is ListType):
				service_name = service[0]
				service_pid_file = service[1]
			else:
				service_name = service

			if(self.service_is_running(service)):
				self.menu.append(self.service_menu_item_create(service, service_name, self.menu, 'stop'))
			else:
				self.menu.append(self.service_menu_item_create(service, service_name, self.menu, 'start'))
		#menu separator
		#menuItem = gtk.SeparatorMenuItem()
		#self.menu.append(menuItem)
		#menuItem.show()

		# quit menu
		#menuItem = gtk.ImageMenuItem(gtk.STOCK_QUIT)
		#menuItem.connect('activate', self.quit_cb, self.menu)
		#menuItem.show()
		#self.menu.append(menuItem)

		self.ind.set_menu(self.menu)

	# quit application by menu
	def quit_cb(self, widget, data = None):
		if data:
			data.set_visible(False)
		gtk.main_quit()

	# run a notification
	def notify(self, service, msg):
		n = pynotify.Notification(service+" "+msg)
		n.show()

	# call to status change
	def service_change_state(self, path, op):
		subprocess.call(['gksudo','--description','Tray Indicator Services','/etc/init.d/'+path, op])

	# Check if the process is running
	def service_is_running(self, service):
		if(type(service) is ListType):
			service_pid_path = service[1]
			if (os.path.exists(service_pid_path)):
				return 1
		else:
			if(os.path.exists('/var/run/'+service+'.pid')):
				return 1
		return 0

	# alternate service widget base on his state
	def toggle_service(self, widget, service, service_name, menu, op):
		if(self.service_is_running(service)):
			self.service_change_state(service_name, 'stop')
			widget.set_active(False)
			self.notify(service_name, "not running")
		else:
			self.service_change_state(service_name, 'start')
			widget.set_active(True)
			self.notify(service_name, "running")

	# Create a menu item based on a process
	def service_menu_item_create(self, service, service_name, menu, op):
		menuItem = gtk.CheckMenuItem(service_name)
		if (self.service_is_running(service)):
			menuItem.set_active(True)
		else:
			menuItem.set_active(False)

		menuItem.connect("activate", self.toggle_service, service, service_name, menu, op)
		menuItem.show()

		return menuItem

# main gtk entry
def main():
	gtk.main()
	return 0

# application if runned directly
if __name__ == '__main__':
	trayServicesIndicator = TrayServicesIndicator()
	main()

Por el momento solo va a mostrar 2 servicios (apache y mysql), para agregar servicios es nada mas de agregarlos en el ejecutable la variable servicios, ademas este script puede ser corrido directamente con solo darle permisos de ejecución, o bien para los mas traviesos pueden importarlo como una clases e interactuar, la idea es aprender mientras se hace la vida más fácil, en lo personal es genial para reiniciar servicios🙂





Instalando Hamachi en Karmic

8 12 2009

Personalmente uso hamachi para tener acceso a maquinas que estan fuera de mi rango o acceso, casi siempre por limitaciones.

Con ésta herramienta las barreras de no tener una ip pública apuntado a mi maquina en el puerto 22, quedan en el pasado, explico los pasos para ser instalarlo en Ubuntu Karmic:

Descargar la herramienta
wget http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz

Descomprimir

tar -xzvf hamachi-0.9.9.9-20-lnx.tar.gz

Instalar

cd hamachi-0.9.9.9-20-lnx/
sudo make install
sudo tuncfg

Hay que inicializar las configuraciones de hamachi

hamachi-init

Para ejecutarlo en consola solo basta con:

hamachi start

para evitar errores es bueno instalar el siguiente paquete:

sudo aptitude install upx-ucl

Para estos casos prefiero la interface grafica, que me evita ciertos dolores de cabeza relacionado con que se pierda la conexion, para mi gusto basta con hamachi-gui que su uso es instalación son muy sencillos.