<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>My Personal Development</title>
	<atom:link href="http://blog.pinkkis.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pinkkis.com</link>
	<description>Becoming a better web developer is hard</description>
	<lastBuildDate>Thu, 29 Nov 2012 21:01:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Media Posts and Paragliding</title>
		<link>http://blog.pinkkis.com/2012/11/media-posts-and-paragliding/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=media-posts-and-paragliding</link>
		<comments>http://blog.pinkkis.com/2012/11/media-posts-and-paragliding/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 21:00:02 +0000</pubDate>
		<dc:creator>Pinkkis</dc:creator>
				<category><![CDATA[Media]]></category>
		<category><![CDATA[Personal Posts]]></category>
		<category><![CDATA[austria]]></category>
		<category><![CDATA[gopro]]></category>
		<category><![CDATA[parachute]]></category>
		<category><![CDATA[paragliding]]></category>
		<category><![CDATA[snowbombing]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[vimeo]]></category>

		<guid isPermaLink="false">http://blog.pinkkis.com/?p=96</guid>
		<description><![CDATA[While I currently have aspirations to program and create interactive content, that doesn&#8217;t mean that I&#8217;m not still into video and photography. These projects come along fairly rarely for now, but I have good intentions and ideas for a few &#8230; <a href="http://blog.pinkkis.com/2012/11/media-posts-and-paragliding/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While I currently have aspirations to program and create interactive content, that doesn&#8217;t mean that I&#8217;m not still into video and photography.</p>
<p>These projects come along fairly rarely for now, but I have good intentions and ideas for a few projects to complete, though I need lots of spare time for those, so we&#8217;ll see when that time comes.</p>
<h2>Adding Video Content</h2>
<p>I&#8217;ve previously shared this video on Facebook, but I uploaded it to Vimeo for the heck of it. This was taken in Mayrhofen, Austria in March 2011 during <a href="http://www.snowbombing.com/" target="_blank">Snowbombing</a>, an excellent event of skiing, music and drinking.</p>
<p><iframe src="http://player.vimeo.com/video/54446804" width="584" height="329" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p>The camera used was a first gen GoPro HD, and it does some pretty nice shots. However I&#8217;m so totally getting one of the new GoPro HD 3&#8242;s, they look like an amazing piece of awesome. If I do, I&#8217;ll be sure to post more videos from it!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pinkkis.com/2012/11/media-posts-and-paragliding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First Project: Web Chat &#8211; Part 1</title>
		<link>http://blog.pinkkis.com/2012/11/first-project-web-chat-part-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=first-project-web-chat-part-1</link>
		<comments>http://blog.pinkkis.com/2012/11/first-project-web-chat-part-1/#comments</comments>
		<pubDate>Tue, 27 Nov 2012 23:58:42 +0000</pubDate>
		<dc:creator>Pinkkis</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[bootstrap]]></category>
		<category><![CDATA[chat]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[express]]></category>
		<category><![CDATA[flexbox]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mongoDB]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[responsive]]></category>
		<category><![CDATA[web app]]></category>
		<category><![CDATA[websocket]]></category>

		<guid isPermaLink="false">http://blog.pinkkis.com/?p=77</guid>
		<description><![CDATA[So, it&#8217;s time to start the first project. Something simple, yet infinitely expandable and something that has a bit of everything in it. The Project The first project is going to be a chat app. Here&#8217;s a list of features &#8230; <a href="http://blog.pinkkis.com/2012/11/first-project-web-chat-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>So, it&#8217;s time to start the first project. Something simple, yet infinitely expandable and something that has a bit of everything in it.</p>
<h2>The Project</h2>
<p>The first project is going to be a chat app. Here&#8217;s a list of features I&#8217;m looking to incorporate in this first app:</p>
<ul>
<li><span style="line-height: 15px;">Uses Websockets</span>
<ul>
<li>Node.js and Socket.IO</li>
</ul>
</li>
<li>Stores sessions and a chat log
<ul>
<li>MongoDB / Mongoose</li>
</ul>
</li>
<li>Responsive design, and a full window app
<ul>
<li>Will work for phones, tablets and desktops</li>
<li>Uses css <a href="http://www.w3.org/TR/css3-flexbox/" target="_blank">flexbox</a>, this will limit support in browsers</li>
</ul>
</li>
</ul>
<p>While it&#8217;s a simple project on the surface, there&#8217;s quite a bit to pick up on, especially when it comes to the database side. Also while i&#8217;m not listing it here yet, I have a bunch of actual chat features in mind that can be added in later, but of course first you need to get things started and have the basics down.</p>
<p>The project files for this learning exercise will be hosted on github, here: <a href="https://github.com/pinkkis/Flex-chat">https://github.com/pinkkis/Flex-chat</a> - I&#8217;m also learning how to work with git, having only used svn before. Here&#8217;s the link to the commit of where I&#8217;m at approximately at the time of this post: <a href="https://github.com/pinkkis/Flex-chat/commit/9424799a50f6b583f058aa81ed17648f9dd43dde">Commit 3</a>.</p>
<h2>The Client</h2>
<div id="attachment_92" class="wp-caption alignright" style="width: 310px"><a href="http://blog.pinkkis.com/wp-content/uploads/2012/11/flex-chat-commit3.png"><img class="size-medium wp-image-92" alt="" src="http://blog.pinkkis.com/wp-content/uploads/2012/11/flex-chat-commit3-300x195.png" height="195" width="300" /></a><p class="wp-caption-text">Flex chat prototype</p></div>
<p>So I&#8217;ve been working ont he client side of the project a bit here and there, and i&#8217;ve gotten to a point where the very basic design is in place. There&#8217;s a scrollable chat window, channel tabs and a user list.</p>
<p>It&#8217;s also nicely fullscreen and responsive on all platforms through the use of flexbox, I&#8217;ve tested in win/mac FF and Chrome as well as iphone5/ipad. Using media queries, certain elements like timestamps and the user list are hidden when the screen gets too narrow to fit a comfortable level of chat on these displays.</p>
<p>I&#8217;ve also started adding some client side code, and added some events and code that displays chat lines, makes sure the chat area stays scrolled to the bottom when new chat messages appear and so on, but half way through, I completely changed the approach and this has left weird doubles of code everywhere. Obviously I&#8217;ll clean that up.</p>
<p>I&#8217;m looking into creating the channels as an object and when you join new channels, you create a new instance of it. I will have logic in the socket.io onMessage event that sends the appropriate data to the correct channel object, but it would then keep track of users, messages, notifications and so on. I&#8217;ll probably end up doing this bit a few times over to get it right, or at least once I&#8217;ve finally made up my mind on what&#8217;s going to be there.</p>
<p>Additionally, I changed from having a single combined message window, I decided that upon an incoming whisper, a new faux-channel will be created, however this will not have anything saved on client or server side other than what&#8217;s in the DOM at the moment. Once you close that message window it&#8217;s data is all lost.</p>
<p>One thing I&#8217;m still trying to figure out is how to create some sort of settings menu that would work in all sizes, from desktop to iphone. What I think I&#8217;ll do, actually, is split off half of the system messages window and add a configuration panel there. These settings would then be saved in localStorage. The settings would be something like:</p>
<ul>
<li><span style="line-height: 15px;">preferred user name (only saved once we know it&#8217;s available)</span></li>
<li>channels joined in addition to lobby</li>
</ul>
<h2>The Server</h2>
<p>I haven&#8217;t really started on the server side yet, some random scrapings from checking out a few projects on github, but nothing has been done yet to actually run this, i just added files in place in the repo.</p>
<p>The server side coding is where I have everything to learn and why I&#8217;m doing this. More on this on future updates to this project!</p>
<blockquote>
<h2>CSS Flexbox</h2>
<p>The flexbox seems to come as a godsend to designing app-like interfaces. Being able to create proportionally and automatically scaling interface elements makes everything so much easier. While it&#8217;s fairly straightforward to use, one must be careful to use the correct version of the draft, as it&#8217;s still very young and in flux. Also, it&#8217;s still prefixed in all browsers, so that&#8217;s a lot of fluff in the stylesheet.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://blog.pinkkis.com/2012/11/first-project-web-chat-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Loading Tweets and Blog Posts</title>
		<link>http://blog.pinkkis.com/2012/11/loading-tweets-and-blog-posts/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=loading-tweets-and-blog-posts</link>
		<comments>http://blog.pinkkis.com/2012/11/loading-tweets-and-blog-posts/#comments</comments>
		<pubDate>Thu, 22 Nov 2012 12:00:49 +0000</pubDate>
		<dc:creator>Pinkkis</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.pinkkis.com/?p=52</guid>
		<description><![CDATA[While creating the front page for my personal site, pinkkis.com, I wanted to add my twitter and blog feeds myself. There&#8217;s obviously a million plugins and even provided clients from Twitter to do this, but practice is practice. Below are &#8230; <a href="http://blog.pinkkis.com/2012/11/loading-tweets-and-blog-posts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While creating the front page for my personal site, pinkkis.com, I wanted to add my twitter and blog feeds myself. There&#8217;s obviously a million plugins and even provided clients from Twitter to do this, but practice is practice.</p>
<p>Below are the code snippets for getting both tweets and blog posts displayed on the site, minus the actual html templates.</p>
<h2>Twitter feed</h2>
<p>The <a href="https://dev.twitter.com/docs/api/1/get/statuses/user_timeline">Twitter API</a> is fairly simple to use in javascript using jQuery&#8217;s ajax calls. The below example is very simplistic, and probably breaks easily should something go wrong. But when everything works, it&#8217;s simple and I use this with Hogan templates to display them on the screen.</p><pre class="crayon-plain-tag">$.getJSON('https://api.twitter.com/1/statuses/user_timeline.json?screen_name=pinkkis&amp;include_entities=true&amp;count=3&amp;callback=?'
	, function(returnData){
	if ( returnData.length &gt; 0) {
		$.each(returnData, function(idx, val){
			var tempDate = new Date(this.created_at),
				tweet = {
					tweet : this.text,
					image: '&lt;img src="'+this.user.profile_image_url+'" /&gt;',
					date : tempDate.toLocaleDateString(),
					link : '&lt;a href="'+this.id_str+'"&gt;&lt;i class="icon-external-link"&gt;&lt;/i&gt;&lt;/a&gt;'
				};
			$("#twitter-container").append( tweetTemplate.render(tweet) );
		});
	} else {
		$("#twitter-container").append( '&lt;p&gt;&lt;i&gt;Something went wrong loading tweets...&lt;/i&gt;&lt;/p&gt;' );
	}
	$("#twitter-loader").slideUp(300);
});</pre><p></p>
<h2>Blog posts</h2>
<p>To load blog posts from this blog to the main pinkkis.com site, I use a plugin for WordPress called <a href="http://wordpress.org/extend/plugins/feed-json/">Feed JSON</a> which adds a json/jsonp type to WordPress feeds.</p>
<p>This function will get a specified amount of latest posts from the given url (or defaults to the current host). You will have to specify a callback for what to do with the retrieved data, an array of post objects. On the page itself, there&#8217;s a Hogan template to display the posts.</p><pre class="crayon-plain-tag">function getBlogPosts(url, count, callback) {
	if (!count || count &lt;= 0) { count=1; }
	if (!url) { url = window.location.protocol + '//' + window.location.host; } 
	else if (url.charAt(url.length-1) === '/') { url = url.substr(0, url.length-1); }
	if (!callback || typeof callback !== 'function') { callback = function(data){console.dir(data);} }

	$.getJSON(url + "/feed/json/?callback=?", function(data){
		if (data.length === 0) { throw "No recognized data returned!"; }
		var posts = [];

		for (var i=0; i&amp;lt; count; i++) {
			posts.push({
				title : 		data[i].title,
				id : 			data[i].id,
				permalink : 	data[i].permalink,
				date : 			new Date(data[i].date),
				author : 		data[i].author,
				content : 		parseContent(data[i].content)
			});
		}
		//console.dir(data);console.dir(posts);
		callback(posts);
	});

	function parseContent(string){
		var parsedString = '';
		// remove image captions (and code higlighter 'crayon') from post when using raw get_the_content() in the json plugin
		parsedString = string.replace(/[(?:(/)?caption|crayon).*?]/gi, '');

		return parsedString;
	}

}</pre><p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pinkkis.com/2012/11/loading-tweets-and-blog-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Productivity from fear of broken promises</title>
		<link>http://blog.pinkkis.com/2012/11/productivity-from-fear-of-broken-promises/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=productivity-from-fear-of-broken-promises</link>
		<comments>http://blog.pinkkis.com/2012/11/productivity-from-fear-of-broken-promises/#comments</comments>
		<pubDate>Tue, 20 Nov 2012 22:17:17 +0000</pubDate>
		<dc:creator>Pinkkis</dc:creator>
				<category><![CDATA[Personal Posts]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Servers]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://blog.pinkkis.com/?p=57</guid>
		<description><![CDATA[The Procrastination When I want to work on something, but I don&#8217;t answer to anyone, it&#8217;s very difficult to motivate myself to do the things I want &#8211; or need &#8211; to get done. My brain barely lets me sleep &#8230; <a href="http://blog.pinkkis.com/2012/11/productivity-from-fear-of-broken-promises/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h2>The Procrastination</h2>
<p>When I want to work on something, but I don&#8217;t answer to anyone, it&#8217;s very difficult to motivate myself to do the things I want &#8211; or need &#8211; to get done. My brain barely lets me sleep from all the ideas storming around in it, yet when it comes down to doing something, it&#8217;s so much easier to play a few rounds of Blops2 than to do sit down and produce something.</p>
<p>It&#8217;s because at the end of the day, no one but me cares if I made something. At work a lot of people depend on what I do and it&#8217;s easy to be motivated and produce great things. The pressure is good. Being afraid of letting someone down is good. Deadlines are good. All these things make you want to get things done and improve yourself.</p>
<p>I know what I need to get done, but since no one depends on it, I&#8217;m going to try and create artificial pressure to help motivate me. I&#8217;m going to promise to write in this blog and share my experiences in web development and hopefully I&#8217;ll get to a point where I&#8217;ll feel like should I not post or do something, I&#8217;m letting someone down. That should motivate me. One can only hope&#8230;</p>
<h2>What I want to do</h2>
<p>I do web design and development, among other things, for a living. I&#8217;ve been lucky at my job so far and I&#8217;ve come to this almost by chance, even though this is something that I&#8217;ve had as a hobby for a long time. I want to be better, a lot better and diverse.</p>
<p>So what I&#8217;m concentrating at the moment is going to be programming, both client side javascript and Node.js servers, databases, UI and UX, version control, HTML 5 games in canvas and overall web server technologies, services and software.</p>
<p>I have planned out some basic projects for myself that should include one or more of the above and I&#8217;ll try to document them as much as i can here. Starting with the basics, I want to create a small chat app that will work on both desktop and mobile. I might limit it to tablets on mobile, but who knows.</p>
<p>Additionally, I&#8217;m looking at options to host my projects online. I have my own test server for now, an old netbook running Ubuntu, but once I have some actual projects, something that I cannot run on the hardware or my home connection, I&#8217;m going to be looking at either Amazon EC2 or other VPS services. Configuring servers, installing Node, Nginx and so on, configuring and securing everything&#8230; I&#8217;m sure a lot has been written on it, but I&#8217;ll be learning all that and just writing about my experiences.</p>
<p>In conclusion, I hope this is going to be the motivation I need. I&#8217;ve so many things I want to get done. And if what I share here helps someone, even better.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pinkkis.com/2012/11/productivity-from-fear-of-broken-promises/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
