tag:blogger.com,1999:blog-79794098385284891792024-03-14T06:49:56.103-07:00Encuentros de un no-especialistaAnonymoushttp://www.blogger.com/profile/11405728547420851151noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-7979409838528489179.post-83741836429767933562016-03-31T13:39:00.003-07:002016-03-31T13:39:38.269-07:00Instalar FLTK en Ubuntu y poder compilar ejemplos de Programming: Principles and Practice Using C++Pocas veces me topo con problemas en Ubuntu (Kubuntu en esta ocasión) de cosas que realmente me importen. ¿Juegos? Casi nunca se me da andar haciendo eso. ¿Aplicaciones específicas? Todas mis necesidades las puedo suplir con alguna del mundo GNU/Linux sin problema alguno. La mayoría de las veces cualquier problema se soluciona con una búsqueda rápida con Google (y muchs más en alguno de los sitios de Stack Exchange). Por eso este problema fue un poco más molesto de lo que debería haber sido.<br />
<br />
Revisando el libro de Stroustrup <i>Programming: Principles and Practice Using C++</i>, 2nd Edition en el capítulo 12 me topo con una introducción de gráficos, que en principio no debería causar dolores de cabeza. Como se usa FLTK (que en su versión Linux es un tanto feo, pero para lo que es está más que bien), busqué rápido cómo instalarlo rápido y encontré que lo más fácil es<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ sudo apt install libfltk1.3-dev</span></blockquote>
que instala la versión 1.3.2, suficientemente nueva para los requerimientos. Luego viene el problema de cómo generar el ejecutable del ejemplo sencillo que viene en el Apéndice D del libro. Otra búsqueda da que basta con<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ fltk-config --compile fltkTest.cpp</span></blockquote>
que genera un código un tanto grande (y para mi nivel bastante incomprensible, aunque en realidad cualquiera a estas alturas del libro puede darse una idea de lo que sucede). No obstante, funcionó y como siempre: <i>si no está roto, no lo arregles</i>.<br />
<br />
El problema comenzó cuando quise usar las pequeñas facilidades que Stroustrup pone en su sitio http://www.stroustrup.com/Programming/PPP2code/ , que son clases de interfaz. Para empezar, el código que genera fltk-config no pasa del inicio, además de que dicho comando no usa el estándar C++11. Por supuesto, lo que sucedió primero es que no coloqué los archivos .cpp de la interfaz junto al código del primer ejemplo del capítulo 12. Gracias a lo que encontré en stackoverflow.com/questions/7134049/stroustrups-simple-window-h/36322596<br />
modifiqué el comando generado por fltk-config añadiendo -lfltk_images y -std=c++11 y usando clang++ pues encuentro más accesible sus mensajes de error:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">$ clang++ -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/freetype2 -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -g -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 -std=c++11 -o 's12_3_first' 's12_3_first.cpp' Simple_window.cpp Graph.cpp GUI.cpp Window.cpp</span></blockquote>
y eso me dejó con problemas de compilación "normales", que cazándolos pude aislar a los archivos de facilidades de Stroustrup.<br />
<br />
<ol>
<li>Primero, descomenté <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">std_lib_facilities.h</span> en <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Graph.h</span></li>
<li>Para resolver una ambigüedad de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Window</span>, hay que especificar <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Graph_lib::Window</span> en la línea 9 de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.h</span></li>
<li>El archivo de cabecera <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">std_lib_facilities.h</span> genera unos warnings en las líneas 107 y 113 ya que se usa <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">i<0</span> cuando i es unsigned. </li>
<li>En la línea 159 de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Graph.h</span> se usa <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">fl_color()</span>, que el compilador dice debería ser <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Fl_Color()</span></li>
<li>Necesité descomentar los contructores de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Point</span> en <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Point.h</span></li>
<li>Hay varias redefiniciones en <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.cpp</span> de métodos de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.h</span> En <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.cpp</span> comenté (para no borrar) las definiciones del constructor, <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">cb_next</span> y <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">wait_for_button</span> (que además tiene una definición diferente a la que está en <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.h</span>). En <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Simple_window.h</span> cambié la definición de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">wait_for_button</span> para que sólo llamé a <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Fl::run()</span>. Por cierto, ambas definiciones de este método no eran funcionales pues provocaban que la ventana (cuando por fin se generó) no se pudiera cerrar con el botón correspondiente, sólo con el botón "Next"; incluso la ventana se "colgaba" si se daba click al botón de cerrar, y el botón "Next" ya no estaba disponible.</li>
<li>En <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">GUI.cpp</span> hay una redefinición para el constructor de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">Menu</span>, que lo puse como comentario.</li>
</ol>
<br />
Con esto la compilación/enlace se consiguió y el ejecutable se generó.<br />
<br />
Pero fue momento de revisar el comandote usado para esto. <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">-I<carpeta></span> hace que se considere una carpeta para la acción (tanto de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">g++</span> como de <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">clang++</span>), pero revisando el comando no sólo se tienen duplicadas las carpetas, sino que ninguna está en el sistema (y el compilador no me avisó). Además, al compilar las facilidades para acelerar las cosas un poco, el compilador mencionó que <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">-lftk_images</span>, <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">-lftk</span> y <span style="font-family: Courier New, Courier, monospace; font-size: x-small;">-lX11</span> no eran necesarios. Al final, terminé con el siguiente comando para compilar a objeto cada archivo de facilidad:<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"><b>$ clang++ -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -g -std=c++11 -c Simple_window.cpp</b></span></blockquote>
mientras que para generar el ejecutable ya se puede usar<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"><b>% clang++ -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 -g -std=c++11 ../PPP2code/Simple_window.o ../PPP2code/Graph.o ../PPP2code/GUI.o ../PPP2code/Window.o -o z s12_3_first.cpp</b></span></blockquote>
(luego de reorganizar dichos archivos en una carpeta en una hermana de la de trabajo) y genera un ejecutable llamado <span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><b>z</b></span>. Ambos comandos son mucho más simples y cortos. Falta revisar si se pueden eliminar más opciones de ambos comandos y que todavía se obtenga el ejecutable, pero para eso debo tomarme más tiempo para hacer pruebas.<br />
<br />
Por cierto, para compilar el ejemplo del Apéndice D, basta con<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;"><b>% clang++ -O2 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -Wl,-Bsymbolic-functions -lfltk -lX11 -g -std=c++11 -o z0 fltkTest.cpp</b></span></blockquote>
<br />
<br />Anonymoushttp://www.blogger.com/profile/11405728547420851151noreply@blogger.com0tag:blogger.com,1999:blog-7979409838528489179.post-35605678083669215922013-05-18T13:13:00.000-07:002013-05-18T13:13:53.525-07:00How to fix Google Earth icon on KDEIn a similar post made a couple of days before, I explained, as a little journal, how a found the way to fix this little, annoying problem of having a generic icon for Google Earth when is in execution.<br />
<br />
Well, I have no interest of making a translation of that, but I left just the solution for those who have the same problem.<br />
<br />
<br />
<ul>
<li>In /usr/share/icons/hicolor/<b>N</b>x<b>N</b>/apps/ , where <b>N</b> is 16, 22, 24, 32, 48, 64, 128, 256, there are files named google-earth.png. You just need to copy those files to googleearth.png on the same carpets.</li>
</ul>
<br />
This is because, for some reason, the script for the application is /opt/google/earth/free/googleearth, but this one is accessed by google-earth.desktop through the link google-earth.<br />
<br />
I hope this is helpful for someone.<br />
<br />Anonymoushttp://www.blogger.com/profile/11405728547420851151noreply@blogger.com0tag:blogger.com,1999:blog-7979409838528489179.post-38162572961777475882013-05-16T22:31:00.000-07:002013-05-18T13:13:18.049-07:00Arreglar el icono de Google Earth en el panel de KDE<span style="font-family: Times, Times New Roman, serif;">Bueno, esto es lo primero que pongo aquí, y creo que lo mejor es hacerlo acerca de algo que me estaba molestando de un tiempo para acá y que hasta ahora pude encontrar la solución: Cómo hacer que la imagen de la aplicación de Google Earth sea la esperada y no una genérica de Xorg.</span><br />
Es decir, que no aparezca esto<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxrk9OKifW4VvkrYYp_L6iC2I934E_Wu4pHFw7vKjUVviaGbqkwp1Iyadu0WlEHpbRvLp7ypHux_16XwSQSttIEX7tS91wmKRHkl55i8qP8UsRLIuY-EHPNw8T2V0wF7EA9gJo8l3hmrc/s1600/xorg.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBxrk9OKifW4VvkrYYp_L6iC2I934E_Wu4pHFw7vKjUVviaGbqkwp1Iyadu0WlEHpbRvLp7ypHux_16XwSQSttIEX7tS91wmKRHkl55i8qP8UsRLIuY-EHPNw8T2V0wF7EA9gJo8l3hmrc/s1600/xorg.png" /></a></div>
sino esto<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBeTZ9vLOyl3m1QkyHyiYwugIIcfp3oQG780LQMXe6I4REIjwe5RKnTBaxtIUl_Fo3ptYSBNu4hNLItOmNCzslk3nsQS0esExXGWiZF0JKDi7drlbuiuKLSrIBtXgT-ogIUfaOArHe00ak/s1600/google-earth.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBeTZ9vLOyl3m1QkyHyiYwugIIcfp3oQG780LQMXe6I4REIjwe5RKnTBaxtIUl_Fo3ptYSBNu4hNLItOmNCzslk3nsQS0esExXGWiZF0JKDi7drlbuiuKLSrIBtXgT-ogIUfaOArHe00ak/s1600/google-earth.png" /></a></div>
en el panel.<br />
<br />
Este problema lo encontré en Ubuntu 12.04, Xubuntu 12.10 y ahora con Kubuntu 13.04. En Ubuntu pude hacer que el Lanzador de Unity manejara correctamente el icono, aunque no se me ocurrió escribir cómo carambas lo hice.<br />
<br />
En Xubuntu la cosa me resultaba molesta, como mosquito en la oreja, pero la dejé pasar. Total, un detallito que no afectaba en nada la utilización de la aplicación. Vamos, si el hecho de haber instalado los controladores de nVIDIA me hubieran echado a perder Plymouth no me pareció nada del otro mundo, menos esto. Lo de nVIDIA es otro caso que luego tendré que tratar, pues ahora (con 13.04) tuve problemas más graves que la condenada pantalla de arranque.<br />
<br />
En fin, ahora que volví a probar Kubuntu, que viene con KDE 4.10.2, y siendo que el sistema es tan configurable (a veces me parece que raya en lo ridículo), pues me resultó... desconcertante que el mismo problema pareciera no tener solución.<br />
<br />
Para empezar, hice varias solicitudes a <i>San Google </i>y nada. Empecé pidiendo la solución específica, luego me fui a soluciones genéricas (<i>¿Cómo le cambio el icono a las aplicaciones?</i>), pero nada aplicaba del todo. Lo más cercano fue en <a href="http://ubuntuforums.org/showthread.php?t=1801703">http://ubuntuforums.org/showthread.php?t=1801703</a>, pero el colocar la aplicación en el panel no era el problema, y ya para entonces había localizado las imágenes google-earth.png. Éstas imágenes se encuentran en /usr/share/icons/hicolor/<i><b>N</b></i>x<i><b>N</b></i>/apps, donde <b><i>N</i></b> es 16, 22, 24, 32, 64, 128, 256. Pero si las imágenes están ahí, ¿por qué la aplicación no las encuentra? Más extraño aún si se considera que las imágenes google-chrome.png están a un ladito de ellas, y con Chrome no hay problema alguno.<br />
<br />
Pues ya de atrevido, me metí a ver qué cosa había de diferente entre Chrome y Earth (esto no me gusta mucho que digamos, pues muchas veces he sido más peligroso que mono con cuchillo). Estas aplicaciones están instaladas en /opt/google/, cada una en su carpeta, aunque Earth en un nivel más, /opt/google/earth/free. El archivo google-earth.desktop usa un archivo script, el google-earth, <i>el cual es un enlace </i>a googleearth (el <i>verdadero</i> script, si se me permite la expresión) en la misma carpeta. <i>¡Ah! tal vez ese es el problema</i>. Lo único que podía perder era un poco de tiempo si hacía copias de las imágenes google-earth.png a googleearth.png en sus mismas carpetas. Haciendo uso de las facilidades que da Dolphin, me paré en la primera carpeta (/usr/share/icons/hicolor/16x16/apps), di F4, y en la terminal<br />
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><i>$ sudo cp google-earth.png googleearth.png</i> </span><br />
repitiendo el proceso en las demás carpetas. Sé que un script hubiera sido más elegante, pero para algo tan simple (y donde toco algo en la raíz), pues como que no (no me quiero hacer el mártir, pero eso de que termine borrando toda la raíz, no es algo que esté demasiado lejano a mis posibilidades). Desde el lanzador inicié Earth, y <i>zas</i>, el panel tiene el icono bien colocado.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSpC9UKkw27lqUP03eHJZQt9drEDNTWor6NnP6oo7G_ar9yRfK8IlluDW-wgiooyWLDTOt0PrpX2kO_oNeWwT_Q8tK-nc5hTSWu750c77jRYo4sYMYExDKvhMaMT8xJJKAeOyglL0W8Rb/s1600/EarthconIcono.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuSpC9UKkw27lqUP03eHJZQt9drEDNTWor6NnP6oo7G_ar9yRfK8IlluDW-wgiooyWLDTOt0PrpX2kO_oNeWwT_Q8tK-nc5hTSWu750c77jRYo4sYMYExDKvhMaMT8xJJKAeOyglL0W8Rb/s1600/EarthconIcono.jpeg" height="276" width="320" /></a></div>
<br />
Bueno, justo cuando en este momento quise tomar la instantánea, la aplicación al abrir se negó. Tal vez porque tenía una de las carpetas de Earth abiertas (aunque no debería). Cerré Dolphin, volví a lanzar Earth y ya pude tomar la imagen.<br />
<br />
Qué razones tienen los de Google para que manejen de ese modo los scripts, escapa a mi curiosidad. Creo que les voy a escribir para comentarles esto.<br />
<br />
Bueno, un mosquito menos en mi oreja.Anonymoushttp://www.blogger.com/profile/11405728547420851151noreply@blogger.com0