1 |
206 |
maximiq |
|
2 |
|
|
\documentclass [a4paper,11pt]{article}
|
3 |
|
|
|
4 |
|
|
% Configuración del idioma
|
5 |
|
|
\usepackage [utf8] {inputenc}
|
6 |
|
|
\usepackage [spanish] {babel}
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
% Para incluir gráficos
|
10 |
|
|
\usepackage{graphicx}
|
11 |
|
|
|
12 |
|
|
%
|
13 |
|
|
\ProvidesPackage{reporte-phr}
|
14 |
|
|
\usepackage{reporte-phr}
|
15 |
|
|
|
16 |
|
|
% Para el titulo
|
17 |
|
|
\def\logo{./img/title/phr_logo.pdf}
|
18 |
223 |
maximiq |
\def\producto{Interfaz gráfica de usuario\par \vspace{0.5ex} PHR GUI v0.1}
|
19 |
218 |
maximiq |
\title{Desarrollo de la interfaz gráfica}
|
20 |
206 |
maximiq |
%\author{Maximiliano Quinteros}
|
21 |
218 |
maximiq |
\def\docver{0.9}
|
22 |
206 |
maximiq |
\date{Abril de 2013}
|
23 |
|
|
|
24 |
|
|
|
25 |
|
|
\begin {document}
|
26 |
|
|
|
27 |
|
|
|
28 |
|
|
\maketitle
|
29 |
|
|
|
30 |
|
|
\section{Primeras pruebas}
|
31 |
|
|
|
32 |
218 |
maximiq |
Se reconocía la necesidad de facilitar el uso del software xc3sprog debido a que éste funciona en un terminal y puede necesitar de varios argumentos). Sobre todo porque la PHR está diseñada para estudiantes que se inician con los lenguajes de descripción de hardware.
|
33 |
|
|
|
34 |
223 |
maximiq |
Surgió la idea de realizar una interfaz gráfica de usuario (GUI) que sea capaz de correr en sistemas Linux y Windows, y se eligió un lenguaje de programación: Python.
|
35 |
218 |
maximiq |
|
36 |
|
|
El proceso comenzó haciendo pequeñas pruebas para analizar las opciones disponibles.
|
37 |
|
|
|
38 |
223 |
maximiq |
\subsection{Interfaz gráfica}
|
39 |
206 |
maximiq |
|
40 |
218 |
maximiq |
Se buscaba hacer algo aprovechando recursos de licencias libres. En cuanto a la interfaz gráfica se analizaron las siguientes librerias:
|
41 |
|
|
\begin{enumerate}
|
42 |
|
|
\item GTK
|
43 |
|
|
\item Qt
|
44 |
|
|
\item Tcl/Tk
|
45 |
|
|
\item \textbf{WxWidgets -- Elegida!}
|
46 |
|
|
\end{enumerate}
|
47 |
|
|
|
48 |
|
|
Y se eligió por ésta última por su portabilidad, e integración con librerías nativas de los distintos sistemas operativos.
|
49 |
|
|
|
50 |
223 |
maximiq |
En el caso de MS Windows hizo falta instalar al interprete python el módulo \emph{wxPython}. Primero se usó la versión 3.0.0 (la última versión) pero luego de un tiempo se detectó un funcionamiento errático con Windows XP, por lo cual se pasó a la versión 2.9.5 y no se tuvieron mas problemas.
|
51 |
218 |
maximiq |
|
52 |
|
|
Para el desarrollo con wxPython se encontró el software \emph{wxGlade} que permite un desarrollo rápido de la aplicación (RAD) ya que el usuario dibuja la interfaz y luego la exporta en forma de código de Python. Luego quedan por escribir los handlers para los eventos.
|
53 |
|
|
|
54 |
|
|
\begin{center}
|
55 |
|
|
\includegraphics[width=0.45\textwidth]{./img/etapa01.png}
|
56 |
|
|
\end{center}
|
57 |
|
|
|
58 |
206 |
maximiq |
\subsection{Independencia del intérprete}
|
59 |
218 |
maximiq |
Para el caso de la ejecución de un script de Python en GNU/Linux no existen complicaciones puesto que las distribuciones cuentan con el intérprete ya instalado. No ocurre lo mismo con el sistema Windows.
|
60 |
206 |
maximiq |
|
61 |
223 |
maximiq |
Para no tener que instalar el interprete en cada computadora donde se desee usar PHR GUI se recurrió al módulo de Python denominado \emph{py2exe} que genera archivos de distribución. Este modulo lee el script de interés y lo procesa para generar un directorio (denominado \emph{dist}) en donde ubica un archivo ejecutable (\texttt{.exe}) y librerías asociadas al mismo.
|
62 |
218 |
maximiq |
|
63 |
|
|
\begin{center}
|
64 |
|
|
\includegraphics[width=0.55\textwidth]{./img/etapa02.png}
|
65 |
|
|
\end{center}
|
66 |
|
|
|
67 |
|
|
Si bien hay otras alternativas a py2exe para compilar código de Python, se eligió por sobre las otras por recomendaciones en la documentación de wxPython\footnote{http://wiki.wxpython.org/DistributingYourApplication}.
|
68 |
|
|
|
69 |
|
|
No obstante la tarea efectuada, py2exe no resolvió el problema de la distribución por completo. Por usar la librería gráfica wxWidgets, que a su vez usa librerías de Microsoft (y de licencia no libre), el programa no puede correrse en algunas versiones de Windows. La solución es pre-instalar un paquete para desarrolladores de Microsoft: \texttt{vcredist\_x86.exe}. Según Microsoft\footnote{http://www.microsoft.com/en-us/download/details.aspx?id=5555}:
|
70 |
|
|
|
71 |
|
|
\begin{quote}
|
72 |
|
|
The Microsoft Visual C++ 2010 Redistributable Package installs runtime components of Visual C++ Libraries required to run applications developed with Visual C++ on a computer that does not have Visual C++ 2010 installed.
|
73 |
|
|
\end{quote}
|
74 |
|
|
|
75 |
|
|
En el próximo paso se busca una solución amigable a la distribución de PHR GUI.
|
76 |
|
|
|
77 |
206 |
maximiq |
\subsection{Instalador}
|
78 |
|
|
|
79 |
223 |
maximiq |
Para generar el instalador se recurrió a NSIS\footnote{http://nsis.sourceforge.net/Main\_Page}.
|
80 |
206 |
maximiq |
|
81 |
218 |
maximiq |
\begin{quote}
|
82 |
|
|
NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.
|
83 |
|
|
\end{quote}
|
84 |
|
|
|
85 |
|
|
Mediante un lenguaje permite describir instaladores que luego son creados por dicha aplicación.
|
86 |
|
|
|
87 |
|
|
Para generar el script de NSIS se recurrió a:
|
88 |
|
|
|
89 |
|
|
\begin{description}
|
90 |
|
|
\item[Software \emph{HM NIS Editor 2.0.3}] Este software tiene un asistente al que se le puede indicar el directorio de distribución (entre otros datos), para crear el archivo NSIS.
|
91 |
|
|
\item[Edición manual del archivo anterior] Se realiza la edición manual para añadirle una linea en la sección \texttt{Post} del documento.
|
92 |
|
|
|
93 |
|
|
\begin{lstlisting}
|
94 |
|
|
ExecWait '$INSTDIR\vcredist_x86.exe /q'
|
95 |
|
|
\end{lstlisting}
|
96 |
|
|
|
97 |
|
|
Esto instala de forma silenciosa las librerías que el modulo py2exe no incluye al momento de compilar por incompatibilidades de la licencia.
|
98 |
|
|
|
99 |
|
|
\end{description}
|
100 |
|
|
|
101 |
223 |
maximiq |
Así se obtuvo el archivo NSIS con el que finalmente se hizo el instalador.
|
102 |
218 |
maximiq |
|
103 |
|
|
\begin{center}
|
104 |
|
|
\includegraphics[width=0.6\textwidth]{./img/etapa03.png}
|
105 |
|
|
\end{center}
|
106 |
|
|
|
107 |
206 |
maximiq |
\section{Desarrollo de la GUI en Windows}
|
108 |
218 |
maximiq |
Debido a que Windows presentaba una mayor cantidad requisitos en cuanto a desarrollo y portabilidad se inició el desarrollo de PHR GUI en este sistema operativo.
|
109 |
206 |
maximiq |
|
110 |
223 |
maximiq |
A continuación un diagrama bosquejando el proceso hasta la obtención del instalador.
|
111 |
206 |
maximiq |
|
112 |
218 |
maximiq |
\begin{center}
|
113 |
|
|
\includegraphics[width=0.9\textwidth]{./img/diseno.png}
|
114 |
|
|
\end{center}
|
115 |
|
|
|
116 |
|
|
\section{PHR GUI v0.1 para GNU/Linux}
|
117 |
|
|
Para hacer funcionar la GUI en GNU/Linux se hicieron algunas modificaciones al programa desarrollado para Windows. En su mayor parte referidas a la forma en que se invoca el xc3sprog, debido a la diferencia entre el shell de linux y la consola de windows.
|
118 |
|
|
|
119 |
|
|
\begin{center}
|
120 |
|
|
\includegraphics[width=0.60\textwidth]{./img/win2lin.png}
|
121 |
|
|
\end{center}
|
122 |
|
|
|
123 |
206 |
maximiq |
\section{Futuro}
|
124 |
|
|
|
125 |
218 |
maximiq |
En la vida de cualquier producto, se pasan por distintas etapas y de acuerdo al proceso de diseño, cíclicamente es necesario adaptar el trabajo para cumplir con los objetivos del proyecto y acomodarse a nuevas especificaciones.
|
126 |
|
|
|
127 |
|
|
\begin{center}
|
128 |
|
|
\includegraphics[width=0.75\textwidth]{./img/life-cycle.png}
|
129 |
|
|
\end{center}
|
130 |
|
|
|
131 |
|
|
De acuerdo a lo expuesto, se prevé una nueva versión de PHR GUI y en el siguiente texto se listan algunas ideas a tener en cuenta en el momento de continuar con el desarrollo.
|
132 |
|
|
|
133 |
206 |
maximiq |
\subsection{TODO}
|
134 |
|
|
|
135 |
|
|
\begin{enumerate}
|
136 |
218 |
maximiq |
\item Respecto de la interacción con xc3sprog:
|
137 |
|
|
\begin{enumerate}
|
138 |
|
|
\item Añadir soporte para programar con archivos MCS además de BIT.
|
139 |
|
|
\item Solucionar la indicación de los archivos en Windows cuando la ruta incluye dos puntos (':').
|
140 |
223 |
maximiq |
\item Crear una ventana de configuración en la cual se pueda elegir la ruta al xc3sprog (podría estar en el PATH), y que además permita elegir el comando que se ejecuta para cada evento, haciéndolo compatible para distintas versiones de xc3sprog.
|
141 |
|
|
\item Dar la opción para elegir librería libre o propietaria.
|
142 |
218 |
maximiq |
\item Detectar y corroborar un archivo de configuración al inicio (o en cualquier momento).
|
143 |
220 |
maximiq |
\item Procesar la salida de xc3sprog para brindar mensajes mas claros.
|
144 |
218 |
maximiq |
\end{enumerate}
|
145 |
|
|
\item Respecto de la usabilidad:
|
146 |
|
|
\begin{enumerate}
|
147 |
|
|
\item Mejorara el dialogo de ayuda. Incluir foto explicando el seteo de los jumpers.
|
148 |
|
|
\item Añadir aceleradores a los botones y hacerlos cambiar entre ellos con la tecla tab.
|
149 |
|
|
\end{enumerate}
|
150 |
|
|
\item Respecto de la portabilidad:
|
151 |
|
|
\begin{enumerate}
|
152 |
|
|
\item Generar los mismos archivos capaces de correr en Windows y Linux.
|
153 |
|
|
\end{enumerate}
|
154 |
206 |
maximiq |
\end{enumerate}
|
155 |
|
|
|
156 |
218 |
maximiq |
\end{document}
|
157 |
206 |
maximiq |
|