tryexceptpasshttps://tryexceptpass.org/
Recent content on tryexceptpassHugo -- gohugo.ioMon, 31 Dec 2018 00:00:00 -0500Integrating Pytest Results with GitHubhttps://tryexceptpass.org/article/pytest-github-integration/
Mon, 31 Dec 2018 00:00:00 -0500https://tryexceptpass.org/article/pytest-github-integration/<p>When joining a new engineering team, one of the first things I do is familiarize myself with the dev and test processes. Especially the tools used to enforce them. In the past 5 years or so, I&rsquo;ve noticed that a lot of organizations still use older tools that haven&rsquo;t yet evolved to support modern practices. Even teams that purely develop software can find themselves working around cumbersome systems that hinder instead of enable.</p>
<p>What do I mean by that? Very few of these tools include useful interfaces to leverage integrations with other systems (like REST APIs). Most have no concept of modern dev practices like continuous integration or containerization. Almost all of them want to record pass / fail at a step by step basis as if you&rsquo;re executing manually. The vast majority are built around a separation between test and dev (some even emphasize it). And a lot of them require the organization to hire &ldquo;specialists&rdquo; for the purpose of &ldquo;customizing&rdquo; the tool to the team. In my opinion, these types of systems coerce the organization to emphasize blame over quality and team boundaries over productivity.</p>
<p>I&rsquo;ve been very successful at building long-lived alternatives to these systems in several organizations. I&rsquo;ve done it enough to know which features are worth including, and which to leave to the test / dev engineers, especially after the advent of continuous integration and delivery.</p>
<p></p>Practicality Beats Purity - Pure SQL vs ORMshttps://tryexceptpass.org/article/practicality-beats-purity-4/
Thu, 01 Nov 2018 00:00:00 -0400https://tryexceptpass.org/article/practicality-beats-purity-4/<p>I&rsquo;ve been using some form of a database throughout the entirety of my career. Sometimes single-file databases, sometimes full servers. Sometimes testing them, sometimes designing them, but a lot of times I was optimizing them. Even when learning programming with my dad, most of the apps I built were about storing and managing some type of data.</p>
<p>With all those years of experience, I definitely understand enough to know that I&rsquo;m by no means an expert at any of it. There are several (an understatement) mechanisms by which folks make the best use of their database servers, almost all of them are tradeoffs in memory usage, space, look-up times, results retrieval, backup mechanisms, etc.</p>
<p>As expected, each database mechanism has their own quirks and optimizations, but the common theme is the language which you use to retrieve information: Structured Query Language (SQL). Different database engines implement different extensions to this language, some of which add powerful functionality, some of which just add confusion. But in general, SQL has been very successful in standardization across the industry.</p>
<p>This next chapter in the <a href="https://tryexceptpass.org/article/practicality-beats-purity-1">Practicality Beats Purity</a> series covers the tradeoffs when using direct SQL queries to a database vs programming language abstractions that do it for you, like ORMs.</p>
<p></p>PyBites: How Promotions work in Large Corporationshttps://tryexceptpass.org/link/pybites/
Wed, 15 Aug 2018 00:00:00 -0400https://tryexceptpass.org/link/pybites/A collaboration with Bob and Julian from PyBites on soft skills.Asyncio in Python 3.7https://tryexceptpass.org/article/asyncio-in-37/
Sun, 22 Jul 2018 00:00:00 -0400https://tryexceptpass.org/article/asyncio-in-37/<p>The release of Python 3.7 introduced a number of changes into the async world. There are a lot of quality-of-life improvements, some affect compatibility across versions and some are new features to help manage concurrency better. This article will go over the changes, their implications and the things you&rsquo;ll want to watch out for if you&rsquo;re a maintainer. Some may even affect you even if you don&rsquo;t use asyncio.</p>
<p></p>Python Bytes Episode 83: from __future__ import braceshttps://tryexceptpass.org/audio/python-bytes/
Fri, 22 Jun 2018 00:00:00 -0400https://tryexceptpass.org/audio/python-bytes/Brian Okken and Michael Kennedy had me on as a special guest this week at Python Bytes. We discussed some recent python headlines: Code with Mu, Python parenthesis primer, Python for Qt Released, Itertools in Python 3, Python Sets and Set Theory, Python 3.7 coming soon!TalkPython Episode 166 - Continuous Delivery with Pythonhttps://tryexceptpass.org/audio/talk-python/
Mon, 11 Jun 2018 00:00:00 -0400https://tryexceptpass.org/audio/talk-python/Michael Kennedy from the TalkPython podcast was kinda enough to have me on the show to discuss continuous delivery and continuous integration with python. We go over different the different workflows, tooling and python modules that can help get things going.General Data Protection Regulationhttps://tryexceptpass.org/article/gdpr/
Mon, 21 May 2018 00:00:00 -0400https://tryexceptpass.org/article/gdpr/Ying Li&rsquo;s PyCon2018 keynote discussed the importance of writing secure software, and the responsibility that we, as developers, have in keeping users safe. While watching, it occurred to me that I haven&rsquo;t written about the new European Union laws that stem from the General Data Protection Regulation (GDPR) that goes into effect this month.
I was involved in several conversations on this topic lately, so here&rsquo;s some information on the rules, their implications and responses from businesses, and the reactions as the rest of the world tries to implement similar systems.Practicality Beats Purity - Microservices vs Monolithshttps://tryexceptpass.org/article/practicality-beats-purity-3/
Thu, 10 May 2018 00:00:00 -0400https://tryexceptpass.org/article/practicality-beats-purity-3/<p>In recent years there’s a growing trend to move away from large <em>all-in-one</em> applications. These &ldquo;monoliths&rdquo;, developed with one codebase and delivered as one large system, are hard to maintain. In their place, the industry now favors splitting-off the component systems into individual services. As separate &ldquo;microservices&rdquo;, they perform the smallest functions possible grouped into logical units. They are independent deliverables, deployable, replaceable and upgradeable on their own.</p>
<p>Going further into the <a href="https://tryexceptpass.org/article/practicality-beats-purity-1">Practicality Beats Purity</a> series, this article will cover the implications of transitioning to a <strong>microservices</strong> architecture.</p>
<p></p>Korv - Asynchronous API Framework over SSHhttps://tryexceptpass.org/code/korv/
Tue, 01 May 2018 00:00:00 -0400https://tryexceptpass.org/code/korv/Korv is an API framework that runs on TCP sockets over SSH sessions using AsyncIO. You can use standard SSH key authentication to execute GET, STORE, UPDATE, DELETE verbs, while handling responses with callbacks. Great for server-to-server communication.Practicality Beats Purity - Modularityhttps://tryexceptpass.org/article/practicality-beats-purity-2/
Sun, 04 Mar 2018 00:00:00 -0400https://tryexceptpass.org/article/practicality-beats-purity-2/<p>Continuing on the <a href="https://tryexceptpass.org/article/practicality-beats-purity-1">Practicality Beats Purity</a> series, today we&rsquo;re talking about <strong>modularity</strong>. While written with python in mind, the discussion here applies to any language that&rsquo;s highly modular and with a large ecosystem.</p>
<p>As is touted frequently, python is quite famous for being a &ldquo;batteries included&rdquo; language with a vast ecosystem of modules and packages that provide almost every possible utility or function you&rsquo;ll ever need. When building large applications, it&rsquo;s a great idea to make use of this environment and not reinvent the wheel. This makes rapid development and prototyping real easy.</p>
<p>However, you must keep in mind that every new dependency added is one more variable that you have little to no control over. While you may not write the code yourself, there&rsquo;s still cost incurred in keeping up with the most recent versions of your dependency and watching for security flaws and their respective fixes. It&rsquo;s also important to pay attention to the size of the community around those dependencies, their interaction with other modules, responsiveness to reported bugs, and the size of supporting documentation both official (like read-the-docs) and unofficial (like stack overflow).</p>
<p>Following we discuss some of the costs.</p>
<p></p>Practicality Beats Purity - Intro and Test Pass Rates Topichttps://tryexceptpass.org/article/practicality-beats-purity-1/
Sat, 17 Feb 2018 00:00:00 -0400https://tryexceptpass.org/article/practicality-beats-purity-1/<p>A few hours later, I find myself sitting in the &ldquo;comforts&rdquo; of my cubicle. The discussion replaying over and over in my head: &ldquo;An interface with this behavior will integrate with most common language libraries, with no special client code&rdquo;, I said. The response was: &ldquo;But then it&rsquo;s not a <em><insert_random_technical_buzzword_here></em> design, and the company already decided that&rsquo;s the route we&rsquo;re taking.&rdquo;</p>
<p>I&rsquo;ve spent many years of my career involved in buzzword dogma discussions. It&rsquo;s present at all levels of software development, from basic principles, to scheduling, to implementation, its interfaces, its tests, the execution, the infrastructure that runs it and its release mechanisms. Most of the time, people lose track of why or what they are building in favor of claiming they are using some common buzzword, regardless of the effects on architecture, ease of use, customer experience or maintenance costs. My experience shows they don&rsquo;t even know why the buzzword technology does things a certain way or why it someone chose it in the first place. Factual or data-based counterargument results in an almost &ldquo;religious&rdquo; discussion and even shaming.</p>
<p>Given today&rsquo;s ease of communication and the ability to share our experiences, it&rsquo;s great that we try to educate other folks on the problems we typically face throughout our lives and careers. Especially the specific principles used in managing their solutions.</p>
<p></p>Using GitHub as a Flat Data Store and AWS Lambda to Update ithttps://tryexceptpass.org/article/using-github-as-flat-data-store/
Fri, 05 Jan 2018 00:00:00 -0500https://tryexceptpass.org/article/using-github-as-flat-data-store/<p>I spend most of my day, every day, knee deep in code. Optimizing, building, fixing and thinking through workflows can be taxing. This means that the last thing I want to do when I come home is deal with <em>more</em> programming. But I also like learning new things and communicating my experiences so they can help others. I do that through the posts in this website.</p>
<p>Maintaining a web presence without dealing with code means you get to use as many off-the-shelf components as possible. You consider things like WordPress or static site generators that let you concentrate on content, while handling the user interface for you. Write in markdown, build the website, rinse repeat with updates. It&rsquo;s all very easy, until you need a little more interactivity, like a comments section, or a newsletter signup.</p>
<p></p>Controlling Python Async Creephttps://tryexceptpass.org/article/controlling-python-async-creep/
Sun, 30 Jul 2017 00:00:00 -0400https://tryexceptpass.org/article/controlling-python-async-creep/<p>Python added formal asynchronicity in the base language a while ago. It’s fun to play with <a href="https://docs.python.org/3/library/asyncio.html">asyncio</a> <code>tasks</code> and <code>coroutines</code>, the basic constructs that execute almost in parallel. But as you start to integrate more with a regular codebase, you may find that things can get tricky. Especially if you’re forced to interact with synchronous code.</p>
<p>The complication arises when invoking <em>awaitable</em> functions. Doing so requires an <code>async</code> defined code block or coroutine. A non-issue except that if your caller has to be async, then you can’t call <em>it</em> either unless its caller is async. Which then forces its caller into an async block as well, and so on. This is “async creep”.</p>
<p></p>Making 3D Interfaces for Python with Unity3Dhttps://tryexceptpass.org/article/making-3d-interfaces-for-python-with-unity3d/
Fri, 19 May 2017 00:00:00 -0400https://tryexceptpass.org/article/making-3d-interfaces-for-python-with-unity3d/<h5 id="using-sofi-and-websockets-to-command-game-engines">Using Sofi and WebSockets to command game engines</h5>
<p>A while back I wrote a post on <a href="https://tryexceptpass.org/article/on-democratizing-the-next-generation-of-user-interfaces">using with game engines</a> as frontend interfaces. I want to enable rich interfaces in the Python ecosystem that are usable in virtual and augmented reality. Since then, I was able to build some basic concepts on top of <a href="https://www.github.com/tryexceptpass/sofi">Sofi</a> and I’m here to share them.</p>
<h5 id="the-backend">The backend</h5>
<p>Sofi works as a WebSocket server that can issue commands and handle events from a client. It’s written to simplify the use of frontend web technologies as interfaces to a Python backend. You can even <a href="https://tryexceptpass.org/article/how-to-turn-a-web-app-into-a-desktop-app">package it as a desktop app</a> with a desktop look and feel.</p>
<p>It functions by sending the user to a webpage with the basics needed to open a WebSocket client. This client then registers handlers that process server commands telling it how to alter the DOM or respond to events. All the logic resides with Python, the webpage is the user interface.</p>
<p></p>How to Turn a Web App Into a Desktop App, Using Chromium and PyInstallerhttps://tryexceptpass.org/article/how-to-turn-a-web-app-into-a-desktop-app/
Thu, 27 Apr 2017 00:00:00 -0400https://tryexceptpass.org/article/how-to-turn-a-web-app-into-a-desktop-app/<p>Packaging and distributing your app sounds simple in principle. It’s just software. But in practice, it’s quite challenging.</p>
<p>I’ve been working on a Python module called <a href="https://github.com/tryexceptpass/sofi">Sofi</a> that generates user interfaces. It can deliver a desktop feel while using standard single-page web technologies. For flexibility, I designed it to work through two methods of distribution: in-browser and executable.</p>
<p>Running in the browser, it functions much like a normal webpage. You can load it by opening a file, or launch it from your shell. I also built an executable that runs as a packaged app, independent and without external requirements.</p>
<p>Over time, as I hacked at code in Atom — my editor of choice these days — I remembered that Atom is actually a browser. It uses Node.js as a back end, and the Electron framework for its user interface.This inspired me to start poking at Electron’s internals, hoping to find examples and best practices on how they solved desktop packaging.</p>
<p></p>PyCaribbean 2017 - A Python Ate My GUIhttps://tryexceptpass.org/video/pycaribbean2017/
Fri, 17 Feb 2017 00:00:00 -0400https://tryexceptpass.org/video/pycaribbean2017/Have a look at my PyCaribbean 2017 talk on Python user interface development, desktop app packaging and interaction with 3d graphics engines like Unity3D.Sofi Unity3D - Connecting Python to Game Engineshttps://tryexceptpass.org/code/sofi3d/
Sun, 18 Dec 2016 00:00:00 -0500https://tryexceptpass.org/code/sofi3d/Control Unity3D game environments through sofi by using WebSocketSharp as a client inside the game world.Threaded Asynchronous Magic and How to Wield Ithttps://tryexceptpass.org/article/threaded-asynchronous-magic-and-how-to-wield-it/
Tue, 06 Dec 2016 00:00:00 -0400https://tryexceptpass.org/article/threaded-asynchronous-magic-and-how-to-wield-it/<h5 id="a-dive-into-python-s-asyncio-tasks-and-event-loops">A dive into Python’s asyncio tasks and event loops</h5>
<p>Ok let’s face it. Clock speeds no longer govern the pace at which computer processors improve. Instead we see increased transistor density and higher core counts. Translating to software terms, this means that code won’t run faster, but more of it can run in parallel.</p>
<p>Although making good use of our new-found silicon real estate requires improvements in software, a lot of programming languages have already started down this path by adding features that help with parallel execution. In fact, they’ve been there for years waiting for us to take advantage.</p>
<p>So why don’t we? A good engineer always has an ear to the ground, listening for the latest trends in his industry, so let’s take a look at what Python is building for us.</p>
<p></p>The Trusted Packaging Indexhttps://tryexceptpass.org/article/the-trusted-packaging-index/
Wed, 16 Nov 2016 00:00:00 -0400https://tryexceptpass.org/article/the-trusted-packaging-index/<h5 id="a-proposal-for-funding-pypi-infrastructure-and-development">A proposal for funding PyPI infrastructure and development</h5>
<p>A few days ago, I was listening to the latest episode of <a href="https://talkpython.fm/episodes/show/84/are-we-failing-to-fund-python-s-core-infrastructure">Talk Python To Me: Are we failing to fund Python’s core infrastructure?</a>, which had a panel of guests from the <a href="https://www.python.org/psf/">Python Software Foundation</a>, <a href="https://pypi.org/">PyPI</a> and <a href="https://readthedocs.org/">Read The Docs</a>. As someone that writes open source code, the topic of sustainability is always floating around in my mind. Being able to mostly work on the things that tickle my brain would definitely be awesome, but even if you had a fantastically successful project — which I don’t — it still is extraordinarily difficult to achieve.</p>
<p>I always wondered how organizations like the PSF made it all work, especially with infrastructure and systems that have the level of traffic we see in PyPI. The closest parallel I can draw is to research projects, where a considerable amount of time is dedicated towards finding the <em>right</em> kind of funding.</p>
<p></p>How To Write Your Own Python Documentation Generatorhttps://tryexceptpass.org/article/how-to-write-your-own-python-documentation-generator/
Mon, 24 Oct 2016 00:00:00 -0400https://tryexceptpass.org/article/how-to-write-your-own-python-documentation-generator/<h5 id="introspection-with-the-inspect-module">Introspection with the inspect module</h5>
<p>In my early days with Python, one of the things that I really liked was using the built-in <code>help</code> function to examine classes and methods while sitting at the interpreter, trying to determine what to type next. This function imports an object and walks through its members, pulling out docstrings and generating manpage-like output to help give you an idea of how to use the object it was examining.</p>
<p>The beauty about it being built into the standard library is that with output being generated straight from code, it indirectly emphasizes a coding style for lazy people like me, who want to do as little extra work as possible to maintain documentation. Especially if you already choose straight forward names for your variables and functions. This style involves things like adding docstrings to your functions and classes, as well as properly identifying private and protected members by prefixing them with underscores.</p>
<p></p>On Democratizing the Next Generation of User Interfaceshttps://tryexceptpass.org/article/on-democratizing-the-next-generation-of-user-interfaces/
Tue, 20 Sep 2016 00:00:00 -0400https://tryexceptpass.org/article/on-democratizing-the-next-generation-of-user-interfaces/<h5 id="musings-of-a-dev-trying-to-plan-for-the-future">Musings of a dev trying to plan for the future</h5>
<p>I remember making a program come alive back in the days of the IBM System 23. It was my first endeavor into programming. I must have been 7 years old and already using terminals for data entry to help my dad out in his business. I wrote code that highlighted items on the screen in different shades. For the younger me, it was an achievement to be proud of, even though color was not yet available in these monitors.</p>
<p>Fast forward a few decades — yes, only a few — and we’re in a completely different universe. One where 3D gaming with thousands of people at the same time is possible. A space that collides with realistic physics, represented by lifelike graphics and beautiful scenery.</p>
<p>While a gigantic leap from the olden days of monochrome monitors and ASCII graphics. From a human’s perspective, there’s still a layer of separation between reality and the digital world. But we’re about ready to break through that barrier.</p>
<p></p>Hacking Together a Simple Graphical Python Debuggerhttps://tryexceptpass.org/article/hacking-together-a-simple-python-debugger/
Wed, 31 Aug 2016 00:00:00 -0400https://tryexceptpass.org/article/hacking-together-a-simple-python-debugger/<h5 id="zero-to-debugging-in-15-mins">Zero-to-Debugging in 15 mins</h5>
<p>You don’t realize the value of a debugger until you’re stuck working on a hard-to-visualize problem. But once you fire up a development environment with decent debugging capabilities, you’ll never look back.</p>
<p>Want to know where you’re at in code execution? What’s taking so long? Just pause it and check.</p>
<p>Wonder what value is assigned to that variable? Mouse over it.</p>
<p>Want to skip a bunch of code and continue running from a different section? Go for it.</p>
<p>Sometimes <code>print(variable_name)</code> is just not enough to give you an idea of what’s going on with your project. This is when a good debugger can help you figuring things out.</p>
<p></p>A Python Ate My GUI - Part 3: Implementationhttps://tryexceptpass.org/article/a-python-ate-my-gui-3/
Mon, 15 Aug 2016 00:00:00 -0400https://tryexceptpass.org/article/a-python-ate-my-gui-3/<h5 id="time-to-bootstrap-your-d3-pick-up-that-python-and-hop-on-the-autobahn">Time to Bootstrap your D3, pick up that Python and hop on the Autobahn</h5>
<p>If you aren’t aware of my earlier posts, check out <a href="https://tryexceptpass.org/article/a-python-ate-my-gui">Part 1</a> and <a href="https://tryexceptpass.org/article/a-python-ate-my-gui-2">Part 2</a> of this series so that you get some context for this ongoing exercise.</p>
<p>Since I started thinking about and working on these posts, I’ve also been developing the ideas on GitHub as a side project I called sofi.</p>
<p>Sofi is a Python 3 package that serves as the starter implementation of the design discussed in Part 2: a system that will generate the necessary HTML and JavaScript code typically needed to produce a single-page application and serve it up through WebSockets (not an HTTP server).</p>
<p></p>Engineering the Tests that Matterhttps://tryexceptpass.org/article/engineering-the-tests-that-matter/
Sat, 30 Jul 2016 00:00:00 -0400https://tryexceptpass.org/article/engineering-the-tests-that-matter/<h5 id="going-beyond-the-checkbox">Going beyond the checkbox</h5>
<p>As I sit in my standard issued cubicle, going through a typical test results report from the typical external test shop, I begin to shake my head in disgust.</p>
<p>I’m looking at a spreadsheet with endless rows and columns that associate a thumbs up / thumbs down with each one-liner that’s supposed to describe the test that executed.</p>
<p>What does all of this mean? Does that mean the test completed? Aborted? What does a thumbs up mean if a high priority issue was logged against it? Wait! If I read through this issue, the comments trail indicates that the test itself — not the item being tested — was modified to get a passing result! What is all this? Does any of it actually imply any type of quality level in the product that I’m testing?</p>
<p></p>Podcast.__init__ Episode 68 - Test Engineeringhttps://tryexceptpass.org/audio/podcast-init/
Fri, 29 Jul 2016 00:00:00 -0400https://tryexceptpass.org/audio/podcast-init/Met up with Tobias Macey at PyCon2017 and he invited me to come on the Podcast.init show so we can have a chat on how python is used in test engineering.A Python Ate My GUI - Part 2: Designhttps://tryexceptpass.org/article/a-python-ate-my-gui-2/
Tue, 12 Jul 2016 00:00:00 -0400https://tryexceptpass.org/article/a-python-ate-my-gui-2/<h5 id="creating-a-solution">Creating a solution</h5>
<p>In the <a href="https://tryexceptpass.org/article/a-python-ate-my-gui">first part</a> of this series, we discussed a few existing modules that give us tools for building interfaces. I promised to come back with some ideas on how I would attempt to solve the situation, and this post is intended to cover aspects of my initial design.</p>
<p>However, first I need to discuss one more point on existing modules. In case you’re not aware, PyCon 2016 happened a few wks ago in Portland, and amongst the many wonderful talks, keynotes and open spaces, there was one in particular that is relevant to the topic of our discussion here: Russell Keith Magee’s talk on <a href="https://www.youtube.com/watch?v=NqdpK9KjGgQ">BeeWare</a> and the work he’s done to solve the same problem. I highly recommend you take a look and help out with his projects if you can. It’s definitely a bold and brave solution that’s highly complex, but he already has it at a usable state and deserves massive props for going down that path. The Podcast.__init__ guys also have a <a href="http://pythonpodcast.com/russell-keith-magee-beeware.html">great interview</a> with him going over the details.</p>
<p></p>The Python that Speaks Whalehttps://tryexceptpass.org/article/the-python-that-can-speak-whale/
Tue, 31 May 2016 00:00:00 -0400https://tryexceptpass.org/article/the-python-that-can-speak-whale/<h5 id="using-docker-py-to-interact-with-containers">Using docker-py to interact with containers</h5>
<p>“You should really be looking at Vagrant” — he said while I struggled with the keyboard, as if pressing the keys harder was going to magically make it work.</p>
<p>I had recently completed a utility — you know, one of those things that slurp in data from some black hole in a distant corner of the universe, marries it with the structure of a different time-space continuum, and magically spawns a pretty visual representation for mere mortals to easily consume — and I was having the hardest time getting all the pieces together for a demo on a laptop running that OS (yes, that one).</p>
<p>My buddy was trying to point me to a system that helps provision virtual machines from a simple configuration file. A solution which was becoming common in application distribution and deployment, as well as a method to standardize development environments.</p>
<p></p>A Python Ate My GUIhttps://tryexceptpass.org/article/a-python-ate-my-gui/
Sat, 14 May 2016 00:00:00 -0400https://tryexceptpass.org/article/a-python-ate-my-gui/<h5 id="thoughts-on-the-future-of-python-and-graphical-interfaces">Thoughts on the future of Python and graphical interfaces</h5>
<p>Staring at my coworkers, already knowing the inevitability of the situation, my eyes roll as the argument starts anew:</p>
<p>“I told you I can write that code twice as fast, in half as many lines and they’ll be cleaner and more readable than yours will ever be! Python is awesome!” — said the one guy.</p>
<p>“Whatever you say, you’ll never be able to make a UI that’s half as good as this. It won’t look pretty and no one will want to use it!” — replied the other — “Probably can’t even make it run on Windows” — he mumbled to himself while walking away.</p>
<p>Some years ago this was a regular exchange between coworkers, and while they were mostly messing around, there was still an element of truth to it. Regardless of its capabilities, Python was mostly known as a “scripting” language — not really for graphical interfaces — and the world was still looking for a native OS feel in their GUI applications, which was not really accessible from Python without a lot of work.</p>
<p></p>Sofi - An OS agnostic UI module for Python.https://tryexceptpass.org/code/sofi/
Tue, 16 Feb 2016 00:00:00 -0500https://tryexceptpass.org/code/sofi/Built to allow rapid, pythonic GUI development using standard web-based widgets from Bootstrap and other common HTML5 libraries and package them in such a way that all event processing is done within python using websockets.Open Source Contributions Are Part of My Professional Developmenthttps://tryexceptpass.org/article/open-source-contributions-are-part-of-my-professional-development/
Tue, 09 Feb 2016 00:00:00 -0500https://tryexceptpass.org/article/open-source-contributions-are-part-of-my-professional-development/<h5 id="should-we-have-the-right-to-contribute-to-open-source">Should we have the right to contribute to open source?</h5>
<p>“Boy did I spend a bunch of time organizing all my issues today” — he said while trying not to sound like a whiner — “You know… I found this neat tool yesterday that easily integrates with our repository management software. It adds project management capabilities that would save us time. Might be interesting to take a look?” — He ended his sentence with a question, something that he absolutely hates doing, a sticking point he’s had since spending a lot of time with a coworker that incessantly did that. He definitely did not want to sound insecure while talking to his manager.</p>
<p>The manager looks up, away from the computer screen in which he was diligently reassigning issues to their newly requested releases, and instead answers with the dreaded: “Is that tool freeware? Did you download it?”. The programmer, a lonely, isolated peon that was simply trying to make his own life easier, was definitely not expecting that response, and so he answered with the unfiltered truth (those of you that often communicate with management know what I’m talking about).</p>
<p></p>