<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[touch /dev/null]]></title>
  <link href="http://yulian.kuncheff.com/blog/atom.xml" rel="self"/>
  <link href="http://yulian.kuncheff.com/blog/"/>
  <updated>2013-03-21T21:26:10-07:00</updated>
  <id>http://yulian.kuncheff.com/blog/</id>
  <author>
    <name><![CDATA[Yulian Kuncheff]]></name>
    <email><![CDATA[yulian@kuncheff.com]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Using IntelliJ/WebStorm to debug Web Applications]]></title>
    <link href="http://yulian.kuncheff.com/blog/2013/03/21/using-intellij-slash-webstorm-to-debug-web-applications/"/>
    <updated>2013-03-21T17:14:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2013/03/21/using-intellij-slash-webstorm-to-debug-web-applications</id>
    <content type="html"><![CDATA[<p>Since I feel that the Dart Plugin in IntelliJ is at a point where it can do most, if not all things that the Dart Editor can do. I thought I would show how to setup debugging of Web Applications.
Primarily because a certain few on IRC wanted a step-by-step guide because they were too lazy to figure it out (you know who you are&#8230;.. Don). Seeing how I have been Evangelizing IntelliJ/Webstorm on
IRC, I decided to just help out the community with this mini-guide. To save on typing IntelliJ/Webstorm everywhere, I am going to us IW as a short for refering to both.</p>

<p>I will be using Spectre as my test project, because I do not have any of my own personal projects that are Web Apps, I mostly do backend stuff. Plus this also shows that this can handle large complex
applications.</p>

<!--more-->


<p>Caveats:</p>

<ul>
<li>Due to a bug in IW, launching the Dartium browser while running any other Chrome version, will just open a tab in that version. So you need to shutdown any open Chrome browsers beforehand. (<a href="http://youtrack.jetbrains.com/issue/WEB-1561" title="WEB-1561">Bug #1</a> &amp; <a href="http://youtrack.jetbrains.com/issue/WEB-6695" title="WEB-6695">Bug #2</a>)</li>
</ul>


<h3>Setting up the Project</h3>

<p>Setting up the project is pretty straightforward. If you are starting a new project, just make a new &#8220;Dart Web Application&#8221; and you are mostly set.</p>

<p>If you already have a working project, and you just want to switch IDEs, I find this approach the quickest and least error prone. Hit new Project and select &#8220;Dart Web Application&#8221;, and set the Project
and Module settings to the same root folder (makes life easier later). Make sure the Dart SDK path is right. If you have at any point added a Dart SDK anywhere, it should auto-fill for you.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/create-project.png" width="400" height="400" title="Creating a project." ></p>

<h3>Browser Setup</h3>

<p>This is just to make Dart Debuggin easier, but this is global, so you are welcome to set this up to your preference in any other way. In my settings below, I override the default browser with Dartium,
and also the Chrome location. This will make sure no matter how it wants to open Chrome, it will be Dartium. This setting should be easily found in both IDE versions.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/browser-setup.png" width="400" height="400" title="Setting up the browser." ></p>

<h3>Debugging</h3>

<p>At this point you should be ready to go. The final step is to debug the app. Find the primary HTML file in you folder structure, right-click it, and hit &#8216;Debug &#8220;x.html&#8221;&#8217;</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/debug-menu.png" width="400" height="400" title="Menu entry for debugging." ></p>

<p>It will open up, but it seems like nothing worked right (this happens only the first time). The reason being is that IntelliJ uses its own Plugin to support their debugging and hook into the browser. It will redirect you to the download page, and ask you to install it. You need to install this.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/jetbrains-extension.png" width="400" height="400" title="Getting the extension for Jetbrains." ></p>

<p>Once this is installed, it will automatically continue where it left off, load the page, and hook in the debugger.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/browser-running.png" width="400" height="400" title="Setting up the browser." ></p>

<p>And now if we switch back to the IDE we can see the debugger hooked and running.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/debug-console.png" title="Debugger Console." ></p>

<p>You can see console output in the console tab. Debugger tab will have all your watches and object views when you hit a breakpoint, and the Scripts tab I assume is for SourceMaps and other stuff for debugging.</p>

<p>Breakpointing and stopping works fully as long as the debug connection is open.</p>

<h3>Debugging stuff like WebGL</h3>

<p>(WebStorm Only as of writing. Explained below.)</p>

<p>So some cases require you to connect to a server address, even if its localhost. For example WebGL. You can&#8217;t run WebGL stuff from the filesystem, needs to go through a server.</p>

<p>Well, WebStorm (and soon IntelliJ) has an awesome feature where it already is running a Web Server. And you can access it from any browser for any project you have.</p>

<p><strong><em>http://localhost:63342/[projectName]/path/to/file</em></strong></p>

<p>In spectre&#8217;s case in my project, it would be: <strong><em>http://localhost:63342/spectre/web/asset_pack/asset_pack.html</em></strong></p>

<p>This will load the html file through the web server that is built in to WebStorm. So WebGL works.</p>

<p>But how do you make access this easy? and have the debugger turned on?</p>

<p>Well, we need to make a new custom configuration for the project, and use that. In order to create a custom configuration, there is a dropdown box in the toolbar at the top, right before the Run and Debug buttons. Open the dropdown and hit &#8220;Edit Configuration&#8221;.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/edit-conf-dropdown.png" width="400" height="400" title="Configuration Dropdown." ></p>

<p>Once in the configuration screen, hit the <strong>+</strong> button at the top left, hover over &#8220;JavaScript Debug&#8221;, and select Remote from the popout list.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/edit-conf-plus.png" width="400" height="400" title="Configuration Screen Plus Dropdown." ></p>

<p>Now set it up for Chrome, with the localhost URL I posted above, and adjust it to your project (You can test in a normal browser before-hand). Once its to your liking, you can ignore the mapping, hit apply, ok. And you are set.</p>

<p><img src="http://yulian.kuncheff.com/blog/images/post-images/edit-conf-remote.png" width="400" height="400" title="Remote Configuration." ></p>

<p>Now here is the difference. You can no longer use the right-click menu to launch, as that always uses the &#8220;Local&#8221; configuration. You need to select your configuration in the dropdown in the toolbar, and hit the &#8220;Debug&#8221; button next to it. It should launch, with fulld debugging enabled.</p>

<p><strong><em>IntelliJ Note:</em></strong> IntelliJ Idea will get this a bit later. Features from the specialied IDEs eventually trickle back up to the main IDE, but it takes a bit of time. Usually EAP releases get them quick, but very buggy. At the moment, I can access the URL using IntelliJ, but it always returns a custom 404 page. So its not usable. It will be here soon. There is an open bug about it on their tracker.</p>

<h2>Full Steam Ahead</h2>

<p>Hopefully this helps someone switch over to IntelliJ/Webstorm or if you are a current user, to use your environment to enjoy Dart.</p>

<p>The Dart Plugin works for IntelliJ Ultimate, IntelliJ Community, and Webstorm. So you can get IntelliJ CE for free, install the plugin, and you are ready to go. And if you want more features, you can always upgrade to the paid version or Webstorm. (Webstorm is just a subset of IntelliJ, everything that goes into the subset IDEs, gets a Plugin/Integration into IntelliJ, so IntelliJ gets everything, but if you want a focused (and cheaper) IDE, the subeset ones are a good buy)</p>

<h5>Links</h5>

<ul>
<li><a href="http://www.jetbrains.com/idea/" title="IntelliJ Idea">IntelliJ Idea</a></li>
<li><a href="http://www.jetbrains.com/webstorm/" title="WebStorm">WebStorm</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Why are there no true cross-platform filesystems?]]></title>
    <link href="http://yulian.kuncheff.com/blog/2013/02/21/why-are-there-no-true-cross-platform-filesystems/"/>
    <updated>2013-02-21T20:49:00-08:00</updated>
    <id>http://yulian.kuncheff.com/blog/2013/02/21/why-are-there-no-true-cross-platform-filesystems</id>
    <content type="html"><![CDATA[<p>As someone that has recently installed multiple operating systems on my desktop, I find a major problem that I think shouldn&#8217;t really exist, but does.</p>

<p>Over the last few months I have made it so that my PC desktop runs Windows 8, Linux Mint 14, and OSX Mountain Lion. This was a long endeavor, especially OSX. But everything works nicely and I have the development environments I need on all 3 platforms and all the additional chat, social, and browsing software I like to have running. So that no matter which platform I am on, I just work as normal.</p>

<p>But there is one massive thorn in my entire setup. Filesystems. After so many years of multiple OSes, I am surprised that there isn&#8217;t a single filesystem that is truely cross-platform and modern. The keyword is modern. FAT32 is still the only candidate for a true cross-platform Filesystem, but its dated, it has very hard limitations on file-sizes that makes it hard if you want to store 4gig+ movies, games, and other data. Also running a Plex server using data on the drive, torrenting, and games requires fast reads and writes.</p>

<p>I will outline a few of the downsides to many of the primary filesystems.</p>

<h3>EXT4 (&amp; 2/3)</h3>

<p>So the first step was the possibility of just adding EXT support to Windows, at the time thinking OSX had out of the box support for EXT4.</p>

<p>But after countless searching, all I found was old and no longer maintained drivers that supported EXT2 and parts of 3 (usually no journalling support). After a while, I decided I should get OSX setup, and then come back to this, thinking OSX would be just as easy.</p>

<p>To my surprise, OSX had the same problem. There were a bunch of FUSE projects for OSX, most out of date, OSXFUSE seemed updated, but then I couldn&#8217;t find a viable EXT3/4 fuse driver. They all suffered the same problems as in Windows.</p>

<p>I was really surprised that there wasn&#8217;t any good free EXT4 support on OSX. There is stuff like Paragon EXT and so on, but those cost money, and I don&#8217;t know how good they are, because they seem to be just paid FUSE implementations.</p>

<p>So EXT was out of the picture, because on a massive secondary drive with lots of big data, modern features of EXT4 are very beneficial (like extents and journalling) and I would prefer them.</p>

<h3>NTFS</h3>

<p>This I thought would be a decent alternative. I know there is ntfs-3g for write support in Linux, and I got pissed off one day, and just baught Tuxera NTFS for OSX for my Laptop, so I used that on the OSX partition.</p>

<p>Read performance was generally good, but one thing that was a huge blocker was write performance. Both ntfs-3g and Tuxera NTFS had poor write speeds. I compared them using the same file, starting from the native filesystem of the OS to the NTFS drive. Windows was obviously the fastest, ntfs-3g was ok, but took about 10 mins longer for the same file, and similar poor results on OSX with Tuxera.</p>

<p>Forget about downloading any torrents to the drive from a non-Windows OS. Takes way too long for it to actually write anything, and lots of corrupted blocks.</p>

<p>Not to mention the third-party implementations can be buggy, cause corruption, and other things. I didn&#8217;t experience them, but the possibility is much higher with them. Being as all of them are reverse-engineered.</p>

<p>So that kinda fell through. Even though its still what I have the drive set to, but I am not happy with it at all.</p>

<h3>HFS</h3>

<p>This is fine on OSX and Linux, but forget about it on Windows.</p>

<p>Linux support was almost there, but with limitations. Anything over 2TB would corrupt, and no journalling support. But it was better than nothing.</p>

<p>Windows though, only read-only implementations. Even with an official driver from Apple for read-only in bootcamp. Without write support its useless.</p>

<h3>ExFAT</h3>

<p>I thought this could be the saving grace for me, then I found about the so-so Linux support, and it doesn&#8217;t have any modern filesystem features. Just mostly an enhanced FAT. You need to use a fuse driver for Linux, which isn&#8217;t too bad, but not ideal. Patent encumberance doesn&#8217;t allow it to be included into the Kernel.</p>

<p>Not to mention it is a closed spec, so all third-party implementations are reverse-engineering and potentially have major problems.</p>

<h3>FAT32</h3>

<p>This just is not suitable for huge drives and large data, its old, very restricted, and somewhat useless for anything outside small flash drives, and possible legacy support.</p>

<h3>UDF</h3>

<p>I actually strongly considered using Plain UDF 2.01. Its supported by all the OSes. Plain version works well on hard drives. Linux doesn&#8217;t support writing on anything above 2.01. Maybe we should fix that.</p>

<p>Maybe a few mounting issues on Windows at first, but it seems like a good solution.</p>

<p>Just this is a new idea to me, and I want to look into it more before I try. At first glance, it seems a lot like FAT and doesn&#8217;t have a lot of big data fancy features. Though it is used for DVDs and Blu-rays.</p>

<p>Maybe a Spared version could be better. I need to research more into this, but this might be the only good solution.</p>

<h3>Btrfs</h3>

<p>This has only Linux support atm, but as a filesystem still in development, I would love to see this get fully featured Windows and OSX drivers by the time it hits 1.0. This would be amazing, and would be the first open source, free, modern filesystem to do it.</p>

<p>But I am not holding my breath, OSX maybe, but there seems to be some severe hate for Windows by Linux diehards, so I don&#8217;t think it will happen. But its nice to dream.</p>

<h3>May other Filesystems only supported by Linux</h3>

<p>There are a slew of filesystems out there, a majority are only supported by Linux or *nix derivatives. Some have read support on OSX through MacFuse and OSXFuse, but only read support.</p>

<p>And forget Windows, nothing there.</p>

<h3>Conclusion</h3>

<p>There isn&#8217;t a single quality modern filesystem that is cross-platform. NTFS is the closest, but it suffers from performance problems on non-Windows systems.</p>

<p>Maybe I should just buckle-down for the next 2-3 years, and make it myself. I am just more of a high-level developer. I live in languages that are interpreted or on VMs. I know enough C/C++ to get by, but not enough to make efficient OS drivers.</p>

<p>I think this is an issue that needs to be remedied. At least OSX and Linux. Windows can come after.</p>

<p>For now, I might give UDF a try, not sure yet. Guess I will stick to the slow NTFS on OSX/Linux.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[New Blog Engine]]></title>
    <link href="http://yulian.kuncheff.com/blog/2013/02/15/new-blog-engine/"/>
    <updated>2013-02-15T22:01:00-08:00</updated>
    <id>http://yulian.kuncheff.com/blog/2013/02/15/new-blog-engine</id>
    <content type="html"><![CDATA[<p>I am hijacking this post as a new one, since its the same subject. I caved and just went with Octopress, I lost my Pelican install, and with it the hours I spent modifying the theme. Along with a lot of the post data. So I just decided to use something supported.</p>

<!-- more -->


<h3>Old Post</h3>

<p>I have been wanting to swithc to a static blog engine, but I didn&#8217;t really like Octopress (I tried it once before). So I went through a few of them to see which I liked and finally stuck to Pelican. It seems to have everything I need and works well. I&#8217;ll give it a test drive, worst case, I switch to Bonsai or Octopress. But Pelican works nicely.</p>

<p>And with the new blog comes a new design. I took one I liked from pelican-themes and modified it to my liking. I think it turned out pretty good.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Language Bloat]]></title>
    <link href="http://yulian.kuncheff.com/blog/2012/09/29/language-bloat/"/>
    <updated>2012-09-29T12:25:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2012/09/29/language-bloat</id>
    <content type="html"><![CDATA[<p><em>Disclaimer: After reading through this a few times, I realized my train of thought jumps around a lot on this. There is just so much going on in my head on this topic, its hard to not jump around. I apologize for the all over the place article. Hopefully my point is still conveyed.</em></p>

<blockquote><p>Update: I just want to clarify that when I refer to JVM/CLR I include their primary language and their standard libraries. The JVM and CLR are robust, generally small, and powerful VMs. The primary bloat gain on them comes from the primary language implementation and the massive libraries that come with it. Java is bloated, with it 100s of libraries and standard libraries were made, which in turn makes them bloated and in turn bloats the whole entire platform. If for example, we took the JVM, rewrote all the libraries in Scala, and used Scala, it would be much much lighter. The problem is Java and the bloat it has introduced into libraries and programs written in it on the JVM. Most languages on the JVM use the Java standard library as a base, so the bloat comes with it.</p></blockquote>

<p>As of recently, I have been having a hard time enjoying the languages I program in. At first I was afraid it might be burnout, but it isn&#8217;t. I still thoroughly enjoy programming, making things, and bringing my ideas to reality. So I sat down and just asked myself what I didn&#8217;t like about them. It always came to the same point: Bloat.</p>

<p>Lately, all the fun and interesting languages that I enjoy using tend to be on either the .NET CLR or the JVM. That is all fine and dandy, but anytime I see that, I get this nagging feeling of distaste. I was curious on what was causing this when I really liked the language semantics and syntax.</p>

<p>All these languages had something in common, very bloated standard libraries and sdks. For anything on the JVM, I need to get the JDK which is a few hundred megs, then if its a language other than Java, I need to get that language&#8217;s SDK also. For .NET, its all the Mono libraries or all of .NET and Visual Studio.</p>

<p>An example, Grails. I use it a bit at work, along with Groovy. So I need to get the JDK, Groovy SDK, and the Grails SDK. Of the top of my head, I think this was 200 megs in packages, libraries, and other crap, 90% of which I didn&#8217;t need.</p>

<p>But then I realized I was having problems with Python and Ruby, which are much lighter than the above said setups. I thoroughly enjoy using Python, and it is much lighter. But why does it still feel bloated? For these two languages, it came down to the library/module systems. Python Eggs and Ruby Gems along with their package managers.</p>

<p>One of the many reasons I dislike Ruby (actually Ruby has been growing on my a bit, primarily because of Groovy, I still hate Rails, Sinatra or Flask for Python seem more my thing), is the Gem package system. It feels messy, and bloated. Python and Ruby by themselves aren&#8217;t all that bloated, they are kind of midway between bloated like Java/.NET and what I consider a light platform (I will get to these in a bit). But their module systems make the whole thing a mess.</p>

<p>These factors tend to kinda put me off when I think about sharing my apps, programs, and tools with others, or if I consider deploying said server-side software and managing it. Java, Ruby, and Python tend to come pre-installed on most unix systems, or very easily installed with the respective system&#8217;s package manager, but with it tends to come way too many supporting libraries and dependencies.</p>

<p>I have been apart of the Node.js craze, and I still think Node is a solid platform and would use it for various things, but my problems with it stem in the actual Javascript language, all its pitfalls and things I have to constantly work around, I really just don&#8217;t want to deal with it. But the platform seems somehow lightweight and clean. Node itself is only a few megs. It has a basic standard library, and leaves the rest to third-party modules, or even if first party, they aren&#8217;t part of Node. The modules themselves feel light aswell. Some are a mess and can be bloated, but overall, things seem less of a problem compared to Jars, Gems, or Eggs (I feel like I am talking about some scenery in Aladdin).</p>

<p>I also am a fan of Dart. Google might an insane uphill battle to even get other browsers to consider it, but the language and DartVM are a pleasure to work with, and it has the same light and fast feel of Javascript and Node.js. Dart is still in very early development, and I wouldn&#8217;t use it for anything serious, but it is a pleasure to work with. If it doesn&#8217;t catch on in the browser, I will probably use it as a general purpose language using the DartVM like many use Node.js.</p>

<p>But this brings me back to the other languages/platforms. I feel they could be implemented in much lighter and robust packages. And their module/library systems can be streamlined and lighter. I know Ruby has a package manager called Bundler, but I never used it, and I hear mixed reviews about it. For Python, I use pip, and it seems lighter than easy_install.</p>

<p>Maybe I am just delusional and this is all in my head, but there are so many fun languages, yet they suffer not because the language itself, but because of the platforms under them. I tend to enjoy more Python-like languages, like Boo, Groovy, Python itself, Genie.</p>

<p>Here is a list of languages I enjoy that feel ruined because of whats under them:</p>

<p><em>JVM
<strong> Groovy (I use Java and Groovy on Grails at work)
</strong> Scala (Has a CLR emitter too)
** Clojure (I know of ClojureScript, but then i deal with Javascript)
</em>CLR
<strong> C#
</strong> F#
<em><em> Boo
</em>Python (Also the JVM/CLR versions and I currently tend to use Python for most of my personal work)
</em>Ruby (Also the JVM/CLR Versions)</p>

<p>Now, I have considered compiled languages, and I do want to use them, but then there aren&#8217;t many interesting compiled languages. C/C++ I do not like working with. D is ok, but something about it made me feel meh about it. Vala and Genie seem awesome, but they are quite dependent on GObject and GLIB, so portability to Windows and partially to OSX is messy and a headache. (in all honesty, Genie could probably be for me). I have been trying Go lately, and I have a love/hate opinion on it. It feels awesome, but at other times it just feels odd.</p>

<p>I guess my ideal language is the lightness of Dart/Node and their module system, with the syntax of Python/Groovy/Ruby, and the popularity of Java/Ruby/Node. Wishful thinking.</p>

<p>You might be saying I should try to make my own and see it isn&#8217;t so easy, and maybe I should write my own, but then it would be horrible and I know I wouldn&#8217;t be able to make it as light and efficient as I want it to be. (I am taking a Compiler Design course atm, and a Programming paradigms course. One is having me do Pascal interpreter in Java that can also compile to C using JavaCC, and another is having me write a Scheme Interpreter in Javascript using JS/CC).</p>

<p>There is just this bloated feel I get from languages nowadays. Its the best way I can describe it. I guess I can always just make my won, but I don&#8217;t have experience in that, and my distaste for C/C++ would hinder me from making it really efficient. I can make a Shim language around Dart, but i need to wait for it to mature some more. I could make my compiler/interpreter in Go. That might be an interesting project.</p>

<p>P.S. I need a new blog system, this one is nice, but dev on it seems dead, and this thing seems bloated, and its in PHP, blah.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Language Fanboyism]]></title>
    <link href="http://yulian.kuncheff.com/blog/2012/07/07/language-fanboyism/"/>
    <updated>2012-07-07T12:25:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2012/07/07/language-fanboyism</id>
    <content type="html"><![CDATA[<p>This is an opinion and a rant based on my opinion and observations, you have been warned.</p>

<p>As a programmer, I see this a lot. People so engrossed in their language that they don&#8217;t see its problems or shortcomings, and in turn think every other language, new or old, is bad and will never match up. I sit in a lot of programming language channels on Freenode, and the way I see people defend their language of choice or completely dismiss other languages is baffling. I just don&#8217;t get why people CHOOSE to lock themselves in to a language so deeply that it becomes like a religion. I even have seen some people say they have only learned that one language, and won&#8217;t learn anything else. At my heavily Java focused school, I even heard a student say, &#8220;Well, I want to be a good Java developer, I have no care or interest in any other language or concept&#8221; as I was walking out of the room with WTF moment in my head.</p>

<p>One primary and quite universal example is stuff made by Microsoft. Even at the mention of C#, F#, CLR, .NET and people grab their pitchforks and are ready to lynch you for heresy. Most also seem to relate .NET and CLR directly to being Windows only, or Microsoft evil. Most don&#8217;t understand or know that C# and the CLR are ECMA standardized and Microsoft has made a public community promise to never try to do anything evil with it. You can safely peruse the promise on Microsoft&#8217;s site , don&#8217;t worry, it won&#8217;t defile your hard drives or require an exorcism of your computer when you are done. On top of that, many in the open source community don&#8217;t even know of the Mono project, and the incredible effort they have made to recreate the .NET framework for all other platforms. They even are fully up to date, including .NET 4.5 support on their development branch of their repo.</p>

<p>Another example is new languages. Recently, the Dart language was announced by Google and is in active early development. Before anyone tried it, or even checked it out, people immediately dismissed it for being made by Google. But even bigger was the screams and rioting of the Javascript community. How dare someone try to replace Javascript in the browser, or try to introduce a new language to compete with it in the browser space. Now I know it will have one of the hardest battles ever against Javascript, especially with the huge popularity boom for it and Node.js popularity. Then came the problems with Dart2js and its early development results of huge JS files. People immediately shot it down for having bugs, or being poorly optimized, regardless that it was a secondary effort alpha software for a very alpha language.</p>

<p>And you can go on and on about the language and platform wars that go on. Ruby vs Python vs Node for web dev? That&#8217;s its own war altogether.</p>

<p>But the real question is why? Are you that narrow minded? Wouldn&#8217;t it be better to strive to be a better programmer in general, know how to work with many languages, paradigms, and methods of thought, so that you can write programs that others only dream to write? This isn&#8217;t an all encompassing generalization. I know many programmers that after trying many languages, choose their language out of comfort, ease of use, and what fits them. They are fine, they have made an educated decision, and know the consequences. They also usually know the limitations, problems, and shortcomings of the language well enough to work around them or with them. I am mostly talking about the programmers that follow like sheep to the &#8220;in&#8221; thing. Or without knowing enough, jump into something, proclaim it as the divine gospel of the savior of the 1&#8217;s and 0&#8217;s, and never branch out.</p>

<p>I dunno, maybe I like being versatile, knowing more, bettering myself, exploring new things, and just giving everything a fair shot. Like for me personally, I hate Ruby. I have tried to use it many times, sometimes even forced myself to make entire projects with it. I just do not like it. And thats my problem, but I have come to this conclusion through research and actual use of the language.</p>

<p>Meh, their loss. I&#8217;ll be busy over here, writing IronDart in C# (Dart for the CLR for those that don&#8217;t know the naming convention), while running web apps with Node.js, maintaining everything with Python, processing logs with Haskell and Clojure, and facepalming at PHP. Mmm, looks good to me.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Monogame]]></title>
    <link href="http://yulian.kuncheff.com/blog/2012/04/30/monogame/"/>
    <updated>2012-04-30T21:25:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2012/04/30/monogame</id>
    <content type="html"><![CDATA[<p><em>Disclaimer: This is all opinion and personal preference. A lot of the frameworks and game engines I talk about are great, and its my own choices that make them subpar for me. Please take this as an opinion peace, I am not trying to sway anyone in any way, it is just an explanation on why I chose what I did in hopes it might give someone else some ideas.</em></p>

<p>Ok, so this really isn&#8217;t much a rant, but more of a why I chose to go this approach over some other approach. I recently wanted to actually &#8220;make&#8221; games. Reason I have it in quotes, is because I always have an idea, I do the research, write the first 20 lines, and get a new idea and switch to it. Nothing ever got done.</p>

<p>I finally found a major reason (but not the only reason) on why I do this. Out of personal choice and preference, I want any game I make to be as cross-platform as possible. This puts a real damper on things because there are very few frameworks or platforms that are cross-platform enough. There is always an important platform missing, be it Linux, Windows Phone 7, or a combination of many missing ones. I have gone through many frameworks, including Haxe, Corona, Monkey, Unity, and even less frameworky setups. I finally ended up with Mono and MonoGame, and I will detail why I chose this after I lay out what I have tried and why it didn&#8217;t work.</p>

<p>Second, it is most programmers&#8217; dream to write code once, and release to multiple platforms. Even with minor modifications per platform. So I am naively still chasing that idea, as many others are too.</p>

<p>Third, I want to be able to prototype and build the game as quickly as possible. I have too many ideas, and I tend to switch too often and never get anything done. So taking the time to write my own Engine, Library, or Framework would really slow me down and I would probably lose interest. BUT, I might make it a project to write my own Javascript Game Library/Framework. It sounds like a fun project in of itself.</p>

<h2>Mobile Only Frameworks</h2>

<p>I am going to preface this by stating that I understand that WP7 support for many frameworks is not possible because it doesn&#8217;t allow for custom runtimes to run on the phone mostly because it doesn&#8217;t allow low level access to the system or C/C++ access. So WP7 is really not something I will analyze or really mention often.</p>

<p>There are many frameworks that are made specifically for only mobile targets. This is fine, as long as I can find a complimentary Desktop library if the game is geared to Desktop play alongside mobile play. If its mobile only thats fine, but even then it has problems. One of the major problems is frameworks tend to be geared for 1 platform. One popular framework is Corona. It looks like a superb platform, but its missing some key features and has been missing them for as long as I have known about Corona. One being Shaders. I have always waited for them to add shader support, but it is constantly getting other (in my opinion) less important features.</p>

<p>But there are so many mobile frameworks out right now. It is getting a bit ridiculous. During my search I found at least 10 different frameworks that do almost the exact same thing, targeting iOS or Android. Some throw in Blackberry, Symbian, and HTML5. But in the long run, they don&#8217;t provide a benefit over each other and tend provide lackluster feature support of the target platforms.</p>

<p>So all those get scratched off the list right off the bat.</p>

<h2>Desktop/Mobile Frameworks</h2>

<p>So now we go into the realm where 1 framework can target multiple form factors, paradigms, and platforms. There is always a need to understand that a certain game might not be playable or as fun on a certain form factor or control scheme. So you will always need to evaluate which platform to push to. But being able to make a game that fits all the form factors, and play well is something that is possible, and seems to be a growing trend.</p>

<p>So I first started out with some fan favorites like Unity3D. First thing, as the name suggests, it has really no support for 2D game making. You can emulate 2/2.5D games if you fix camera positions and do various other tricks, but you still need to have a solid understanding of 3D game programming. But I had a few 3D game ideas, and I was willing to make some of my 2D games into 3D. Now, I am fully aware that this might be due to my lack of experience in game making, let along 3D game making, but I find Unity3D horribly confusing to use. Maybe its the different structure, but the way the scripts meshed with the scene, and the files. I really had a tough time figuring out how to access and control objects in the scene from the code. So Unity3D got a huge pass from me because, I just couldn&#8217;t use it. I will revisit it in the future when I am more mature in this, and it might make perfect sense, but right now, I feel really out of place using it.</p>

<p>There are 2 other frameworks that offered the same choice. One was DeltaEngine, and another was ShiVa3D. Both are great in their own respect, and DeltaEngine even uses C# (one of my favorite languages, but more on that a bit later) but it is still new and by the time I considered it and ShiVa, I had figured I was too inexperienced to jump straight into 3D, at least through a framework (writing 3D from scratch doesn&#8217;t seem all that daunting, even though it probably is). But another killer for me on ShiVa3D and Unity is now WP7 support. Though, due to WP7 limitations, I understand that it might not be even a valid choice for them as they can&#8217;t port the runtime or the C/C++ code. Maybe in WP8.</p>

<h2>HTML5/Javascript</h2>

<p>After searching countless hours, I decided I should just go the Javascript/HTML5 route. I greatly enjoy non-Website Javascript programming and I found plenty of frameworks that can package it all up into a nice package for every platform. Desktops were a bit harder to find, but there are solutions like TideSDK and Air. Along with writing my own wrapper setup with Chromium Embedded. Mobile is not an issue as there are things like PhoneGap that will allow me to do just that on most mobile platforms. If the platform doesn&#8217;t have a packager, all the important mobile platforms have HTML5/JS supporting browsers, so it can run in the browser.</p>

<p>Javascript really provides the true Cross-platform support, and with Node.js (my server side language of choice), I can really write everything in 1 language and 1 codebase.</p>

<p>But I hit a stumbling block. Most engines, frameworks, or even rendering libraries are in very early stages of development. They work, but not all the way. And I have seen a lot of problematic support with the packagers. I can always write most from scratch, and even release it open source as a library for others to use. But Javascript is still newer to me. I didn&#8217;t really join the bandwagon until Node.js (and I joined that around version 4.10ish). I was never fond of the language until I saw its real power outside the browser. This is probably all just excuses, and laziness on my part, but I really did not feel comfortable rewriting Canvas drawing libraries. I have looked into CAAT, Craftyjs, Impact3D, GameQuery, and a few others. Impact3D was a no go because it requires purchase before usage. I will not buy a framework that I don&#8217;t even know is the right fit for me. GameQuery is still in early development and I don&#8217;t think it is ready for primetime. CAAT and Craftyjs are the most mature, and are very solid frameworks. I just found their API a bit limiting. But don&#8217;t get me wrong, these are great frameworks/engines. I just doesn&#8217;t have the tools I am looking for. But if I had to do it again. I would probably go with Craftyjs.</p>

<p>I am sure I am forgetting some good ones, but I can&#8217;t remember them off the top of my head.</p>

<h2>So what was left?</h2>

<p>After lots of searching, I re-stumbled on something that I had seen long ago, but did not think much of it at the time. It was something I saw after the Windows 8 development info came out and the future of XNA came into question. I was mostly worried about WP7 support at the time. The solution I found was MonoGame, an open source re-implementation of XNA with works with .NET or Mono, which is an open source implementation of .NET and a C# compiler.</p>

<p>So why did I end up choosing it? Well firstly, I really enjoy C# as a programming language. It just clicks for me and has a lot of features like Lambda Expressions, Anonymous functions, etc. that I find very useful and allows for the language to be used functionally. It is a language I have grown to like a lot, and I am glad there is a project like Mono that has most of .NET 4.0 ported, and I think now a good chunk of 4.5 in the dev branches. Plus the .NET Standard Libraries are really well done, and I find much greater stability in .NET than I do in Java&#8217;s Standard Libraries. Plus all the dev tools are top notch. (I hate Eclipse with a fiery passion)</p>

<p>Then comes MonoGame. Which takes XNA, a very easy to use and really well supported framework. Since it is a direct compatible API, XNA examples and test games actually just work in my own tests with the beauty of compiling them and running them on OSX and Linux.</p>

<p>But the real kicker, is they are using SharpDevelop to add support for Windows 8 and Windows 8 metro. So I can take my game, compile it for Metro and put it on the up and coming Metro App store. This breathes a lot of life into a framework that was frankensteined apart and put into WinRT. And allows it for a path to grow on its own and add more DX10/11 options that were not possible before. Also means, Win8 Arm Tablet support!</p>

<p>Another benefit is MonoDevelop, which allows me 1 IDE for all the platforms and allows me to work on my Macbook Air without the need to Bootcamp it and waste space installing Visual Studio.</p>

<p>Then came some amazing bonuses. Xamarin&#8217;s efforts in getting the Mono runtime to work on Android and iOS. This allows for MonoGame to just run directly ontop of those Mono implementations. If I remember correctly, Xamarin manages the OSX binaries and development too.</p>

<p>So we have a mature and supported language with a solid standard library. A pretty much game making framework with a big community and samples. Support for all the important platforms (Windows XP - 8/Metro, OSX, Linux, Android, iOS, WP7, XBOX, or anything Mono runs on), Multi-platform development tools, and future-proofing. Also Playstation Support is planned.</p>

<p>So what more can it really give? &#8230; HTML5/WebGL. Using a tool I found just recently, you can take the CIL bytecode and compile it into pretty readable Javascript. The tool is called JSIL and it is still in early development but the website has some really good examples and ports to show off. Now, WebGL is a bit limiting, but most browsers support it (with the exception of IE), no mobile browser support, but the can be worked on too..</p>

<p>Also, I believe there might be a NaCl target some day. Bastion was able to make their Chrome App Store version using MonoGame. This adds yet another option for in-browser gaming. So that adds another platform to the Package. I also believe Bastion uses MonoGame for their recent OSX release.</p>

<h2>This is all great, but what is the catch?</h2>

<p>There is no real catch, more like caveats. They need to be considered when porting things between platforms and a few other tidbits.</p>

<p>First, 3D support in the current MonoGame 2.5 does not exist. But fret not. the current main development branch is very active on 3D support, and there are already test projects running 3D XNA. So it won&#8217;t be long now when MonoGame 3.0 comes out and we get full 3D support. Just a bit more waiting.</p>

<p>Second, the Content Pipeline is not implemented in MonoGame. At least not in the full sense. It still has the content manager for loading files. But it doesn&#8217;t use XNBs and it just loads them directly form their normal format. Second, Mono and MonoDevelop do not support the Content Project (.contentproj).</p>

<p>So this issue cropped up for me. I had started my project on OSX in MonoDevelop. All was fine in dandy and I had a major chunk working. Then when I tried to run it on Windows, it wouldn&#8217;t compile. I found out that XNA requires a Content Project with a Content Reference in the Main project. No leeway. So after frankensteining the XML in the project files, and doing some pathing fun. I got my project to use the Content folder in my Main project as a Content Project with a reference to it. A bit confusing, but it works, and it didn&#8217;t break the MonoDevelop on other platforms or my other Solutions for the other platforms. But, it did break MonoDevelop on Windows. Without knowing how to work with the Content Project file, it just would not load the content project, since it couldn&#8217;t pull the Content. So I am forced to use Visual Studio on Windows, until they add better support for Content Projects into Mono/MonoDevelop/MonoGame.</p>

<p>But, once I got all that taken care of, it ran beautifully on all platforms. Oh and another note. You need to make a Solution file for every platform. So you can set the proper settings for each platform and to allow you to use Pre-Processor If/Endif statements to add platform conditional stuff.</p>

<p>So while not ideal, Mono and MonoGame has actually provided a way to write 1 code, and port it out to 9 platforms (8 if you don&#8217;t count Win8 Metro as a separate platform) and add 1 for planned future support for PLaystation Suite.</p>

<p>Lets hope it works out and stays good.</p>

<p>Links:</p>

<ul>
<li>Mono - <a href="http://www.mono-project.org">www.mono-project.org</a></li>
<li>MonoGame - <a href="http://www.monogame.net">www.monogame.net</a></li>
<li>JSIL - <a href="http://www.jsil.org">www.jsil.org</a></li>
<li>CraftyJS - <a href="http://www.craftyjs.com">www.craftyjs.com</a></li>
<li>GameQuery - <a href="http://www.gamequeryjs.com">www.gamequeryjs.com</a></li>
<li>CAAT - <a href="http://labs.hyperandroid.com/animation">labs.hyperandroid.com/animation</a></li>
<li>ShiVa3D - <a href="http://www.stonetrip.com">www.stonetrip.com</a></li>
<li>Unity3D - <a href="http://www.unity3d.com">www.unity3d.com</a></li>
<li>DeltaEngine - <a href="http://www.deltaengine.com">www.deltaengine.com</a></li>
<li>Corona - <a href="http://www.anscamobile.com">www.anscamobile.com</a></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[OAuth Usage]]></title>
    <link href="http://yulian.kuncheff.com/blog/2012/04/04/oauth-usage/"/>
    <updated>2012-04-04T21:25:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2012/04/04/oauth-usage</id>
    <content type="html"><![CDATA[<p>One thing that really bugs me lately is the selective use of OAuth providers. Specifically, Facebook. It is one of my pet peeves when I come to a site that I want to try out, but they require Facebook in order to login. I rarely if ever use Facebook, I personally hate using Facebook (rant for another day), but I have one, for some basic connections and logging into places if I really have to.</p>

<p>This normally wouldn&#8217;t be an issue if developers would add more sources. At least the more popular ones like Twitter, Google, Github, Windows Live, whatever. And the way OAuth is made, its not very hard to do this. You just need to add a bit of services specific code to handle the keys, if that. There are even libraries for most languages and platforms that do this all for you.</p>

<p>So I really don&#8217;t get why developers don&#8217;t do this. 95% of the usage I have seen is to pull your name, email, picture, and maybe your bio. This can be done from all of these services and its not hard to do. Even with my hatred for Facebook, and that I prefer Bitbucket over Github. I would add support for these OAuth providers if I ever write any login-based web apps. I would much prefer to login with Twitter for everything, but that choice is never given to me, its always Facebook or Normal Login, or just Facebook. Rarely do I see more than that.</p>

<p>But this also goes for others too. For example Geekli.st. I know they are trying to emulate Twitter more than anything, but nothing is stopping them from using the other OAuth providers to provide a login to their Geekli.st persona. The same info that they pull from Twitter can be pulled from other services, and then once internal, they can work like they always do.</p>

<p>A couple of examples of places that could easily implement more, but fail to do so, some of these are sites I frequent and love, some are not. These are off the top of my head, so I can&#8217;t name many, but I know I have stumbled on many, throughout surfing the web.</p>

<ul>
<li>The Verge - www.theverge.com - Only uses Facebook or Normal Login</li>
<li>Geekli.st - www.geekli.st - Only Twitter</li>
<li>Yahoo - www.yahoo.com - Only Windows Live &amp; Google or Normal Login</li>
<li>Pinterest - www.pinterest.com - Facebook and Twitter, (was excited when I saw twitter) but they could still add Google and maybe Live.</li>
<li>Minus - www.minus.com - Facebook, Twitter, and Normal Login. Could add Google and Live.</li>
<li>Flixster - www.flixster.com - Only Facebook and Normal Login</li>
<li>Many others, I tend to not remember/go to sites that force me to use Facebook Only.</li>
</ul>


<p>Numerous apps too:</p>

<ul>
<li>Draw Something - Facebook or Normal Login</li>
<li>Zynga Games - Facebook, but this one I can understand due to how tied Zynga is to Facebook still.</li>
<li>Plenty others.</li>
</ul>


<p>I can only think of this one off the top of my head for providing lots of option, I know there are more, just can&#8217;t remember them all:</p>

<ul>
<li>Disqus - Facebook, Twitter, Google, OpenID, Normal Login - Lots of choice, bound to hit something a user prefers.</li>
</ul>


<p>On a side note, I do wish more services provided OAuth Logins in general. I prefer to just hit Login with Twitter, and since I already stay logged into Twitter all the time, I just click Accept for new apps, or it will just do a couple redirects and I am in.</p>

<p>I just feel developers need to not lock themselves into once service. One because no one knows how long a service will exist or be ok with a service&#8217;s policies. Second, it lowers the amount of people that use your service. There are many that hate one service or the other, or hate Social Networks in general, but the more options you provide, the bigger the market you will capture. I know numerous websites that I would love to use, but don&#8217;t want to login with Facebook, so I just never use them and/or find alternatives.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Lets try this again! (again)]]></title>
    <link href="http://yulian.kuncheff.com/blog/2012/04/03/lets-try-this-again-again/"/>
    <updated>2012-04-03T21:25:00-07:00</updated>
    <id>http://yulian.kuncheff.com/blog/2012/04/03/lets-try-this-again-again</id>
    <content type="html"><![CDATA[<p>I think this will work out better than the other blogs I started. Finally found a platform that I feel is easy enough to keep up to date, and post how I feel would be best to post. Even comes with Bookmarklets and an Email -> Blog posting mechanism built in.</p>
]]></content>
  </entry>
  
</feed>
