Ssh sin password

Nunca me acuerdo

ssh-keygen -t rsa -C "Raspberry Pi #123"
cat ~/.ssh/id_rsa.pub | ssh <USERNAME>@<IP-ADDRESS> 'cat >> .ssh/authorized_keys'
Posted in Sistemas

Reglaje de valvulas TGB Xmotion

Que pasa weys ?!
aquí os dejo un vídeo brico del reglaje de válvulas de nuestra Xmotion.

Yo no tengo ni folla idea de mecánica y esta es la primera reparación tocha que le hago a la moto aún y así la recomiendo para todos aquellos que os de problema de arranque o parada en frio de la moto.

A mi el meca me la hizo a los 10.000 km aprox después de que la moto se parara en cada semáforo, en cada ceda, en cada parada para otear el sinuoso paso de una tiagueni …. y ciertamente la moto mejoró un pelín pero a las dos semanas llego el frío y la moto continuaba parándose sistemáticamente en cada parada hasta que cogía temperatura.

El meca la tuvo en el taller como dos meses por que no tenia ni idea que podía pasarle, me echo la bronca por que le dije que había intentado ajustarle el carburata y claro le falto tiempo pa echarme la culpa de todos los males que le ocurrían a la moto, a el, a su mujer y a toda su estirpe.

La cuestión es que estuvo mirandosela y como no sabia que le pasaba tuvo que llamar a Valencia a su distribuidor, que a su vez tuvo que llamar al importador que no tenia ni idea, a su vez tuvo que llamar a ministro de exteriores para ver si podiar establecer contactos diplomáticos con Taiwan para forzar al fabricante a encontrar una solución; a todo ello Obama, atraves de un contraespía retirado de la KGB, que intercepto los contactos diplomáticos, se entero que mi moto se calaba cuando estaba fría y a raíz de ello empezó la verdadera presión al gobierno Taiwanes para que al final pudieran encontrar una solución a mi problema.
El caso es que la moto estuvo como dos meses en el taller parada cuando finalmente un día que fui a preocuparme por ella el meca me
soltó que ya le habían chivao que podía ser : el reglaje de válvulas! a lo que conteste:

-Pues venga campeón! que quiero verte como lo haces!

y el pavo me contesta:

-Ui no, que esto no lo hace cualquiera! que se tiene que desmontar media moto! Esto no puedo hacerlo yo! Esto tiene que venir los mecánicos del gran premio de motociclismo, que se necesita la precisión de un cirujano y quizas tenga que venir un ingeniero de la Nasa para supervisarlo.

-Pero tu tranqui que no va ha ser tan caro por que esta tarde viene un chavalin de FP que tengo en prácticas y el te lo va apañar en un periquete.

Resultado: una pasta y el problema aunque mejoró un poco continuaba y el caso es con la llegada del frio y el paso del tiempo la moto no se mantenía ni siquiera cuando estaba caliente.

Yo lo achaco a que el mecánico, supongo, solo ajustó las válvulas de admisión vamos lo más fácil y dejó las de escape como estaban, lo supongo por que como se ve en le vídeo solo una válvula de escape de las cuatro estaba claramente fuera de los parámetros de reglaje; además me pareció que la tapa de la caja de balancines de escape no estaba manipulada ni sucia de haberla desmontado.Pero bueno es comprensible, no se le puede pedir al mecánico que se arrastre por el suelo para acceder a las válvulas de escape! podría ensuciarse su mono de trabajo!.

Lo dicho aquí os dejo el “hazte-lo tu mismo” como veréis no hace falta haber estudiado en un colegio de pago para realizarlo aunque es cierto que no te tiene que dar asco el llenarte las manos de grasa ;), espero que le sea útil a alguien!

Tagged with: , , ,
Posted in Uncategorized

Cambio pastillas de freno eje trasero

 

Cambio pastillas de freno eje trasero

Change brake pads rear axle

Remplacement du plaquettes de frein roue arrière

Tagged with: , , , , , , ,
Posted in Uncategorized

Bridget entre eth0 y wlan0 en la Raspberry

Editar /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 10.0.0.2
netmask 255.255.255.0
#gateway 10.0.0.1
network 10.0.0.0
dns-nameservers 8.8.8.8

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
#address 192.168.1.50
netmask 255.255.255.0
gateway 192.168.1.100
dns-nameservers 8.8.8.8
wireless-essid puigverd
#wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf #en caso de encriptación wpa

En caso de utilizar encriptaciñon wpa, editar /etc/wpa_wupplicant/wpa_wupplicant.conf

network={
    ssid="ssid_name"
    psk="password"
}

Habilitar el enrutamiento mediante iptables. Se puede añadir en /etc/rc.local

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Posted in Networking

Consumiendo stream Twitter, alimentando javascript en tiempo real

Bueno hay mogollón de documentación del modulo tweepy, aquí el ejemplo de jugete que chupa los tuits georeferenciados en una área dada

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import json

access_token = ""
access_token_secret = ""
consumer_key = ""
consumer_secret = ""

class myStreamListener(StreamListener):

	def on_data(self, data):
		#print data
		decoded = json.loads(data)
		if decoded["coordinates"] is not None:
			print decoded["coordinates"]["coordinates"]
		# Also, we convert UTF-8 to ASCII ignoring all bad characters sent by users
		#print '@%s: %s' % (decoded['user']['screen_name'], decoded['text'].encode('ascii', 'ignore'))
		#print ''
		return True

	def on_error(self, status):
		print status

if __name__ == '__main__':

	l = myStreamListener()
	auth = OAuthHandler(consumer_key, consumer_secret)
	auth.set_access_token(access_token, access_token_secret)
	stream = Stream(auth, l)

	geobox_world = [-180,-90,180,90]
	geobox_spain =[35.340503,-11.757813,43.217838,5.644531]
	geobox_catalunya = [42.857846,0.41748,40.667879,3.284912]
	#Para filtrar por cadena o hashtag stream.filter(track=['cholo simeone'],locations=geobox_world)
	stream.filter(locations=geobox_world)

Y el siguiente script utilizando gevent por un lado para gestionar la concurrencia y por el otro WebSocketHandler para abrir un socket y se puede servir un stream de datos hacia un cliente.

from geventwebsocket.handler import WebSocketHandler
from gevent import pywsgi
import gevent
import time

def app(environ, start_response):
    ws = environ['wsgi.websocket']
    contador = 0
    while True:
        strTemp = "hola" + str(contador) 
        ws.send( strTemp )
        time.sleep(1)
        contador = contador + 1

server = pywsgi.WSGIServer(('', 10000), app, handler_class=WebSocketHandler)
server.serve_forever()

Finalmente la suma de los dos:

import gevent
import gevent.monkey
gevent.monkey.patch_all()

from geventwebsocket.handler import WebSocketHandler
from gevent import pywsgi

from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
import json

access_token = ""
access_token_secret = ""
consumer_key = ""
consumer_secret = ""


class MyStreamListener(StreamListener):
    def __init__(self):
        self.sockets = []
        auth = OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_token_secret)
        self.stream = Stream(auth, self)

    def add_socket(self, ws):
        self.sockets.append(ws)

    def run(self):
        try:
            self.stream.filter(track="#linux")
        except Exception:
            self.stream.disconnect()

    def start(self):
        gevent.spawn(self.run)

    def send(self, ws, coordinates):
        try:
            ws.send(json.dumps(coordinates))
        except Exception:
            # the web socket die..
            self.sockets.remove(ws)

    def on_data(self, data):
        decoded = json.loads(data)
        if decoded.get("coordinates", None) is not None:
            coordinates = decoded["coordinates"]["coordinates"]
            for ws in self.sockets:
                gevent.spawn(self.send, ws, coordinates)
        return True

    def on_error(self, status):
        print "Error", status

    def on_timeout(self):
        print "tweepy timeout.. wait 30 seconds"
        gevent.sleep(30)

stream_listener = MyStreamListener()
stream_listener.start()


def app(environ, start_response):
    ws = environ['wsgi.websocket']
    stream_listener.add_socket(ws)
    while not ws.closed:
        gevent.sleep(0.1)

server = pywsgi.WSGIServer(('', 10000), app, handler_class=WebSocketHandler)
server.serve_forever()

http://stackoverflow.com/questions/27882631/consuming-twitter-stream-with-tweepy-and-serving-content-via-websocket-with-geve

Tagged with:
Posted in Programación, python

Jugando con la API de twitter

http://puigverd.org/tweets_map

Y aquí el código
https://github.com/rafacuest/tweets_map

Posted in Uncategorized

Procesar varios eventos en un widget en Android

En la clase que extiende el WidgetProvider

public class ExampleProvider extends AppWidgetProvider {

// our actions for our buttons
public static String ACTION_WIDGET_REFRESH = "ActionReceiverRefresh";
public static String ACTION_WIDGET_SETTINGS = "ActionReceiverSettings";
public static String ACTION_WIDGET_ABOUT = "ActionReceiverAbout";


@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.main_layout);

    Intent active = new Intent(context, ExampleProvider.class);
    active.setAction(ACTION_WIDGET_REFRESH);
    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
    remoteViews.setOnClickPendingIntent(R.id.button_refresh, actionPendingIntent);

    active = new Intent(context, ExampleProvider.class);
    active.setAction(ACTION_WIDGET_SETTINGS);
    actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
    remoteViews.setOnClickPendingIntent(R.id.button_settings, actionPendingIntent);

    active = new Intent(context, ExampleProvider.class);
    active.setAction(ACTION_WIDGET_ABOUT);
    actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
    remoteViews.setOnClickPendingIntent(R.id.button_about, actionPendingIntent);

    appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
}

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) {
        Log.i("onReceive", ACTION_WIDGET_REFRESH);
    } else if (intent.getAction().equals(ACTION_WIDGET_SETTINGS)) {
        Log.i("onReceive", ACTION_WIDGET_SETTINGS);
    } else if (intent.getAction().equals(ACTION_WIDGET_ABOUT)) {
        Log.i("onReceive", ACTION_WIDGET_ABOUT);
    } else {
        super.onReceive(context, intent);
    }
}

En la definición de la aplicación se deben registrar las acciones (aunque a mí me funciona sin definirlas)

 <receiver android:name="ExampleProvider">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_REFRESH"/>
            <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_SETTINGS"/>
            <action android:name="org.divenvrsk.widgets.ExampleProvider.ACTION_WIDGET_ABOUT"/>
        </intent-filter>
        <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info"/>
    </receiver>
</application>

Visto en:

http://stackoverflow.com/questions/2471875/processing-more-than-one-button-click-at-android-widget

Posted in Android, Programación

Ping a todas las direcciones de la red en windows

FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i | FIND /i “Reply”

Posted in Uncategorized

Sobre la frecuencia cardiaca

Frecuencia cardiaca máxima (F.C.M.)

  • Fórmula de churrutera (aunque la clava con el test de estrés)

220  -Edad   ->   220 – 33 =  190 ppm

  • Test de estrés

Calentar durante 10 minutos al trote y después subir una subida durante 3 minutos a full.

Fórmula de Karvonen

Frecuencia cardíaca en reposo (FCR) (se toman por la mañana, antes de levantarse). 60 ppm

Frecuencia cardíaca máxima (FCM) = 190 ppm

Frecuencia cardíaca de Reserva (RFC)

RFC = FCM - FCR -> 190-60 =130

Para calcular las zonas elegimos un porcentaje por ejemplo el 50%

130 x 50% = 65 y le sumamos la FCR :   65 + 60 = 125

Osea que se tiene que correen a 125ppm para ir ha medio gas.

Zonas de entrenamiento

  1. Zona de Recuperación\Regeneración 50-60%  -> 125-138 ppm
  2. Zona de trabajo aeróbico 1 60-70% -> 138-151 ppm
  3. Zona de trabajo aeróbico 2 70-80% -> 151-164 ppm
  4. Zona umbral anaeróbico 80-90%  -> 164-177 ppm
  5. Zona de intensidad alta >90% -> 177 ppm

Zonas según el Runtastic

  1. Easy 129-139 ppm
  2. Fat Burning 140-150 ppm
  3. Aerobic 151-161 ppm
  4. Anaerobic 162-171 ppm
  5. Red Line 172-183 ppm
Posted in Uncategorized

Última consulta mSqlSever

Última sentencia ejecutada en msqlserver

SELECT deqs.last_execution_time AS [Time], dest.text AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC

Path donde guarda los archivos .mdf

select * from sys.database_files
Posted in Uncategorized