Paso 2:
Código fuente
Como es habitual, comenzaré con el código fuente en github. Aquí es un espejo de local, en caso de que el código fuente de una joya siguiente Muni parcheada está aquí.
Cómo ejecutar
Hay una pequeña documentación en el archivo README, y líneas de comandos de muestra están en el script de arranque del demonio de esta espec. básicamente, que selecciona una parada en nextmuni.com para averiguar tu ID de parada y ejecutar client/client.rb--stopId 12345. Como alternativa, puede ejecutar una consola mañana especificando hasta dos rutas y paradas en texto y agregar una URL para recuperar el tiempo fromweather.gov:
Notas de configuración PI
Durante la primera carrera, conecte el ratón, teclado y tarjeta Wi-Fi a través del concentrador USB. Seguimiento de la guía para comenzar a descargar la imagen inicial en la tarjeta SD. Arrancar él, instalar la distro basada en Raspbian Debian por defecto. Seleccione "automáticamente arrancar el entorno de escritorio al inicio" cuando le preguntó. Aunque usted no lo necesita, es la forma más fácil de configurar Wi-Fi. Una vez en el escritorio, seleccione "Configuración de Wi-Fi" en uno de los menús se accede a través de botón Inicio y configurar la tarjeta wi-fi que ha insertado para conectar al router. Asegúrese de que usted también configurarlo para wi-fi automáticamente durante el arranque. Configurar servidor SSH y asegúrese de que se inicia durante el arranque. Configurar un nombre de host, o escriba la dirección IP. Reiniciar y probar a SSH desde otro equipo. Si esto funciona, desconectar mouse, teclado y HDMI: no necesite más. Asegúrese de que se puede instalar sudo apt-get install git git descargar las fuentes y siga las instrucciones del README para instalar Runtime de lenguaje. Jugar con las opciones de línea de comandos de script para averiguar lo que desea ejecutar y configurar un demonio instalando el script de inicio. Una vez que suficiente confianza en la capacidad de recuperación de la configuración, esto montar en la pared.
Resultados
Así que ayudó la solución: dejó de correr como un niño Japon y comenzó a controlar mi procrastinación mañana, también. Como un bono, tenía una estadio de béisbol estimación de cuánto costaría los contribuyentes para programar este signo, y, por supuesto, yo tenía un montón de diversión, también. Por último, ahora tengo un elemento geek en mi salón... aunque se ve a los demás como una secuencia de precios de las acciones y no de tiempos de llegada de Muni.
Notas
El resto son menos "calientes" secciones, detallando mi experiencia con las herramientas que utiliza para el trabajo.
Ruby
Por defecto de frambuesa Pi Linux, como un derivado de Debian, contienen soporte decente para Ruby, incluyendo 1.9. que es un poco viejo ya, aunque. Toma Pi varios segundos en cargar el intérprete y una docena de joyas que necesitaba para este signo, pero es aceptable ya que el programa se inicia sólo una vez cuando el sistema está encendido.
Muestra del LED
Para el signo utiliza una API de Perl, por lo que sería natural para escribir el programa cliente en Perl, demasiado... no realmente. Mientras que tengo un montón de experiencia de programación en Perl, que haría mucho más bien prefiere escribir en un lenguaje más interesante, como Python o Ruby. Fue una de las razones por qué escribí un contenedor pequeño sobre la API Perl, por lo que pude exec este sencillo programa de cualquier otra lengua. Otra razón por qué escribí esta API era que el signo no es compatible con dos líneas de texto en su procesador de texto incorporado. El API le permite suministrar una línea de texto y el signo se hacerla feliz e incluso añadir algunos efectos, pero quería dos líneas en una fuente más pequeña en su lugar. API no tiene una función "procesamiento de imagen", pero la señal le permite crear sus propios glifos de la fuente e insertarlos en el texto. La idea obvia de impresión 16 x un 96 "símbolo" trabajado. La envoltura hace exactamente esto. La muestra también puede recorrer varias imágenes, al igual que el signo real Muni. API de esto hace muy fácil de programar: esto sucede automáticamente cuando envía varios mensajes. Integración con Pi fue: solo uso $sign -> send (dispositivo = > "/ dev/ttyUSB0"); en su programa. Hubo varios fallos, aunque. En primer lugar, cada glifo se centra automáticamente, a menos que sea mayor que 80 pixels de anchos, en cuyo caso es alineado a la izquierda. Bucle a través de diferente alineado mensajes mira mal, para obligar a todas las imágenes de que enviar a la muestra 16 x 96, acolchado con píxeles negros. En segundo lugar, hay ninguna manera para apagar la señal mediante programación. Para energía, necesito físicamente quitar la conexión USB y lo apague porque comienza a usar la batería de lo contrario. Intención del fabricante de la señal era probablemente que usted no vuelva a programa la muestra a menudo, por lo que se programe una vez y girar encendido y apagado manualmente. Pero somos programadores ¿no está funcionando alrededor de cosas nuestro pan de cada día? Muestra una imagen totalmente negra hizo el truco de convertir la señal "off". En tercer lugar, actualizar la señal cada 30 segundos para asegurar la predicción puntual, pero tarda 1-2 segundos para actualizar el signo. Supongo que esto es debido a que la muestra contiene su propio CPU y programación, o porque no intento jugar con enviar argumentos de la función. Aunque su plomería interna probablemente afecta a la velocidad de actualización, y he visto ejemplos de descarga de la sincronización y parpadeo de las lámparas a frambuesa Pi completamente con signos diferentes, de más bajo nivel, sería demasiado lento para mí a molestar con. También no sé cuánto durará el signo cuando es reprogramado dos veces un minuto. Hasta ahora, estoy muy feliz con el signo de brillante LED que utiliza y su API.
Representación de fuentes
Esperaba gastar tiempo cero en representación de fuentes, pero tardó mucho, mucho más de lo que esperaba. Bueno, planeaba escribir mi propio motor de renderizado de fuentes simple, pero varias rocas ocultas me estaban esperando debajo de la arena fina. En primer lugar, no pude encontrar una fuente de "trama" que es sólo un conjunto de mapas de bits. Terminé de descargar fuentes TTF de "pixelado" y hacerlas con la biblioteca FontConfig. No quería que la muestra tener una gran cantidad de dependencias, para pre-rendeded los glifos en mi Pi de manera lista para usar con este script y escribió una pequeña biblioteca para operarlas. Lo más divertido es que podría añadir fácilmente nuevos glifos, como indicadores de precipitación. También tomamos un montón de representación de fuentes para concedido, como alinear al centro, palabra envoltura, ajuste entre caracteres. Implementé algunas de ellas de una manera muy sencilla (en Ruby!) pero creo que un par más características me haría ragequit a favor de una biblioteca de renderizado de fuente real en lugar de otro.
Acceso a predicciones Muni
Otra razón por qué elegí Ruby fue la biblioteca Muni en Ruby, listo para su uso para obtener predicciones del sistema NextBus. O así que pensé: la biblioteca carece de algunas funcionalidades, tales como refinación rutas u obtener predicciones para todas las rutas de una parada (esto es lo que muestra un signo de Muni). También tiró en la pila de carril entera sólo para mostrar la cadena de tiempo bien formateado! (como convertir intervalo en segundos a la algo lujo como "durante 1 hora"). Fija algunas de estas cosas y liaron la joya con la fuente original para su conveniencia porque es más fácil que lo que se bifurcan y agregar un repositorio oficial.
Especificar routeConfig!
Al parecer, monitores Muni oficiales funcionan en los mismos términos: routeConfig es uno de los comandos de la API de servicio NextBus.
De todos modos, NextBus sistema dispone de una API bien, que es aparentemente libre de usar si el uso es limitado o distribuido entre clientes. Un spawn de este sitio, nextmuni.com está dedicado a SF Muni. Lo único que no encontré fue los nombres reales de los
Pronóstico del tiempo de recuperación
Oh, bien, aquí viene la parte fácil,"pensé cuando termine con todo lo demás y decidió lanzar en pronósticos del tiempo. Me equivoqué en una forma muy interesante. Resulta, predicción meteorológica que APIs no suelen ser gratis. Los sitios web que encontré en la parte superior de Google buscar los registros necesarios e incluyendo su clave personal para todas las llamadas API. Muchos tenían versiones gratuitas limitadas pero pago requerido para cada hora pronóstico--y estaba principalmente interesado en las condiciones en un lugar específico a una hora específica del día (tiempo de San Francisco no es muy estable). ¿No es que me opongo a pagar servicios de por sí, o a páginas web con apartado de análisis, pero no es necesario que gran parte de ellos a pagar, puedo hacer? Procedí con un servicio de weather.gov gobierno libre, que es realmente clase de fresco a pesar del diseño de la web del siglo pasado. El servicio se limita a los Estados Unidos, pero San Francisco Muni predicciones no son muy útiles fuera del país tampoco. Para usarlo, necesita proporcionar un enlace a tabla XML para su ciudad/área, que tendría este aspecto: http://forecast.weather.gov/MapClick.php?lat=37.77493 & lon =-122.41942 & FcstType = digitalDWML. No utilizar su API, ya que es un jabón auténtico, y no es nadie tiene tiempo para eso.