The new AYABInterface module

One create knit work with knitting machines and the AYAB shield. Therefore, the computer communicates with the machine. This communication shall be done, in the future, with this new library, the AYABInterface. Here are some design decisions: Complete vs. Incomplete The idea is to have the AYAB seperated from the knittingpattern format. The knittingpattern format is an incomplete format that can be extended for any use case.  In contrast, the AYAB machine has a complete instruction set. The knittingpattern format is a means to transform these formats into different complete instruction sets. They should be convertible but not mixed. Desciptive vs. Imperative The idea is to be able to pass the format to the AYABInterface as a description. As much knowledge about the behavior is capsuled in the AYABInterface module. With this striving, we are less prone to intermix concerns across the applications. Responsibilty Driven Design I see these separated responsibilities: A communication part focusing on the protocol to talk and the messages sent across the wire. It is an interpreter of the protocol, transforming it from bytes to objects. A configuration that is passed to the interface Different Machines types supported. Actions the user shall perform. Different Representations I see these representations: Commands are transferred across the wire. (PySerial) For each movement of a carriage, the needles are used and put into a new position, B or D. (communication) We would like to knit a list of rows with different colors. (interface) Holes can be described by a list of orders in which meshes are moved to other locations, i.e. on needle 1 we can find mesh 1, on needle 2 we find mesh 2 first and then mesh 3, so mesh 2 and mesh 3 are knit together in the following step The knitting pattern format. Actions and Information for the User The user should be informed about actions to take. These actions should not be in the form of text but rather in the form of an object that represents the action, i.e. ["move", "this carriage", "from right to left"]. This way, they can be adequately represented in the UI and translated somewhere central in the UI. Summary The new design separates concerns and allows testing. The bridge between the machine and the knittnigpattern format are primitive, descriptive objects such as lists and integers.

Continue ReadingThe new AYABInterface module

Transcript from the Python Toolbox 101

At the Python User Group Berlin, I lead a talk/discussion about free-of-charge tools for open-source development based on what we use GSoC. The whole content was in an Etherpad and people could add their ideas. Because there are a lot of tools, I thought, I would share it with you. Maybe it is of use. Here is the talk: Python Users Berlin 2016/07/14 Talk & Discussion   START: 19:15 with Nicco Kunzmann https://niccokunzmann.github.io Agenda 1min END: 19:15 ====== - Example library - What is code - Version Control   - Python Package Index - ..., see headings - discussion: write down, what does not fit into my structure Example Library (2min)  19:17 ====================== At https://pypi.python.org/pypi/knittingpattern What is Code (2min) 19:19 =================== .. note:: This frames our discussion - Source files .py, .pyw - tests - documentation - quality - readability - bugs and problems - <3 Configurationsfiles plain Text for editing Version Control (2min) 19:21 ====================== .. note:: Sharing and Collaboration - no Version Control:   - Dropbox   - Google drive   - Telekom cloud   - ftp, windows share - Version Control Tools:   - git     - https://github.com     - https://gitlab.com     - gitweb own server     -    - mecurial     - https://bitbucket.org   - svn     - http://sourceforge.net/   - perforce (proprietary)                   Python Package Index (3min) 19:24 --------------------------- .. note:: Shipping to the users hosts python packages you develop. Example: "knittingpattern" package     https://pypi.python.org/pypi/knittingpattern pip     http://pip.readthedocs.io/en/latest/ Installation from Pypi:     $ python3 -m pip install knittingpattern # Linux     > py -3.4 -m pip install knittingpattern # Windows Documentation upload included! http://pythonhosted.org/knittingpattern/ Documentation (3min) 19:27 ==================== .. note:: Inform users I came across a talk: - https://www.youtube.com/watch?v=x5rGUqRWlK8 - Thoughts of Nicco Kunzmann: http://niccokunzmann.github.io/blog/2016-06-10/Documentation-Driven-Development Documentation can be: - tutorials - how to - introduction to the community/development process - code documentation!!! - chat -  Building the documentation (3min)  19:30 --------------------------------- Formats: - HTML - PDF - reRST - EPUB - doc strings in source code - test? Tools: - Sphinx - doxygen - doc strings - pep257: https://www.python.org/dev/peps/pep-0257/   - standard how to put in docstrings in Python     -  Example: Sphinx  3min 19:33 ~~~~~~~~~~~~~~~ - Used for Python - Used for knittingpattern - Several themes available http://www.writethedocs.org/guide/tools/sphinx-themes/ Python file:     https://github.com/AllYarnsAreBeautiful/knittingpattern/blob/master/knittingpattern/Mesh.py Documentation file with sphinx.ext.autodoc:     https://github.com/AllYarnsAreBeautiful/knittingpattern/blob/master/docs/reference/knittingpattern/Mesh.rst Built documentation:     http://knittingpattern.readthedocs.io/en/latest/reference/knittingpattern/Mesh.html#knittingpattern.Mesh.Mesh.__repr__     See the return type str, Intersphinx can reference across documentations.     Intersphinx uses objects inventory, hosted with the documentation:         http://knittingpattern.readthedocs.io/en/latest/objects.inv Testing the documentation:     - TODO: link       - evertying is included in the docs       - everything that is public is documented              syntax       - numpy        - google        - sphinx Hosting the Documentation (3min) 19:36 -------------------------------- Tools: - pythonhosted   only latest version   example: http://pythonhosted.org/knittingpattern/ - readthedocs.io   several branches, versions, languages   Example: http://knittingpattern.readthedocs.io/en/latest/ - wiki pages -  Code Testing 2min 19:38 ============ .. note:: Tests show the presence of mistakes, not their absence. What can be tested:…

Continue ReadingTranscript from the Python Toolbox 101

Deploying a Kivy Application with PyInstaller for Mac OSX with Travis CI to Github

In this sprint for the kniteditor library we focused on automatic deployment for Windows and Mac. The idea: whenever a tag is pushed to Github, a new travis build is triggered. The new built app is uploaded to Github as an ".dmg" file. Travis Travis is configured with the ".travis.yml" file which you can see here: language: python # see https://docs.travis-ci.com/user/multi-os/ matrix: include: - os: linux python: 3.4 - os: osx language: generic allow_failures: - os: osx install: - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then mac-build/install.sh ; fi script: - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then mac-build/test.sh ; fi before_deploy: - if [ "$TRAVIS_OS_NAME" == "osx" ] ; then cp mac-build/dist/KnitEditor.dmg /Users/travis/KnitEditor.dmg ; fi deploy: # see https://docs.travis-ci.com/user/deployment/releases/ - provider: releases api_key: secure: v18ZcrXkIMgyb7mIrKWJYCXMpBmIGYWXhKul4/PL/TVpxtg2f/zfg08qHju7mWnAZYApjTV/EjOwWCtqn/hm2CfPFo= file: /Users/travis/KnitEditor.dmg on: tags: true condition: "\"$TRAVIS_OS_NAME\" == \"osx\"" repo: AllYarnsAreBeautiful/kniteditor Note that it builds both Linux and OSX. Thus, for each step one must distinguish. Here, only the OSX parts are shown. These steps are executed: Installation. The app and dmg files are built. Testing. The tests are shipped with the app in our case. This allows us to execute them at many more locations - where the user is. Before Deploy. Somehow Travis did not manage to upload from the original location. Maybe it was a bug. Thus, a absolute path was created for the use in (4). Deployment to github. In this case we use an API key. One could also use a password. Installation: #!/bin/bash # # execute with --user to pip install in the user home # set -e HERE="`dirname \"$0\"`" USER="$1" cd "$HERE" brew update echo "# install python3" brew install python3 echo -n "Python version: " python3 --version python3 -m pip install --upgrade pip echo "# install pygame" python3 -m pip uninstall -y pygame || true # locally compiled pygame version # see https://bitbucket.org/pygame/pygame/issues/82/homebrew-on-leopard-fails-to-install#comment-636765 brew install sdl sdl_image sdl_mixer sdl_ttf portmidi brew install mercurial || true python3 -m pip install $USER hg+http://bitbucket.org/pygame/pygame echo "# install kivy dependencies" brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer echo "# install requirements" python3 -m pip install $USER -I Cython==0.23 \ --install-option="--no-cython-compile" USE_OSX_FRAMEWORKS=0 python3 -m pip install $USER kivy python3 -m pip uninstall -y Cython==0.23 python3 -m pip install $USER -r ../requirements.txt python3 -m pip install $USER -r ../test-requirements.txt python3 -m pip install $USER PyInstaller ./build.sh $USER The first step is to update brew. It cost me 4 hours to find this bug, 2 hours to work around it before. If brew is not updated, Python 3.4 is installed instead of Python 3.5. Then, Python, Pygame as the window provider for Kivy is installed, and the other requirements. It goes on with the build step. While installation is executed once on a personal Mac, the build step is executed several times, when the source code is changed. #!/bin/bash # # execute with --user to make pip install in the user home # set -e HERE="`dirname \"$0\"`" USER="$1" cd "$HERE" ( cd .. echo "# removing old installation of kniteditor" python3…

Continue ReadingDeploying a Kivy Application with PyInstaller for Mac OSX with Travis CI to Github

Digital Sewing Patterns Workshop with Susan Spencer

The textil industry is dominated by some big players and proprietary file formats for digital cut patterns. With the maker scene getting a big push with 3D printers, it is time to push for open digital sewing pattern creation as well.Susan Spencer already works for some time on this goal. She created plugins for creating and portraying sewing patterns in Inkscape and documents her work on the TauMeta Website.The next goal is to enable designers to upload and customize patterns online through a web interface. This is why we are meeting up at a workshop after the Libre Graphics Meeting in Madrid. I believe this is exciting and offers many people a way to collaborate on patterns around the world.As textil making is very big in Vietnam and other Asian countries, this could be very interesting for people. I can see that it would also offer ways for small business owners to work together.Susan Spencer and Hong Phuc Dang at the Digital Pattern Workshop after LGM 2013Links* http://www.fashiontec.org* http://meshcon.net* http://www.taumeta.org* https://en.wikipedia.org/wiki/Pattern_(sewing)

Continue ReadingDigital Sewing Patterns Workshop with Susan Spencer