Showing posts with label programming languages. Show all posts
Showing posts with label programming languages. Show all posts

Thursday, July 25, 2013

Missed it by *that* much

Looks like I missed the chance to have an "I'm not dead" post on the three-year anniversary of my last post. What a shame.

 Since that last post, things have changed, as they do. New job, new child, new skills...

 I still aspire to make my mark in the computing world, dashing back and forth between various projects over the last three years, and foolishly never finishing one.

  My work with Windows Phone development has been on hiatus for a while, mainly because of other projects that came along and drew away my attention, but more recently because the focus in that industry is now on Windows Phone 8, of which I have neither a handset nor a machine that is capable of running the development tools. I still think the platform is fantastic, and fully plan on returning to it, as other projects yearn to reach multiple platforms.

  I took part in the MintChip Challenge, but because of time, and the fact that I was determined to submit my entry on a not-quite-supported platform, I didn't complete a submission in time. It's an interesting technology, and it was a fun project to be part of.

  I'm currently involved in The Loom game engine community. This is a growing community of talented game developers of varying experience, and the small team at The Engine Co. are a friendly and bright bunch. I'm hoping they go far, and hoping to take advantage of the Loom engine in the near future, not just to ensure I take full advantage of the promotional free year license I currently have.

  I've been attempting to stick to Agile development practices for my personal projects, even when the project is a team of one. I've fully moved to and embraced git, if for no other reason than because everyone else is doing it. I'm a branching fool, now. And I've hopped around a variety of issue and task management tools, settling currently on the Atlassian suite, with JIRA, Greenhopper for Agile, and Confluence for document management. I used to be a written-on-a-pad-of-paper guy for keeping track of bugs and future features, and while I'm not 100% disciplined, I'm definitely finding these tools help direct me more efficiently than before.

  As for new technologies, they just don't stop coming. I've been staying atop the latest in ASP.NET MVC development, and love the Entity Framework for tying together my data and my front-end. I've enjoyed diving into TypeScript, Microsoft's bridle for Javascript. With it I've finally gone beyond the simple onClick snippets of Javascript use to some large-scale projects, most powered by Node.js. I've still not gone head-first into any of the popular JavaScript libraries out there, but I've dabbled with a few and have a lengthy set of bookmarks to return to when I'm ready to overpower a web front-end.

  There are lots of technologies on my radar that I've not given enough attention to. I finally gave Ruby a look after years of scoffing, only to realize it's a sane Python, which makes it good in my books. I still want to give F# a try, but have yet to find a project that I could/should use it for. Same goes for Scala; it's getting popular, and while I've read the reference and am intrigued, I've not found the need to put it to use. I recently learned about SignalR, which I wish I had a few years ago for a variety of defunct/hibernating projects.

  I learned about SignalR during one of the numerous JumpStart courses over at Microsoft Virtual Academy. I'm not sure how long that's been around, but I'm miffed that I didn't know about it sooner. The range of material and the quality of the courses there are fantastic. The ASP.NET MVC course had something interesting or useful in every portion. I've joined a few local user groups and have been attending their seminars, allowing me to keep up on other new technologies, ranging from server platforms and virtualization to multiplatform mobile development (Xamarin). I've also been watching a few of the Pluralsight videos I have available through my work MSDN subscription, but the majority of them aren't as advanced as I would like or need.

  Getting my own MSDN subscription, including a bit more access to Pluralsight, is what I'm hoping to do soon via the BizSpark from Microsoft. This program helps startups get a leg-up with free tools, training, resources and community, including access to Azure. For a while I'd been giving The Cloud a "yes, yes, storage and services on the net - very nice" tone of dismissal, but after finally poking around Amazon AC3 and Microsoft Azure for a bit, I'm finally on-board with needing and wanting such services, especially for my current project. The fact that my old Linux machine finally died, leaving me with one less option for self-hosting, certainly helped drive me to finally looking into the hubbub around cloud services.

  Other than that, I've still not done as much as I'd like on Android or iOS, which I'm hoping to change soon. I had had big plans to get apps onto the Windows Store early, to take advantage of that early period; some might argue that Windows 8 RT hasn't gotten the traction to say that it's beyond its early period, in which case perhaps there's hope. And Blackberry 10 -- had time permitted I would have liked to get in at the beginning there, too, especially with the incentives that they were giving for app developers. Not that I'm convinced that the platform will survive, but early adopters still needed some apps to download, and it would have been nice if I could have provided something for them. It was confirmed that Xbox One will welcome development by indies, which is an appealing thought, but I'm reasonable enough to know that, for now, that platform is a bit out of my reach unless I can become a full-time indie developer.

  As you can see, I've certainly not been idle, but this blog sure hasn't supported that. Time being what it is -- lacking, fleeting, etc. -- the little I do find for personal projects goes to learning, planning and development right now, which means that writing, such as the blog, just gets neglected. As many have said, I hope to post more often, but really, will you believe that before you see it?

Sunday, March 14, 2010

A month later

I'm making good headway through reading the C# 4.0 in a Nutshell book; some might say that it's not really a front-to-back book, especially in the later chapters where it's definitely reference information, but I find it a good way to get a sense of the capabilities of a system/API/library to go right through.

I'm loving C# 4.0. It has some really good advanced features of "modern" languages that make it very powerful, such as delegates, lambdas, generics, operator overloading, dynamic lookup, named parameters, variance... yes, I'm aware some of these features existed in C# before 4.0. And many of these features are available in other languages, but not usually ALL of them. Having some of my favorites from C++, Java and Lua, all bundled together, makes for a delightful language. Many of these features go very well with the way MUDs/MMOs work, with the idea of object trees, feature inheritance, scripting events and the like: if you "use" an object, the engine just has to call the object's use() function; if it doesn't have one, then nothing happens, and if it does have one, it just gets called. No having to check the object type, no need to check for member availability, no need to cast -- no need for the engine to ask "is this a useable object" at all. But now I'm encroaching on the content of my other blog.


I've just finished the first step of the asset-stripping project; I can now pull out a terrain tile and save it to file. This is something that was much quicker to do in Lua and Go, mainly because of fighting with the build environment. Even though I have access to C# via Visual Studio, I'm a die-hard command-line coder, and am much happier (and much more productive) when using emacs and make. Thus, instead of just writing the code that I've got in ten minutes and having it work, I've been fighting with getting Mono, the free implementation of C#/.NET, working for me. Some of the problems were on installation, and some were on CLR usage that looked like installation issues until Google saved the day.

In the end, though, having the full .NET library available makes things so much easier. In Lua, I ended up dumping the sprite rendering onto ImageMagick, instead of trying to find a decent PNG library. In Go, PNG support was provided with the libraries, but all of the explicit typecasting really made for an unenjoyable programming experience. In C#, once I got around the compilation issues, it was nearly trivial, with zero-indexed arrays (unlike Lua), and natural type conversions.

My next step is to get Mono to display the graphic for me, instead of just dumping it to a file; this will be the first step into writing an InsideUO clone, and my first step towards being ready to write a test game client for MMORF.

Friday, October 2, 2009

Wave language

Of course, after thinking about a Wave compiler, I started thinking about what language might be interesting to try this with, trying to think about how you would handle code across multiple source files (is a Wave a source file, a Workspace or a Project?), and how difficult different languages would be to implement. But what if, instead, you designed a new language (because you can never have enough), one that was designed to be written within a Wave, designed to run within a Wave, and was Wave aware?

Not having looked into the Wave protocol yet, I don't know how references to different blips inside a Wave work, nor how references to a Wave is done in general. But if blips were functions, or code blocks, contained within other blips that were modules, a Wave compiler for this language would inherently understand the layout of the code within the Wave.

I would expect that a language that lived within a Wave would be a very "web" language, one that used Waves as core data structures, that output HTML, used CSS, and was DOM-aware in the language. In fact, the execution environment might be a Wave itself, which is seeded with the initial code and then the Wave itself is both the execution environment and the input/output environment. It would be a terrific environment for self-modifying code.

It's likely this language wouldn't have a Wave compiler so much as a Wave interpreter, something that read and executed the Wave on the fly instead of actually outputting anything in p-code, byte code, or machine code. This would be, in the Wave way, a robot which was part of the Wave, keeping track of its own "program counter" but letting the Wave environment keep track of data. The types of applications that this language would allow ... well, I'm not sure: it allows for "multiplayer" (not meaning to necessarily imply a game) applications where the users can "catch up" to what's happening at any time just by looking at the Wave, since it will present the current state of the application at any time.


Of course, a lot of the ideas that come to mind for collaborative applications -- a calendar, say -- are also doable with a Gadget inside a Wave, and don't require Yet Another Programming Language, nor a robot to help. But ideas like these aren't borne of necessity, they're a technical exercise that, perhaps, get turned into something useful.

Now I wonder if I could turn this into a Master's thesis...