Mostrando las entradas con la etiqueta Mac OS X. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Mac OS X. Mostrar todas las entradas

2009-09-26

CodeCamp 2009

Para quienes no pudieron ir a alguna de las charlas del CodeCamp 2009 en las que participe, o quieren repasar el contenido, dejo disponible lo mostrado en el evento.

Saludos!

Monos y Manzanas - Programando para Mac en .NET

Conociendo al Dúo Dinámico: C# 4 y VS2010


2009-07-18

Probando Blogo desde la Mac

Mr. Kus me pasó el link a este programa de blogging para Mac, frente a mi pedido de algún soft que pudiese reemplazar a mi querido Live Writer.

Por ahora parece bastante bueno. Cuando tenga un post mas largo para escribir, espero poder confirmarlo.


2009-07-08

Monos y Manzanas: Como hacer aplicaciones Cocoa con .NET

Desde que soy usuario de OS X he intentado varias veces desarrollar alguna aplicación que pueda aprovechar todo el poder de la plataforma .NET y las delicias gráficas de las interfaces gráficas creadas con Cocoa y sus frameworks para Mac.

La necesidad de utilizar .NET sobre el sistema operativo impulsado por Steve Jobs está cubierta desde hace un buen tiempo por la gente de Mono y su implementación multiplataforma del CLR y gran mayoría de las librerías incluidas en el .NET Framework.
El problema radicaba en como poder interactuar de forma simple y comoda con una UI hecha en Cocoa y no con el - bastante sovietico - port de Windows.Forms que incluye Mono, o con librerías graficas como GTK que se ven bastante alienigenas dentro de la Mac.

Investigando un poco, encontré que existen varios proyectos que hacen de bridge entre el mundo de Mono y .NET y los frameworks provistos por Cocoa.
Inicialmente, utilicé la librería publicada en el mismo sitio de Mono: Cocoa#. El problema fue que, pese a su simplicidad, tenía demasiados problemas de performance y estabilidad, por lo que quedó descartada.

Hace no mucho leí de otro bridge que, apartentemente, tiene bastante aceptación: Monobjc. Estas librerías permiten utilizar tanto una interfaz creada en Cocoa y sus frameworks desde una aplicación .NET como exponer - con ciertas restricciones - clases hechas en .NET dentro de una aplicación nativa hecha en Cocoa y ObjectiveC.

En este caso voy a explicar, paso a paso, como crear una nueva aplicación que nos permita navegar por la web cuya (única) View esté desarrollada con Cocoa utilizando el Interface Builder y el Controller y (ausente) Model estén hechos en C#

Requerimientos

Para empezar vamos a crear una nueva View utilizando Interface Builder (se recomienda tener al menos conocimientos básicos sobre como utilizar Interface Builder).

Al abrir Interface Builder seleccionamos el template de Cocoa Application

1. NuevaApp

Una vez creado el proyecto, podremos ver la ventana principal creada para la aplicación, su menú, el listado de objetos existentes, el inspector donde podrémos modificar propiedades de los controles y la librería de controles disponibles desde Cocoa

2. Empezar

En la librería de controles buscamos los controles de WebView, TextField y Button y los agregamos a la ventana, como se ve en la imagen. Pueden modificar las propiedades de estos controles en el inspector para permitirles ajustar su tamaño de acuerdo al resizing de la ventana.

5. VentanaLista

Con la ventana lista, agregamos un nuevo Object a la ventana que contiene la lista de objetos disponibles, y cambiamos el nombre de su clase por ObjectController. Este será el objeto que represente al Controller que crearemos desde C# mas adelante.

6. NuevoObject

Dentro de las actions disponibles para el controller deberemos agregar "browse:" que corresponderá a la acción de iniciar la navegación del URL escrito en el TextField anterior.
De la misma manera, deberémos exponer los Outlets "address", "window" y "browser" como se muestra en la imagen, los cuales asociaremos al TextField, la ventana y el WebView.

7. PropiedadesController

El último paso de esta parte será hacer el link entre las acciones y outlets definidos en el BrowserController y los controles creados dentro de la UI. Para hacer esto mantenemos apretada la tecla control y dibujamos una linea hacia cada uno de los controles. De esta manera aparecerá un menú para vincularlos hacia los outlets disponibles en el Controller.
De forma análoga se debe dibujar una linea desde el botón hacia el BrowserController, para asociar el click a la action "browse:"

Para asegurarse de haber vinculado todo de forma correcta, al hacer click derecho sobre el BrowserController se deberá ver un panel similar a este:

8. BindingController

Con la interfaz lista, guardamos la ventana como un nuevo archivo NIB (ojo! guardar como NIB y NO como XIB!).

Ahora, a programar el controller y el bootstrap de la aplicación en C#
Para hacerlo, pueden utilizar cualquier IDE de su agrado. En particular, yo uso MonoDevelop.

Deberémos crear un proyecto el cual referencie a las assemblies de Monobjc, Monobjc.Cocoa y Monobjc.WebKit ya que son las que utilizamos dentro de la interfaz.
Dentro del proyecto crearemos dos clases: la primera será el bootstrap de la aplicación y la segunda sera el BrowserController

Para hacer el bootstrap deberémos crear una clase muy similar al siguiente ejemplo:

using Monobjc;
using Monobjc.Cocoa;
using System;

namespace zPod.CocoaBrowser
{
public class Program
{
public Program ()
{
}

public static void Main (String[] args)
{
ObjectiveCRuntime.LoadFramework ("Cocoa");
ObjectiveCRuntime.LoadFramework ("WebKit");

ObjectiveCRuntime.Initialize ();
NSApplication.Bootstrap ();

NSAutoreleasePool pool = new NSAutoreleasePool();

NSApplication.LoadNib ("MainWindow.nib");
NSApplication.RunApplication ();
}
}
}


Las primeras lineas del método Main cargan los frameworks de ObjectiveC que utilizaremos. En este caso "Cocoa" y "WebKit".


Luego de cargar los frameworks se inicializa el bridge con el runtime de ObjectiveC y se dispara la aplicación.


Como verán, antes de cargar el NIB se crea un nuevo NSAutoreleasePool. Esto sirve para evitar leaking por parte de ObjectiveC.



Finalmente llamamos al metodo LoadNib, el cual cargará la interfaz grafica creada anteriormente y lanzamos la aplicacion con el método RunApplication.



La creación del BrowserController es muy sencilla: en la misma hay que crear propiedades que corresponderán a los outlets definidos en la interfaz y metodos para atrapar las actions disparadas desde la misma.



Las clases marcadas con el atributo [ObjectiveCClass] serán expuestas al runtime de ObjectiveC. Las propiedades decoradas con el atributo [ObjectiveCField] representan los outlets y los métodos decorados con [ObjectiveCMessage] sirven para atrapar las actions disparadas por la View.



using System;
using Monobjc;
using Monobjc.Cocoa;
using Monobjc.WebKit;

namespace zPod.CocoaBrowser
{
[ObjectiveCClass]
public class BrowserController : NSObject
{
[ObjectiveCField]
public NSTextField address;

[ObjectiveCField]
public WebView browser;

[ObjectiveCField]
public NSWindow window;

public BrowserController ()
{
}

public BrowserController (IntPtr nativePointer) : base(nativePointer)
{
}

[ObjectiveCMessage("browse:")]
public void Browse (Id sender)
{
string url = address.Cell.Title;

browser.MainFrameURL = url;
}

[ObjectiveCMessage("awakeFromNib")]
public void AwakeFromNib ()
{
window.Title = "CocoaBrowser - zPod";
}
}
}


En este ejemplo, se ve el método AwakeFromNib, el cual se ejecutará al finalizar de cargar la vista. En el mismo, seteamos el título de la ventana.

Para atrapar la accion "browse", creamos un metodo con su correspondiente atributo y dentro del mismo cambiamos la URL del MainFrame del WebView.



Una vez listo esto, solo queda probar la aplicación.

Según la documentación de Monobjc, se tendría que poder ejecutar un script de NAnt que proveen ellos y crear una estructura de directorios específica. Dado que eso no me está funcionando (por algún motivo NAnt no encuentra a mono) armé un pequeño script de bash que arma todo lo necesario para tener nuestra App empaquetada y lista para ejecutar.



Aca dejo para bajar esta aplicación de ejemplo como proyecto de MonoDevelop, el cual al compilarse dejará en el directorio bin/Debug todos los archivos necesarios para armar el paquete. Lo único que hay que hacer es, desde la consola, ir al directorio /bin/Debug del proyecto y ejecutar:



./MakePackage CocoaBrowser


Con esto se generará un nuevo paquete de aplicación ejecutable, cuyo resultado es:



9. App



Ahora, a divertirse!



Saludos!

Zaiden

2008-04-06

Monitor dual en OS X

Despues de varios meses de estar usando OS X, pude configurarlo para usar la salida VGA como segundo monitor. Para hacerlo hay que tener instalado el Leopard Graphics Update, usar estas extensiones y arrancar la maquina con el monitor enchufado.

Z

2008-02-21

Somos el único animal suficientemente idiota...

Se dice que la estupidez humana no tiene límites, ya que somos el único animal suficientemente idiota para tropezar 2 veces con la misma piedra. Básicamente, intentar dos veces lo mismo y esperar distinto resultado

Ayer confirme mi humana estupidez.

Hace ya unos meses había tratado de utilizar la salida VGA de la notebook desde OS X sin mucho éxito. En el camino, casi destruyo la instalacion de mi máquina ya que me quedó lockeada una resolucion fea y no se veía nada en la máquina. Finalmente pude zafarla y volver a hacerlo andar.

Ayer volví a hacer lo mismo esperando tener éxito esta vez (iluso...). Obviamente, volví a destruir la configuración de la resolución de la maquina. El problema es que esta vez de tantas cosas que toque, dejé al sistema imposible de bootear. Por suerte pude levantar la particion desde el DVD de instalacion de OS X, guardar todos los datos importantes en un Pendrive y finalmente... reinstalar :(

Conclusión: me terminé durmiendo a las 3.30 de la mañana mientras reinstalaba todo.... por boludo.

Hasta la próxima!

Z

2008-02-07

Un pequeño paso para el hombre, un gran salto para el desarrollo .NET en OS X: La nueva version de Mono incluye el MonoDevelop para Mac!

Gente, desde hace unos dias, el paquete de instalación de Mono para OS X incluye una pequeña sorpresa: MonoDevelop!

Finalmente los usuarios de OS X tenemos un entorno de desarrollo decente, con completado de codigo y toda la bola para .NET!

Screenshot:
MonoDevelop en OS X

Hasta la próxima!
Z

PD: pese a que ya no va a ser necesario, voy a ver si le programo una interfaz en GTK# o similar al ZSense para poder correrlo en OS X sin depender de Windows.Forms

2007-12-18

Heladera último modelo: Instalando Leopard en la Laptop

Después de unas semanas usando Mac OS X 10.4.10 (Tiger) decidí que era hora de ir un paso mas allá e instalar Leopard (10.5).

Haciendola corta, les comento lo que hice:

1. Instalar Tiger.

2. Una vez que esta instalado, upgradearlo a Leopard (obviamente, no formatear en el proceso). Yo usé el DVD de ToH RC2 que esta dando vueltas por la red.

3. Una vez que esta todo andando, instalar el PC EFI, que nos permitirá instalar las actualizaciones de OS X sin usar un kernel patcheado, sino que el original de Apple (vanilla). Pueden ver como hacerlo aca. (usar la ultima version. Yo use la 8.0)

4. Usar el system update y actualizar todo (ahora si, sin miedo gracias al PC EFI)

5. Para los drivers de video, usar estos archivos.

6. Para usar teclado en español, usar este layout.

7. El resto, veanlo del post anterior.

Un saludo!

Z

PD: Hoy salió un DVD llamado IATKOS que, al parecer es una recopilacion mas bonita para instalar Leopard desde 0, con PC EFI y toda la bola. Si alguien la prueba, comenteme que onda.

2007-12-06

Abajo las PCs, arriba las heladeras: Usando Mac OS X en una Hackintosh

Por algun motivo, el cual nunca sabré, me volvió a picar el bichito de curiosidad sobre instalar una versión hackeada de OS X en mi ThinkPad T60p para ver que era eso que siempre asocié mas a un electrodoméstico que a una computadora, y aún asi tanta gente me recomendaba.

Esta vez, baje una versión un poco mas actualizada del sistema: Mac OS X Tiger 10.4.10 (la última vez habia bajado la 10.4.8).

A diferencia de lo que se puede leer en posts anteriores, una vez instalado el sistema operativo (siempre hablando de mi disco externo) no fue necesario entrar en modo consola y borrar extenciones o cosas similares: todo anduvo relativamente bien. Recalco el relativamente ya que el sistema recien instalado se parecía mas a un XP recien instalado que a la felicidad computacional la cual me habían comentado: la resolución era de 1024x768, no habian drivers de video, sonido o wireless. Aunque sea, OS X reconoció las particiones NTFS donde tengo Windows XP instalado y las montó (como solo-lectura). Lo que no tuve problemas para usar out-of-the-box fue la placa de red, a la cual le conecté el cable e instantaneamente recibí IP.

Bueno, manos a la obra. Para poder usar esto necesitaría, como minimo, poder escuchar música, tener red sin depender de un cable, escribir en mis particiones NTFS (donde tengo todo lo que uso diariamente) y por último, pero no menos por eso, tener una resolución decente con aceleración de video por hardware.

1. El sonido: esto fue bastante fácil, ya que la primera busqueda que hice en InsanelyMac (sitio indispensable para cualquiera que desee tener su Hackintosh. www.insanelymac.com) pude encontrar el driver. Pueden bajarlo desde aca.

2. Red inalámbrica: las cosas empezaban a ponerse feas en este punto. Por lo que estuve leyendo en los foros, no existen drivers para la placa de red inalámbrica que traen las Thinkpad T60p y similares. Hay gente desarrollandolos, pero el proceso es lento y parece que todavía falta bastante hasta que podamos hacer uso de el. Por suerte para mi, hace un tiempo me compré un MSI USB Wireless Stick. En la página de MSI no dicen nada de un driver para OS X. Sin embargo, buscando por internet me enteré de que el stick es practicamente igual a otro Ralink o algo asi... La cosa es que ese si tiene driver y funciona a la perfección!. Dejo aca el driver para bajarlo.

3. NTFS: Esto fue probablemente lo mas facil de todo. Dado que abajo del OS X hay un BSD, parece que resulta bastante facil portar muchas aplicaciones hechas para Linux hacia el sistema operativo de Mac y una de ellas es FUSE, herramienta que permite cargar drivers para filesystems (como el de NTFS) en espacio de usuario. Teniendo Mac-FUSE y el driver NTFS-3G para Mac, ya estaba solucionado el asunto de las particiones.

4. El video: La correcta configuración de la placa de video fue, por mucho, lo mas complicado que tuve que hacer para tener funcionando el sistema operativo. El gran problema gran es que la T60p trae una ATI FireGL V5250 como placa de video, la cual no posee drivers para Mac. La única esperanza era encontrar drivers para la x1700 que, basicamente es la misma placa, pero con otro ID. Tampoco hay drivers. Después de mucho tiempo, mucha investigación y edicion de archivejos en hexa, pude armar el driver que necesitaba, modificando unos drivers hechos para la X1600 (creo) que aparecieron en InsanelyMac. Para los que lo necesiten, dejo aca para bajar las extensiones que hay que agregar/sobreescribir, para que puedan tener la placa de video funcionando con aceleración por hardware y 1680x1050 de resolución. Una vez reemplazadas, hay que ir a la consola y modificar los permisos y ownership de estos archivos (que tienen que estar en /System/Library/Extensions).
Para modificar los permisos hacemos: chmod -R 755 ExtensionAModificar
Para modificar el ownership hacemos: chown -R 0:0 ExtensionAModificar
Finalmente, hacemos: touch /System/Library/Extensions para avisar que cambio el directorio y listo! Tenemos el video andando.

Si haciendo algo con drivers o similar llevan a la maquina a un estado que no pueda terminar de arrancar, presionen F8 al arranque y cuando le pide las opciones para booteo pongan: -v -s -f y los va a llevar al modo consola, donde pueden volver todo al estado anterior.

Con esto finalice la instalación de drivers. Lo que quedaba por hacer era empezar a instalar soft y a ver que se podía hacer. En este momento ya van 3 días desde que lo instalé y, la verdad, no dan ganas de volver!!!

Software que les recomiendo:
- Vmware Fusion: versión de Vmware para OS X, con el feature Unity, el cual permite "sacar" ventanas de la maquina virtual y usarlas como si fuesen una ventana mas de OS X. Muy groso!
- Adium: cliente multiprotocolo de IM. Esta muy bueno, pero todavía estoy decidiendome si uso solo ese, o el Messenger para Mac (que es medio feucho) y el iChat para GTalk.
- VLC: excelente reproductor multimedia. Dale una feta de jamon y te la saca como audio y video. Se banca cualquier cosa.
- Firefox: en general, uso Safari como browser, pero alguno sitios como Blogger o GMail o Managerzone no andan del todo bien o con todos sus features ahi, asi que el viejo y querido lobo de fuego viene al rescate.

Software que NO les recomiendo, pero que es necesario:
- Microsoft Office 2004: anda lento, mal y es horrible. Sin embargo, necesito el Word para editar varios documentos en el laburo y la integración que tiene Entourage (version Mac del Outlook) con Exchange es un poco mejor que la de las herramientas que trae OS X (tal vez no el mail, pero el address book no lo pude hacer sincronizar con exchange sin Entourage). Otro gran problema es que no hay Universal Binaries de Office 2004, por lo que es bastante mas lento que el resto de las aplicaciones. Por suerte, dentro de un mes ya sale Office 2008. Esperemos que sea bastante mejor que éste.

Bueno, con esto cierro el post (que, de hecho, fue escrito desde OS X, usando internet inalámbrica, mientras escucho musica en el iTunes :D). Cualquier duda consultenme y voy a hacer lo posible en darles una mano.

Z en la heladera, digo, OS X :D

2007-06-17

Finalmente, Mac OS X andando en la Thinkpad T60p

Después de varios intentos de instalar OS X sobre la T60p y 2 DVDs de Mac OS X bajados, pude instalar el flamante sistema operativo de Mac en la notebook.

Por si alguien está teniendo los mismos problemas, les cuento los detalles de esta máquina, como hice para instalarlo y que quedo andando y que no.

Detalles de la máquina, Lenovo Thinkpad T60p

  • Procesador: Intel® Core™2 Duo T7200 (2GHz)
  • Memoria: 1GB RAM PC2-5300 667MHz DDR2
  • Disco Duro: 100GB 7200rpm HD SATA 150
  • Unidad Óptica: CDRW/DVDRW Multiburner
  • Pantalla: 15.4" 1680x1050 LCD Widescreen anti-glare
  • Conectividad: Intel® 802.11abg Wireless, Bluetooth/Modem, 1Gb Ethernet
  • Otros: 256MB ATI® Fire GL™ V5250, Ultranav, Thinklight™, Secure Chip, Fingerprint Reader, Batería 9 celdas Li-Ion, Ports: Three USB 2.0 / external DB-15 monitor / infrared (4Mbps) / RJ-11 (modem) / RJ-45 (ethernet)

Instalación:

El DVD que me bajé es el de Mac OS X JaS 10.4.8. La instalación es bastante fácil de seguir. Tiene una utilidad para particionar discos que no trae grandes complicaciones (yo lo instalé en un disco externo conectado por USB y anduvo de 10). En el momento de elegir que paquetes instalar, hay que marcar el de Intel SSE3, y los que tengan que ver con el hardware de la maquina (creo que ninguno mas para mi caso).

Una vez terminada la instalación, no hay que sacar el DVD de la lectora y volver a arrancar la instalación. Cuando ya cargó de nuevo, abrir una consola (creo que está en el menú de utilidades), ir al directorio: /Volumes/NombreDelDiscoDondeInstalaronMacOsX/System/Libraries/Extensions/

Estando ahí, borrar (o mover a algún otro lugar):

  • ATI*
  • ApplePCCardATA
  • ApplePCCardATA16 (Este creo que se llama distinto…)
  • IOPCCardFamily (Este decía que había que borrarlo, pero nunca lo tuve)
  • AppleHDA

Una vez hecho esto, salir del programa de instalación, sacar el DVD y bootear felizmente Mac OS X (si no borramos esto, tira un Kernel Panic, indicando que hay que reiniciar la máquina).

Al iniciar Mac OS X, vamos a tener la PC con la red Ethernet funcionando, pero con una resolución de 1024x768 y sin sonido.

Para conseguir tener sonido busquen el siguiente driver en la página http://forum.insanelymac.com/ : Conexant_HD_Audio.pkg.zip

Aparentemente, todavía no hay drivers para la placa de video, FireGL v5250 (mismo chip que la X1700) asi que lo mejor que pude conseguir fue subir la resolución a 1400x1050, y no 1680x1050, como debería ser. Tampoco pude activar los efectos 3D por el mismo motivo.

Sobre la placa de red wireless el asunto es similar: recién hace poco empezaron a desarrollar un driver que funcione con la placa que trae esta máquina, asi que habrá que esperar unos meses hasta tenerlo andando.

Para más información busquen en el foro de InsanelyMac que hay mucha gente que pasó por lo mismo.

Ah, si alguien consigue drivers, o como hacer andar bien la placa de video, por favor avíseme!!!

Saludos,

Z

PD: Si lo instalan, con el Beta de VMWare Fusion pueden correr su instalación de Windows alojada en otra partición como si fuese una máquina virtual y con el nuevo feature Unity pueden tener las ventanas de Windows directamente en el escritorio de Mac! (pretty cool, ha!)

2007-06-09

OS X se niega a instalar

Estuve todo el sabado a la tarde tratando de hacer andar Mac OS X en mi Thinkpad T60p, pero finalmente tuve que resignarme: no hubo forma de hacerlo andar. Siempre que terminaba de instalar, reiniciaba la PC y todo terminaba con un kernel Panic. Ahora me estoy bajando una versión mas nueva, a ver si con ese puedo instalarlo bien (ahora voy a tratar de hacerlo sobre el disco externo, para no tener que volver a destruir mi partición de XP…). Todo sea por poder usar el VMWare Fusion :D

Z