Zato 1.0. The next generation ESB and application server. Open-source. In Python.

May 18th, 2013 No comments

(This is a re-post of what I sent to python-announce@ but with several screenshots attached)

I’m very happy to announce the first release of Zato, the next generation ESB and application server, available under a commercial-friendly open-source LGPL license.

https://zato.io

What can you expect out of the box?

  • HTTP, JSON, SOAP, Redis, AMQP, JMS WebSphere MQ, ZeroMQ, FTP, SQL, hot-deployment, job scheduling, statistics, high-availability load balancing and more
  • Incredible productivity with Python
  • Painless rollouts with less downtime
  • Slick web admin GUI, CLI and API
  • Awesome documentation (several hundred A4 pages)
  • 24×7 commercial support and training

Project’s site: https://zato.io
Download: https://zato.io/download/zato-1.0.tar.bz2
Support: https://zato.io/support
Docs: https://zato.io/docs
Architecture: https://zato.io/docs/architecture/overview.html
Tutorial: https://zato.io/docs/tutorial/01.html
GitHub: https://github.com/zatosource
Mailing list: https://mailman-mail5.webfaction.com/listinfo/zato-discuss
IRC: irc://irc.freenode.net/zato
Twitter: https://twitter.com/zatosource
LinkedIn: https://www.linkedin.com/groups?gid=5015554
Diversity statement: https://zato.io/docs/project/diversity.html

Spread the news and enjoy :-)

Cheers!

 

 

 

 

 

 

 

@fourthrealm

Share

Why don’t you connect with Cthulhu today?

March 1st, 2013 Comments off
Categories: Non-Software Tags:

Found a Python message in a bottle

February 17th, 2013 Comments off

One of the interesting search terms one can find at http://docs.python.org/webstats/search_201208.html is ‘python style guide do not assume readers are stupid‘.

This is a good hint and I’ve just realized this is more than that – it’s a message in a bottle!

This term is a message, search statistics are a bottle and the Internet is the ocean.

It took less than a year for the message to arrive in a place where I could see it and I don’t know you, o anonymous programmer, but I salute you!

Even though I’m not a core Python developer nor I agree the style guide actually makes any, I will heed your advice seriously and will never make such assumptions myself! :-)

@fourthrealm

Share
Categories: Software Tags: ,

Can you sponsor PyMQI 1.3? (Python and WebSphere MQ interface)

February 7th, 2013 Comments off

Hi there,

is there anyone who’d like to sponsor the next release of PyMQI? PyMQI is the Python
interface to WebSphere MQ (WMQ). WMQ is to AMQP what Oracle is to PostgreSQL.

I’ve been swamped with other work recently and just can’t find enough time to
release PyMQI 1.3. That said, I estimate that 5 man-days are needed for that to
happen and if there’s anyone who could hire me for such a short-term contract,
I’m sure it would be to everyone’s benefit.

I know PyMQI has been used all around the world in many banks, telcos, brokerage
houses, insurance companies, consulting corporations and pretty much every
other place you can find WebSphere MQ in so I guess 5 days shouldn’t really sound too much.

In particular, this is what would be delivered:

- Support for WMQ 7.1 and 7.5
- Windows binaries WMQ 7.x, Python 2.6/2.7, 32/64 bit

I believe this should allow for any company using Python and WebSphere MQ to
be safe PyMQI will be in a sane state for at least a year, possibly more.

Contact me at dsuch at gefira.pl so we can talk all the details.

Please, retweet and re-post this message. Many thanks! :-)

@fourthrealm

Share
Categories: Software Tags: , ,

Looking for a Redis lock Python package

November 29th, 2012 3 comments

Does anyone know of a Python package implementing the algorithm described over at http://redis.io/commands/setnx as the safe one? The one using both SETNX and GETSET?

I can see there are other implementations on PyPI but none seems to be doing what Redis documentation says is the recommended way.

Cheers!

@fourthrealm

Share
Categories: Software Tags: , ,

Suds and soda

November 28th, 2012 Comments off

I’ve recently stumbled upon a tweet which noted that such and such dev conference needed “25000 soda bottles, 8800 ‘croissants’, 8150 lunches, 1500 yogurt, 690L beer, 500L coffee and 5 cups of tea”.

Can you imagine the difference? 25,000 bottles of soda vs. 5 cups of tea. All told, this is how much resources wasted in terms of money? $50,000?

Does anyone doing such things understand how many people live on less than $1.25 per day?

In case you didn’t know it, here is how it looks like

Now you know.

@fourthrealm

Share
Categories: Non-Software Tags:

Notes on validating Shibboleth2 SAML2 responses with xmlsec1

September 4th, 2012 Comments off

Some quick notes regarding Shibboleth SAML2 responses and xmlsec1 with regards to signature validation.

If it fails with func=xmlSecXPathDataExecute:file=xpath.c:line=273:obj=unknown:
subj=xmlXPtrEval:error=5:libxml2 library function failed:expr=xpointer(id(‘_547ae2b585394b5a9650e76fa1bb11f7′))
it means that xmlsec1 can’t find the ID attribute.

Solution – use the –id-attr option, like here

$ xmlsec1 verify --id-attr:ID "urn:oasis:names:tc:SAML:2.0:protocol:Response"  
--pubkey-cert-pem /foo/idp.crt /foo/encrypted.xml

If it still fails with error=12:invalid data:data and digest do not match it means you aren’t verifying the very same XML document Shibboleth has sent across. Now, this can be tricky – you must validate exactly the same document that was sent over the wire. In all their wisdom, Shibboleth folks decided that what goes to idp-process.log is not the same that an SP will receive (doh!) so if you’re trying to copy’n'paste a document from Shibboleth’s logs and validate it using xmlsec1 it will fail. What goes to logs is pretty-printed for an easier reading (which is cool) but that also means xmlsec1 will fail with the validation error. You must catch the very same string sent over to the SP and this one will validate. Promise :-)

@fourthrealm

Share
Categories: Software Tags: , , , ,

JMS Messaging with Spring Python and WebSphere MQ (did you know about it?)

August 20th, 2012 Comments off

Did you know you could easily exchange JMS messages using Spring Python and WebSphere MQ? This all being completely transparent to the other side of course. No one will know it’s a Python application speaking this end though truth to be told, maybe it’s high time all the bloated stacks should be done away with and more people started using smarter tools? :?

In any case, is there an interest in my writing more about it in addition to the comprehensive documentation available over at the project’s site?

# -*- coding: utf-8 -*-
 
from springpython.jms.core import JmsTemplate
from springpython.jms.factory import WebSphereMQConnectionFactory
 
qm_name = 'QM01'
channel = 'SVRCONN.1'
host = '127.0.0.1'
listener_port = '1434'
queue1 = 'TEST.1'
 
# The connection factory we're going to use
factory = WebSphereMQConnectionFactory(qm_name, channel, host, listener_port)
 
# Every JmsTemplate uses a connection factory for actually communicating with a JMS provider
jms_template = JmsTemplate(factory)
 
# And that's it, now we put the mandatory 'Hello world' message on a queue
jms_template.send('Hello world', queue1)
 
# We're not using an Inversion of Control container so we must shut the connection factory down ourselves
factory.destroy()

@fourthrealm

Share

Fun with pytz, dateutil and Python time zones

August 15th, 2012 Comments off

Below is a way to convert datetime strings between time zones. Note that in my case I had to convert between UTC and a user-provided time zone and back. I was given either a UTC timestamp and had to find the user’s local date and time or a pair of strings, one for the user’s local time and another one for their time zone, out of which a UTC had to be constructed.

dateutil can be found over here and here is pytz. Enjoy! :-)

# -*- coding: utf-8 -*-
 
# stdlib
from datetime import datetime
 
# dateutil
from dateutil.parser import parse
 
# pytz
import pytz
 
def from_local_to_utc(dt, tz_name):
    """ What is the UTC time given the local time and the time zone's name?
    """
    if not isinstance(dt, datetime):
        dt = parse(dt)
 
    dt = pytz.timezone(tz_name).localize(dt)
    utc_dt = pytz.utc.normalize(dt.astimezone(pytz.utc))
    return utc_dt.isoformat()
 
def from_utc_to_local(dt, tz_name):
    """ What is the local time in the user-provided time zone name?
    """
    if not isinstance(dt, datetime):
        dt = parse(dt)
 
    local_tz = pytz.timezone(tz_name)
    dt = local_tz.normalize(dt.astimezone(local_tz))
    return dt
 
utc_time = '2012-08-15T15:21:33+00:00'
local_time = '2013-01-14T12:24:19'
local_tz = 'Europe/Vienna'
 
print('UTC time {} in the local {} time zone  is {}'.format(
    utc_time, local_tz, from_utc_to_local(utc_time, local_tz)))
 
print('Local time {} in the {} time zone is {} UTC'.format(
    local_time, local_tz, from_local_to_utc(local_time, local_tz)))

@fourthrealm

Share
Categories: Software Tags: , ,

A poster great many developers should hang on the wall right before their eyes

July 9th, 2012 Comments off

As spotted over at LWN.net -  inspired me to create this poster many software developers should just stare at all the time. Well, at least until the somewhat sad realization becomes obvious. KTHXBYE!

@fourthrealm

Share
Categories: Software Tags: