<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>Dobesland</title>
        <description>Dobes' blog and links</description>
        <link>http://dobesv.com</link>
        
        <item>
            <title>Do Partial Functions Exist?</title>
            <description>&lt;p&gt;Total functions are those which are defined for all inputs in their domain.  Normally, all functions 
are total because the domain of a function is the inputs for which it is defined.&lt;/p&gt;

&lt;p&gt;So where does this distinction between total and partial functions come from?&lt;/p&gt;

&lt;p&gt;In mathematics we rely on a human reader to understand the domain of a function and so we can be quite
precise in our definition of a function’s domain.  It’s easy enough to say that the function &lt;code class=&quot;highlighter-rouge&quot;&gt;head&lt;/code&gt;
returns the first element of any non-empty list.&lt;/p&gt;

&lt;p&gt;However, the programming systems we use lack this level of precision when specifying types.  They don’t
allow us to specify that &lt;code class=&quot;highlighter-rouge&quot;&gt;head&lt;/code&gt; takes a non-empty list whereas &lt;code class=&quot;highlighter-rouge&quot;&gt;length&lt;/code&gt; takes any list at all.
So, what happens is that &lt;code class=&quot;highlighter-rouge&quot;&gt;head&lt;/code&gt; must be declared to have a domain of any list at all - empty or not - even
though it isn’t defined for empty lists.&lt;/p&gt;

&lt;p&gt;This kind of function - one whose domain is smaller than its type indicates - has been given the name 
“partial function” and thus the normal functions whose domain matches their type are called “total
functions”.&lt;/p&gt;

&lt;p&gt;However, this all assumes that the enforcement of the domain of the function is all up to the type checker
of the programming system.  In reality, the programmer himself is part of the system and must work to
enforce the rules as well.&lt;/p&gt;

&lt;p&gt;Thus the &lt;code class=&quot;highlighter-rouge&quot;&gt;head&lt;/code&gt; function is total when you look at the bigger picture - one in which the precise 
domain of the function is enforced by the programmer, albeit without the usual assistance from the
type checker.  Just because the precise domain of the function is not visible to the type checker
does not mean it is not known at all.&lt;/p&gt;

&lt;p&gt;So, although these things we call “partial functions” aren’t just functions in principle, the term is
still practical for referring to functions where the type checker can only restrict inputs to some 
superset of the true domain of the function.  By calling out these functions we can better alert
ourselves to the need for care in their use.&lt;/p&gt;

&lt;h3 id=&quot;what-about-total-functional-programming&quot;&gt;What about Total Functional Programming?&lt;/h3&gt;

&lt;p&gt;Total Functional Programming proposes the idea of “programming without partial functions”.&lt;/p&gt;

&lt;p&gt;In practice, it just means that partial functions must become explicit, returning a &lt;code class=&quot;highlighter-rouge&quot;&gt;Maybe&lt;/code&gt; or 
&lt;code class=&quot;highlighter-rouge&quot;&gt;Option&lt;/code&gt; type in cases where the type checker cannot enforce the precise domain of the function.
The benefit of this is that the programmer need not be so vigilant - they must handle the
possibility of an undefined result.  The downside is the code becomes more verbose in cases where
the programmer has some certainty that the function IS defined for its input but is unable to
communicate that to the type checker.&lt;/p&gt;

</description>
            <published>2016-04-11 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2016/04/11/total-and-partial.html</link>
        </item>
        
        <item>
            <title>Why I'm Applying at TopTal</title>
            <description>&lt;p&gt;For a while I have been thinking 
about where I could some more freelance work at local north american rates.  I prefer to
do everything online, because that’s the way I am.  However, normally when
you’re looking for freelance work online at sites like UpWork, there are a lot of
people from around the world applying at their much lower local rates, and
the clients are usually going there looking for a deal.  I have basically
had zero success finding decent gigs on those sites.&lt;/p&gt;

&lt;p&gt;In the past I’ve found freelancing jobs that pay well only through word of mouth.  Basically,
I know someone who is looking for some extra help and they are willing to hire on a contract
basis instead of as a full time employtee.&lt;/p&gt;

&lt;p&gt;I recently ran into an interesting sounding agency called “&lt;a href=&quot;https://www.toptal.com/software&quot;&gt;TopTal Software Programmers Group&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;They appear to offer full North American pay along with the flexible hours and lifestyle
of freelance work that I like, but also with the convenience of an online marketplace like 
Upwork.  I searched around and read some reviews and generally people are very positive
about their experience working there and they highly recommend it.&lt;/p&gt;

&lt;p&gt;I think it’s relatively low risk to apply, compared to the possible rewards, so I’m applying today.  Ask me in a few months if you want to know how it all turns out!&lt;/p&gt;

</description>
            <published>2015-08-20 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2015/08/20/why-toptal.html</link>
        </item>
        
        <item>
            <title>A Tale of Two `->`'s</title>
            <description>&lt;p&gt;In programming we run into the &lt;code class=&quot;highlighter-rouge&quot;&gt;-&amp;gt;&lt;/code&gt; operator or “function arrow” more and more often.  But did you know that this arrow is actually standing in for two different yet related arrows?&lt;/p&gt;

&lt;p&gt;Thanks to languages like &lt;a href=&quot;http://coffeescript.org&quot;&gt;CoffeeScript&lt;/a&gt; and &lt;a href=&quot;http://java.com&quot;&gt;Java&lt;/a&gt; we very commonly see this &lt;code class=&quot;highlighter-rouge&quot;&gt;-&amp;gt;&lt;/code&gt; used to define an &lt;a href=&quot;https://en.wikipedia.org/wiki/Anonymous_function&quot;&gt;anonymous function&lt;/a&gt;.  A “lambda” as they call it.  Using notation like &lt;code class=&quot;highlighter-rouge&quot;&gt;args -&amp;gt; body&lt;/code&gt;.  In pure mathematical notation you would normally use the “↦” symbol (“arrow from bar”) for defining an actual function.&lt;/p&gt;

&lt;p&gt;In functional programming languages like Haskell and ML we also see &lt;code class=&quot;highlighter-rouge&quot;&gt;-&amp;gt;&lt;/code&gt; used as a constructor for function types, like &lt;code class=&quot;highlighter-rouge&quot;&gt;String -&amp;gt; Int -&amp;gt; Int&lt;/code&gt;.  In mathematical notation, this would be written “→” normally, and represents the set of all functions with domain (input type) of the left side and range (output type) of the right side.&lt;/p&gt;

&lt;p&gt;These two are similar yet different.  The result of “↦” is (mathematically speaking) a set of pairs mapping inputs to output; because the set of pairs is usually very large we write them in an abstract manner.  The result of “→” is a set of functions - a set of sets of input ↦ output pairs.&lt;/p&gt;

&lt;p&gt;In languages (like &lt;a href=&quot;https://www.haskell.org/&quot;&gt;Haskell&lt;/a&gt;) employing both kinds of &lt;code class=&quot;highlighter-rouge&quot;&gt;-&amp;gt;&lt;/code&gt;, context is typically used to distinguish which arrow is being used at the time.  In Haskell’s case there are basically two languages: one for terms (the actual program) and one for types (like function types).  When Haskell is parsing a type annotation it interprets &lt;code class=&quot;highlighter-rouge&quot;&gt;-&amp;gt;&lt;/code&gt; as the function type constructor.&lt;/p&gt;

&lt;p&gt;I hope this has been enlightening!&lt;/p&gt;
</description>
            <published>2015-07-15 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2015/07/15/a-tale-of-two-arrows.html</link>
        </item>
        
        <item>
            <title>June's One Game A Month Release: Hop, Little Bug, Hop!</title>
            <description>&lt;p&gt;For June, Glenn and I made a platformer based on the same character from
“Fly, Little Bug, Fly!” we made in March.  In this one you are wrapped in cobwebs
that prevent you from flying, but apparently you can still hop around!  So
it’s called “Hop, Little Bug, Hop!”&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href=&quot;http://dobesv.com/1gam-BugHop/&quot;&gt;http://dobesv.com/1gam-BugHop/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code here: &lt;a href=&quot;http://github.com/dobesv/1gam-BugHop/&quot;&gt;http://github.com/dobesv/1gam-BugHop/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;All the graphics are original artwork by &lt;a href=&quot;http://bunyep.com&quot;&gt;Glenn Martin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Programming by &lt;a href=&quot;http://dobesv.com&quot;&gt;Dobes Vandermeer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sounds:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;orb_pickup is from http://freesound.org/people/Soughtaftersounds/sounds/145459/&lt;/li&gt;
  &lt;li&gt;jump/bounce/land from http://www.freesfx.co.uk&lt;/li&gt;
&lt;/ul&gt;

</description>
            <published>2013-06-30 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2013/06/30/1gam-jun-2013-little-bug-platformer.html</link>
        </item>
        
        <item>
            <title>Be Yourself: Too Scary?</title>
            <description>&lt;p&gt;Sometimes we’re advised “be yourself!”  One common question that comes out of that
is: does that mean I really should go vandalize that car whose car alarm goes off
for no reason in the middle of the night?  Or take candy from the store without
paying?  Or eat all kinds of unhealthy food until I become very sick?&lt;/p&gt;

&lt;h2 id=&quot;awareness-of-consequences&quot;&gt;Awareness of Consequences&lt;/h2&gt;

&lt;p&gt;It’s true that we have the impulse to do these things, but as adults we are also aware
of the consequences of our actions.  The anticipated future result of an action will
arise in our minds along with the idea of the action itself, and so possibly these
will cancel out and we won’t do things that are irresponsible and destructive.&lt;/p&gt;

&lt;h2 id=&quot;why-isnt-this-easy&quot;&gt;Why Isn’t This Easy?&lt;/h2&gt;

&lt;p&gt;As a parent I observe myself controlling and manipulating my children to keep them
safe.  I can only imagine my parents did the same.  It certainly seems like children
are not entirely aware of the consequences of their actions and, as such, need some
help avoiding those consequences.&lt;/p&gt;

&lt;p&gt;I think a side effect of this is that a grow up trying to follow the rules and fit
in - and not be their natural selves.  This is because their “real” selves are, in
fact, prone to irresponsible, destructive, and anti-social acts that they would
regret if only they knew.&lt;/p&gt;

&lt;p&gt;This childhood conditioning is not easy to reverse - and because we have not
“been ourselves” for so long, there’s the worry we’ll revert to acting like toddlers
if we try to be ourselves.&lt;/p&gt;

&lt;h2 id=&quot;and-so-&quot;&gt;And so …&lt;/h2&gt;

&lt;p&gt;Relax, it’s OK to be yourself, assuming you have “grown up” already you now have
the awareness and motivation needed to act like a responsible adult even if you
“are yourself”.&lt;/p&gt;

</description>
            <published>2013-05-28 00:00:00 +0000</published>
            <link>http://dobesv.com/enlightenment/2013/05/28/safe-to-be-yourself.html</link>
        </item>
        
        <item>
            <title>Using KeePass to Keep Your Passwords and SSH Private Keys Safe</title>
            <description>&lt;h2 id=&quot;keepass-2&quot;&gt;KeePass 2&lt;/h2&gt;

&lt;p&gt;I like to use different passwords for each site, and ideally each one is a
long meaningless randomly generated string of letters, numbers, and possibly
other symbols.  For this purpose I use KeePass.  With a few plugins, KeePass
fills in my website passwords very easily, generates the one-time-password
codes I need to add new machines to my Google account, and also allows me to
SSH into remote servers using a password-protected private key without entering
that password each time.&lt;/p&gt;

&lt;p&gt;I use SpiderOak to keep my KeePass database synced and available across my machines -
Dropbox would work just as well if you’re using that.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://keepass.info&quot;&gt;KeePass&lt;/a&gt; - For storing your passwords and ssh private keys securely&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;keeagent-plugin&quot;&gt;KeeAgent Plugin&lt;/h2&gt;

&lt;p&gt;The normal way that people avoid typing their SSH key password all the time is to
run ssh-agent and ssh-add, which works pretty well.  Each time ssh-add asks for the
password I’d fire up KeePass and copy/paste the long random password into the terminal.
However, I thought I could do better, and at the same time have all my ssh keys nicely
organized in my KeePass database.&lt;/p&gt;

&lt;p&gt;I stumbled on a great plugin for KeePass 2 that runs a pageant (the PuTTY equivalent
of ssh-agent) server, which seemed very promising but it doesn’t work with OpenSSH,
only with putty based tools.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://lechnology.com/KeeAgent&quot;&gt;KeeAgent&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;ssh-pagent-for-openssh&quot;&gt;ssh-pagent for OpenSSH&lt;/h2&gt;

&lt;p&gt;So I found another tool that runs a fake OpenSSH ssh-agent and translates the requests
to any running pageant process.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://cuviper.github.io/ssh-pageant/&quot;&gt;ssh-pageant&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;plink-for-git&quot;&gt;Plink for Git&lt;/h2&gt;

&lt;p&gt;Finally, for reasons unknown the ssh-pageant thing doesn’t work with git for windows.&lt;/p&gt;

&lt;p&gt;However, I found that I can configure git to use putty’s plink for ssh connections,
and plink will read the keys from the KeeAgent directly, so it all works great.&lt;/p&gt;

&lt;p&gt;To tell git to use plink, create a global environment variable GIT_SSH, set to the full
windows path to plink.exe, i.e. “C:\Program Files (x86)\putty\plink.exe”&lt;/p&gt;

&lt;p&gt;Here’s the links you need to get going:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot;&gt;PuTTY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;keepassdroid&quot;&gt;KeePassDroid&lt;/h2&gt;

&lt;p&gt;There’s a nice KeePass tool I run on my Android to access my KeePass database called
KeePassDroid.  This means that when I’m accessing secure websites from my phone I use
the same KeePass password to unlock the database, then I use Android’s copy/paste
facilities to get the password into the app or browser that is requesting a password.&lt;/p&gt;

&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;I love KeePass - now I just have remember one password to unlock KeePass and I can
use those great secure randomly generated passwords for everywhere else.&lt;/p&gt;

&lt;p&gt;Well, actually I still remember my Gmail password, my Windows password, and my
phone’s unlock PIN separately.  But that’s better then trying to have some system to
manage passwords for the dozens of sites I interact with occasionally (the system previously
being “use the same password for each site”).&lt;/p&gt;

</description>
            <published>2013-05-27 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2013/05/27/keeagent-ssh-pageant-git-together.html</link>
        </item>
        
        <item>
            <title>Announcing Laser Puzzle V2, April #1GAM</title>
            <description>&lt;p&gt;For April we decided to upgrade the laser puzzle game from February with some new levels and port
it to new platforms.&lt;/p&gt;

&lt;p&gt;How to play: rotate the pieces until the lasers reach the sensors of the same color.  When all the
sensors are activated, you win!&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href=&quot;http://dobesv.com/1gam-LaserPuzzle/&quot;&gt;http://dobesv.com/1gam-LaserPuzzle/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code here: &lt;a href=&quot;http://github.com/dobesv/1gam-LaserPuzzle/&quot;&gt;http://github.com/dobesv/1gam-LaserPuzzle/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;new-levels--features&quot;&gt;New Levels / Features&lt;/h2&gt;

&lt;p&gt;Duncan made up a series of new levels involving some new features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sensors on the top and left, emitters on the bottom and right&lt;/li&gt;
  &lt;li&gt;Alternative direction for mirrors&lt;/li&gt;
  &lt;li&gt;Opaque/solid piece that doesn’t allow any light through&lt;/li&gt;
  &lt;li&gt;Areas with no pivot at all&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also added some other features not related to level design:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;UI Resizes to fit the screen&lt;/li&gt;
  &lt;li&gt;Sound/music control to turn off the music and sound effects&lt;/li&gt;
  &lt;li&gt;New pop-up for credits&lt;/li&gt;
  &lt;li&gt;Little “clue” that shows on the first level so people know what to do.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;facebook-app-using-heroku&quot;&gt;Facebook App using Heroku&lt;/h2&gt;

&lt;p&gt;I wanted to see what it would be like to make it into a facebook app.  It turned out
to be relatively easy.  Heroku provides free hosting if your app doesn’t get a lot of
use.&lt;/p&gt;

&lt;h2 id=&quot;cocoonjs-for-android-and-ios-app&quot;&gt;CocoonJS for Android and iOS App&lt;/h2&gt;

&lt;p&gt;I used CocoonJS to build a mobile app from the game.  CocoonJS accelerates the rendering
of the game and packages it into an app.  In the browser the game ran quite slowly, so
but CocoonJS brought the frame rate back up.  This is, I believe, an advantage over
PhoneGap Build because PhoneGap doesn’t accelerate the rendering.&lt;/p&gt;

&lt;p&gt;CocoonJS is still in a fairly buggy/incomplete state, it has terribly forums and minimal
support.  But after some mucking around I got things working.  The game still seems to have
some visual issues - I had a case where some of the pivots/filters stopped rendering and I’ve
frequently had the screen flash black briefly - I suspect due to a pause in the app logic.  The
app was relatively small in my mind but it was apparently using a lot of memory.  So, the
CocoonJS approach has a long way to go but lots of promise.&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;All the graphics are original artwork by my partner in crime &lt;a href=&quot;http://bunyep.com&quot;&gt;Glenn Martin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Game mechanic Duncan Shields (thought of the rotating pieces) with help from Dobes Vandermeer,
Leigh Tingle, and Glenn Martin.&lt;/p&gt;

&lt;p&gt;The new levels are made by Duncan Shields, the old levels were made by Dobes Vandermeer and Glenn
Martin.&lt;/p&gt;

&lt;p&gt;Programming by me - &lt;a href=&quot;http://dobesv.com&quot;&gt;Dobes Vandermeer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Original music by &lt;a href=&quot;http://www.christophernickel.com/&quot;&gt;Christopher Tyler Nickel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sounds:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Door noise from http://www.trekcore.com/audio/&lt;/li&gt;
  &lt;li&gt;Applause from http://www.soundjay.com/applause-sounds-1.html&lt;/li&gt;
  &lt;li&gt;Level complete from http://noproblo.dayjo.org/ZeldaSounds/&lt;/li&gt;
  &lt;li&gt;Beep from http://archive.org/details/TickSound&lt;/li&gt;
  &lt;li&gt;Pivot sound from http://soundcli.ps/sound/camera-shutter-3&lt;/li&gt;
&lt;/ul&gt;

</description>
            <published>2013-04-30 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2013/04/30/1gam-apr-2013-laser-puzzle-v2.html</link>
        </item>
        
        <item>
            <title>Announcing "Fly, Little Bug, Fly!", my Third One Game a Month Game</title>
            <description>&lt;p&gt;This month we made a game with a bug that uses a big flower seed to float his way through a swamp,
assisted by a bit of wing power.&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href=&quot;http://dobesv.com/1gam-FlyLittleBugFly/&quot;&gt;http://dobesv.com/1gam-FlyLittleBugFly/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code here: &lt;a href=&quot;http://github.com/dobesv/1gam-FlyLittleBugFly/&quot;&gt;http://github.com/dobesv/1gam-FlyLittleBugFly/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;lessons-learned&quot;&gt;Lessons Learned&lt;/h2&gt;

&lt;p&gt;I used Playcraft to code it this time, and as before it’s a good start to library, although somewhat buggy and
still missing a lot of stuff.  I ended up making a number of pull requests with bug fixes and improvements to
Playcraft in the process of making the game.&lt;/p&gt;

&lt;p&gt;This time we used &lt;a href=&quot;http://www.mapeditor.org/&quot;&gt;Tiled&lt;/a&gt; map editor to lay out the maps.  Tiled isn’t too pretty but
it gets the job done well enough.&lt;/p&gt;

&lt;p&gt;One drawback of using a Tiled TMX file with Playcraft is that you cannot load the XML file from a file:// URL due
to browser security policy.  So I had to help the non-programmers figure out a way to run the game off a web
server instead of just loading it from the file system.  I think as an improvement to the Tiled/Playcraft combo
they could add JSONP support.  Perhaps I might attempt this myself, although the Tiled project looks a bit daunting
to get started with.&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;All the graphics are original artwork by &lt;a href=&quot;http://bunyep.com&quot;&gt;Glenn Martin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Programming by &lt;a href=&quot;http://dobesv.com&quot;&gt;Dobes Vandermeer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Original music by &lt;a href=&quot;http://www.christophernickel.com/&quot;&gt;Christopher Tyler Nickel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.diwugamedesign.com/&quot;&gt;Di Wu&lt;/a&gt; helped out with the game design, testing, and
level design this month.&lt;/p&gt;

&lt;p&gt;Sounds:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Buzzes made by Dobes Vandermeer mucking around in audacity, badly need replacing&lt;/li&gt;
  &lt;li&gt;orb_pickup is from http://freesound.org/people/Soughtaftersounds/sounds/145459/&lt;/li&gt;
  &lt;li&gt;splash from http://freesound.org/people/CGEffex/sounds/93082/&lt;/li&gt;
&lt;/ul&gt;

</description>
            <published>2013-03-31 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2013/03/31/1gam-mar-2013-fly-little-bug-fly.html</link>
        </item>
        
        <item>
            <title>When Will I Know My Authentic Self?</title>
            <description>&lt;p&gt;On my journey of self-discovery I have been puzzling over who my “authentic self” really is - and how will I know
when I’m “being myself authentically”?&lt;/p&gt;

&lt;p&gt;Recently I saw don Miguel Ruiz speaking on Operah and he said something that really struck me - basically he said
that nobody knows their authentic self, and probably nobody ever will.&lt;/p&gt;

&lt;p&gt;It dawned on me that I cannot really &lt;b&gt;know&lt;/b&gt; my true self completely.  I can &lt;b&gt;be&lt;/b&gt; authentic
from moment to moment by not repressing my feelings, desires, and thoughts.  But to truly know myself is too much.
I’ll never be able to encompass all there is to know.  I’ll never know how I will react in every possible situation.
Through my life I get to know parts of myself when I observe myself in action, how I react and act in
different situations.  I learn what I like by trying things out.  Sometimes something I thought I might like,
I don’t like.  Something I used to really dislike, I might try again now and it’s okay.&lt;/p&gt;

&lt;p&gt;So, I make a guess about who I am, what I like, how I’ll act, but it’s an educated guess at best.  I could change and
grow without noticing it.&lt;/p&gt;

&lt;p&gt;One of the Four Agreements is “Don’t Make Assumptions” and often I assume that I am still the same as before, and
that I know myself.  If I let go of that assumption and allow myself to be transform from one moment to the
next without judging or resisting that transformation I can be more authentic.  I won’t be trying to live up to my
idea of what my authentic self should be like based on my past experiences.&lt;/p&gt;

&lt;p&gt;At some level it is annoying that I can never really know my authentic self.  However, I think working with guesses and
assumptions is good enough for practical purposes, most of the time.  As long as I don’t get too upset that I don’t
turn out who I thought I would be, things should turn out well in the end.&lt;/p&gt;

</description>
            <published>2013-03-09 00:00:00 +0000</published>
            <link>http://dobesv.com/enlightenment/2013/03/09/knowing-your-authentic-self.html</link>
        </item>
        
        <item>
            <title>Announcing Laser Puzzle, my Second One Game a Month Game</title>
            <description>&lt;p&gt;This is a prototype of a mini-game concept for a bigger game.&lt;/p&gt;

&lt;p&gt;How to play: rotate the pieces until the lasers reach the sensors.  When all the sensors are
activated, you win!&lt;/p&gt;

&lt;p&gt;For my second one game a month challenge I initially tried writing it in Lua, using Marmalade Quick.  Then I re-wrote
it using javascript and the playcraft javascript library.&lt;/p&gt;

&lt;p&gt;Try it here: &lt;a href=&quot;http://dobesv.com/1gam-LaserPuzzle/&quot;&gt;http://dobesv.com/1gam-LaserPuzzle/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code here: &lt;a href=&quot;http://github.com/dobesv/1gam-LaserPuzzle/&quot;&gt;http://github.com/dobesv/1gam-LaserPuzzle/&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;lua&quot;&gt;Lua&lt;/h2&gt;

&lt;p&gt;I remember a long time ago when I first ran into Lua, before it even used much for game development, I really liked
it.  Oh, how the times have changed!  Now I find it is not a fun language at all.&lt;/p&gt;

&lt;p&gt;On the plus side, Lua has pretty good documentation and I could reload my changes almost instantly without a full
restart of the game.&lt;/p&gt;

&lt;p&gt;IF Lua had a really great IDE I might have been happy with it.  Unfortunately, Lua’s highly dynamic and flexible nature
makes writing an IDE that does useful things like refactoring, error checking, and “jump to definition”
very, very difficult.  There are some honest attempts but for my project they didn’t work.&lt;/p&gt;

&lt;p&gt;Lua has a lot of gotchas, surprisingly so.  Almost as many as Javascript in my opinion.  Same problem with
using global variables (instead of reporting an error) when you refrence an undefined name.  When you define a function
inside another function it has to be explicitly declared local or it will be globally assigned.  There are things
about Lua that I dislike, which are not a problem in Javascript: the lack of a ternary conditional expression
(?:), the use of keywords instead of punctuation to delimit things, limited standard library out of the box (no
math.round(), no shorthand to get an individual character from a string).&lt;/p&gt;

&lt;h2 id=&quot;marmalade-quick&quot;&gt;Marmalade Quick&lt;/h2&gt;

&lt;p&gt;Marmalade Quick I wasn’t too impressed with - despite labelling Marmalade Quick as a verion 1.0, it was still very
much in beta form.  I ran into some bugs and quirks, and my questions about them were not answered promptly on their
Q&amp;amp;A site.  The support for Marmalade is not very good - a few times I’ve attempted to make use of the forums or Q&amp;amp;A
site and a decent number of my questions were not answered promptly, or not answered at all.&lt;/p&gt;

&lt;p&gt;I wanted to make a downloadable version of my game for at least Windows, if not Mac OS X, but I couldn’t figure out
how to make it work and my question about it on the Q&amp;amp;A site was not answered.&lt;/p&gt;

&lt;h2 id=&quot;javascript&quot;&gt;Javascript&lt;/h2&gt;

&lt;p&gt;After my inability to make a distribution of my game via Marmalade I decided I could try porting the game to
straight up Javascript.  This actually turned out be fairly pleasant.  My PHP/Javascript IDE PHPStorm has a
number of Javascript features including auto-complete after a ‘.’, jump to definition, simple error checking, and
some simple refactorings.&lt;/p&gt;

&lt;h2 id=&quot;playcraft&quot;&gt;Playcraft&lt;/h2&gt;

&lt;p&gt;The thing that impressed me about &lt;a href=&quot;http://playcraftlabs.com/&quot;&gt;Playcraft&lt;/a&gt; was their demos - they look great,
have sound, and and great frame rates (on my machine, anyhow).  That gives me some confidence that I can make a
good game on those platforms.&lt;/p&gt;

&lt;p&gt;The playcraft API is relatively well organized and documented.  It took me a little while to figure out how
the rotation and scaling work.  It turns out that they maintain the same top-left anchor point when rotating and
scaling, which means your x,y coordinate is upper-left corner of the image before transforms are applied.&lt;/p&gt;

&lt;p&gt;It is currently in beta, and I did run into one bug I had to tweak in their library.&lt;/p&gt;

&lt;p&gt;Generally, however, I liked playcraft.  I think when some of their more interesting features start to show
up, like the editor, mobile device deployment, and so on it’ll be worth spending money on.&lt;/p&gt;

&lt;h2 id=&quot;credits&quot;&gt;Credits&lt;/h2&gt;

&lt;p&gt;All the graphics are original artwork by my partner in crime &lt;a href=&quot;http://bunyep.com&quot;&gt;Glenn Martin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Game mechanic by Duncan Shields (thought of the rotating pieces) with help from Dobes Vandermeer,
Leigh Tingle, and Glenn Martin.&lt;/p&gt;

&lt;p&gt;Programming by me - &lt;a href=&quot;http://dobesv.com&quot;&gt;Dobes Vandermeer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Original music by &lt;a href=&quot;http://www.christophernickel.com/&quot;&gt;Christopher Tyler Nickel&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sounds:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Door noise from http://www.trekcore.com/audio/&lt;/li&gt;
  &lt;li&gt;Applause from http://www.soundjay.com/applause-sounds-1.html&lt;/li&gt;
  &lt;li&gt;Level complete from http://noproblo.dayjo.org/ZeldaSounds/&lt;/li&gt;
  &lt;li&gt;Beep from http://archive.org/details/TickSound&lt;/li&gt;
  &lt;li&gt;Pivot sound from http://soundcli.ps/sound/camera-shutter-3&lt;/li&gt;
&lt;/ul&gt;

</description>
            <published>2013-02-27 00:00:00 +0000</published>
            <link>http://dobesv.com/programming/2013/02/27/1gam-feb-2013-laser-puzzle.html</link>
        </item>
        
    </channel>
</rss>
