Slashdot Mirror


Write Pure Python Cocoa Apps

bbum writes "Today, Ronald Oussoren and I patched the PyObjC (PythonObj-C) bridge to allow for completely standalone Cocoa applications that are implemented in Python. My 11-Oct-2002 weblog entries provide more detail and includes a link to a PyObjC Cocoa app that can be downloaded and hacked upon (with the app, you can actually create other apps without using the dev tools at all!). As the days pass, I'll be updating the 'blog with new software, updates, etc. A Fink package will be submitted shortly. (In reality -- Ronald did the hard stuff in that he figured out how to subclass ObjC classes in Python!!)" Nifty. Note there is also a PerlObjCBridge module included with Jaguar, and there's also CamelBones for Perl-Cocoa; what other scripting frameworks for Mac OS X are out there?

30 comments

  1. When.. by zulux · · Score: 2, Funny

    ...is sombody going to let me do this with Forth?

    --

    Moneyed corporations, non-working 'poor' and criminal prisoners are turning productive citizens into tax-slaves.

    1. Re:When.. by Raskolnk · · Score: 2

      Yes... you are. Get to work.

      --
      Don't blame me, I get all my opinions from my Ouija board.
    2. Re:When.. by Anonymous Coward · · Score: 0

      Have you heard of Mops and/or PowerMops? Its a really good Macintosh specific Forth-based programming language. You're comment about the imprisoned and poor is incredibly stupid. Fact is that morons like you are taking up jobs that could be going to better, more deserving workers- your not a wage-slave, your a brainwashed sucker

  2. Perl-Cocoa... by 3-State+Bit · · Score: 2

    Sorry, I'm not very up on my Mac development...Does this mean TK apps will magically be sourcelevel cocoa-fied?

    1. Re:Perl-Cocoa... by anarkhos · · Score: 1

      No.

      Furthermore, never.

      Tk doesn't have the abstraction to allow Tk apps to magically behave like Mac apps. You can make them LOOK like Aqua, but that creates the worst possible combination.

      Perhaps this could be used to replace Tk. Non-OS X versions could use GNUStep.

      --
      >80 column hard wrapped e-mail is not a sign of intelligent
      >life
  3. Yeah, good, but ... by Trusty+Penfold · · Score: 3, Insightful

    ... why couldn't you write apps in Python before?

    What on earth is the point of a programming language that you can't write apps in???

    There are lots of these "WoW! Now you can use Programming Language X to do Y", but isn't the whole point of programming languages that you can do anything you want with them?

  4. If I understand correctly... by Big+Sean+O · · Score: 3, Interesting

    You will be able to write apps in Python (or Perl) and be able to use the Cocoa framework to make stand-alone apps.

    This is different than porting the Tk GUI to Aqua. I know this also is being done for Python.

    I would eventually like both.

    --
    My father is a blogger.
  5. Re:Yeah, good, but ... by Raskolnk · · Score: 5, Informative

    Sheesh, for a minute I thought you were kidding, but I guess not.

    Yes, many languages are very powerful and allow you to do many things, but just because a language exists doesn't mean it magically includes support for everything -- including things that didn't exist at the time the language was created.

    Generally, a language has a core set functionality that only provides a framework to build applications. Most languages then have a standard set of libraries implementing common functionality, and extended libraries implementing features outside the spec of the core and common APIs.

    Anyway, Cocoa isn't written in Python, so you can't just use it from Python without an interface into the Cocoa framework. So, someone has provided an interface to Cocoa. Its not that Python was semantically unable to work with Cocoa, but that the mechanism didn't exist.

    You should try something other than Visual Basic, maybe you'd learn about how software really works. :-)

    --
    Don't blame me, I get all my opinions from my Ouija board.
  6. It is obvious what must be done now. by rfsayre · · Score: 2

    PySoulseek must be made to run this way.

  7. Clarification by bbum · · Score: 5, Informative

    From reading the threads, let me respond with a bit of clarification.

    This is really only of interest to Python programmers that want to leverage Cocoa or ObjC [including Cocoa] programmers that want to leverage the power of Python.

    It is not intended to be used as a cross platform solution.

    In context, it happens to be extremely powerful. The ability to subclass and extend ObjC classes with Python means that one can build Cocoa applications that can have their classes reloaded and redefined on the fly. I.e. it can greatly reduce the "run-compile" part of the "run-compile-edit" loop that developers tend to be stuck in.

    Furthermore, having access to the power of Python from Cocoa greatly reduces the # of lines of code necessary to perform certain tasks. The Python libraries provide great, easy to use, HTTP client/server solutions, excellent XML-RPC support and a slew of other features that are damned handy to have around.

    The real value of the PyObjC module-- and credit largely goes to Ronald for this-- is the transparency with which one can interact between languages. This isn't just a messaging solution (like CamelBones). PyObjC provides the developer with the ability to subclass ObjC classes from Python and-- if one really wanted to go there-- subclass Python subclasses of ObjC classes in ObjC.

    As well, PyObjC tends to be a bit more straightforward in terms of integration than AppleScript Studio.

    Think of it this way: PyObjC allows the developer to quickly and easily prototype applications in a scripting language [Python] while not sacrificing any of the awesome power of Cocoa [and awesome it is!].

    1. Re:Clarification by rfsayre · · Score: 2

      The ability to subclass and extend ObjC classes with Python means that one can build Cocoa applications that can have their classes reloaded and redefined on the fly. I.e. it can greatly reduce the "run-compile" part of the "run-compile-edit" loop that developers tend to be stuck in.

      Correct me if I'm wrong, but doesn't Objective-C allow this as well? Or is it similar, but not quite the same?

      It goes with out saying that it is very very cool to have the ability to take existing Python code and make it work with a Cocoa GUI.

    2. Re:Clarification by bbum · · Score: 5, Informative

      Well, sure, you have always been able to subclass ObjC classes from ObjC... :-)

      The key difference is that doing so in Python doesn't require recompilation and relinking the app (it currently requires relaunching the app, but that is an artificial barrier).

      The key advantage is that one can often implement functionality in Python much more rapidly than pure ObjC simply because of the reduction in number of lines of code and the greater degree of abstraction offered by Python.

      Even with a pure ObjC Cocoa app, PyObjC can be mixed in to provide a level of scriptability that isn't available in other solutions. Specifically, because Python provides a completely transparent interface between ObjC and Python, an entire application becomes scriptable simply by including PyObjC.

    3. Re:Clarification by rfsayre · · Score: 2

      The key difference is that doing so in Python doesn't require recompilation and relinking the app (it currently requires relaunching the app, but that is an artificial barrier).

      See, I thought you could even add Objective-C classes while the program was running, as it's totally dynamic.

      As for the productivity gains python creates, I think that's a pretty well known advantage. woohoo python!

    4. Re:Clarification by Anonymous Coward · · Score: 0

      You can, but you need to have a plug-in type facility to link in that code dynamically.. but you'll always have to compile any code you want to link in.

    5. Re:Clarification by bbum · · Score: 4, Interesting

      See, I thought you could even add Objective-C classes while the program was running, as it's totally dynamic.

      Oh -- certainly -- you can always load a bundle. However, redefining existing classes has always been somewhat limited because of the way ObjC is implemented. Not a criticism of the language-- just the nature of its implementation.

      With the Python stuff, it is much easier to effectively redefine everything about a class. This isn't 100% considered within the current implementation, but the potential is there.

    6. Re:Clarification by anarkhos · · Score: 2

      It could be a multi-platform solution if a similar bridge worked with GNUStep.

      --
      >80 column hard wrapped e-mail is not a sign of intelligent
      >life
    7. Re:Clarification by bbum · · Score: 3, Informative

      It could be a multi-platform solution if a similar bridge worked with GNUStep.

      The bridge was originally written to support the GNUStep runtime. However, support for GNUStep fell out of the current version because none of the active developers are using GNUStep regularly.

      The bridge is modular in nature -- there are Foundation and AppKit modules that sit on top of the objc chunk.

      It would be a matter of making the objc module portable, then converting AppKit and Foundation to do a similar kind of cross platform support as, say, the os.path module in Python.

  8. Re:Who cares? by sco08y · · Score: 2, Interesting

    Actually, you can use that as an advantage. Often times employers will ask you to write a "prototype" and then when it's done, they fire you and hire some monkeys to do upgrades.

    If you do prototyping in python and Cocoa, you can be sure that won't happen.

  9. Re:Yeah, good, but ... by Ster · · Score: 2, Informative

    You could write apps in Python, but they wouldn't be able to access the Cocoa frameworks. Now Python can be used to create apps that can have native GUIs, use Cocoa classes and collections, use OS X Services, etc.

    Programing languages CAN be used to do (almost) anything, but they're not all DESIGNED to to everything. If you really want to, you can create a complete GUI app with just assembly language. But it would be infinitely easier to use a higher-level language like Python, Objective C, Java, etc. FORTRAN was designed for mathematically intense code, while Perl was designed for extraction and reporting; you wouldn't want to write (for example) engineering simulation code in Perl, or Slashcode in FORTRAN.

    -Ster

  10. RubyCocoa by Canyon+Rat · · Score: 2, Informative

    What other scripting frameworks for Mac OS X are out there? Well there is a very nice one here.

  11. Re:Who cares? by occam · · Score: 3, Insightful

    Wow.

    >>Combine the following:
    >>Unpopular language: phython
    >>Unpopular API: Cocoa
    >>Result: a going-nowhere application

    Then add some selfish unprofessionalism:
    >Actually, you can use that as an advantage. Often
    >times employers will ask you to write a "prototype" and
    >then when it's done, they fire you and hire some
    >monkeys to do upgrades.
    >If you do prototyping in python and Cocoa, you can be
    >sure that won't happen.

    And you get the most godawful excuse to use two of the best new technologies on the planet. Yikes, what a stinker rationale that is. I hate the whole job security attitude. It has loused more promising projects than I care to think about, and has killed many a promising engineers career with apathy and defensive posturing. Once you start thinking in terms of job security, kiss your career and your projects successes goodbye.

    What ever happened to using technologies which work well or have the advantage of rapid prototyping? Python and Cocoa both have reputations for being high leverage and powerful without forgoing speed when needed. Isn't that good enough to warrant their use?

    Please! Keep job security arguments away from language choice and design decisions.

  12. Re:Yeah, good, but ... by bdash · · Score: 2, Interesting

    In the context of the article, an Application is a program that runs, has a native GUI, and has an icon in the dock. This has previously not been possible to do with Python under Mac OS X, without 3rd party toolkits such as wxWindows/wxPython.

  13. great news! by Panix · · Score: 5, Interesting

    This is absolutely excellent news! I downloaded this the second I read the article, and I have been playing with it for a few hours now. It works almost flawlessly. The only thing that could really make this better is if Apple picked it up and integrated Python as a first class citizen along with Java and Objective-C in Interface Builder and Project Builder.

    People may ask "what's the point?" Well, for starters, Python is absolutely fantastic for building things quickly, especially for complex object or data structures that would take much more time to implement in Objective-C or Java.

    On top of this, Python is much better suited for Cocoa than Java! Apple implemented the Java-Cocoa bridge mostly for the sake of having Java be a "supported language." But, since Java is inflexible and strongly typed, it doesn't really fit into the Objective-C model that Cocoa relies on. Python on the other hand is perfectly suited for Cocoa. Python is weakly typed and can handle the dynamic runtime of Cocoa a lot better than a language like Java.

    In addition to this, Python's runtime is much more compact than Javas, and manages to load much more quickly. Just fire up Terminal.app and type "python" ... you will see the interactive Python interpreter fire up within a second. Its an amazing little language =)

    I am very excited about the potential of this Python/Cocoa implementation! In the first hour or so since I installed this, I was able to take an existing Python backend and add a quick Cocoa frontend, using nothing but the standard OS X Development Tools.

    Kudos to the great people who developed this!

    1. Re:great news! by anarkhos · · Score: 1

      So do you do this within PB? What about syntax coding? (BBEdit might support python, my fav. text editor)

      What about mixing with 3rd party ObjC classes?

      I've had no interest in Python until now.

      Maybe a TOM bridge is next. I could almost giggle.

      --
      >80 column hard wrapped e-mail is not a sign of intelligent
      >life
    2. Re:great news! by Panix · · Score: 4, Informative

      Yep, you can code everything inside Project Builder. You create your interface, connections, and outlets in Interface Builder.

      There is no syntax highlighting for Python in project builder just yet, but I am sure that some creative person can make that happen soon enough. Apple might even implement it if they like the idea of a Python/Cocoa integration.

      Can you mix with 3rd Party ObjC classes? I am pretty sure that you can, since this is a Python/Obj-C bridge. I haven't tried it myself, but I am pretty sure that its possible.

      The best thing is actually interfacing your Objective-C objects with native Python objects. Create a complex Python data structure, full of lists, objects, tuples, and dictionaries, and then you can use it as the model (MVC) for your application in Cocoa!

      You've had no interest in Python? Well, head over to http://www.python.org, and click on the tutorial. Its a great little language, its shipped by default with OS X 10.2, and its trivially easy to learn.

  14. Apple Laptop Keyboards Unsuitable for Unix Users by Anonymous Coward · · Score: 0

    Apple laptops are effectively unusable for unix users.

    I am a long-time Unix user. That means I need to have the Ctrl key to the left of the A key. This is a genuine need, not merely a want; it is based upon ergonomics. The Ctrl key is heavily used in unix, and it must be easily accessable. It cannot be off in the lower left corner of the keyboard where it is difficult to get at, and where it distorts the position of your left hand such that you can't easily type other keys while holding the Ctrl key down.

    Apple desktop keyboards are now all USB. They are all OK. The CapsLock key can be re-mapped into a Ctrl key.

    Unfortunately, even in this modern age, all Apple laptops have built-in ADB keyboards. The ADB keyboard is broken-by-design. It is, in general, not possible to remap the CapsLock key into a Ctrl key.

    There are some exceptions, but they are horrible kludges. They are horrible kludges because the original design of the ADB keyboard was a horrible kludge. The correct solution would be for Apple to re-design their laptop motherboards to use built-in USB keyboards. This hasn't happened yet. If you run Linux, use Debian's solution. For Mac OS X users, uControl works. There are no solutions (that I know of) for either NetBSD or OpenBSD. Please note once again that the "solutions" above are in fact kludges, because of the original bad design of the ADB keyboard.

    Apple is (currently) ignoring Unix users! This is not merely speculation on my part. In an on-going email exchange I am having with an Apple employee (whom I won't name) in their marketing department, the Apple marketing person directly stated to me that Apple was catering to their historic Mac customers, and is purposely ignoring the Unix market. He also claimed that Apple would soon start paying more attention to the Unix market. I won't hold my breath. Apple has been ignoring Unix users for more than 12 years. I expect that trend to continue. (Also note that my Apple contact indicated that Macs would never ship with a 3-button mouse, even though Apple intended to port almost all X-window software and deliver it either on a CD/DVD or installed directly on each Mac's hard drive. How Unix friendly is a 1-button mouse with X programs that often require 3 buttons?)

    Apple has now lost two opportunities to sell me hardware. I really wanted an Apple laptop for their superior battery life, and for the PowerPC with Altivec CPU. (The Altivec is vastly superior to the x86 line for DSP.) Because I can't live with the broken-by-design built-in ADB keyboard in all Apple laptops, Sony and IBM sold me laptops instead. If Apple fixes this problem, they will sell me a PowerBook next year; if they don't, I'll still be running OpenBSD on x86 hardware, and wishing I could use a Mac.