tag:blogger.com,1999:blog-75678907480455550292024-03-17T20:03:51.809-07:00Tom GurionAnonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-7567890748045555029.post-77271633432137004682016-05-25T14:54:00.001-07:002016-05-25T14:55:06.714-07:00Moving from blogspotI decided that my blog deserves a make up, and moved it to its new home at <a href="http://blog.tomgurion.me/">blog.tomgurion.me</a>. Come say hello!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1shz3e3hY9JaeH7bFtHz3r8Lreduz8xkGgil9KZ5hxcoSwc0IcKdfCuJ116ekokhr4wa3VnzORws3yZcTVuIp3ZtFNFGAm0xopsncR6RCexO9lEg47SaWW1c23pADkLrMu-1afEygCA-/s1600/newblog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="371" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc1shz3e3hY9JaeH7bFtHz3r8Lreduz8xkGgil9KZ5hxcoSwc0IcKdfCuJ116ekokhr4wa3VnzORws3yZcTVuIp3ZtFNFGAm0xopsncR6RCexO9lEg47SaWW1c23pADkLrMu-1afEygCA-/s640/newblog.png" width="640" /></a></div>
<br />Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-21461084425236263302016-03-04T14:50:00.001-08:002016-03-04T14:50:54.810-08:00Video demo of my Sign-language projectThis project convert sign-language / gestures to speech. You can read more about it on <a href="https://github.com/Nagasaki45/Sign-language" target="_blank">github</a> or in <a href="http://www.tomgurion.me/sign-language.html" target="_blank">my site</a>. I just uploaded a video demo of the project. Feel free to comment.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/x6i9gXS5VEQ" width="560"></iframe>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-55990889906328083652016-02-29T13:52:00.000-08:002016-03-01T10:49:04.305-08:00docker-compose in productionDeployment sucks! I'm not a dev ops / sys admin type of person, and every time I'm into deploying a web project I start to rethink the whole process and get confused. Recently, I decided to restart the work on one of my older django projects, <a href="https://github.com/Nagasaki45/Xteams" target="_blank">Xteams</a>, and one of the first tasks was to migrate it from <a href="https://www.heroku.com/" target="_blank">heroku</a> to my VPS - a <a href="http://digitalocean.com/" target="_blank">digital ocean</a> droplet. Don't get me wrong, heroku is great, but I'm already paying 5 bucks per month to digital ocean, where I host all of my web projects, and the single web dyno that heroku gives for free is a real limitation.<br />
Before starting to migrate the project, I decided about the following deployment requirements: <br />
<ol>
<li>I want a consistent production environment, with the fewest possible system wide dependencies, mainly due to...</li>
<li>I have several projects already deployed to this VPS, so I need a production environment which will play nice with them both in term of dependencies and in hostname
routing (resolving foo.com and bar.com to their respective ports / apps).</li>
<li>Staging and production environments should be as similar as possible, and I want to be able to run the staging environment on my local machine.</li>
<li>Moreover, if I can utilize parts of the production configurations for development - like DB / job queue and workers - it's even better.</li>
<li>Keep deployment scripts to the bare minimum.</li>
<li>Not over-engineer the issue.</li>
</ol>
<br />
<h4>
<a href="http://dokku.viewdocs.io/dokku/" target="_blank">Dokku</a></h4>
I liked heroku. Deploying is really easy, and if I can accomplish a task using git alone I will probably do it that way :-) So I checked dokku. It clearly solves the first requirement easily: apart from dokku itself there is no system wide configuration and dependencies to worry about. It also solves issues 5 and 6 really nicely: the deployment is done by pushing to remote repository and production specific configurations (or secrets) can be added with environment variables, which I like. On the other hand, I'm not sure if dokku would play nicely with my other projects, there is no way to run an environment similar to production locally, and I can't reuse components for development.<br />
<br />
<h4>
Deployment scripts (like <a href="https://www.ansible.com/" target="_blank">ansible</a> / <a href="http://www.fabfile.org/" target="_blank">fabric</a>)</h4>
Almost a year ago I read Harry Percival's great book <a href="http://chimera.labs.oreilly.com/books/1234000000754/" target="_blank">"TDD with Python"</a>. He teaches how to automate deployment with ansible. I managed to deploy the sample app for the book and later I used the same technique to deploy one more django app of mine. However, I really don't like this approach. It seems very fragile, touching too many configurations too often, making me afraid about my other projects on the server. It's a lot of work too, and work that I can't reuse for development. Overall, I feel that it only answer requirement 3 and 6. The rest are not even close to be answered.<br />
<br />
<h4>
Finally: docker and docker-compose to the rescue</h4>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYS8VPs51lCNeJUGKfYyVX-rVBgg9taKZt9AabutFflR8xSBGtuZFQLAlvRJeFxPLwlyGmsiqjWL0xls2J8l0ZdT-5P754mCU7MhfckQfhP5Cn0D3rLvMEZLVSfvt_THQhL5aJmPwO6P6D/s1600/docker-compose-prod.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYS8VPs51lCNeJUGKfYyVX-rVBgg9taKZt9AabutFflR8xSBGtuZFQLAlvRJeFxPLwlyGmsiqjWL0xls2J8l0ZdT-5P754mCU7MhfckQfhP5Cn0D3rLvMEZLVSfvt_THQhL5aJmPwO6P6D/s640/docker-compose-prod.jpg" width="480" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">docker-compose containers in production</td></tr>
</tbody></table>
You weren't expected this, didn't you?!?<br />
<br />
Let's follow the diagram and I will try to convince you why using docker-compose in production (and also partly in development) is a good idea. With docker, you can create an image of an application, together with all of its dependencies, and run it in an isolated environment, which is called a docker container. docker-compose lets you take a set of such images, define the links between containers (in means of network and volume access) and orchestrate all of the containers together, from building to running.<br />
<br />
In the current example I had a DB container with an official postgres image. Every time I need to configure postgres on my local machine I find myself reading throughout half of stackoverflow and the official docs for information. This time it was really easy: I grabbed the official postgres image from docker hub and that's it - no more configuration needed.<br />
Second, there is the web container that runs the django app itself. This is the main container in my project. I wrote a Dockerfile to describe how the image should be built. It contains only a few lines: starting from the official python 3.5 image, pip installing dependencies, and collect static files. Secrets are written in a special file which django-compose pass to the container as environment variables. This file is not source controlled: I created one manually on my local machine and another one, slightly different, on my server. Here's the Dockerfile for this image:<br />
<script src="https://gist.github.com/Nagasaki45/58bd4d758c1408d2c4b7.js"></script><br />
Above the web container there is the Nginx container, which have access to a shared volume from the web container that contains all of the static files, so static files are served by Nginx directly. Here is the Nginx container configuration file:<br />
<script src="https://gist.github.com/Nagasaki45/1830411bc5e510c096ae.js"></script><br />
Outside of the docker orchestration there is one more Nginx instance, its job is to route each incoming request to the correct app on the server. Every app is listening on a different port and Nginx only route traffic based on the hostname in the http header. Here's the configuration file:<br />
<script src="https://gist.github.com/Nagasaki45/4575b34641bc4e804c09.js"></script><br />
Here's how my docker-compose configuration file looks like: <br />
<script src="https://gist.github.com/Nagasaki45/15f22aeb60e49d1c30d3.js"></script><br />
Building and running these containers is really simple:<br />
<script src="https://gist.github.com/Nagasaki45/9aed10b837612f385bc7.js"></script><br />
So now, let's try to tackle the requirements list again:<br />
<ol>
<li>The only system wide dependencies are docker and docker-compose. Apart from that there is the system wide Nginx server, which is already there for the other apps.</li>
<li>Running the new project side by side with the other projects is just a matter of adding one more server configuration file to the system wide Nginx (more info is available in <a href="https://github.com/Nagasaki45/Xteams#more-info" target="_blank">the project README</a>). This is no different from any other app on the server, whether it's a django app or a static website.</li>
<li>There is no difference at all between staging and production. Spinning a staging environment locally is just a matter of building and running the docker-compose environment.</li>
<li>I'm not using a system wide postgres instance in development. Instead, I use the same postgress docker image I run in production. Moreover, if I will need more building blocks, as a job queue and workers, I will be able to add their respective images to both development and production docker-compose configuration files.</li>
<li>I do have a script for deployment, but it doesn't do much except pulling the latest source from github, building and running. That's all.</li>
<li>One might argue that I did over-engineered the issue. Compared to using dokku this solution is definitely more complex. However, I'm not sure if maintaining this deployment mechanism is harder than maintaining ansible deployment scripts, especially when there are several different apps on the same server.</li>
</ol>
<br />
<h4>
Cons</h4>
<ul>
</ul>
<ul>
<li>Provisioning, although very simple, is done manually: I create a folder on the server, clone the project, and add the django "secrets" file. It can be automated too, of course, but I'm not sure I see a reason for that now. </li>
<li>I wished I could run functional tests from a special <a href="http://www.seleniumhq.org/" target="_blank">selenium</a> container against the staging environment. This is not trivial as it requires a bidirectional network access between the selenium driver and the web app. I gave up the idea, because of its complexity, and I'm running selenium tests only against the development environment, outside of any docker container.</li>
<li>Sharing a volume between the web container and the Nginx container is a neat trick. However, I most force-remove the old web container after any build and before running the new container to "refresh" the volume with the latest collected static files. It's a hack I don't like, but I live with it.</li>
</ul>
<br />
<h4>
Summary</h4>
I really like docker-compose. At first, it looks like a tool with a steep learning curve. But don't be too intimidated. Give it a try and you might find an elegant solution for deployments, which will hopefully scale well with your requirements.<br />
I'm sure that there are lots of approaches I'm not covering here, and all of the above only reflects my limited experience in the field. Therefor, feel free to criticize and share your experience about the subject!<br />
<ul>
</ul>
<ul>
</ul>
<ul>
</ul>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-24994204431647759442016-02-04T09:06:00.002-08:002016-02-04T09:06:50.038-08:00My new portfolio siteI have a new site!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.tomgurion.me/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="My portfolio header" border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUWaPZXZCMTH3IAA5sH4ekt3FyZEK5pwNdCyY4m4UAgL2dpNVBCPqowr28eX3L6O_gAfM8grYxK4Pb6kAOxzal2d9IN8sd1FvVOOGYVMtPAK6lkFW2NL7o6AHyskG_j6ypufQxO7HPZ8gz/s640/site.jpg" title="" width="640" /></a></div>
<br />
The site was created to present the different projects I'm working on as a portfolio. I will keep posting ideas and explorations here. But I feel that a site with a proper home page and unique design (compared to this blog, at least) will present the projects and my skillset in a better light.<br />
And for the technical part. This is a static, pelican based site. The theme was adapted from the <a href="http://themes.gohugo.io/creative/" target="_blank">Hugo Creative theme</a>, with several modifications. Feel free to <a href="https://github.com/Nagasaki45/tomgurion.me" target="_blank">fork</a> and change for your own needs.<br />
As usual, comments are more than welcome!Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com2tag:blogger.com,1999:blog-7567890748045555029.post-48894811164839573502015-10-24T11:18:00.003-07:002015-11-03T10:17:48.153-08:00Poor man's trick to add and remove conda from $PATH<a href="http://conda.pydata.org/docs/" target="_blank">Conda</a> is great for managing dependencies as matplotlib and scipy: try to install these with pip, in a virtualenv, and you will be convinced that conda is better in that regard.<br />
<br />
But!<br />
Somehow, the folks at continuum analytics decided that using conda should override the default python environment (the system-wide python installation). There are some <a href="https://groups.google.com/a/continuum.io/forum/#!topic/anaconda/opMLiGnjymE" target="_blank">recommendations</a>, but AFAIK there is no official solution for the problem.<br />
<br />
Here is my solution to keep the system-wide python installation as my default environment and start to use conda only when I want to:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">~/bin/unconda</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: white;"><span style="background-color: black;">export PATH=`echo ":${PATH}:" | sed -e "s:\:<span style="font-family: "courier new" , "courier" , monospace;">$HOME</span>/miniconda3/bin\::\::g" -e "s/^://" -e "s/:$//"`</span></span></span><br />
<br />
Got the trick from <a href="https://ntk.me/2013/05/04/path-environment-variable/" target="_blank">here</a>. Thanks Natsuki!<br />
<br />
<span style="font-family: "Courier New",Courier,monospace;">~/bin/reconda</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><span style="color: white;"><span style="background-color: black;">export PATH="<span style="font-family: "courier new" , "courier" , monospace;">$HOME</span>/miniconda3/bin:$PATH"</span></span></span><br />
<br />
<span style="background-color: white;">Now just </span><span style="background-color: white;">add <span style="font-family: "courier new" , "courier" , monospace;"><span style="font-family: "courier new" , "courier" , monospace;">$HOME</span>/bin</span> to your path if it's not already there and you are ready to go.</span><br />
<br />
<span style="background-color: white;">Don't forget to remove the line in your <span style="font-family: "courier new" , "courier" , monospace;">.bashrc</span> that add miniconda to the path in the first place.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/UdQgJdnrEDw" width="560"></iframe>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-975397057108226412015-08-27T11:47:00.001-07:002015-08-28T13:24:58.068-07:00Back to music with MalinkaAccording to this blog title, there will be music involved.<br />
It's been a while, but recently I started playing bass guitar in a band again. The band, "<a href="https://www.youtube.com/channel/UCXGJ2u2sw8sB6Jwa-63ATNw" target="_blank">Malinka</a>", is lead by <a href="http://www.stavgerman.com/" target="_blank">Stav German</a>, and we have our <a href="https://www.facebook.com/events/1019498851418082/" target="_blank">first live show next week</a> in Tel-Aviv.<br />
Feel free to hear, comment, and come to the show, it's free. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/fzQoYdzAFz0" width="560"></iframe>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0Tel Aviv-Yafo, Israel32.0852999 34.78176759999996631.977676400000004 34.620406099999968 32.192923400000005 34.943129099999965tag:blogger.com,1999:blog-7567890748045555029.post-71022855776839046122015-08-04T12:06:00.002-07:002015-09-20T12:42:33.618-07:00My Jupyter (tmpnb) server and Thebe<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script charset="utf-8" src="https://rawgit.com/oreillymedia/thebe/master/static/main-built.js" type="text/javascript"></script>
<script>
$(function(){
new Thebe({
url: "https://oreillyorchard.com:8000/",
debug: true
});
});
</script>
<br />
<pre data-code-language="python" data-executable="true" data-type="programlisting">%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from IPython.html.widgets import interact
def plot_sine(frequency=1.0, amplitude=1.0):
plt.ylim(-1.0, 1.0);
x = np.linspace(0, 10, 1000)
plt.plot(x, amplitude*np.sin(x*frequency));
interact(plot_sine, frequency=(0.5, 10.0), amplitude=(0.0, 1.0));
</pre>
<br />
Isn't that amazing?!?<br />
<br />
I've recently installed an <a href="https://github.com/jupyter/tmpnb" target="_blank">tmpnb</a> sever on my digitalocean server, you can access it at <a href="nagasaki45.com:8000">nagasaki45.com:8000</a>.<br />
<br />
So, what's the big deal? <br />
This configuration allow anyone to use python (or one of the other supported / installed kernels) on the web, using my server. You don't have to ask for permission; you can just go to the provided address and start to code without any local installation.<br />
<br />
And it goes way beyond:<br />
<ul>
<li>You can open new terminal, 'git clone' your project, and demonstrate it to someone else. And you can do it on mobile devices too. Again, no installation required, everything is running on the server.</li>
<li>You can use <a href="https://github.com/oreillymedia/thebe" target="_blank">thebe</a> to add code snippets as the one above to any static html page (your blog, as example). Even interactive widgets will run the computation back and fourth from the server to the web frontend for presentation.</li>
</ul>
So go ahead, write some code, let me execute it for you ;-)<br />
<br />
<pre data-code-language="python" data-executable="true" data-type="programlisting"># your python playground </pre>
<br />
<h3>
Edit 1.9.15:</h3>
My digitalocean VM has "only" 512MB of RAM. I decided to span tmpnb with 4 docker containers, 50MB RAM each, to keep the server load on minimum. Apparently, it possessed some issues as 50MB are probably not enough.<br />
<br />
Right now the example above uses the same tmpnb server has the one in thebe example (<a href="https://oreillymedia.github.io/thebe/examples/matplotlib.html" target="_blank">here</a>), namely <a href="https://oreillyorchard.com:8000/" target="_blank">https://oreillyorchard.com:8000/</a>. It works much better now as there are no kernal failures when running the examples.<br />
<h3>
Edit 20.9.15:</h3>
I'm stopping the service on my server due to some number crunching tasks I'm running on it.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-6838239861041582412015-05-23T13:54:00.001-07:002015-06-14T14:26:24.682-07:00Writing a programming book? Don't compose an utility library!<div class="separator" style="clear: both; text-align: center;">
<a href="https://9b8e0032-a-62cb3a1a-s-sites.googlegroups.com/site/doingbayesiandataanalysis/what-s-new-in-2nd-ed/CoverDBDA2E-FrontOnly-600wide.png?attachauth=ANoY7cr93yYFx2bG9Qw5bpa-9zn1nLx3aZvu6O7psiTGSeuDUY0VVJG4Nh3VEymyA9I94fotr9m8Vmiv6upOoitl3HJ7TASV8lSwt5_EJqkK9QjgufFoP-bZqct3ao4JkLWpH__hk9UUlfsGzpy1bT-fUzOJiLqmjFNVPuMtckXFq-Zj5NEFsrfg9vkrj2F8IH5UpTuRE9w6GXtOmBqknbWBUQeQGM6Ahz4u4UxQP_fqiXLm6_mz2WkxorYhl6_jzXo--jOlGuIUY69zxSfp-PKnI9JGbJtan6AxFjb_VA8KkWzVF2rJmGQ%3D&attredirects=0" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://9b8e0032-a-62cb3a1a-s-sites.googlegroups.com/site/doingbayesiandataanalysis/what-s-new-in-2nd-ed/CoverDBDA2E-FrontOnly-600wide.png?attachauth=ANoY7cr93yYFx2bG9Qw5bpa-9zn1nLx3aZvu6O7psiTGSeuDUY0VVJG4Nh3VEymyA9I94fotr9m8Vmiv6upOoitl3HJ7TASV8lSwt5_EJqkK9QjgufFoP-bZqct3ao4JkLWpH__hk9UUlfsGzpy1bT-fUzOJiLqmjFNVPuMtckXFq-Zj5NEFsrfg9vkrj2F8IH5UpTuRE9w6GXtOmBqknbWBUQeQGM6Ahz4u4UxQP_fqiXLm6_mz2WkxorYhl6_jzXo--jOlGuIUY69zxSfp-PKnI9JGbJtan6AxFjb_VA8KkWzVF2rJmGQ%3D&attredirects=0" width="175" /></a></div>
I came across two books recently, in which the authors decided to write an utility library. The first book was <a href="http://www.amazon.com/Python-Practice-Concurrency-Libraries-Developers/dp/0321905636/" target="_blank">Python in Practice, by Mark Summerfield</a> (my opinion about the book can be found <a href="http://tomgurion.blogspot.com/2014/11/python-readings.html" target="_blank">here</a>), and the second, which I'm still reading, is <a href="http://www.amazon.com/Doing-Bayesian-Data-Analysis-Second/dp/0124058884" target="_blank">Doing Bayesian Data Analysis, Second Edition, by </a><span class="author notFaded" data-width=""><a href="http://www.amazon.com/Doing-Bayesian-Data-Analysis-Second/dp/0124058884" target="_blank">John Kruschke</a>. </span>A separate review will be added when I will finish reading it.<br />
<span class="author notFaded" data-width="">The books are different in their nature: One is about python programming, while the other is about statistical methods, and uses the R programming language for hands-on examples and exercises; the first book is average quality </span><span class="author notFaded" data-width=""><span class="author notFaded" data-width="">overall </span>(IMHO) and the second is absolutely amazing! However, I believe that I may be able criticize the utility libraries that came with the books in the same manner: Don't do this</span>!<br />
<br />
<span class="author notFaded" data-width="">And why?</span><br />
<br />
<h4>
<span class="author notFaded" data-width="">Installation process breaks conventions</span><span class="author notFaded" data-width=""> </span></h4>
<span class="author notFaded" data-width="">When I need an external tool in a python project I know I have <a href="https://pypi.python.org/pypi" target="_blank">pypi</a> to rely on for finding packages. I have <a href="https://pip.pypa.io/en/stable/" target="_blank">pip</a> to easily install the package and prefer to work with <a href="https://virtualenv.pypa.io/en/latest/" target="_blank">virtualenv</a> whenever possible. This set of tools help me in maintaining a sane codebase, and reduce the effort of managing the dependencies by my own.</span><br />
<b>
</b>There is no chance that I will copy an external module into my project and source control it unless I'll have to, so why to use this module in an educational project in the first place?<br />
I really don't know what is the convention in installing R external packages, but I believe that Kruschke suggestion of sourcing his supplied scripts is not the proper way to do this (enlighten me if I'm wrong). <br />
<b>
</b>
<br />
<h4>
<b><ul>
</ul>
<h4>
<div class="separator" style="clear: both; text-align: center;">
</div>
Package maintenance / code quality</h4>
</b></h4>
<a href="http://www.salemmarafi.com/wp-content/uploads/2014/05/libraries.png" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="http://www.salemmarafi.com/wp-content/uploads/2014/05/libraries.png" height="203" width="320" /></a><b>
</b>Before I'm installing an external package<span id="goog_746014009"></span><span id="goog_746014010"></span> I tend to search about the package quality. First thing is checking how many stars the package have on github and how many times it was downloaded from pypi.<br />
And there is a reason behind it: I can rely on packages that are used often to have better code quality; through gihub I can browse the package issues / latest commits and make sure that it is still maintained.<br />
I'm sure that books authors invest a large amount of time in writing their utility libraries. But code free of bugs doesn't exists, and I prefer to know that the codebase is maintained before I use it (again, without distinction between educational and "real" projects).<br />
<b>
</b>
<br />
<h4>
<b><ul>
</ul>
<h4>
<span class="author notFaded" data-width="">Not specific enough</span></h4>
</b></h4>
If your utility library is a mix of different solutions for different problems, it might not worth keeping in our toolbox. The above is probably more relevant to Python in practice than to Doing Bayesian Data Analysis, but I think it's still worth mentioning.<br />
<br />
<h4>
<b><h4>
Documentation</h4>
</b></h4>
<b>
</b><b><span style="font-weight: normal;">When I choos</span></b>e a tool t<b><span style="font-weight: normal;">o work with I want it's documentation to be top notch! Take <a href="https://docs.djangoproject.com/en/1.8/" target="_blank">django</a> for example. The project's documentation is not less than perfect, including a great tutorial for beginners. I really don't want to look for the book when I'm interesting in put in use some less obvious function from an utility library.</span></b><br />
<h4>
<b><span style="font-weight: normal;"><br />
</span><ul>
</ul>
</b></h4>
<h4>
<b><h2>
<span class="author notFaded" data-width="">What I'm expecting from authors instead</span></h2>
<ul>
<li><span style="font-weight: normal;"><span class="author notFaded" data-width="">If you think that your utility functions worth it pack it and publish it as any other package.</span></span></li>
<span style="font-weight: normal;">
</span>
<li><span style="font-weight: normal;"><span class="author notFaded" data-width="">I really don't mind reading one or two additional pages of code </span></span><span style="font-weight: normal;">in your book</span><span style="font-weight: normal;"><span class="author notFaded" data-width="">, if there's something interesting in it. Again, if the code deserved to be mentioned in your book, it may be also deserved to be talked about explicitly.</span></span></li>
<span style="font-weight: normal;">
</span>
<li><span style="font-weight: normal;"><span class="author notFaded" data-width="">If this functionality exists elsewhere you should reference it, and advise the user to use it. I've never wrote code in R, but was ready to learn how to work with its ecosystem. I expected Kruschke to teach me that, instead of showing me how to source his supplied scripts.</span></span></li>
</ul>
<span style="font-weight: normal;"><span class="author notFaded" data-width=""> </span></span></b><b><h2>
Late disclaimer</h2>
</b></h4>
<b>
</b>Don't get me wrong, supplying code as part of
your book is great! But there are different ways to do it: David
Beazley's Python Cookbook is full of code snippets, fully commented and
explained; In Test-Driven Development with Python Harry Percival guides the reader in developing an webapp with reference code available at github.<br />
Don't get me wrong 2: The above doesn't mean that the books are bad.<br />
<br />
<h2>
Edit:</h2>
Don't miss Kruschke's comment below! He lights the above topics from different angle and supplies great arguments for his decisions.<br />
<b>
</b>
<br />
<h4>
<b><ul>
</ul>
</b></h4>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-50753882081488009162014-11-17T13:17:00.000-08:002014-11-19T01:26:42.995-08:00Python readingsI usually learn anything new by reading books. In fact, I got almost all of my python knowledge (which is not a lot, I'm just an apprentice programmer) by reading python books.<br />
A year ago I've started to learn web development from <a href="http://www.10x.org.il/">Udi Oron</a> in <a href="https://hackita.hasadna.org.il/">Hackita</a> (my impressions <a href="http://tomgurion.blogspot.com/2013/12/hackita.html">here</a>), and shortly after started to work with him as a python teaching assistant in his courses. Few months ago I've got a permanent position in one of those companies we've taught in and the stigma of someone that can answer everybody's python questions still sticks to me in the company. Between those questions are how to get started with python and where to find information regarding specific topics.<br />
Hence, here is my thoughts about the books that helped, and still helping me learning python.<br />
<br />
<h4>
Disclaimers</h4>
- I'm new to python and the world of programming.<br />
- Books won't do the work for everybody.<br />
- When I first started to learn python I never thought I will end up making my leaving out of it, so I've learned python 3 (which is preferable language IMHO). However, most of the industry still uses python 2. All of the books below are for python 3. It doesn't mean that they won't help you learn python 2 also, but you will have to find the differences by yourself.<br />
<br />
<h3>
Beginners books</h3>
<br />
<h4>
<a href="http://www.amazon.com/Quick-Python-Book-Second-Edition/dp/193518220X" target="_blank"><span class="item"><span class="fn">The Quick Python Book, Second Edition (</span></span><span class="a-size-small a-color-secondary">Naomi R. Ceder)</span></a></h4>
<br />
<a href="http://ecx.images-amazon.com/images/I/51afqHmFrML._SX258_BO1,204,203,200_.jpg" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://ecx.images-amazon.com/images/I/51afqHmFrML._SX258_BO1,204,203,200_.jpg" height="200" width="160" /></a>
After trying different books for python (Think Python, Dive into Python 3
and Head First Python) I've found this one to be the preferable as a learning
book for someone that already saw some code, but is definitely not an experienced programmer.<br />
Part 1 is a short introduction that may also be used as a quick reference. Part 2 is very organized tutorial for
the language. It contains most of the essentials and will give you the
feeling that you can continue learning by your own (or with more
specialized books / tutorials). Part 3 is much less cohesive then part
2. It seems that the chapter about regular expressions could get into
part 2 but the rest of the section is too much esoteric and there are some
mistakes through all of it (for example, it refers you to the appendix
for more information that is not there).<br />
I didn't read part 4
completely. I've only read the information about working with databases
in chapter 24 and it is very well written.<br />
Summary: For part 2 I will give 5 start without hesitations. But part 3, although less significant, doesn't deserve it. After all the book is very recommended.<br />
<br />
<h3>
More advance / intermediate books</h3>
<br />
<h4>
<a href="http://www.amazon.com/Python-Practice-Concurrency-Libraries-Developers/dp/0321905636/ref=sr_1_1?s=books&ie=UTF8&qid=1416060956&sr=1-1&keywords=python+in+practice" target="_blank">Python in Practice (Mark Summerfield)</a></h4>
<br />
<a href="http://www.qtrac.eu/pipbookm.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://www.qtrac.eu/pipbookm.png" height="200" width="155" /></a>
I bought this book primary for its chapters about design patterns as well as the concurrency and the networking chapters (1 to 3, 4 and 6 accordingly). The book doesn't meant to be read from start to finish, but as a reference and guide to each topic separately. I think that from the above chapters I've already read most of the content, as well as the chapter about GUI with tkinter. I have nothing to say though about the two remaining chapters (extending python and 3d graphics).<br />
The best chapter of this book is the one about high-level concurrency. In this chapter Summerfield explain with details the difference between CPU-bound and I/O-bound concurrency and have a strong suggestions regarding the tools to use for concurrency with python 3. Namely, the suggestion is to use the threading, multiprocessing and concurrent.futures modules and never use locks or other lower level synchronization primitives explicitly, use queues and futures instead. The examples are good, although I found the code unnecessarily complex sometimes.<br />
On the other hand, I found the chapters about design patterns to be much less fruitful. The author attitude is too object oriented for me where things could be done much easier using a decorator or two instead. The code examples too, are complex and non pythonic.<br />
I'm sure that there are much better and approaches to high-level networking then those described in this book. The author implement <a href="http://en.wikipedia.org/wiki/Remote_procedure_call" target="_blank">remote procedure call</a> server and client. Simple examples can be done in a simpler manner then the suggested code and advance use cases may prefer higher level 3rd party libraries and frameworks that removes much of the boilerplate (e.g. <a href="https://www.djangoproject.com/" target="_blank">Django</a> + <a href="http://www.django-rest-framework.org/" target="_blank">DRF</a> for REST server + <a href="http://docs.python-requests.org/en/latest/" target="_blank">requests</a> based client).<br />
Summary:The high-level concurrency chapter is really great and deserve 5 stars, but the rest of the book is ranging between 2 and 3.<br />
<br />
<h4>
<a href="http://www.amazon.com/Python-Cookbook-David-Beazley/dp/1449340377/ref=sr_1_1?s=books&ie=UTF8&qid=1416061017&sr=1-1&keywords=the+python+cookbook" target="_blank">The Python Cookbook, 3rd edition (David Beasley)</a></h4>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://ecx.images-amazon.com/images/I/51zDEWm5kcL._SX258_BO1,204,203,200_.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://ecx.images-amazon.com/images/I/51zDEWm5kcL._SX258_BO1,204,203,200_.jpg" height="200" width="151" /></a></div>
After disappointing from "Python in Practice" I've came across this book as one with similar scope, namely, a design patterns book, organized into chapters by topic that you can read in any order. In addition, this one is also great reference book by the fact that most of the suggested patterns are described in a short, self-contained manner.<br />
This is a really great book! Beasley's attitude is so pythonic. AKA: readable, simple, <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">DRY</a>, less OO and more functional whenever possible, smart usage of the standard library / 3rd party high level libraries.<br />
Most of the chapters of the book are really fluent and easy to read. I've found the meta-programming and the object oriented chapters a bit more complex, but still great after the 2nd or the 3rd read as the ideas demonstrated there are a bit too advanced for my background.<br />
Summary: Assuming you already know python (don't read it if you don't) I think that this book is a must have. 5 stars are barely enough.<br />
<br />
<h3>
Scientific computing with python </h3>
<br />
As already noted, I've never thought that I will find myslef programming python in a full time job. Essentially, I've decided to learn python as a data analysis tool for my <a href="http://tomgurion.blogspot.com/p/master-thesis.html">MA research</a>. These are the main sources I've used to get the necessary knowledge.<br />
<br />
<h4>
<a href="http://www.amazon.com/Python-Data-Analysis-Wrangling-IPython/dp/1449319793" target="_blank">Python for Data Analysis (Wes McKinney)</a></h4>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://d.gr-assets.com/books/1356132971l/14744694.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://d.gr-assets.com/books/1356132971l/14744694.jpg" width="146" /></a></div>
It's not a bad book but if you are looking for a good book for
scientific computing with python you will probably be disappointed.<br />
The
book covers mostly the pandas library. It doesn't give much information about numpy
and matplotlib, and say completely nothing about scipy, which are all
more essential for scientific computing than pandas as far as I understand that
topic.<br />
On the other hand, pandas is your tool to go if you need to work with spreadsheet oriented data (the <a href="http://pandas.pydata.org/index.html#library-highlights" target="_blank">library highlights page </a>summarize its strengths pretty good).<br />
This book was one of the first python books I've read, together with the quick python book above. It explains pandas in a very introductory way (pretty slow), which make recommending this book even harder: If you are a beginner, this book is written in the right level, but on the wrong content; If you are a more advanced programmer looking to learn a bit of pandas you may find the tutorials <a href="http://pandas.pydata.org/pandas-docs/dev/tutorials.html" target="_blank">here</a> comprehensive enough.<br />
Summary: Pandas is a great tool, use it! But I don't think that this book is a good your way to learn data analysis with python, whether you are a beginner or not.<br />
<br />
<h4>
<a href="https://scipy-lectures.github.io/" target="_blank">Python Scientific Lecture Notes</a></h4>
<br />
I have to admit, I've read only the first section of the "lecture notes", but if you are looking for an introduction to scientific computing with python this "book" is definitely worth reading. It covers the basics of numpy, matplotlib and scipy very concisely, with lots of short but working code examples. <br />
<br />
<h3>
Web development with python</h3>
<br />
<h4>
<a href="http://www.amazon.com/Two-Scoops-Django-Best-Practices/dp/098146730X" target="_blank">Two Scoops of Django: Best Practices for Django 1.6 (Daniel Greenfeld - AKA pydanny, and his wife Audrey Roy)</a></h4>
<br />
<a href="http://www.arruda.blog.br/wp-content/uploads/2014/03/IMG_1894.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://www.arruda.blog.br/wp-content/uploads/2014/03/IMG_1894.jpg" height="200" width="200" /></a>Can't say I've finish reading this book. It more like a reference you
open anytime you need for some extra help on each topic, with emphasis
on best practices.<br />
Be aware that this book is not for beginners! But
if you want to progress with python + django you're going to appreciate
the suggestions found there. For django starters, go through the really good <a href="https://docs.djangoproject.com/en/dev/intro/tutorial01/" target="_blank">tutorial</a> and write another django app before reading any of the suggestions in this book. It won't help you if you don't.<br />
There are two editions for this book, for django versions 1.5 and 1.6. According to the authors <a href="http://twoscoopspress.com/pages/two-scoops-of-django-1-6-faq#what-if-1.7" target="_blank">there will be no more version of this book</a>, so don't attempt to wait to one. Take the latest as it has much more content.<br />
Behind the general recommendation and the versions stuff I will add that I don't like the "theme" of the book. The code examples themselves are great but there are lots of illustrations that doesn't really helping in explaining the concepts nor in remembering them.<br />
Summary: If you take django development seriously just get yourself a copy, you won't regret it!<br />
<br />
<h4>
<a href="http://www.amazon.com/Test-Driven-Development-Python-Harry-Percival/dp/1449364829" target="_blank">TDD with python (<span class="author notFaded" data-width=""><span class="a-declarative" data-a-popover="{"position":"triggerBottom","name":"contributor-info-B00M77PKUO","allowLinkDefault":"true"}" data-action="a-popover">Harry J. W. Percival)</span></span></a></h4>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://orm-other.s3.amazonaws.com/tddwithpython/final_cover.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://orm-other.s3.amazonaws.com/tddwithpython/final_cover.jpg" height="200" width="151" /></a></div>
I've started to read this book only recently, so I'm still in the middle of it (somewhere around chapter 17). So my very warm recommendations are for those I've read.<br />
Percival does a great job in explaining and demonstrating the TDD discipline, introducing web development with django on the way. Although I am already familiar with django I found the introductory attitude of the author more then appropriate, and it let me concentrate more on the TDD side rather on understanding the framework. On the other hand, there are lots of developers that prefer a more strait forward attitude, with less text and more working code snippets, so bear in mind that this is not the case with this one. Here, lots of code examples are written iteratively throughout the test cycles and upon several pages. I like it!<br />
Behind introducing TDD, its the first time I manage to deploy an app to a real server (I've deployed some apps to <a href="https://www.heroku.com/" target="_blank">heroku</a> before, but it is different). I will surely recommend those chapters as stand alone tutorial for deployment (chapters 8 & 9 + appendix C).<br />
The only downside I can think of is if you are not interested in web development at all. It will be too much work to translate the concepts in this book into completely different subject.<br />
Summary: Great introduction to the discipline of TDD for web development. Very recommended. And you can even read it online for free <a href="http://chimera.labs.oreilly.com/books/1234000000754/" target="_blank">here</a>.<br />
<br />
<h3>
Ending words</h3>
<br />
I would really like to hear your thoughts about the recommendations, whether you agree with me and even more if not :-).<br />
You are also welcome to contact me on any question about these books / other python resources and I will do my best to answer.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-91321429552836998392014-10-27T12:21:00.000-07:002014-10-27T12:22:25.306-07:00Participants movement tracking animations from my MA experiment #2The following animated renditions are a byproduct of the video tracking an analysis of my MA thesis second experiment.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqV7jJ2GIqOiorimLC5HRCGjgxhKOp84sPtdC0S2Dn9-63jdy3x1_J-KT5cEbwEEEnlR-_u17PZxR6-TPP0tCZwT9PNzIcS_Ey9RkW2h2Mm8fJz0s_9IYruCBMlGBDOzRyoT8AWXr7n0_c/s1600/experiment_design.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqV7jJ2GIqOiorimLC5HRCGjgxhKOp84sPtdC0S2Dn9-63jdy3x1_J-KT5cEbwEEEnlR-_u17PZxR6-TPP0tCZwT9PNzIcS_Ey9RkW2h2Mm8fJz0s_9IYruCBMlGBDOzRyoT8AWXr7n0_c/s1600/experiment_design.png" height="273" width="640" /></a></div>
<br />
The figure above shows a schematic diagram of the experiment design. The videos are of session 1 to 3 of each of the groups (the last session wasn't analyzed). They have been for great help in gaining insights about the social interactions between the participants themselves and between the participants and the system components.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/eMvRYz-3hrk" width="480"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/ViCy3Q0gQlQ" width="480"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/y2_1mssBn30" width="480"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/Ck_CcrJ0CsE" width="480"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/0u8Mcv3FMmE" width="480"></iframe>
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="360" src="//www.youtube.com/embed/TkRZFkfdY8c" width="480"></iframe>
</div>
<br />
The analysis repository can be found <a href="https://github.com/Nagasaki45/MA-experiment-analysis" target="_blank">at github</a>.
<br />
Additional information about the research can be found <a href="http://tomgurion.blogspot.com/p/master-thesis.html">here</a>.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-15794761593419771452014-09-19T01:32:00.000-07:002015-05-22T13:40:28.377-07:00Create teams easily with Xteams!<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIpVv2gya9KaRFkg0k1zqXfuOvw9wfNQu2fZGn7XocQf-9FiTWoCT3oLcf6FIBsxfd6Y-xL4i-M0IaeyEmjlzYUytfh3Z6BtHSQJMO_vMF-pgHwUPgSz6DXn8_13Ld4JwS5EVKihT_PUC/s1600/volley_edit.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKIpVv2gya9KaRFkg0k1zqXfuOvw9wfNQu2fZGn7XocQf-9FiTWoCT3oLcf6FIBsxfd6Y-xL4i-M0IaeyEmjlzYUytfh3Z6BtHSQJMO_vMF-pgHwUPgSz6DXn8_13Ld4JwS5EVKihT_PUC/s1600/volley_edit.jpg" width="320" /></a>
I've been playing volleyball recently with a group of amateur players. In the last two months the size of our group has increased so much that it became very hard to create teams. And if you think that size is the only issue I can assure you that there are many more:
<br />
<br />
- How can one create teams when Dana doesn't want to play with Haim, who must play with Jacob but not with Yossi... You've got the idea.
<br />
<br />
- No one will ever want to help in creating teams as he may end up insulting a not-so-good player by choosing him last.
<br />
<br />
- Maybe you have too many players around for one game, but just enough for a tournament of 4 teams.
<br />
<br />
In order to solve these inconveniences I've created <a href="http://xteams.herokuapp.com/" target="_blank">Xteams!</a> a web-app with one goal in mind:
<br />
<br />
<div style="text-align: center;">
<i><b>Create teams automatically based on discrete scores of the players</b></i></div>
<br />
Using Xteams, group managers can give scores to players in the management panel. Players of the group can't access this panel but can see the list of players, mark which of them arrived to the game and create teams easily.<br />
<br />
At the time of writing, the algorithm behind the teams' allocation was pretty simple. It takes all of the available players, and the number of teams to create, and tries to find teams with equal or close to equal strength (sum of the players scores) by generating several random allocations and choosing the best of them.<br />
<br />
<h4>
For devs</h4>
The app is still under development (aren't they all?), and many more modifications, improvements and features are considered. Any help in the development process is more than welcome (<a href="https://github.com/Nagasaki45/Xteams" target="_blank">github repo</a>).<br />
<br />
<h4>
Thanks</h4>
To the players of Nahlaot Veshut volleyball team, who consistently help with new ideas for features and additional improvements.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-82642907009446426662014-04-09T06:48:00.001-07:002015-12-06T05:11:10.881-08:00My research proposal<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcqG9_zbwrnzN5VgKznXth8NKzj5ZAF5lCst8sKFQmimO6DQG355juiaF9I6xPC79s75ntIOKbV4ESD5NDIgd52NglslkmNTLFTXT2eg6G60JObt_WTjzRHcEOqUpGyQxmJP_SbLqmVWOs/s1600/system.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcqG9_zbwrnzN5VgKznXth8NKzj5ZAF5lCst8sKFQmimO6DQG355juiaF9I6xPC79s75ntIOKbV4ESD5NDIgd52NglslkmNTLFTXT2eg6G60JObt_WTjzRHcEOqUpGyQxmJP_SbLqmVWOs/s1600/system.png" width="320" /></a></div>
I've recently submitted my <a href="https://db.tt/4h5u179a" target="_blank">MA research proposal</a>, titled: "Audio-Only Augmented Reality System for Social Interaction".<br />
Usually, research proposals aims to present the subject and describe the intents of the current research. This one is a bit more comprehensive, presenting a fully operated system I've developed, preliminary results of the system evaluation, and the exact design for a future experiment.<br />
Feedback is always welcome.<br />
<br />
LaTeX source can be found @ <a href="https://github.com/Nagasaki45/MA" target="_blank">github</a>.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-30533365525000945772014-04-06T08:32:00.000-07:002015-02-25T08:02:48.268-08:00Some experiments with SimpleCV - object detection by colorComputer vision is way far from my daily interest. But last weekend I participated in a semi-hackathon, developing code that aims to detect and track cards by their color.
<br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/wDAFhOv0tKU" width="560"></iframe>
<br />
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Credits deserve to this <a href="https://www.youtube.com/watch?v=jihxqg3kr-g" target="_blank">guy</a>. I've used his code as a reference and a starting point.</div>
<div style="text-align: left;">
It is my first experience with SimpleCV. After all the code works pretty well, I think, despite the awful documentation of SimpleCV and some hard time working with the library.</div>
<div style="text-align: left;">
As always, the code is written in python and is available at <a href="https://github.com/Nagasaki45/cards-tracker" target="_blank">github</a>. Any thoughts about the mini-project, the code and computer vision alternative libraries are always welcome.</div>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-89235111138237840892014-02-14T13:03:00.000-08:002015-12-17T04:47:22.700-08:00Web Audio API - some thoughts and experimentsFor me, being able to use advance audio programming on the web looks like a dream just a couple of weeks ago, and I'm not the only one for sure.<br />
Doing audio programming, I've mainly experienced with Max/MSP and Pd but my interest in shared music creation / consumption and interactive systems have long seems to demand the extension of this skill set; as Udi Oron rightly argued in "<a href="http://tomgurion.blogspot.co.il/2013/12/hackita.html" target="_blank">Hackita</a>" two months ago: you have no chance to convince someone to download your desktop app (Max or Pd patches for example), give them a web app instead!<br />
I'm not sure if I've heard of the <a href="http://www.w3.org/TR/webaudio/" target="_blank">Web Audio API</a> before last week, but even if I did I probably wouldn't had a clue of how to use it back then (before learning web development and JavaScript at Hackita). Today I can say that it looks like a great solution for audio programming, and a good way to look for if you interesting in designing systems for public wide usage because of the next reasons:<br />
<ul>
<li>As claimed before, no one downloads and install desktop application anymore unless it came from known source and the one that download it knows for sure that he wants to use it (as opposed to just trying things out).</li>
<li>It's probably the easiest way to go if you want shared behavior and interaction between users of the system.</li>
<li>Web standards are here to stay. You can be sure that organizations like Google, Mozilla, and Microsoft will compete to provide the best implementation possible.</li>
<li>The API itself looks very promising. I hope that I will be able to summarize pros and cons soon.</li>
</ul>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://web-audio.herokuapp.com/" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"><img border="0" height="148" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYyyvgXskaM_xGw-20FvfGtyshwAILs6EzE-JzIDbbSaUDRZTqtae4o1djux2Yt3aL2lbLd_Lvhxccj3VgXgehGI7fiHi8D0JQLC8erQdPyStBle8dsrdIf1ELBnPXvNGCn8YRzgWBXxPM/s1600/web-audio+screen.png" width="200" /></a></div>
That's being said, <a href="http://web-audio.nagasaki45.com/" target="_blank">here</a> are my experiment with the API. If you are interesting in more information and tutorials be sure to take a look at the "Useful links" menu (top navigation bar). And as always, source code can be found at <a href="https://github.com/Nagasaki45/Web-Audio" target="_blank">github</a>.</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-59727218275015316252013-12-07T10:32:00.000-08:002013-12-08T05:56:31.726-08:00"Hackita"<div class="separator" style="clear: both; text-align: center;">
<a href="http://friends-mapper.herokuapp.com/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;" target="_blank"><img border="0" height="154" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHKw2JqsXZJ5jqmStzrxma97Z937hfixvP60c6BbYy2GCCaknj7OlXrRmAw3f2g9MxwbPishBnFxrOZgi1gJkkOUyZeSuhWvnEAtVF9NGyzJVWTBiCBd9ycDoOhwVd6S9hzRBvT7nVD25a/s200/Friends-Mapper+screenshot.png" width="200" /></a></div>
In the last few weeks I was participating in the first session of "<a href="https://hackita.hasadna.org.il/" target="_blank">Hackita</a>", which means "The classroom" in Hebrew. This project aims to bring people from different backgrounds to learn and develop open source web applications together.<br />
Furthermore, the project is part of <a href="http://www.hasadna.org.il/en/" target="_blank">The Public Knowledge Workshop</a>, and as such one of its main goals is to guide its participants to complete a project that expose public knowledge to the public by the end of the 2 month session, somewhere around late January.<br />
Until now we've learned few technologies that will help us accomplish this goal and from the next week we will start to work on the final project.<br />
Meanwhile, here are two of my "homework" exercises:<br />
<ul>
<li><a href="http://simplecrypt.appspot.com/" target="_blank">SimpleCrypt</a> - Online cryptographic tool, based on <a href="http://en.wikipedia.org/wiki/Data_Encryption_Standard" target="_blank">DES</a>. Source @ <a href="https://github.com/Nagasaki45/SimpleCrypt" target="_blank">github</a>.</li>
<li><a href="http://friends-mapper.herokuapp.com/" target="_blank">Friends-Mapper</a> - Creates a dynamic map of your friends. Source @ <a href="https://github.com/Nagasaki45/Friends-Mapper" target="_blank">github</a>.</li>
</ul>
Information regarding my final project will come soon...Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-21979594829614878872013-11-16T14:19:00.000-08:002013-12-07T11:58:13.093-08:00Compare food prices in Jerusalem - a new mini-web-project<div class="separator" style="clear: both; text-align: center;">
<a href="http://nagasaki45.pythonanywhere.com/" target="_blank" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="186" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ6up8zeVgpOA_9KPm4y2xpZ66mPDpjuKyWNgVUlUfNCqX7Loy4QlK_K7rOA-7Zg-Gw2sKZzIQzl5AWBSXLdbhqyCPBxX7Y35FJCk1BeImVzwO7D5tnGM4ureJQWcSKbUDRNTGge7b3gFP/s200/MarketPrices.png" width="200" /></a></div>
Two things happened recently, I've moved to the holly city and started to learn Python. Here are the consequences: a mini web app to compare food prices, written in Django and deployed to pythonanywhere, for my own purpose and for my students friends.<br />
<div style="text-align: center;">
<a href="http://nagasaki45.pythonanywhere.com/" target="_blank">Jerusalem MarketPrices</a></div>
More features will be added soon and on demand :-). If you want to be able to update markets, products and prices, drop a comment and I will create an account for you.<br />
And as always, source code can be found at <a href="https://github.com/Nagasaki45/MarketPrices" target="_blank">github</a>.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-60588052369658466102013-10-19T12:35:00.002-07:002013-10-19T12:35:52.953-07:00MusiGali video demonstration<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/aXbvVGCQ5wY" width="560"></iframe>
<div style="text-align: left;">
<br />
A screen capture of MusiGali <a href="https://www.ableton.com/" target="_blank">Ableton Live</a> set. All the details are <a href="http://tomgurion.blogspot.co.il/2013/10/musigali-eeg-controlled-music-for-brain.html" target="_blank">here</a>.</div>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-72349426219357790152013-10-14T13:01:00.000-07:002013-10-17T13:40:22.910-07:00MusiGali - EEG controlled music for Brain Tech Israel 2013A project by Giori Politi, Sharon Duek, Jonathan Abramson and myself which developed / composed especially for the Brain Tech Israel 2013 conference this week.<br />
<br />
In this project we created a musical soundtrack based on mind waves transmitted from an EEG headset. The generated musical line is parameterized according to levels of attention and meditation of the headset wearer, leading the listener to unexpected musical realms which somewhat correspond to his or her neuro-electric activity. One may try to attain control over the musical line and advance within it through deliberate control over levels of relaxation and concentration.<br />
The EEG headset that was used for the project is <a href="http://www.neurosky.com/Products/MindWaveMobile.aspx" target="_blank">NueroSky MindWave mobile</a>. Music was composed in <a href="https://www.ableton.com/en/live/" target="_blank">Ableton Live</a> using Max for Live to read the data from the headset.<br />
Many thanks to Zvika Markfeld and Saron Paz from <a href="http://forrealteam.com/" target="_blank">ForReal Team</a>, the exhibition curators.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinY3pf2Xu6dnCWUk6WijKzvorAnSMVce05WHn13IrOwpXFCrK5qU7ylzYvYzwb9vFY-kfw4bdNZsA0BhDz6QIwOl5kRrjj2lyc8Ms-s29hcCNeAe6zvQrgbVDPOWtZDgTqwGA8j32NMaeY/s1600/20131014_115421.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinY3pf2Xu6dnCWUk6WijKzvorAnSMVce05WHn13IrOwpXFCrK5qU7ylzYvYzwb9vFY-kfw4bdNZsA0BhDz6QIwOl5kRrjj2lyc8Ms-s29hcCNeAe6zvQrgbVDPOWtZDgTqwGA8j32NMaeY/s640/20131014_115421.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB-Dblp-fazBZi4D2WkPVaVJoaEeEfrMs34ZqEtmlQv-LkXq4WHAMkhGbpOzT3JCi5B-0yxAYcv28MjY1XPLgxfHdaoXEpO2CNDoKIKDALsW58r-d6eoeqDe_d8t-WAsFX8CfgLO198gO6/s1600/IMG_2284.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB-Dblp-fazBZi4D2WkPVaVJoaEeEfrMs34ZqEtmlQv-LkXq4WHAMkhGbpOzT3JCi5B-0yxAYcv28MjY1XPLgxfHdaoXEpO2CNDoKIKDALsW58r-d6eoeqDe_d8t-WAsFX8CfgLO198gO6/s640/IMG_2284.JPG" width="640" /></a></div>
<br />Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-69850046276517959612013-08-21T07:52:00.001-07:002013-08-22T01:08:19.615-07:00Find nearby Bluetooth devices with BT-logger<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFxggbbMb6fC9FcJcSfqsn612V6KRiHRnoZ1Ewu4FwN5_IVOQI-RVHirfJhK30vQKmNa2u0-0NhPXslxmOEHlPUA5-TP3NptGC0qruqInZRqZEbCq8PCpnsYKHM3JCyfkBUFdyIfg0jOT/s1600/Screenshot_2013-08-20-21-40-46.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKFxggbbMb6fC9FcJcSfqsn612V6KRiHRnoZ1Ewu4FwN5_IVOQI-RVHirfJhK30vQKmNa2u0-0NhPXslxmOEHlPUA5-TP3NptGC0qruqInZRqZEbCq8PCpnsYKHM3JCyfkBUFdyIfg0jOT/s200/Screenshot_2013-08-20-21-40-46.png" width="112" /></a></div>
With this new Android app you can get information about nearby Bluetooth devices. The application collect the name, address, RSSI value and time of discovery of nearby Bluetooth devices and write them to file in \BluetoothData directory on the main device storage.<br />
<br />
The application primary use is to evaluate my Bluetooth based relative indoor positioning system that you should already be familiar with. Otherwise you can find all the necessary information regarding my master thesis <a href="http://tomgurion.blogspot.co.il/p/master-thesis.html">here</a>.<br />
<br />
Here is the <a href="https://play.google.com/store/apps/details?id=com.nagasaki45.btlogger" target="_blank">application page on Google Play</a>. And as always, everything is <a href="https://github.com/Nagasaki45/BT-logger" target="_blank">opensource</a>.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-43090488155854554382013-07-17T19:34:00.001-07:002013-10-14T13:04:07.739-07:00Poster presentation for HCI International 2013Next week I'm going to present my master thesis in <a href="http://hcii2013.org/" target="_blank">HCI International 2013</a> conference in Las Vegas.<br />
The poster is already in printing: 42" x 60" with glossy finish. But for the most of you <a href="http://db.tt/Rx7FnAxn" target="_blank">here is the source</a>. Comments are most welcome<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PCH2ZJPvzgZgY2D2peEZFZB9ij4GDEpoi_d0FAy8IF-D1S38g0L8ji0hlS8cmQIARA-lX00OnEumNEGmOJShAI-_pqoFbOh2KiaC6z4Z9aDcogcvbJnIGhiyXZNTwMnA_2MLBS3YUuXA/s1600/HCI+Poster.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9PCH2ZJPvzgZgY2D2peEZFZB9ij4GDEpoi_d0FAy8IF-D1S38g0L8ji0hlS8cmQIARA-lX00OnEumNEGmOJShAI-_pqoFbOh2KiaC6z4Z9aDcogcvbJnIGhiyXZNTwMnA_2MLBS3YUuXA/s640/HCI+Poster.png" width="640" /></a>
</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-90698797330751877732013-07-01T19:48:00.000-07:002013-10-14T13:04:23.915-07:00Some pictures from ISTAS'13Here are some pictures from the conference, which was great by the way.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnF3Fb5TUqz-sUBvWbQnIwBgrQvu5K52RrU_4Ei2WJywOvL-L_0OCKdNDSD-YygNWu7dTYVSQxWHAIQbaX-oJV9MqhX_Ta6duxsxSSQH0LX0v4L6cdtpz_KBMrTpOUOMLq-OLrOgBF4q05/s1600/istasedit.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnF3Fb5TUqz-sUBvWbQnIwBgrQvu5K52RrU_4Ei2WJywOvL-L_0OCKdNDSD-YygNWu7dTYVSQxWHAIQbaX-oJV9MqhX_Ta6duxsxSSQH0LX0v4L6cdtpz_KBMrTpOUOMLq-OLrOgBF4q05/s400/istasedit.jpg" width="400" /></a></div>
<div style="text-align: center;">
Thanks for Alexander Hayes for the picture</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<video controls="" height="480" poster="http://distilleryimage6.ak.instagram.com/63aacb60e0d811e28ab422000aa80430_7.jpg" width="612"><source src="https://distilleryimage6.s3.amazonaws.com/63aacb60e0d811e28ab422000aa80430_101.mp4" type="video/mp4"></source></video><br /></div>
<div style="text-align: center;">
Video from the Instagram blog of <a href="http://instagram.com/jaebot3000" target="_blank"><span id="goog_912271040"></span>JAEBOT3000<span id="goog_912271041"></span></a></div>
<div style="text-align: center;">
<span style="font-size: x-small;">Working audio @ the #AugmentedReality conference. Picking up on interesting future tech and privacy concerns. Ran into Tom Gurion and his musical balloons. His research allows the user to interact with music by choosing what mix you'd like based on location. More Info @ nagasaki45@gmail.com neat stuff #audio #AR #Music #Tech #Interaction #science by @<a href="http://instagram.com/jaebot3000" target="_blank">jaebot3000</a></span></div>
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcmcwX7fFagts1Zq0fJlWjK1WHVdmctAh7y-Txn_G21zOp7du7DlHk136TGAnbhOFVa-2oUzT2mlxdL-GP3Eq7cMqy_T1C5oGdKvZZ8etsnTz6-VM0xA5ZieGPKokD_fKqOScz348nQAD0/s1600/20130629_113107edit.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcmcwX7fFagts1Zq0fJlWjK1WHVdmctAh7y-Txn_G21zOp7du7DlHk136TGAnbhOFVa-2oUzT2mlxdL-GP3Eq7cMqy_T1C5oGdKvZZ8etsnTz6-VM0xA5ZieGPKokD_fKqOScz348nQAD0/s400/20130629_113107edit.jpg" width="400" /></a></div>
<div style="text-align: center;">
Me presenting the system in the exhibition hall</div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7xUHnkwPS4qdiZMk3tSoBXirgXsu2MA-4Tly3-ws-MEOwus8XYX6xBnE9lYEPoE9bEScKq5QpYiYGT5yOVsfnBFVUYd0icSn4mBR8JXJZcigIEYjGwkzAaonI7jN1RB33noBoY5Dt2ZD6/s1600/20130629_121100edit.jpg" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em;"></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7xUHnkwPS4qdiZMk3tSoBXirgXsu2MA-4Tly3-ws-MEOwus8XYX6xBnE9lYEPoE9bEScKq5QpYiYGT5yOVsfnBFVUYd0icSn4mBR8JXJZcigIEYjGwkzAaonI7jN1RB33noBoY5Dt2ZD6/s1600/20130629_121100edit.jpg" imageanchor="1" style="clear: right; display: inline !important; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7xUHnkwPS4qdiZMk3tSoBXirgXsu2MA-4Tly3-ws-MEOwus8XYX6xBnE9lYEPoE9bEScKq5QpYiYGT5yOVsfnBFVUYd0icSn4mBR8JXJZcigIEYjGwkzAaonI7jN1RB33noBoY5Dt2ZD6/s400/20130629_121100edit.jpg" width="223" /></a></div>
<div style="text-align: center;">
Looks like <a href="http://caseorganic.com/" target="_blank">Amber Case</a> likes interactive music :-)</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-27833018590926638072013-06-28T15:47:00.001-07:002013-10-14T13:04:34.510-07:00Slideshow of my thesis presentation<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="324" marginheight="0" marginwidth="0" mozallowfullscreen="" scrolling="no" src="http://www.slideshare.net/slideshow/embed_code/23632163" style="border-width: 1px 1px 0; border: 1px solid #CCC; margin-bottom: 5px;" webkitallowfullscreen="" width="512"> </iframe></div>
<div style="text-align: left;">
In this slideshow you can taste a little bit of how the system and the experiment looks like. This slideshow originally made for my presentation at <a href="http://istas13.org/" target="_blank">ISTAS'13</a> (and it contains much better animations then what you can see here on the slideshare version :-) ), but I would be happy to present it again, just <a href="http://tomgurion.blogspot.ca/p/contact.html" target="_blank">contact me</a>.</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-1265561472359089292013-06-27T15:35:00.002-07:002013-08-03T10:13:57.169-07:00ARpArty, the first ScenePlayer Plus Bluetooth aware scene, is here for you<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn_uP_F0ldpjhhNddFISNSs5IjffXazCWA_VG0kgkVh_rnfCacHO0f4QVCFGjBBry9YltgvCnamA7Qqjg9-ihulAD3pC_lH-F3gWwKJiZ5YPy0WpcydivahGDFeSLiNj5twf9LYsDeRopW/s320/TabaShips.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn_uP_F0ldpjhhNddFISNSs5IjffXazCWA_VG0kgkVh_rnfCacHO0f4QVCFGjBBry9YltgvCnamA7Qqjg9-ihulAD3pC_lH-F3gWwKJiZ5YPy0WpcydivahGDFeSLiNj5twf9LYsDeRopW/s200/TabaShips.jpg" width="200" /></a>You are welcome to download and install ARpArty scene for <a href="https://play.google.com/store/apps/details?id=com.nagasaki45.sceneplayerplus" target="_blank">ScenePlayer Plus</a> from <a href="http://db.tt/Y6cn2APx" target="_blank">here</a>. ARpArty was developed as an implementation of audio-based augmented reality system for interactive music consumption in a silent disco context and is the main scene that I use in my research.<br />
In order to install the scene, just copy the extracted directory from the zip file to the SD card of your device, then launch the the app and add the new scene.<br />
<br />
If you are an artist that want to develop Bluetooth aware scenes for ScenePlayer Plus taking a look at this scene could be a good starting point.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-41286078862737648312013-06-24T17:46:00.002-07:002013-07-01T19:52:49.639-07:00ScenePlayer Plus<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhip75h-ukOKcKkjehudTXGXs7psQhY7tJbF2-jekl9YcX_jiOcVQdykb5_WTASqvpW91a1eSQO0m0YwPym0q5LMPnzvaqgVeRayDJKeq9ZIxGuV1imhUDs3FNCU8DD5mP-eQVvmNtP45TP/s1600/sceneplayerplus.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhip75h-ukOKcKkjehudTXGXs7psQhY7tJbF2-jekl9YcX_jiOcVQdykb5_WTASqvpW91a1eSQO0m0YwPym0q5LMPnzvaqgVeRayDJKeq9ZIxGuV1imhUDs3FNCU8DD5mP-eQVvmNtP45TP/s1600/sceneplayerplus.png" /></a></div>
ScenePlayer Plus is an enhanced version of <a href="https://github.com/libpd/pd-for-android/tree/master/ScenePlayer" target="_blank">ScenePlayer</a> by Peter Brinkmann.<br />
It uses additional capabilities of the Android device that are not used by RjDj or ScenePlayer apps (Bluetooth is an example) but it is still fully compatible with standard RjDj scenes.<br />
ScenePlayer Plus can be downloaded from <a href="https://play.google.com/store/apps/details?id=com.nagasaki45.sceneplayerplus" target="_blank">Google Play</a>.
Source code can be found at <a href="https://github.com/Nagasaki45/ScenePlayer-Plus" target="_blank">Github</a> and instruction for creating scenes for ScenePlayer Plus can be found at the <a href="https://github.com/Nagasaki45/ScenePlayer-Plus/wiki" target="_blank">project wiki</a>.<br />
<br />
ScenePlayer Plus has been developed as part of my master thesis as an implementation of the <a href="http://tomgurion.blogspot.com/2013/06/abstract-audio-only-augmented-reality.html" target="_blank">proposed system</a>. With the abilities of <a href="http://libpd.cc/" target="_blank">libpd</a> and the ease of use of ScenePlayer I've found that the only component that is necessary for me to develop is the Bluetooth discovery routine for the relative indoor positioning.<br />
<br />
Developers that interested in improving the Bluetooth awareness capabilities of the app or in adding more features (GPS / compass / social media APIs etc.) are welcome to contact me.Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0tag:blogger.com,1999:blog-7567890748045555029.post-42486487582583087262013-06-23T15:29:00.004-07:002013-07-01T19:53:05.343-07:00Thesis project Pure Data patch video demonstration<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/2kJoeD2iWBA" width="560"></iframe></div>
<div style="text-align: left;">
This demo shows how movement of participants in space affects the music they hear through their own Android device and headphones using the system in a silent disco party. In addition it demonstrate the influence of different participants on one another when one virtual participant takes diverse sound zones with him during this simulation. The music is the same as in the original system.</div>
Anonymoushttp://www.blogger.com/profile/09931434322816267355noreply@blogger.com0