2008-08-18 10 views
18

Por ejemplo, http://developer.apple.com/cocoa/pyobjc.html es todavía para OS X 10.4 Tiger, no 10.5 Leopard .. Y eso es la documentación oficial de Apple para ello ..¿Por qué la documentación de PyObjC es tan mala?

La página oficial PyObjC es igual de malo, http://pyobjc.sourceforge.net/

Es tan malo que es desconcertante .. estoy pensando en el aprendizaje de Ruby sobre todo porque las cosas RubyCocoa está mucho mejor documentado, y hay un montón de tutoriales decente (http://www.rubycocoa.com/ por ejemplo), y debido a la Zapatos herramientas GUI ..

Incluso this badly-auto-translated Japanese tutorial es más útil que el resto de la documentación que pude encontrar ..

Todo lo que quiero hacer es crear aplicaciones Python bastante simples con la GUI de Cocoa ...
¿Alguien puede arrojar luz sobre la horrible documentación, o señalarme algunos tutoriales que no solo le dan bloques grandes de código y suponen ¿Sabes lo que NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) hace ..?

+0

El primer tutorial de PyObjC al que se vincula es un artículo de Jonathan Rentzsch (puede escuchar su voz en los videos, y puede reconocerla a partir de los videos de C4). A pesar de que está en el sitio de Apple sin una línea, no es "documentación de Apple" en el sentido de ser escrita y mantenida por Apple. –

+3

¿No te gustan los documentos? Escribir algo. Es un proyecto de código abierto. – NSResponder

Respuesta

21

Estoy de acuerdo con que ese tutorial es defectuoso, arrojando un código aleatorio e inexplicable justo en frente de tus ojos. Introduce conceptos como el grupo de autorrelease y los valores predeterminados del usuario sin explicar por qué los querría ("Autorelease pool for memory management" no es una explicación).

Eso dijo ...

básicamente todo lo que quiero hacer es escribir aplicaciones Cocoa sin tener que aprender ObjC.

me temo que, por el momento, que se necesita una comprensión básica de ObjC con el fin de beneficiarse de cualquier idioma que utilice cacao. PyObjC, RubyCocoa, Nu y otros son nichos en el mejor de los casos, y todos fueron desarrollados por personas íntimamente familiarizadas con los pormenores de ObjC y Cocoa.

Por ahora, usted se beneficiará más si realmente ve esos puentes como útiles cuando realmente brillan los lenguajes de scripting, en lugar de tratar de construir una aplicación completa con ellos. Si bien este tiene hecho (con LimeChat, estoy usando una aplicación escrita RubyCocoa en este momento), es raro y es probable que sea por un tiempo.

3

Esta respuesta no va a ser muy útil pero, como desarrollador, odio hacer documentación. Al tratarse de un proyecto de código abierto, es difícil encontrar personas para documentar.

3

Tom lo dice todo realmente. Muchos proyectos de código abierto tienen desarrolladores dedicados y pocos que están interesados ​​en documentar. No ayuda el hecho de que los postes del objetivo pueden cambiar diariamente lo que significa que la documentación no solo debe crearse sino también mantenerse.

7

La respuesta de Tom y Martin es definitivamente cierta (en casi cualquier proyecto de código abierto, encontrará que la mayoría de los contribuyentes están particularmente interesados ​​en, bueno, desarrollando, no tanto en cuestiones semi relacionadas como la documentación) , pero no creo que su pregunta en particular al final encaje bien dentro de la documentación de PyObjC.

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

NSThread es parte de la API de cacao, y como tal documented over at Apple, incluyendo el método particular + detachNewThreadSelector:toTarget:withObject: (Me enlazar allí, pero al parecer stackoverflow tiene errores con analizarlo). El wiki de CocoaDev also has an article.

No creo que sea una buena idea que PyObjC intente documentar Cocoa, aparte de algunos ejemplos básicos de cómo usarlo desde Python. Explicar los selectores también es probable que esté fuera del alcance de PyObjC, ya que esos también son una característica de Objective-C, no de PyObjC específicamente.

5

Todo lo que quiero hacer es crear aplicaciones Python bastante simples con cacao interfaz gráfica de usuario de .. ¿Alguien puede arrojar luz sobre la documentación horribles , o apúntame a algunos tutoriales que no solo te dan grandes bloques de código y supongo que sabes lo que hace NSThread.detachNewThreadSelector_toTarget_withObject _ ("queryController", self, None) ..?

[...]

básicamente todo lo que quiero hacer es escribir aplicaciones Cocoa sin tener que aprender ObjC.

Aunque Estoy básicamente de acuerdo con la respuesta del Soeren, me gustaría llevarlo aún más lejos:

Será un largo tiempo, si alguna vez, antes de poder utilizar cacao sin una cierta comprensión del objetivo ISN C. Cacao No es una abstracción construida independientemente del Objetivo C, está explícitamente ligada a ella. Esto se puede ver en la línea de ejemplo de código que ha citado anteriormente:

NSThread.detachNewThreadSelector_toTarget_withObject_("queryController", self, None) 

Esta es la forma en Python de escribir la línea C Objetivo:

[NSThread detachNewThreadSelector:@selector(queryController:) toTarget:self withObject:nil]; 

Ahora, es importante notar aquí que esta línea se puede ver de dos maneras: (1) como una línea del objetivo C, o (2) como una invocación de los marcos del cacao. Lo vemos como (1) por la sintaxis. Lo vemos como (2) al reconocer que NSThread es un marco Cocoa que proporciona un conjunto de características útiles. En este caso, este marco de trabajo de Cocoa en particular nos facilita tener un objeto que comience a hacer algo en un nuevo hilo.

Pero el truco es este: el marco de Cocoa aquí (NSThread) nos proporciona este práctico servicio de una manera que está explícitamente ligada al lenguaje en el que se ha escrito el marco. A saber, NSThread nos dio una característica que se refiere explícitamente a "selectores". Los selectores son, de hecho, el nombre de algo fundamental sobre cómo funciona el Objetivo C.

Así que ahí está el problema. El cacao es fundamentalmente una creación de Objective-C, y sus creadores lo han construido con Objective C en mente. No pretendo que sea imposible traducir la interfaz a las funciones de Cocoa en una forma más natural para otros idiomas. Es solo que tan pronto como cambias el marco de trabajo de Cocoa para dejar de referirse a "selectores", ya no es realmente el marco de trabajo de Cocoa. Es una versión traducida. Y una vez que empiezas a ir por ese camino, supongo que las cosas se ponen realmente desordenadas. Intentas mantener el ritmo de Apple mientras actualizan Cocoa, tal vez tocas algunas partes de Cocoa que simplemente no se traducen bien en el nuevo idioma, lo que sea. Entonces, en cambio, cosas como PyObjC optan por exponer Cocoa directamente, de una manera que tiene una correlación muy clara y simple. Como se dice en la documentación:

Con el fin de tener una traducción sin pérdidas y sin ambigüedades entre los mensajes de Objective-C y los métodos de Python, el nombre del método equivalente Python es simplemente el selector con dos puntos reemplazados por guiones.

Claro, es un poco feo, y significa que necesitas saber algo sobre Objective-C, pero eso es porque la alternativa, si es que existe, no es necesariamente mejor.

21

Para ser franco:

Si quieres ser un programador de cacao efectiva, usted debe aprender Objective-C. Fin de la historia.

Ni Python ni Ruby son un sustituto de Objective-C a través de sus respectivos puentes. Aún debe comprender las API de Objective-C, los comportamientos inherentes a las clases derivadas de NSObject y muchos otros detalles de Cocoa.

PyObjC y RubyCocoa son una excelente forma de acceder a la funcionalidad de Python o Ruby desde una aplicación Cocoa, incluida la construcción de una aplicación Cocoa sobre todo, si no del todo, en Python o Ruby. Pero el éxito se basa en una comprensión exhaustiva de Cocoa y las API de Objective-C de las que está compuesta.

4

No sabía nada sobre Objective C o Cocoa (pero sí mucho sobre Python), pero ahora estoy escribiendo una aplicación bastante compleja en PyObjc. ¿Cómo aprendí? Recogí Cocoa Programming for OSX y revisé todo el libro (un proceso bastante rápido) usando PyObjC. Simplemente ignore todo lo relacionado con la gestión de la memoria y prácticamente estará bien. La única salvedad es que muy de vez en cuando tiene que usar un decorador como endSheetMethod (en realidad creo que esa es la única que me he golpeado):

@PyObjcTools.AppHelper.endSheetMethod 
def alertEnded_code_context_(self, alert, choice, context): 
    pass 
28

La razón principal de la falta de documentación para PyObjC es que hay un desarrollador (yo), y como la mayoría de los desarrolladores, no me gusta particularmente escribir documentación. Como PyObjC es un proyecto paralelo para mí, tiendo a centrarme en trabajar en funciones y correcciones de errores, porque eso es más interesante para mí.

La mejor manera de mejorar la documentación es ofrecerse de voluntario para ayudar en la lista de correo de pyobjc-dev.

Como nota aparte: la lista de correo de pythonmac-sig (ver google) es un excelente recurso para obtener ayuda en Python en MacOSX (no solo en PyObjC).