Contactos con VLC, Mplayer, XMBC, GeekBox, LinuxMCE,…

El otro día envíe un correo a muchos de los actuales proyectos libres que reproducen DIVX con subtítulos y les pregunté si estarían interesados en tener una librería común que obtuviera los subtítulos de internet a partir de los DIVX, o sea un subdownloader pero en librería, lo mismo que el “libgaim” y el GAIM.

Me respondieron casi todos, diciendo que sí, que era buena idea y que el hecho de embeber esa funcionalidad en sus programas ayudaría a hacer crecer de manera abismal la cantidad de subtítulos indexados (40.000 hasta la fecha sólo con Subdownloader). Así que una vez que Subdownloader esté libre de fallos, genere el .deb para linux y el .dmg para mac, me dedicaré a crear esta librería para ser usada por otros proyectos, y así evitar que se malgaste esfuerzos.

También estoy preparando versiones commandline para posibles FrontEnds en el futuro, CGI’s ,etc.

Comments (1) »

Y llegaron los forks :-)

Aquello inevitable en todo proyecto de software libre con una fuerte comunidad son los FORKS.

Los FORKS pueden surgir por varias razones:

-El tamaño del ejecutable EXE es bastante gordo (7MB) porque estoy usando py2exe para compilar las fuentes el cual carga todas las librerias externas + python dentro.

-A otra gente le gustaría que desarrolla más rápidamente pero en vez de unirse al proyecto deciden empezar algo desde cero con otro lenguaje de programación ya que Python no es su fuerte.

No obstante, estoy contento de que me hayan salido forks ya que todo es en beneficio de la comunidad amante de los subtítulos, cuanto más competencia más ganas de mejorar además.

Estoy en contacto directo con estos nuevos “competidores”, en cierto modo también ayudan a mejorar mi proyecto, ya que para empezar a desarrollar le han echado un vistazo al código de subdownloader y me han hecho algunos comentarios muy interesantes.

Otra de las cosas por las que no me importan los forks, es que yo y el administrador de http://www.opensubtitles.org decidimos que todo software que se conectase a la base de datos remotamente (usando nuestra API XMLRPC)  debe ser software libre, con lo cual nadie se aprovecha de nuestro esfuerzo.

El primero de ellos se llama OSCAR, creado por un Checo,  su ventaja es que a penas ocupa un mega, el problema es que sólo es para MS Windows ya que está hecho en Delphi.

http://forum.opensubtitles.org/viewtopic.php?t=555

El segundo está empezando, realizado por un Brasileño, se llama DreamLegendador
http://forum.opensubtitles.org/viewtopic.php?t=558

Leave a comment »

Nuestra XMLRPC API

El XMLRPC es una tecnología que me encanta al programar.

Permite abstraer funciones cliente servidor de forma transparente para el programador. Por ejemplo en mi claso mi cliente hace la llamada XMLRPC usando Python pero el servidor está desarrollado en PHP.

Hemos publicado la API que llamamos protocolo OSDB (Open Subtitles Data Base):

La podéis encontrar más detallada en el wiki, pero aquí estan los métodos resumidos:

  • array ServerInfo( )
    This simple function returns basic server info, it could be used for ping or telling server info to client.
  • array LogIn( $username, $password, $language, $useragent )
    This will login user. This function should be called always when starting talking with server. It returns token, which must be used in later communication. If user has no account, blank username and password should be OK. As language – use ISO639 2 letter code and later communication will be done in this language if applicable (error codes and so on). Note: when username and password is blank, status is 200 OK, because we want allow anonymous users too.
  • string LogOut( $token ) This will logout user (ends session id). Good call this function is before ending (closing) clients program.
  • array SearchSubtitles( $token, array(array(‘sublanguageid’ => $sublanguageid, ‘moviehash’ => $moviehash, ‘moviebytesize’ => $moviesize ),array(…)))

    This function returns information about found subtitles. It is designed making multiple search at once. Note – result is always grupped by MovieHash, MovieByteSize, SubLanguageID, IDSubMovieFile, sorted by seencount descending, max results is 100. When nothing is found, ‘data’ is empty.

  • array CheckSubHash( $token, array($SubHash, $SubHash, …) )

    This method returns IDSubtitleFile, if Subtitle Hash exists in database. If not exists, it returns ‘0’.

  • array CheckMovieHash( $token, array($MovieHash, $MovieHash, …) )

    This method returns MovieImdbID, MovieName, MovieYear, if available for each $MovieHash.

  • TryUploadSubtitles

    array TryUploadSubtitles( $token, array(‘cd1’ => array(‘subhash’ => $subMD5hash, ‘subfilename’ => $subfilename, ‘moviehash’ => $moviehash, ‘moviebytesize’ => $moviesize, ‘movietimems’ => $movietimems, ‘movieframes’ => $movieframes, ‘moviefps’ => $moviefps, ‘moviefilename’ => $moviefilename), ‘cd2’ => array(…) ) )

    This function needs to be called before UploadSubtitles(), because it is possible subtitles already exists on server. It takes 2 parameters, second parameter is array of information for subtitles to be uploaded, minimum cd1 is required. Mandatory fields are: subhash (md5 of subtitles), subfilename, moviehash, moviebytesize, moviefilename. It returns “alreadyindb” when subtitles already exists in database. When they do not exists, SearchSubtitles() is called, and API is looking for existing subtitles based on MovieHash/MovieSize. If some results are found, information is returned in “data” key as SearchSubtitles() return structure. This is good for uploading – user should have imdbid field already filled.

  • array UploadSubtitles( $token,array( ‘baseinfo’ => array ( ‘idmovieimdb’ => $idmovieimdb, ‘moviereleasename’ => $scene_releasename, ‘movieaka’ => $aka_in_subtitle_language, ‘sublanguageid’ => $sublanguageid, ‘subauthorcomment’ => $author_comment ), ‘cd1’ => array( ‘subhash’ => $md5subhash, ‘subfilename’ => $subfilename, ‘moviehash’ => $moviehash, ‘moviebytesize’ => $moviebytesize, ‘movietimems’ => $movietimems, ‘moviefps’ => $moviefps, ‘movieframes’ => $movieframes, ‘moviefilename’ => $moviefilename, ‘subcontent’ => $subtitlecontent ), ‘cd2’ => array (…) ) )

    This function have to be called after TryUploadSubtitles(). Many information are same, important part is subcontent. It should be gzip-ed (without header) and must be base64 encoded.

  • array SearchToMail( $token, array( $sublanguageid, $sublanguageid, …), array( array( ‘moviehash’ => $moviehash, ‘moviesize’ => $moviesize), array( ‘moviehash’ => $moviehash, ‘moviesize’ => $moviesize), …) )
    This is possible only for logged-in users. Scenario: user have directory with movies, for which he cannot find subtitles. With this function he subscribe to possible results, when someone else will upload matching subtitles. Once a day (or week…based on users profile) will system send subtitle link by mail to user. Note for developers: if it is possible, send moviehashes and moviesizes only for first CD in set (for example movie on two CDs), because users will receive duplicated mails (one for first cd and one for second cd)
  • array DownloadSubtitles( $token, array($IDSubtitleFile, $IDSubtitleFile,…) )

    Returns BASE64 encoded gzipped IDSubtitleFile(s). You need to BASE64 decode and ungzip ‘data’ to get its contents.

  • array ReportWrongMovieHash( $token, $IDSubMovieFile )

    This method is needed to report bad hash, e.g. subtitles are right for this movie file, but they are de-synchornized – for other version/release. With this method number of reports is counted in db, and after some number, hash will be automatically deleted from database.

  • array GetSubLanguages( $language = ‘en’ )

    Returns list of allowed subtitle languages, default is english language. Use ISO639-1 (2 characters code)

  • array GetAvailableTranslations( $token )

    Returns array of available translations for a program. In array you can find date of last created string and number of strings.

  • array GetTranslation( $token, $iso639, $format )

    Returns base64 encoded strings for language ($iso639) in some $format (mo, po, txt, xml). Use ISO639-1 (2 characters code)

  • array Autoupdate ( $program_name )

    This function returns latest version with info for $program_name

  • array NoOperation( $token )

    This function should be called each 15 minutes after last request to xmlrpc. It is used for not expiring current session. It also returns if current $token is registered.

Status codes

Successful 2xx

200 OK
206 Partial content; message

Errors 4xx

401 Unauthorized
402 Subtitles has invalid format
403 SubHashes (content and sent subhash) are not same!
404 Subtitles has invalid language!
405 Not all mandatory parameters was specified
406 No session
407 Download limit reached
408 Invalid parameters
409 Method not found
410 Other or unknown error

Leave a comment »

Más vale un youtube que mil imagenes

Uno de nuestros usuario nos ha hecho unos videos youtube muy prácticos tipo tutorial para enseñar a la gente como utilizar subdownloader. Los videos fueron realizados con la versión 1.2.4, actualemente estoy con la 1.2.8:

Cómo bajar subtítulos:

Cómo subir subtítulos:

Leave a comment »

Empezando con la documentación

Una vez alcanzando el “climax” del desarrollo de la aplicación, estoy empezando a crear documentación sobretodo para guiar a los usuarios cómo buscar fácilmente subtítulos.

Algunos me envían preguntas fuera de tópico tipo ¿tienes los subtítulos de Casino Royale en Portugués?

A veces cuesta explicarles que si nadie subió el subtítulo usando el mismo DIVX que ellos tienen, no les aparecerá nada.
Echad un vistazo al  diagrama de uso de Subdownloader que he preparado para guiar a la gente:

flow.jpg

Leave a comment »

Llegamos a las 30.000 descargas y 35.000 subtítulos subidos

Hoy me he llevado una grata noticia al echarle un vistazo a la forja y ver que el programa se ha bajado ya más de 30.000 veces

https://forja.rediris.es/frs/?group_id=161

La gente ya ha subido más de 35.000 subtítulos y cada vez es más fácil encontrar los subtítulos que andas buscando con un solo click.

Además, como sorpresa para el 1.2.7 podremos ver que el programa está disponible en Inglés, Español,Francés, Finlandés, y muchos idiomas más.

Muchas gracias a todos los que han hecho esto posible.

Saludos.

Comments (1) »

Soporte técnico desde la propia interfaz, con Plugoo

En la pestaña HELP US de SubDownloader hay 2 formas de que la gente se comunique conmigo, la primera es un simple formulario para enviar Feeback y la segunda (añadido desde la 1.2.6) es un flash para chatear conmigo directamente:

chat.PNG

Este modulo flash lo conseguí a través de plugoo.com , el cual permite chatear con mi cuenta Jabber capiscuas#at#gmail.com , abajo veis el ejemplo de la conversación usando GAIM.

gaim.PNG

Sinceramente es superinteresante y divertito chatear con los usuarios de tu programa en directo, de momento me han contactado gente de Japón, Grecia y Colombia, espero que sean muchos más.

Leave a comment »