From the category archives:

Linux

Programación Adobe Air 2.0 en Linux

by Jorge Machin on July 26, 2010 · 0 comments

in Adobe Flash, Linux

Al igual que las aplicaciones Flex, es posible desarrollar en Linux aplicaciones de escritorio en AIR. En este post pongo un ejemplo y una miniguía de instalación.

Instalación

Primero se necesita bajar e instalar la versión 4.1 de Flex, la cual se puede obtener de http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex4sdk en forma de un archivo zip llamado flex_sdk_4.1.zip

mkdir flex
cp flex_sdk_4.1.zip flex
cd flex
unzip flex_sdk_4.1.zip

Desafortunadamente la versión multiplataforma de Flex, aunque ya incluye una versión de Air, está rota y aparentemente sólo funciona para Windows y Mac. Pareciera que a los señores de Adobe se les olvidó Linux en el caso de Air; por lo que es necesario descargar el SDK de AIR y desempaquetarlo sobre el directorio donde instalamos Flex.

Entonces, bajamos Air 2.0 de http://www.adobe.com/cfusion/entitlement/index.cfm?e=airsdk y sobre-escribimos el sdk de AIR que descargamos:

cp AdobeAIRSDK.tbz2 flex
cd flex
bunzip2 AdobeAIRSDK.tbz2
tar -xvf AdobeAIRSDK.tar

Sinceramente no sé si es el método correcto de arreglar los errores de Adobe, pero fue lo primero que se me ocurrió y me funcionó.

Escribiendo un programa de prueba

Como ejemplo de una aplicación creamos el programa mxml llamado Test.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication  xmlns:fx="http://ns.adobe.com/mxml/2009"
                        xmlns:s="library://ns.adobe.com/flex/spark"
                        xmlns:mx="library://ns.adobe.com/flex/mx">

</s:WindowedApplication>

El cual compilamos con el comando:

bin/mxmlc -library-path+=frameworks/libs/air Test.mxml

Ahora creamos un archivo que nos describe la aplicación AIR, al cual llamamos Test-app.xml

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/2.0">

<!-- Adobe AIR Application Descriptor File Template.

        Specifies parameters for identifying, installing, and launching AIR applications.

        xmlns - The Adobe AIR namespace: http://ns.adobe.com/air/application/2.0
                        The last segment of the namespace specifies the version
                        of the AIR runtime required for this application to run.
                       
        minimumPatchLevel - The minimum patch level of the AIR runtime required to run
                        the application. Optional.
-->

        <!-- A universally unique application identifier. Must be unique across all AIR applications.
             Using a reverse DNS-style name as the id is recommended. (Eg. com.example.ExampleApplication.) Required. -->

        <id>Test</id>

        <!-- Used as the filename for the application. Required. -->
        <filename>Test</filename>

        <!-- The name that is displayed in the AIR application installer.
             May have multiple values for each language. See samples or xsd schema file. Optional. -->

        <name>Test</name>

        <!-- An application version designator (such as "v1", "2.5", or "Alpha 1"). Required. -->
        <version>v1</version>

        <!-- Description, displayed in the AIR application installer.
             May have multiple values for each language. See samples or xsd schema file. Optional. -->

        <!-- <description></description> -->

        <!-- Copyright information. Optional -->
        <!-- <copyright></copyright> -->

        <!-- Publisher ID. Used if you're updating an application created prior to 1.5.3 -->
        <!-- <publisherID></publisherID> -->

        <!-- Settings for the application's initial window. Required. -->
        <initialWindow>
                <!-- The main SWF or HTML file of the application. Required. -->
                <!-- Note: In Flash Builder, the SWF reference is set automatically. -->
                <content>Test.swf</content>

                <!-- The title of the main window. Optional. -->
                <!-- <title></title> -->

                <!-- The type of system chrome to use (either "standard" or "none"). Optional. Default standard. -->
                <!-- <systemChrome></systemChrome> -->

                <!-- Whether the window is transparent. Only applicable when systemChrome is none. Optional. Default false. -->
                <!-- <transparent></transparent> -->
                <!-- Whether the window is initially visible. Optional. Default false. -->
                <!-- <visible></visible> -->

                <!-- Whether the user can minimize the window. Optional. Default true. -->
                <!-- <minimizable></minimizable> -->

                <!-- Whether the user can maximize the window. Optional. Default true. -->
                <!-- <maximizable></maximizable> -->

                <!-- Whether the user can resize the window. Optional. Default true. -->
                <!-- <resizable></resizable> -->

                <!-- The window's initial width in pixels. Optional. -->
                <!-- <width></width> -->

                <!-- The window's initial height in pixels. Optional. -->
                <!-- <height></height> -->

                <!-- The window's initial x position. Optional. -->
                <!-- <x></x> -->

                <!-- The window's initial y position. Optional. -->
                <!-- <y></y> -->

                <!-- The window's minimum size, specified as a width/height pair in pixels, such as "400 200". Optional. -->
                <!-- <minSize></minSize> -->

                <!-- The window's initial maximum size, specified as a width/height pair in pixels, such as "1600 1200". Optional. -->
                <!-- <maxSize></maxSize> -->
        </initialWindow>

    <!-- We recommend omitting the supportedProfiles element, -->
    <!-- which in turn permits your application to be deployed to all -->
    <!-- devices supported by AIR. If you wish to restrict deployment -->
    <!-- (i.e., to only mobile devices) then add this element and list -->
    <!-- only the profiles which your application does support. -->
    <!-- <supportedProfiles>desktop extendedDesktop mobileDevice extendedMobileDevice</supportedProfiles> -->

        <!-- The subpath of the standard default installation location to use. Optional. -->
        <!-- <installFolder></installFolder> -->

        <!-- The subpath of the Programs menu to use. (Ignored on operating systems without a Programs menu.) Optional. -->
        <!-- <programMenuFolder></programMenuFolder> -->

        <!-- The icon the system uses for the application. For at least one resolution,
                 specify the path to a PNG file included in the AIR package. Optional. -->

        <!-- <icon>
                <image16x16></image16x16>
                <image32x32></image32x32>
                <image48x48></image48x48>
                <image128x128></image128x128>
        </icon> -->
       <!-- Whether the application handles the update when a user double-clicks an update version
        of the AIR file (true), or the default AIR application installer handles the update (false).
        Optional. Default false. -->

        <!-- <customUpdateUI></customUpdateUI> -->

        <!-- Whether the application can be launched when the user clicks a link in a web browser.
        Optional. Default false. -->

        <!-- <allowBrowserInvocation></allowBrowserInvocation> -->

        <!-- Listing of file types for which the application can register. Optional. -->
        <!-- <fileTypes> -->

                <!-- Defines one file type. Optional. -->
                <!-- <fileType> -->

                        <!-- The name that the system displays for the registered file type. Required. -->
                        <!-- <name></name> -->

                        <!-- The extension to register. Required. -->
                        <!-- <extension></extension> -->

                        <!-- The description of the file type. Optional. -->
                        <!-- <description></description> -->

                        <!-- The MIME content type. -->
                        <!-- <contentType></contentType> -->

                        <!-- The icon to display for the file type. Optional. -->
                        <!-- <icon>
                                <image16x16></image16x16>
                                <image32x32></image32x32>
                                <image48x48></image48x48>
                                <image128x128></image128x128>
                        </icon> -->

                <!-- </fileType> -->
        <!-- </fileTypes> -->

</application>

Finalmente ejecutamos la aplicación con:

adl test.mxml

Algunos detalles...

Para usar aplicaciones que tengan transparencia es necesario que el escritorio la soporte; por ejemplo usando compiz.

{ 0 comments }

Montar sftp como directorios usando sshfs y fuse

by Jorge Machin on April 27, 2010 · 0 comments

in Linux

Aunque en KDE y Gnome tenemos formas muy simples de montar directorios externos de varios tipos (SMB, SSH y NFS ) desde el escritorio; es bueno conocer algún método desde la línea de comandos para algún servidor que administremos o para tenerlo a nuestra disposición de forma permanente montado en un directorio. Un método simple y seguro es usar sshfs con fuse.

Instalamos sshfs y fuse:

yum install sshfs
yum install fuse

Ahora por en la línea de comando podemos hacer:

sshfs host:/directorio_externo directorio_donde_montar

O bien, si queremos que sea permanente, podemos editar el archivo /etc/fstab y agregar una línea similar:

sshfs#user@host:/    /home/you/remote    fuse    defaults    0 0

{ 0 comments }

Revisando memory-sticks abandonados encontré un video de noviembre de 2006 donde grababa una prueba de como me conectaba desde mi máquina XP a mi servidor Linux con KDE y Fedora Core 6. Se puede ver como corría al mismo tiempo un video, un chat 3D escrito en Flash y un programa de demostración 3D de Irrlicht (OpenGL). Desafortunadamente es una de mis primeras pruebas y no transmitía el audio. Al poco rato de hacer este video configuré lo que me hacía falta.

Realmente el desempeño es muy bueno considerando que es una conexión remota. En parte es porque las ordenes OpenGL se corren localmente como se puede ver en el acercamiento a la terminal en la parte final del video.

{ 0 comments }

Circuitos integrados TTL para KTechLab

by Jorge Machin on October 19, 2009 · 0 comments

in Electrónica, Linux

Al analizar el diseño de la ALU para mi microprocesador primero construí un prototipo usando KTechLab. Para ello, tuve construir primero los componentes de los circuitos integrados TTL que utilice. En este post pongo mi librería para tenerlos a la mano y por si pueden ser útiles para alguien.

Circuito Descripción Archivo KTechLab
7408 Quadruple 2-Input positive-And Gates 7408.circuit
7432 Quadruple 2-Input positive-Or Gates 7432.circuit
7486 Quadruple 2-Input positive-Exclusive Or Gates 7486.circuit
74138 3-Line to 8-Line Decoders/Demultiplexers 74138.circuit
74151 Data Selector/Multiplexers 74151.circuit
74161 Synchronous 4-Bit Counter 74161.circuit
74163 Synchronous 4-Bit Counter 74163.circuit
74175 Hex/Quadruple D-Type Flip-Flops with Clear 74175.circuit
74283 4-Bit Binary Full Adders with Fast Carry 74283.circuit

Advertencia:

He notado que el programa KTechlab tiene problemas en proyectos con muchos circuitos integrados, por lo que se recomienda usar muy pocos al mismo tiempo.

{ 0 comments }

Cuando tenemos la sospecha de que estamos sufriendo un ataque de negación de servicio o estamos haciendo pruebas de carga, el siguiente comando puede ser muy útil:

netstat -anp | grep 'tcp\|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

El cual nos dice el número de conexiones que tiene cada IP que esta conectada a nuestra máquina. La salida es de la forma:

1 53.147.164.42
1 53.14.464.32
13 0.0.0.0

Se debe ejecutar como root.

Si se desea bloquear una IP, se puede usar el comando de iptables:

iptables -I INPUT -s XX.XX.XX.XX -j DROP

Donde XX.XX.XX.XX.XX es la dirección a bloquear.

{ 0 comments }