Jython: Python para la plataforma Java (JRSL 09)

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Jython: Python para la plataforma Java (JRSL 09) - Presentation Transcript

    1. Python para la Plataforma Java Leo Soto M. Jornadas Regionales del Software Libre 2009
    2. Avisos Comerciales...
    3. Python para la plataforma Java
    4. ¿Plataforma Java sin Java?
    5. http://www.flickr.com/photos/lab2112/457187539/
    6. Plataforma Java con Java y Python, Ruby, Scala, Groovy...
    7. ¿Por qué Python?
    8. “Python is an experiment in how much freedom programmers need...”
    9. “...Too much freedom and nobody can read another's code; too little and expressiveness is endangered” - Guido van Rossum, 1996
    10. Python Dinámico, flexible, extremadamente legible
    11. Jython Dinámico, flexible, extremadamente legible En una plataforma ubicua, sólida
    12. http://www.flickr.com/photos/mushon/282287572/
    13. 1997
    14. Jython!
    15. Jython, 12 años después http://www.flickr.com/photos/digital-noise/3650559857/
    16. 2.5.1
    17. Full compatibilidad con CPython
    18. web2py etree nose setuptools virtualenv
    19. OK
    20. ¿Pero qué puedo hacer con Jython hoy?
    21. GUIs
    22. Demo con Swing
    23. De Java a Jython
    24. final JFrame frame = new JFrame("HelloSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300,300);
    25. frame = JFrame("HelloSwing") frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) frame.setSize(300,300)
    26. frame = JFrame("HelloSwing", defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(300, 300))
    27. Container content = frame.getContentPane(); content.setLayout(new FlowLayout());
    28. content = frame.contentPane content.setLayout(new FlowLayout());
    29. content = frame.contentPane content.layout = FlowLayout()
    30. JButton botonSaludar = new JButton("Saludar"); JButton botonDespedir = new JButton("Despedirse"); botonSaludar.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "Hola!"); } }); botonDespedir.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "Chao!"); frame.dispose(); } }); content.add(botonSaludar); content.add(botonDespedir);
    31. def saludar(event): JOptionPane.showMessageDialog(frame, "Hola!") def despedir(event): JOptionPane.showMessageDialog(frame, "Chao!") frame.dispose() content.add(JButton("Saludar", actionPerformed=saludar)) content.add(JButton("Despedirse", actionPerformed=despedir))
    32. Otra demo con Swing (Si es que tenemos acceso a internet)
    33. Créditos: Frank Wierzbicki
    34. Web
    35. Demo con Django
    36. Y sólo por diversión...
    37. ### View #!/usr/bin/env python from django import http """ from django.template import Template, Context WSW - the World's Shittiest Wiki. """ def wsw(request, title): import re title = urllib.unquote_plus(title) if title else "Home" import urllib p, created = Page.objects.get_or_create(title=title) from django.conf import settings form = PageForm(instance=p) if request.method == "POST": ### Config form = PageForm(request.POST, instance=p) settings.configure( form.save() DEBUG = True, return http.HttpResponseRedirect(request.get_full_path()) DATABASE_ENGINE = "doj.backends.zxjdbc.postgresql", else: DATABASE_NAME = "wsw", form = PageForm(instance=p) DATABASE_USER = "wsw", t = Template("""<h1>{{ p.title }}</h1><ul>{% for p in DATABASE_PASSWORD = "wsw", allpages %}<li><a href="{{ p }}">{{ p }}</a></li>{% endfor %} ROOT_URLCONF = __name__) </ul><form action="{{ request.get_full_path }}" method="POST"> <p>{{ form.content }}</p><input type="submit"></form>""") ### Model wikiwords = re.findall( from django.db import models '[A-Z][a-z]+[A-Z][a-z]+(?:[A-Z][a-z]+)*', p.content) allpages = [ class Page(models.Model): page.title for page in Page.objects.order_by('title')] title = models.CharField(max_length=300, allpages.extend( primary_key=True) word for word in wikiwords if word not in allpages) content = models.TextField() return http.HttpResponse(t.render(Context(locals()))) class Meta: ### Main app_label = "wsw" if __name__ == '__main__': from django.core import management ### URLs from django.db import connection from django.conf.urls.defaults import * from django.core.management.color import no_style cursor = connection.cursor() urlpatterns = patterns(__name__, ('(.*)', 'wsw')) statements, _ = connection.creation.sql_create_model( Page, no_style()) ### Form try: from django.forms import ModelForm for sql in statements: cursor.execute(sql) class PageForm(ModelForm): connection.connection.commit() class Meta: except: model = Page pass fields = ['content'] management.call_command('runserver')
    38. Créditos: Jacob Kaplan-Moss
    39. Testing http://www.flickr.com/photos/emotionaltoothpaste/26034597/
    40. DocTests
    41. def factorial(n): It must also not be ridiculously large: """Return the factorial of n, an >>> factorial(1e100) exact integer >= 0. Traceback (most recent call last): ... If the result is small enough to OverflowError: n too large fit in an int, return an int. """ Else return a long. import math >>> [factorial(n) if not n >= 0: ... for n in range(6)] raise ValueError("n must be >= 0") [1, 1, 2, 6, 24, 120] if math.floor(n) != n: >>> [factorial(long(n)) raise ValueError( ... for n in range(6)] "n must be exact integer") [1, 1, 2, 6, 24, 120] if n+1 == n: # catch a value like 1e300 >>> factorial(30) raise OverflowError("n too large") 265252859812191058636308480000000L result = 1 >>> factorial(30L) factor = 2 265252859812191058636308480000000L while factor <= n: >>> factorial(-1) result *= factor Traceback (most recent call last): factor += 1 ... return result ValueError: n must be >= 0 Factorials of floats are OK, but the float must be an exact integer: >>> factorial(30.1) Traceback (most recent call last): ... ValueError: n must be exact integer >>> factorial(30.0) 265252859812191058636308480000000L
    42. Demo de (ab)uso de DocTest
    43. ¿Por cierto, quien más usa Jython?
    44. EADS http://www.flickr.com/photos/nguyendai/694158734/
    45. Lockheed Martin http://www.flickr.com/photos/rcsj/2504022678/
    46. ¿Y dónde puedo aprender más?
    47. jythonbook.com
    48. ¿Preguntas? Contacto: @leosoto http://blog.leosoto.com
    49. ¡Gracias! Contacto: @leosoto http://blog.leosoto.com

    + leo.sotoleo.soto, 1 month ago

    custom

    454 views, 0 favs, 4 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 454
      • 344 on SlideShare
      • 110 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 4
    Most viewed embeds
    • 64 views on http://blog.leosoto.com
    • 43 views on http://www.chileagil.cl
    • 2 views on http://www.blogger.com
    • 1 views on http://static.slidesharecdn.com

    more

    All embeds
    • 64 views on http://blog.leosoto.com
    • 43 views on http://www.chileagil.cl
    • 2 views on http://www.blogger.com
    • 1 views on http://static.slidesharecdn.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories