lftp es un programa de transferencia de archivos (FTP) por medio de la linea de comandos para UNIX y sistemas basados en UNIX. Fue escrito por Alexander Lukyanov y esta diponible bajo GPL.

Leer mas en wiki/Lftp.

Uso basico

``` lftp ftp://ftp.my-domain.com lftp ftp.my-domain.com:~> user myuser Password: ```
### Comandos de ayuda
``` lftp myuser@ftp.my-domain.com:/www> help ! (commands) alias [ []] anon bookmark [SUBCMD] cache [SUBCMD] cat [-b] cd chmod [OPTS] mode file... close [-a] [re]cls [opts] [path/][pattern] debug [|off] [-o ] du [options] exit [|bg] get [OPTS] [-o ] glob [OPTS] help [] history -w file|-r file|-c|-l [cnt] jobs [-v] kill all| lcd lftp [OPTS] ls [] mget [OPTS] mirror [OPTS] [remote [local]] mkdir [-p] module name [args] more mput [OPTS] mrm mv [re]nlist [] open [OPTS] pget [OPTS] [-o ] put [OPTS] [-o ] pwd [-p] queue [OPTS] [] quote repeat [delay] [command] rm [-r] [-f] rmdir [-f] scache [] set [OPT] [ []] site source user |URL> [] version wait [] zcat ```
### Subir un archivo
``` lftp myuser@ftp.my-domain.com:/www> put file.ext 64714 bytes transferred in 8 seconds (7.9K/s) ```
### Un pequeño tip Si en algun momento, intentan subir algo a un servidor puede que obtengas este error:
``` Lftp Fatal Error: Certificate Verification: Not Trusted ```
La solucion es facil, solo se debe agrear en `/etc/lftp.conf` lo siguiente:
``` set ssl:verify-certificate no ```
- - - - - - ### Link de interes - Official web site: - Wikipedia: ### Mailing lists Mailing lists and archives (since July 2011): - - List archives (including prior to July 2011): - - ### Code Browse the source code: - - Bug trackers - -

Valencia/Venezuela Software Libre

Planeta VaSlibre, es un resumen de las noticias o post de la comunidad de usuarios, desarrolladores y activistas del mundo del software libre, donde siempre estaremos al tanto de lo último que publiquen nuestros miembros.

Actualmente cuenta con las siguientes suscripciones:

Leer la nota completa aquí.

Un libro que me encantó es «Homeland» de Cory Doctorow, trata sobre un grupo de hackers que se ven envueltos en situaciones que los deja expuestos a uno de los gobiernos y empresas más poderosas que existen y deben hacer algo aún así los haga correr peligros. Una historia de ficción sobre gente como Aaron Swartz.

Pero lo mejor del libro, es que precisamente cierra con dos cartas, una por Jacob Appelbaum, uno de los primeros mimbros de Wikileaks y desarrollador del proyecto Tor; y otra por Aaron Swartz. La carta de Aaron la traduje y publico a continuación, espero les sirva de inspiración para que sigan en sus luchas aún cuando a veces parezca que quién da la batalla del otro lado es muy grande e invencible:

Hola, soy Aaron. Se me ha dado este pequeño espacio aquí al final del libro porque soy un humano de carne y hueso, y cómo tal, puedo decirte algo que no creerías si viniese de la boca de cualquiera de esos carácteres ficticios:

Esto es real.

Claro, no hay alguien llamado Marcus o Ange realmente, al menos no que yo conozca, pero sí sé de gente real justo como ellos. Si quieres, puedes ir a San Francisco y conocerlos. Y mientras estás allí, puedes jugar D&D con John Gilmore o construir un cohete en Noisebridge o trabajar con algunos hippies en un proyecto de arte para Burning Man.

Y si algo de las cosas más relacionadas con conspiraciones en el libro te parecen demasiado alocadas para ser verdad, bueno, simplemente googlea Blackwater, Xe o BlueCoat. (Yo mismo tengo una solicitud FOIA pendiente para saber más de "software para manejo de persona", pero los federales dicen que les va a tomar tres años más redactar todos los documentos relevantes.)

Ahora, yo espero que te hayas divertido quedándote despierto toda la noche leyendo acerca de estas cosas, pero la parte que viene es importante así que presta atención: lo que está pasando ahora no es algún reality show de televisión donde simplemente puedes sentarte en casa y ver.

Esta es tu vida, este es tú país -- y se quieres mantenerlo seguro, debes involucrarte.

Sé que es fácil sentirse sin poder, como si no hubiese algo que puedas hacer para que baje la marcha o detener "el sistema." Como si todos los hilos son movidos por fuerzas oscuras y poderosas lejanas a tu control. Yo me siento de esa forma también, a veces. Pero simplemente no es verdad.

Hace menos de un año, un amigo me llamó para decirme sobre un proyecto de ley oscuro del cuál había escuchado llamado Acta para Combatir la Vulneración En Línea y La Falsificación o COICA (En Inglés es: Combatting Online Infringement and Counterfeitting Act, de allí la abreviación COICA). Mientras leía el proyecto empecé a preocuparme más y más: bajo estas provisiones, el gobierno podría censurar sitios web que no le gusten sin algo como un juicio. Sería la primera vez que el gobierno de los EEUU se le darían poderes para censurar el acceso a la red.

El proyecto había sido introducido hace un día o dos, pero ya tenía un par de docenas de senadores apoyándola. Y, a pesar de nunca haber un debate ya estaba siendo programada para ser votada en sólo un par de días. Nadie había reportado al respecto y ése era justamente el punto: ellos querían apurar esta cosa para que pasara antes que alguien se diese cuenta.

Afortunadamente, mi amigo se dió cuenta. Nos quedamos despiertos todo el fin de semana y lanzamos un sitio web explicando qué decía el proyecto de ley, con una petición que podías firmar en rechazo al proyecto que te daría números de teléfonos para llamar a tus representantes en el senado. Le dijimos al respecto a algunos amigos y ellos le dijeron a algunos de sus amigos y en cuestión de un par de días teníamos más de 200 mil personas en nuestra petición. Fue increíble.

Bueno, la gente promoviendo esta ley no paró. Ellos gastaron literalmente decenas de millones de dólares haciendo lobby para éste proyecto de ley. La cabeza de cada compañía de medios grandes voló a Washington, D.C. y allí se reunieron con el jefe de personal del presidente y amablemente le recordaron de los millones de dólares que le habían donado a la campaña del presidente y le explicaron cómo lo que ellos querían -- la única cosa que querían -- era que esta ley se aprobara.

Pero la presión pública siguió creciendo. Para intentar sacar a la gente del camino ellos intentaron cambiando el nombre de la ley -- llamándola PIPA y SOPA, incluso llamándola E-PARASITES Act -- pero no importó cómo la llamaron, más y más personas se siguieron diciéndole a sus amigos sobre la ley y consiguiendo más y más personas que se opusieran. Pronto, las firmas en nuestra petición iba en millones.

Logramos detenerlos por más de un año con diferentes tácticas, pero se dieron cuenta que si esperaban más quizás nunca lograrían tener un chance de pasar esta ley. Así que programaron un voto apenas volviesen de la pausa de invierno.

Pero mientras los miembros del congreso estaban fuera en la pausa de invierno, manteniendo reuniones públicas y en las salas de sus pueblos en casa, la gente empezó a visitarlos. En todo el país, miembros del congreso empezaron a ser cuestionados por sus electores acerca de su apoyo a esa sucia ley de censura del internet. Y los miembros del congreso empezaron a asustarse -- algunos llegando tan lejos como responderles atacandome.

Pero esto ya no se trataba de mi -- nunca se trató de mi. Desde el principio fue sobre ciudadanos tomando las cosas en sus propias manos: haciendo vídeos en YouTube y escribiendo canciones oponiéndose a la ley, haciendo gráficos mostrando cuánto dinero los promotores de la ley habían recibido de las industrias promoviéndola, y organizando boycotts poniéndo presión en las compañías que habían promovido la ley.

Y funcionó -- tomó la ley desde un punto político sin problema alguno que se suponía debía pasar unánimamente a una posición más parecida a tener un balón tóxico que nadie quería tocar. ¡Incluso los promotores de la ley empezaron a sacar declaraciones oponiéndose a la ley! Oh sí, esos dueños de medios estaban molestos...

Así no es como se supone que el sistema deba funcionar. ¡Un montón de chicos no detienen unas de las fuerzas más poderosas en Washington simplemente escribiendo en sus portátiles!

Pero pasó. Y tú puedes hacer que pase de nuevo.

El sistema está cambiando. Gracias a la Internet, todos los días personas pueden saber acerca de cosas y organizarse incluso si el sistema está determinado a ignorarlo. Ahora, quizás no ganes todo el tiempo -- esto es la vida real, después de todo -- pero finalmente tenemos una oportunidad.

Pero sólo funciona si tú tomas parte en ello. Y ahora que has leído este libro y aprendido cómo hacerlo, estas perfectamente informado sobre cómo hacerlo de nuevo. Es correcto: ahora depende de ti cambiar el sistema.

Aaron Swartz.

Node-Webkit es una aplicación basada en Chromium y Node.js que te permite escribir aplicaciones nativas usando las tecnologías web

para saber más clic aquí.

La estructura de una app

Las aplicaciones de node-webkit se crean de forma similar a aplicaciones de Node, donde tenemos un directorio que contiene todos los diferentes recursos que vamos a usar en nuestra aplicación es decir, archivos HTML, CSS, JavaScript, imágenes y cualquier otro que necesitemos.

Inicio rapido

Todas las aplicaciones deben tener un archivo llamado package.json, este archivo le dice a node-webkit como abrir la aplicación y las funcionalidades de la misma.

Un ejemplo sencillo seria algo así:

Creamos un archivo HTML, index.html:

``` <html> <head> <title>Hello World!title> head> <body> <h1>Hello World!h1> We are using node.js <script>document.write(process.version)script>. body> html> ```
Y nuestro `package.json`:
``` { "name": "nw-demo", "main": "index.html" } ```
Para tener mayor información, clic [aquí](https://github.com/rogerwang/node-webkit/wiki/Manifest-format). Para ejecutar la app solo debemos escribir en consola:
``` $ /path/to/nw /path/to/app ```
Y vamos a tener una salida parecida a esta: ![Ejemplo Node Webkit APP](images/node-web-kit-app.png "Ejemplo Node Webkit APP") Como instalar Node Webkit ------------------------- La instalación esta disponible para las plataformas: - MAC - Linux - Windows Para conocer la forma de instalación adecuada a tu plataforma visita este [enlace](https://github.com/rogerwang/node-webkit#downloads). - - - - - - [Follow my blog with Bloglovin](http://www.bloglovin.com/blog/13452033/?claim=nnr59qefyce)
Para cerrar este 2014, a continuación te colocaremos el resumen de publicaciones realizadas, por si no pudiste leer alguna o si estas llegando recientemente a nuestro blog.


Esperamos tengan un Feliz Año 2015, de nuestra parte seguiremos llevándoles informaciones sobre Tecnologías Libres, Eventos y publicaciones para tod@s.

En desarrollo web, Media Queries es un módulo CSS3 que permite adaptar la representación del contenido a características del dispositivo como la resolución de pantalla (por ejemplo, un smartphone frente a pantallas de alta definición) o la presencia de características de accesibilidad como el braille. Se convirtió en un estándar recomendado por la W3C en Junio del 2012.1 y es un principio básico de la tecnología de Diseño web adaptativo.

wikipedia

Entrando en materia

Las Media queries consisten de un media type y una o mas expresiones, implicando características del medio, la cual se resuelve como verdadera o falsa. El resultado de la consulta es verdadera si el tipo de medio especificado en el media query concuerda con el tipo de dispositivo que está siendo mostrado y todas las expresiones en el media query son verdaderas.

Media que?

Los media types permiten indicar una serie de estilos que se aplicaran segun el tipo del medio, en algunas paginas, al ver el codigo fuente, podemos encontrar algo como esto:

``` <link rel="stylesheet" type="text/css" media="all" href="style.css"> <link rel="stylesheet" type="text/css" media="print" href="print.css"> ```
Los media types más típicos son: - all: para todo (valor por defecto). - print: en la vista previa de impresión y a la hora de imprimir. - screen: para las pantallas de ordenador. - tv: para televisores. Media Query para los dispositivos mas comunes ---------------------------------------------
``` /* Smartphones (portrait and landscape) ----------- */ @media only screen and (min-device-width : 320px) and (max-device-width : 480px) { /* Styles */ } /* Smartphones (landscape) ----------- */ @media only screen and (min-width : 321px) { /* Styles */ } /* Smartphones (portrait) ----------- */ @media only screen and (max-width : 320px) { /* Styles */ } /* iPads (portrait and landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) { /* Styles */ } /* iPads (landscape) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : landscape) { /* Styles */ } /* iPads (portrait) ----------- */ @media only screen and (min-device-width : 768px) and (max-device-width : 1024px) and (orientation : portrait) { /* Styles */ } /* Desktops and laptops ----------- */ @media only screen and (min-width : 1224px) { /* Styles */ } /* Large screens ----------- */ @media only screen and (min-width : 1824px) { /* Styles */ } /* iPhone 4 ----------- */ @media only screen and (-webkit-min-device-pixel-ratio : 1.5), only screen and (min-device-pixel-ratio : 1.5) { /* Styles */ } ```
Si bien es cierto que existen frameworks css que ayudan en el desarrollo de los sitios web no necesariamente TODO lo que tiene ese framework lo usamos. Un ejemplo claro de esto es bootstrap, tiene muchas cosas que ayudan al desarrollo pero nunca llegamos a usar todo el potencial que nos ofrece. Bootstrap es genial, pero como dije arriba realmente no usamos todo el potencial que nos ofrece, y vamos a tener codigo innecesario en nuestras aplicaciones web cuando solamente usamos el 10% del framework. Fuente: - http://www.studiopress.com/design/website-respond-mobile-devices.htm - http://rolandocaldas.com/html5/media-queries-y-responsive-design - https://developer.mozilla.org/es/docs/CSS/Media\_queries

Las tiles son pequeños recuadros que conforman una pantalla de inicio bastante dinámica mostrando en llamativos colores la información necesaria para mostrar lo que sucede en nuestras aplicaciones instaladas.

En esta oportunidad, vamos a aprender como crear unas tiles personalizadas para nuestro sitio web:

Facil

No es cosa del otro mundo ni complicada hacer solo debemos ir a este sitio web y seguir los pasos que nos piden.

  • Title
  • Que es el titulo de nuestro sitio web
  • Background color
  • Que no es mas que el color de fondo del "tile"
  • Subir una imagen
  • Esta imagen puede ser el logo de nuestra web
  • Notificaciones
  • En este apartado debemos colocar la URL de nuestro feed
  • Obtenemos el codigo
  • Hay varias formas de usarlo
  • Subiendo los archivos que nos proporcionan en la pagina web
  • Agregando una meta etiqueta

Agregando estos cambios al blog

Este blog usa pelican, un generador de contenidos estatico que funciona con python si tambien usas pelican y quieres agregar una tile a tu blog debes incluir esto en tu pelicanconf.py

``` STATIC_PATHS = ['static/browserconfig.xml', 'static/large.png', 'static/square.png', 'static/tiny.png', 'static/wide.png',] EXTRA_PATH_METADATA = { 'static/browserconfig.xml': {'path': 'browserconfig.xml'}, 'static/large.png': {'path': 'large.png'}, 'static/square.png': {'path': 'square.png'}, 'static/tiny.png': {'path': 'tiny.png'}, 'static/wide.png': {'path':'wide.png'}, } ```
Yo tengo el contenido dentro de una carpeta llamada static. Esto es todo, espero que les guste!! Saludos

Dejar de seguir a quienes no te siguen en Twitter con este script de Python. Hace unas semanas hice un script en Python que permitía saber quienes no te seguían pero con el cambio de la API a la versión 1.1 quedo obsoleto. Entre las peticiones que he recibido aparte de ponerlo a funcionar con la API nueva era para dejar de seguir a esos que no te seguían.

El siguiente script no te dice los nombres de quienes no te siguen como lo hacia el que mencione anteriormente pero cuenta cuantos de los que tu sigues no te siguen y los deja de seguir. Antes de ejecutarlo les recomiendo que organicen las cuentas que ustedes siguen y que tal vez no los sigan en listas, por ejemplo crear una lista con todas sus fuentes de noticia o una de robots y comedia, etc.

Este es el script:

import requests
from requests_oauthlib import OAuth1
import re
from time import sleep
import operator
import sys
import os
import collections


consumer_key=''
consumer_secret=''
access_token_key=''
access_token_secret=''


def get_follower_ids():
  cursor = "-1"
  listadeIDs = []
  while cursor != '0':
    try:
      api_url='https://api.twitter.com/1.1/followers/ids.json'
      payload = {'count':'5000', 'cursor':cursor}
      auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
      r = requests.get(api_url, stream=False, auth=auth, params=payload)
      if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
        time_out = int(r.headers["x-rate-limit-reset"]) - int(time.time())
        print("We reached rate limit for ", api_url)
        print "Try again in", time_out, "seconds"
        quit()
      IDs = json.loads(r.content)
      cursor = IDs['next_cursor_str']
      listadeIDs = listadeIDs + IDs['ids']
      sleep(1)
    except KeyError:
      print "Unable to navigate through cursors, last attempt: ", cursor
      break
  return list(set(listadeIDs))


def get_friends_ids():
  cursor = "-1"
  listadeIDs = []
  while cursor != '0':
    try:
      api_url='https://api.twitter.com/1.1/friends/ids.json'
      payload = {'count':'5000', 'cursor':cursor}
      auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
      r = requests.get(api_url, stream=False, auth=auth, params=payload)
      if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
        print("We reached rate limit for ", api_url)
        print("Try again at", r.headers["x-rate-limit-reset"])
        quit()
      IDs = json.loads(r.content)
      cursor = IDs['next_cursor_str']
      listadeIDs = listadeIDs + IDs['ids']
      sleep(1)
    except KeyError:
      print "Unable to navigate through cursors, last attempt: ", cursor
      break
  return list(set(listadeIDs))



def get_unfollowers_info(unfollowers):
   print len(unfollowers)
   api_url='https://api.twitter.com/1.1/users/lookup.json'
   auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
   user_objs = {}
   sleep(1)
   i = 0
   user_id = []
   for i in unfollowers:
     user_id.append(i)
     if (len(user_id) == 100):
       payload = {'user_id':user_id}
       r = requests.get(api_url, stream=False, auth=auth, params=payload)
       if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
         print("We reached rate limit for ", api_url)
           print("Try again at", r.headers["x-rate-limit-reset"])
         quit()
       tmp_user_objs = json.loads(r.content)
       for y in range(len(tmp_user_objs)):
         print tmp_user_objs[y]['screen_name'] , tmp_user_objs[y]['followers_count'] , tmp_user_objs[y]['friends_count'] , tmp_user_objs[y]['following'] , tmp_user_objs[y]['verified'], tmp_user_objs[y]['default_profile']
       user_objs = user_objs , tmp_user_objs
       user_id = []
   payload = {'user_id':user_id}
   r = requests.get(api_url, stream=False, auth=auth, params=payload)
   if r.headers['x-rate-limit-remaining'] and r.headers['x-rate-limit-remaining'] == "0":
     print("We reached rate limit for ", api_url)
     print("Try again at", r.headers["x-rate-limit-reset"])
     quit()
   tmp_user_objs = json.loads(r.content)
   user_objs = user_objs , tmp_user_objs

def unfollow_by_id(user_id):
  api_url='https://api.twitter.com/1.1/friendships/destroy.json'
  payload = {'user_id':user_id}
  auth = OAuth1(consumer_key, consumer_secret, access_token_key, access_token_secret)
  r = requests.post(api_url, stream=False, auth=auth, params=payload)



followers = get_follower_ids()
print "Followers: ", len(followers)
following = get_friends_ids()
print "Following: ", len(following)



unfollower_ids = set(following) - set(followers)
print "unfollower ids: ", unfollower_ids , len(unfollower_ids)


get_unfollowers_info(unfollower_ids)
print "About to unfollow: " , len(unfollower_ids) , "users."
sleep(10)

for user_id in unfollower_ids:
  print "Unfollowing ", user_id
  unfollow_by_id(user_id)

En este script a diferencia de los anteriores que he hecho no use el módulo python-twitter y como ven intento trabajar con el API y su rate-limit En mi caso al ejecutarlo deje de seguir a algunas cuentas de comedia, noticias y cuentas interesantes que enriquecían mi timeline.

Si el tiempo me lo permite, en la próxima versión creo que voy a agregar esos usuarios a una lista privada antes de dejarlos de seguir. He trabajado en otros scripts privados en calcular la importancia de una cuenta en base a la cantidad de seguidores, cantidad de personas que esta sigue, cantidad de tweets, edad de la cuenta y otros factores que tal vez incorpore en un futuro.

Como siempre en todos mis publicaciones que tiene que ver con Python, les agradecería mucho si me dan consejos de como mejorar este script o la lógica del mismo, Incluso pull requests al repo github.com/orvtech/Python-tools-for-twitter/blob/master/unfollow-unfollowers.py.

En nuestra publicación anterior (Instalación: Fuentes Equivalentes a Arial y Times New Roman) les comentamos cómo es el procedimiento para instalar fuentes nuevas en tus sistema GNU/Linux y cuales son aquellas fuentes equivalentes a las fuentes de MS Windows como Arial, Times New Roman, entre otras. En esta oportunidad, les vamos a mencionar cuál es el paquete que deben instalar para tener las fuentes completas "Microsoft True Type Core Fonts". Las cuales incluye:
  • Andale Mono 
  • Arial Black 
  • Arial (Bold, Italic, Bold Italic) 
  • Comic Sans MS (Bold) 
  • Courier New (Bold, Italic, Bold Italic) 
  • Georgia (Bold, Italic, Bold Italic) 
  • Impact Times New Roman (Bold, Italic, Bold Italic) 
  • Trebuchet (Bold, Italic, Bold Italic) 
  • Verdana (Bold, Italic, Bold Italic) 
  • Webdings


Es tan sencillo como realizar la instalación del paquete msttcorefonts. Como les hemos comentado en otras publicaciones deben estar como SuperUsuario para realizar estas instalaciones, si tienen dudas del nombre exacto del paquete se recomienda primero hacer:

aptitude search nombre_paquete

Luego que ya sepamos el nombre exacto, procedemos a realizar la instalación

sudo aptitude install nombre_paquete

Recordándoles también, que estos comandos son usados cuando son sistemas basados en Debian. De esta manera tendrán instaladas estas fuentes en su sistema en caso de requerirlas, como por ejemplo, para la navegación web tener las fuentes instaladas.

Cualquier duda, comentario o información puedes escribirnos a consulta_friki@kioscofriki.com.ve 
Y recuerda, si esta información te ayudó y quieres colaborarnos económicamente puedes hacer tu donación aquí

Anyela

Anyela

Tu asistente personal en la terminal desarrollada con node.js

Instalación

``` npm install anyela ```
Uso --- Anyela es lo que tú terminal necesita Anyela fue creada con el fin de ser una alternativa a Betty, Siri o Google Now en la alternativa, la misma es desarrollada con node.js, Anyela puede resolver tus problemas con la terminal en linux Proximamente en otras plataformas Su uso es muy sencillo, anyela es capaz de realizar las siguientes funciones: - Ver archivos por terminal: `que archivos hay aqui` - administrar archivos: `quiero administrar archivos` - abrir editor de programación: `quiero programar` - navegar en internet: `quiero navegar en internet` - apagar equipo: `apagate` - reiniciar equipo: `reiniciate` - abrir reproductor de musica: `quiero escuchar musica || quiero escuchar una buena rola` - limpiar cache de la pc: `libera la ram` - configurar el sistema: `configura el sistema` - enviar un correo: `enviar un correo` Versión web ----------- La versión web posee un diseño intuitvo hecha con jquerymobile para el uso en distintas plataformas bajo el responsive design La misma se activa con el comando `sudo node_modules/anyela/modulos/server.js` Para más información clic [aquí](https://www.npmjs.com/package/anyela).