lunes, 29 de octubre de 2007

[Backup] La idea de... linux


 Los "backup" son una serie de artículos, mensajes y posts que he ido escribiendo a lo largo de los años en las webs y blogs que he tenido y que estoy tratando de agrupar y recuperar para "la posteridad" en este blog.

"La idea en" era una sección/bloc de notas que utilizaba en maserox.net para anotar ideas importantes para tenerlas a mano cuando fuera necesario.

Nótese que los lenguajes de programación y los sistemas operativos evolucionan rápidamente y parte de la información aquí detallada puede estar obsoleta.

Comandos básicos útiles en Linux:

df:Conocer la utilización de espacio en disco. O mejor dicho explicado: muestra por pantalla un listado de las
particiones existentes en el sistema y datos de interés sobre las mismas.


Por defecto: el nombre del dispositivo o sistema de ficheros, los bloques de
1K (ya sabéis: 1000K es aprox 1Mega, 1.000.000K es aprox 1Giga...), cuánto espacio
hay usado, cuánto disponible, el porcentaje de uso, y donde está montado.

Por ejemplo, a mi me sale:
$ df
S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/mapper/Debian-root 6890048   6061864    478184  93% /
tmpfs                   258488         0    258488   0% /lib/init/rw
udev                     10240        84     10156   1% /dev
tmpfs                   258488         0    258488   0% /dev/shm
/dev/hda1               233335     31705    189182  15% /boot
/dev/mapper/Debian-home 106755136  63026264  38305976  63% /home
     

clearLimpia la pantalla. Ideal para cuando se te llena la pantalla de texto. Un clear seguirás
escribiendo en la primera. Bien limpito. Especialmente útil cuando solicitas
un listado (ls,dir, etc...),
un mostrado de fichero (cat), etc...


man "nombre_de_programita" Muestra la página man de ese "programita".
Adicionalmente, puede ser de utilidad pasarse por la Guía man de Gentoo, y
saber que para buscar palabras o "patrones" dentro de un man basta con escribir
"/" (barra) seguido de lo que se quiera buscar y darle al [ENTER]. Y para ir al
siguiente resultado pulsar la letra [n]. Los resultados encontrados se resaltarán
en la pantalla.

Si se utiliza este método, el man mostrará en la parte inferior una frase
del estilo "Pattern not found" para informar de que no encuentra más resultados
para esa búsqueda.


  
apropos "patron"
¿Sabéis cuando te suena cómo es un comando pero no lo recuerdas del todo
bien? ¿O cuando lo intentas ejecutar mareando letras para ver si te sale? ¿O cualquier
otra situación en la que lo que so voy a decir de apropos o sea súper útil? Pues bien:

Este comando muestra una lista de todos los comandos que tenéis disponibles
en vuestro sistema y que contienen "patron", ya sea en el comando propiamente
dicho, o en su "descripción corta" (la cual también aparece en pantalla junto al listado).

Que te suena que tienes un programita que se llama nosequé_ftp,
pues ejecutas $ apropos ftp y te sale una lista tal que así:



apt-ftparchive (1) - Utility to generate index files

cftp (1) [conchftp] - Conch command-line SFTP client

conchftp (1) - Conch command-line SFTP client

filezilla is the Linux port of the famous FTP client for Windows. (1) [filezilla] - (unknown subject)

Finance::Quote::FTPortfolios (3pm) - Obtain unit trust prices from www.ftportfolios.com


ftp (1) - Internet file transfer program

fzsftp (1) - (unknown subject)

fzsftp is a Secure File Transfer (SFTP) client. (1) [fzsftp] - (unknown subject)

gftp (1) - a graphical ftp client

gftp-gtk (1) - a graphical ftp client

gftp-text (1) - a graphical ftp client


netkit-ftp (1) - Internet file transfer program

netrc (5) - user configuration for ftp

pftp (1) - Internet file transfer program

sftp (1) - secure file transfer program

sftp-server (8) - SFTP server subsystem

smbclient (1) - ftp-like client to access SMB/CIFS resources on servers


webcam (1) - capture images and upload them to a webserver using ftp

   KDE:

[Alt]+[F5] Muestra una ventanita con la lista de ventanas y opciones para interactuar
con ellas del tipo "pasar a", "ordenar en cascasa", "cerrar todas las ventanas", etc...

 
[Alt]+[F3]
Muestra el "menú de las ventanas", con sus opciones del tipo
mover, redimensionar, maximizar, avanzado, recoger, etc...

[Alt]+[Arrastrar] Mueve la ventana donde se arrastre. Independientemente de donde en qué
parte de la ventana se haga click, incluso en un botón o sobre una región de texto.
 

[Alt]+[Tab]Lo típico de tabular entre programas abiertos... 

[Ctrl]+[Tab] Tabular entre escritorios 

[Alt]+[Click derecho]+[Arrastrar] Redimensiona ventanas. Simula que el click lo haces en el borde
correspondiente de la ventana, no en cualquier lugar. Para no molestarte en
acertar en el borde o cuando los bordes no se ven va muy bien.

sábado, 27 de octubre de 2007

[Backup] Manual de MySQL de Maserox:


 Los "backup" son una serie de artículos, mensajes y posts que he ido escribiendo a lo largo de los años en las webs y blogs que he tenido y que estoy tratando de agrupar y recuperar para "la posteridad" en este blog.

Manual de MySQL de Maserox:
Este es un manual de MySQL escrito desde la experiencia personal. Como el resto de secciones de laIdea, pretende servir de "cuaderno de apuntes" para cualquiera que le encuentre utilidad, empezando por mí.

A lo largo de toda esta "hoja" he dividido las anotaciones en subsecciones, como es costumbre aquí en Maserox. Se pueden encontrar "enlaces", "consultas", "administración", "creación de tablas", etc...

Que aproveche!! :-)



Enlaces de interés sobre MySQL:

MySQL en la wikipedia
MySQL-Hispano
Manual de referencia de MySQL 5.0 en castellano
Tutorial básico de MySQL en MySQL-Hispano
Tutorial básico de MySQL - II en MySQL-Hispano
MySQL con Java en Linux en MySQL-Hispano
Tipos de datos en MySQL en MySQL-Hispano
Integridad referencial en MySQL en MySQL-Hispano
Almacenando contraseñas en MySQL en MySQL-Hispano
Zona de desarrolladores de la web de MySQL: Donde podréis encontrar todo tipo de enlaces e información relacionados con el desarrollo en MySQL. Desde enlaces a otras secciones, como por ejemplo a manuales de referencia, blogs, foros, listas de correo, etc... de MySQL, como a "vertientes" o "ramas" del tema como el trabajo de MySQL bajo PHP, bajo Java, etc... o también noticias relacioandas con la actualidad del "mundo" MySQL.
Enlace directo a la sección de documentación y manuales de MySQL (de la página oficial de MySQL).
Manual de referencia (en castellano) de MySQL Query Browser

Administración de MySQL:
Antes de nada recordar que no ha nada mejor que acudir al manual de referencia de algo para obtener información 100% útil y 100% vital bla bla bla... ya sabéis por dónde voy. Avisados quedáis...

Los primeros pasos en la administración de nuestro mysql inmediatamente después de su instalación, están relacionados con las contraseñas. Esa molesta pero necesaria tarea que es preocuparse mínimamente por la seguridad de las cosas.

Como (casi) siempre, el grado de paranoia que llevemos en estos temas irá relacionado con lo seria que vaya a ser la faena que realicemos, pero no está de más cuidar un poquito el tema de los accesos a las bases de datos que tengamos, digo yo...

En este punto, resulta de vital importancia leerse el punto 2.9 del manual de referencia de MySQL: Puesta en marcha y comprobación después de la instalación.

Si somos de los que tienen prisa, desinterés, desgana, o lo que sea, pues como mínimo mínimo (si, dos "mínimos", rollo énfasis en plan "hazme caso, joé") sería cosa de leerse el punto dedicado a Hacer seguras las cuentas iniciales de MySQL.

Ahí explican el tema de las cuentas de usuario anónimo (aunque no avisan de que hay sistemas que las eliminan automágicamente por si acaso...), y que la cuenta de administrador por defecto no tiene contraseña, por lo que es un poquillo importante hacerles caso y ponerle una rapidito...

Comandos
USE Seguido del nombre de una base de datos existente, permite cambiar la base de datos con la que se está trabajando.SHOW  Es un comando que da mucho de sí. Por ejemplo un SHOW DATABASES; muestra en una consulta las bases de datos existentes en el sistema (y visibles para el usuario que ejecuta el comando, claro).

Funciones
MySQL trae consigo una serie de funciones. Entre ellas: USER()En una consulta, devuelve el usuario que está conectado en ese momento.CURRENT_DATEEn una consulta, devuelve la fecha actual.


Consejos y recordatorios:

Cuando se crean tablas:
Ojo con los campos que permiten valores nulos y los que no
Si hay que definir restricciones con constraints y checks se definen, pero definirlas pa' na'... es tontería
Al definir claves ajenas (foreign keys) es bastante aconsejable (por no decir imprescindible) hacer uso de las sentencias ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION} y ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}. Yo, personalmente, suelo utilizarlas así:
ON UPDATE CASCADE
ON DELETE RESTRICT
que actualiza "en cascada" cuando se modifica una clave ajena en su tabla de origen, pero restringe la eliminación de un registro que esté utilizado en otra tabla.

Es como si tú le cambias el código de artículo a un producto: el código se actualiza en todos los registros, por ejemplo de facturas, donde aparezca el producto. Pero si intentas eliminar un producto que aparece en alguna factura no te lo permite.

Mi experiencia en el terreno de las BBDD no es suficiente para recomendar definir siempre una codificación de caracteres y confiar en ella para hacer uso de caracteres extendidos (tildes, eñes, etc...), pero bueno, pienso que nunca está de más definirsela, no?

Si queréis trabajar con claves ajenas y demás, tengo entendido (no se si será cierto) que es imprescindible trabajar con el Motor de almacenamiento INNODB, por su soporte para transacciones, integridad referencial, etc... Así pues un: ENGINE = INNODB al final de la definición de vuestras tablas y asunto solucionado!!


ERROR 1005: Can't create table (errno: 150)
Después de mucho goglear el asunto, mi problema era que una de las tablas la tenía por despiste como MyIsam, y la otra sí que era INNODB, pero conseguí una minilista de cosas a confirmar antes de tirar el ordenador por la ventana:
Ambas tablas son INNODB
El tipo de datos coincide
La clave ajena es la clave primaria
Escribís FOREIGN y no FOREING (típico!!)

sábado, 20 de octubre de 2007

[Backup] La idea en... páginas web

 Los "backup" son una serie de artículos, mensajes y posts que he ido escribiendo a lo largo de los años en las webs y blogs que he tenido y que estoy tratando de agrupar y recuperar para "la posteridad" en este blog.
"La idea en" era una sección/bloc de notas que utilizaba en maserox.net para anotar ideas importantes para tenerlas a mano cuando fuera necesario.
Navegacion mediante enlaces:
Deberias tener en cuenta que hay distintos modos de realizar la navegacion por tu pagina web. cada uno de ellos con unas ventajas y unos inconvenientes.
    • En JavaScript se puede utilizar history.forward() y history.back(). O tambien history.go(+1) y history.go(-1)...
  • Trabajar segun la resolucion de monitor:
  •    Hay varias formas de tratar con estos valores:
    • El objeto screen, por ejemplo, con las propiedades width y height del mismo.
  • Trabajar con las coordenadas del raton:
  •    Para trabajar con estos valores, se ha de hacer a partir de la generacion un evento (que son los que capturan propiedades como estas). Si se desea "seguir" el movimiento del raton bastaria con utilizar las propiedades siguientes "dentro" de un "onMouseMove();", por ejemplo.
    • Las propiedades event.screenX y event.screenY Especifican la posicion horizontal y vertical del cursor en pixels relativa a la pantalla.
    • Las propiedades event.pageX y event.pageY Especifican las posicion horizontal y vertical del cursor en pixels relativa a la pagina.
  • Cosas que hay que repasar antes de tirar el ordenador por al ventana cuando no deja de lanzarte un error y no lo localizas:
    • Los signos de siempre (a mi juicio por este orden): las comillas (simples y dobles); las comas y puntos y coma; los parentesis y las llaves. Y por ultimo el resto.
      Los coloco por parejas porque si no se olvidan suelen confundirse unos con otros.
      No incluyo los angulitos ("menor que" y "mayor que")porque (creo que) es raro que alguien desarrolle webs en un entorno que no le avise (mediante color, sonidos, errores o lo que sea) de que se ha dejado un angulito abierto.
      (hasta yo, que trabajo con Html-kit tengo esa "ventaja")
    • Que la llamada a la funcion se ha hecho correctamente y pasandole TODAS las variables que tiene que recibir.
    • Que la funcion pide y recibe las variables EN EL ORDEN CORRECTO. Esto es muy importante porque hay algunos lenguajes que "confunden" las variables si se reciben en un orden y se utilizan en otro.
  • Jerarquias y malabares:
  •    Si trabajas con un editor web de estos "bonitos" como el "tejedor de suenyos" o el quanta plus (este ultimo es mas que recomendable si te gusta trabajar tu web de ese modo), sabras que tiene la ventaja (o desventaja, segun se mire) de contar con un "avisador de errores de codigo". esto es una consola de salida de posibles errores que puede ser que tenga tu codigo.
       Cabe desatacar que si utilizas el editor en modo grafico estos errores se reduciran a posibles incompatibilidades entre un navegador u otro. Pero en el caso de utilizar el editor en modo "codigo" el numero de errores suele aumentar considerablemente.
       Principalmente esto es debido a distintos factores: uno de ellos es que cuando el editor esta siendo utilizado en "modo grafico" este escribe el codigo "a su manera", y esto se suele traducir en la utilizacion de una serie de etiquetas que normalmente desconoces o no elegirias para tu codigo escrito "a mano", pero que en cambio el editor ve de lo mas oportunas. Ademas de esto, las etiquetas suelen ser dispuestas de manera que no haya "solapamientos" entre ellas, porque cuando lo hay el editor (al menos en el "tejedor" ocurre asi) da uno, o varios, de sus errores.
       Pros y contras que tiene todo esto: pues que cuando vas a editar el codigo de tu web te pierdes descifrando todo el codigo que ha metido automaticamente el editor, ademas de que te lo ordena a "su manera", y de que utiliza mas codigo del que seria necesario si con un poco de apciencia escribieras el codigo tu mismo.
       Aprovecho para recordar en este momento que todo lo que escribo lo hago siempre desde mi punto de vista y desde mi experiencia, en este caso como webmaster. nada de todo esto esta extraido de ningun manual ni documentacion ni nada por el estilo.
       Pues bien, despues de toda esta super-introduccion creo que hay una serie de cosas que se deben tener en cuenta a la hora de editar una web "a mano":
    • Aunque tengas un font definido durante todo un texto, dentro de una <a> el color de texto que hayas definido "desaparece". esto es porque, por jerarquia, el color de un hiperenlace esta "sobre" el definido fuera de el, y solo se puede cambiar si dentro de el (ya sea en la declaracion de la etiqueta <a>, o dentro de la misma) se declara asi.

domingo, 14 de octubre de 2007

[Backup] La idea en... Java

 Los "backup" son una serie de artículos, mensajes y posts que he ido escribiendo a lo largo de los años en las webs y blogs que he tenido y que estoy tratando de agrupar y recuperar para "la posteridad" en este blog.

"La idea en" era una sección/bloc de notas que utilizaba en maserox.net para anotar ideas importantes para tenerlas a mano cuando fuera necesario.

  • Resumen de la sintaxis de Java:

    • Arrays    Existen varias formas de declarar un array. En este enlace podeis encontrar informacion sobre los distintos metodos. Y tambien en esta (que ademas de tener el mismo manual, o casi identico, tiene un monton de extras utiles como ejemplos, foros de consulta, etc...).
      Para crear un array de caracteres con las vocales del abecedario:
      char [] alfabeto = {'a','e','i','o','u'};
    • Enumerados:      Aparte de los "ya conocidos" tipos de variables (enteros, reales, caracteres, booleanos y cadenas de caracteres) existe un tipo que no se suele dejar ver en los manuales sobre java, por lo menos segun mi experiencia.
           Se trata de los enumerados, que como su nombre indica son para hacer enumeraciones. por lo que yo se enumeraciones "estaticas". quiero decir que tienen un valor fijo establecido.
           Por lo que se hasta ahora se declaran de forma "parecida" a los objetos. En su forma mas sencilla se utiliza la palabra reservada "enum" seguida de "llaves", dentro de las cuales se enumeran los valores de la variable, los cuales han de ir separados por "coma".
           Por ejemplo: nos interesa una variable diasSemana que contenga los dias de la semana. No tienen porque ser de lunes a domingo, imaginemos que trabajamos en una aplicacion para una oficina y solo nos interesan los dias laborables de lunes a viernes. Pues bien, se definiria asi:
      enum diasSemana {lunes, martes, miercoles, jueves, viernes}
      //el punto y coma de final de linea no es necesario
           Mas tarde, para acceder a dichos valores se ha de hacer de la forma:
      <nombre_enumerado>.<valor>
           y para definir una variable de ese tipo:
      <nombre_enumerado> <nombre_variable> = <nombre_enumerado>.<valor>
           Por ejemplo, para crear una variable llamada diaHoy que contenga el dia que es hoy, se haria de la siguiente manera (aprovechando la variable diasSemana declarada antes) :
      diasSemana diaHoy = diasSemana.martes
      //suponiendo que hoy fuera martes, claro :-p
    • Caracteres especiales:
      Caracter: Descripcion
      \bBorrado (retroceso)
      \tTabulador
      \fCambio de linea (form feed)
      \rRetorno de carro ("salto de renglon")
      \nSalto de linea
      \'Comilla simple
      \"Comillas dobles
      \\Barra invertida
      \ddd Numero de caracter en octal (valores admitidos: [000,377])
      \uxxxxNumero de caracter Unicode que se quiere representar (en hexadecimal). valores: [000, FFF]
    • Divisiones: recuerda que el operador "/" devuelve la division y el "%" el resto de esa division.
    • "If reducido": recuerda tambien que tienes a tu disposicion el operador "if reducido", llamado "? :", que sirve para evaluar una condicion y realizar una accion si se evalua a true u otra si se evalua false. Aparentemente actua como un "if...else", por lo que le llamo asi.

      Sintaxis:
      condicion ? expresion1 : expresion2
      //si condicion es true se ejecuta expresion1 y de ser false se ejecuta expresion2
      Evidentemente se pueden "anidar", simulando "else's".
    • Conversiones:
      (tipo) expresion   :   convierte la expresion al tipo (de variable) indicado.
      (Clase) objeto     :   convierte el objeto a la clase indicada.
    • instanceof:
      objeto instanceof Clase : devuelve true si el objeto indicado es una instancia o deriva de la clase indicada.
    • ~

  • Excepciones:

    • Las "mas frecuentes":
      • NullPointerException: lanzada cuando se intenta acceder a un objeto o atributo de un objeto que no existe (que no esta referenciado apunta a null.