<?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/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Derry Birkett</title>
	<atom:link href="http://derrybirkett.com/feed" rel="self" type="application/rss+xml" />
	<link>http://derrybirkett.com</link>
	<description>Senior UX Designer &#38; Design Lead</description>
	<lastBuildDate>Tue, 29 Oct 2019 20:04:20 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.4.2</generator>
<site xmlns="com-wordpress:feed-additions:1">28246526</site>	<item>
		<title>Blogging elsewhere</title>
		<link>http://derrybirkett.com/blogging-elsewhere</link>
					<comments>http://derrybirkett.com/blogging-elsewhere#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 26 Apr 2017 14:24:16 +0000</pubDate>
				<category><![CDATA[archive]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2203</guid>

					<description><![CDATA[I'm a not blogging here anymore. I am keeping the links open for inbounds, but from now on I will be blogging through Medium or maybe even WordPress.]]></description>
										<content:encoded><![CDATA[<p>I'm a not blogging here anymore. I am keeping the links open for inbounds, but from now on I will be blogging through <a href="https://medium.com/@derrybirkett">Medium</a> <del>or maybe even WordPress.</del></p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/blogging-elsewhere/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2203</post-id>	</item>
		<item>
		<title>Working in the heart of the San Francisco startup scene</title>
		<link>http://derrybirkett.com/working-in-the-heart-of-the-san-francisco-startup-scene</link>
					<comments>http://derrybirkett.com/working-in-the-heart-of-the-san-francisco-startup-scene#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 20 Aug 2016 21:02:35 +0000</pubDate>
				<category><![CDATA[life]]></category>
		<category><![CDATA[coworking]]></category>
		<category><![CDATA[startup]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2109</guid>

					<description><![CDATA[So I'm working in San Francisco temporarily, for a tech startup (what else?), who operate out of the WeWork building in Civic Center SF. I'm pretty impressed with the WeWork CoWorking Space, I really think it contributes to generating the vibe and success of its startups. In order to inform and inspire other cities, and particularly Barcelona (my adopted [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>So I'm working in San Francisco temporarily, for a tech startup (what else?), who operate out of the WeWork building in Civic Center SF. I'm pretty impressed with the WeWork CoWorking Space, I really think it contributes to generating the vibe and success of its startups. In order to inform and inspire other cities, and particularly Barcelona (my adopted city) I write this post with some details about what it is like working in an SF startup environment.</p>
<p><span id="more-2109"></span></p>
<p>The WeWork co-working space has been carefully designed to host a whole array of startups of all sizes. They operate the whole building of 5 floors (I'm talking about their Civic Center office). The operation is carefully managed as a community and supported by full-time staff members and ancillery community services through its App.</p>
<p>The first thing any visitor notices is the very cool interior design: green plants, cool chairs, sofas, (massage machine),  inspiring posters on retro wall-paper.. etc. Just, very cool.</p>
<p><a href="https://i0.wp.com/derrybirkett.com/wp-content/uploads/civic-center-coworking-1-1.jpg"><img class="aligncenter size-large wp-image-2116" src="https://i1.wp.com/derrybirkett.com/wp-content/uploads/civic-center-coworking-1-1-1024x683.jpg?resize=770%2C514" alt="civic-center-coworking-1" width="770" height="514" data-recalc-dims="1" /></a></p>
<p>( I took this photo from their website, because my own iPhone photos came out a little grainy. But I can confirm this is as cool as it looks) This decor does inspire that feeling of "this is really cool". And it really does inspire.</p>
<p>After picking up on the details (like the free draft beer) it soon becomes clear why these spaces really work: it's thriving with activity, as if you were working in one enormous and successful design company. This feeling of contributing to something larger, and something awesome, really permeates the place. It really does inspire you to "do your best work" (as they proffer) because it feels like you've already "made it", and therefore inspires you with confidence to "make things happen". Inviting clients to your WeWork space is certain to inspire confidence in them, so you won't hesitate to do so.</p>
<p>This feeling of - as if you were all working for the same organisation - inspires you to also speak freely with other people - who actually operate their own startups, from one-man bands, through small teams to entire operations (500px is on the second floor).</p>
<p>Free conversation, synergy between startups of all sizes and sectors, this is an environment designed &amp; operated to "make things happen". The environment is engineered to generate serendipity and synergy between its members. Add to that a thriving community app that facilitates conversation and cooperation. There is no doubt left in your mind that within this environment great things are going to happen, it's almost too easy.</p>
<h3>The details</h3>
<p>Let's look at some of the details that make this happen.</p>
<p><a href="http://derrybirkett.com/wp-content/uploads/coffee_and_guindilla.png"><br />
</a> <a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/Screen-Shot-2016-08-20-at-13.48.50-1.png"><img class="aligncenter size-large wp-image-2124" src="https://i1.wp.com/derrybirkett.com/wp-content/uploads/Screen-Shot-2016-08-20-at-13.48.50-1.png?resize=583%2C380" alt="Screen Shot 2016-08-20 at 13.48.50" width="583" height="380" data-recalc-dims="1" /></a></p>
<p><strong>The Water Cooler</strong></p>
<p>Shared kitchen areas, free tea and coffee facilitate "water-cooler" conversations where networking comes for free. Yes, that is free draft beer on tap you see in front of the Never Settle msg.</p>
<p><strong>Meeting Rooms</strong></p>
<p><a href="https://i2.wp.com/derrybirkett.com/wp-content/uploads/sharedoffice-1.png"><img class="aligncenter size-full wp-image-2125" src="https://i2.wp.com/derrybirkett.com/wp-content/uploads/sharedoffice-1.png?resize=576%2C352" alt="sharedoffice" width="576" height="352" data-recalc-dims="1" /></a></p>
<p>Meeting rooms are clearly a must.  How cool are these rooms? Everything is setup, plug n play, and woo clients and colleagues.</p>
<p><strong>Call Booths</strong></p>
<p>This is a nice idea, tiny call booths with "on air" indicators for those long-distance calls.</p>
<p><a href="https://i2.wp.com/derrybirkett.com/wp-content/uploads/booths-1.png"><img class="aligncenter size-full wp-image-2126" src="https://i2.wp.com/derrybirkett.com/wp-content/uploads/booths-1.png?resize=582%2C384" alt="booths" width="582" height="384" data-recalc-dims="1" /></a></p>
<p><strong>Lounges</strong></p>
<p>Aside from enormous lobby and floor entry lounges, there are also small rooms designed for comfortable, informal meetings.</p>
<p><a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/civic-center-office-space-2-2.jpg"><img class="aligncenter size-full wp-image-2121" src="https://i1.wp.com/derrybirkett.com/wp-content/uploads/civic-center-office-space-2-2.jpg?resize=900%2C600" alt="civic-center-office-space-2" width="900" height="600" data-recalc-dims="1" /></a></p>
<p><strong>Printing and Stuff</strong></p>
<p>No need to buy your own equipment, WeWork has your back.</p>
<p><a href="https://i0.wp.com/derrybirkett.com/wp-content/uploads/printer-1.png"><img class="aligncenter size-full wp-image-2127" src="https://i0.wp.com/derrybirkett.com/wp-content/uploads/printer-1.png?resize=577%2C384" alt="printer" width="577" height="384" data-recalc-dims="1" /></a></p>
<p><strong>Communal Spaces</strong></p>
<p>Besides the lobby each floor has a communal space by the "kitchen". Sick of the office? Pull up a rocking chair, or lounge the sofa and work on your laptop. Cool.</p>
<p><a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/civic-center-coworking-3-1.jpg"><img class="aligncenter size-large wp-image-2128" src="https://i2.wp.com/derrybirkett.com/wp-content/uploads/civic-center-coworking-3-1-1024x683.jpg?resize=770%2C514" alt="civic-center-coworking-3" width="770" height="514" data-recalc-dims="1" /></a></p>
<p><strong>Community </strong></p>
<p>The community is also managed by dedicated staff. Mondays there are often new-member meets, or free snacks to share.</p>
<p>There is an Honesty Market: snacks and drinks openly available to grab. Just add your credit card to the app, take what you want and scan it to get billed.</p>
<p><strong>Plugins</strong></p>
<p>A technical word for essentially real-world 3rd plugins: working late and feeling hungry? Grubhub will deliver in 30 mins. Order your home shopping from Instacart while you work and it will be there when you get your Uber back home. It's all good.</p>
<p>That's about it for now, I won't go into the boring details. Here's to hoping that Barcelona and other centres take shape and create inspiring hubs of innovation like WeWork here in San Francisco.</p>
<p>If you are working in SF, especially at WeWork Civic Center and read this? Ping me and we'll grab a coffee @derrybirkett</p>
<p>Now to make awesome!</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/working-in-the-heart-of-the-san-francisco-startup-scene/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2109</post-id>	</item>
		<item>
		<title>How to code a job searching AI Bot with Hubot and Slack</title>
		<link>http://derrybirkett.com/how-to-code-a-job-searching-ai-bot-with-hubot-and-slack</link>
					<comments>http://derrybirkett.com/how-to-code-a-job-searching-ai-bot-with-hubot-and-slack#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 14 Apr 2016 15:25:18 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[bots]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2085</guid>

					<description><![CDATA[Part Four in my ongoing "job board" coding series (others here, here and here): Coding a bot to look for jobs for you. Facebook recently announced their chatbots thing: Chatbots are not that super new, but more fuel is now on the fire and chatbots are probably app-killers - So let's make our own super simple one! Setup [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Part Four in my ongoing "job board" coding series (others <a href="http://derrybirkett.com/create-a-simple-job-board-web-app-with-48-lines-of-code/">here</a>, <a href="http://derrybirkett.com/a-quick-job-board-with-react-meteor-and-material-ui/">here</a> and <a href="http://derrybirkett.com/quick-job-board-with-react-native/">here</a>): Coding a bot to look for jobs for you. Facebook recently announced their chatbots thing: Chatbots are not that super new, but more fuel is now on the fire and chatbots are probably app-killers - So let's make our own super simple one!</p>
<p><span id="more-2085"></span></p>
<h4>Setup</h4>
<p>We're going to use Github's awesome Hubot for our bot kit and we will plug it into Slack, because we are <em>always</em> on Slack, amirite?</p>
<p>Pre-requisites for this episode? Node, npm, git, yeoman, Hubot, Slack and a Bot token, and Heroku to deploy. Also some knowledge of Coffeescript, and the command line (terminal) will help.</p>
<p>Step 1: Git yo-self (lol) Hubot, and <a href="https://hubot.github.com/docs/">Install as per instructions</a> (maybe you want to use the name "jobbot" for now, to make things simpler)</p>
<p>Step 2: <a href="https://api.slack.com/bot-users">Read about and get a bot token from Slack</a> and take note of it.</p>
<p>Step 3: Open a <a href="http://heroku.com">Heroku account</a> - Trust me, unless you are Mr Devops this will save a lot of pain.</p>
<h4>Program the bot!</h4>
<p>Yes, the beautiful thing about using Hubot is we simply roll up our sleeves and start programming AI into our bot.  In the scripts folder, create a new coffeescript file called jobbot.coffee</p>
<p><em>scripts/jobbot.coffee</em></p>
<pre>module.exports = (jobbot) -&gt;</pre>
<p>Jobbot is born, with the capacity to do absolutely zero.</p>
<pre>jobbot.respond /wakeup!/i, (res) -&gt;
  res.send "Yes?"</pre>
<p>Jobbot will answer "Yes?", when you tell him (literally) to "wakeup!" - eg. @jobbot wakeup!.  The .respond command will be invoked when the bot is actively referenced, eg. with the @symbol.</p>
<pre>#OVERHEAR
jobbot.hear /work/i, (res) -&gt;
  res.send "Did someone mention work? Ask me if there are 'any jobs today?
  ' and I'll take a look for you"</pre>
<p>.hear allows our bot to listen in on the room's conversation, and certain words trigger its attention, possibly it will respond (but not necessarily...). In this example, if Job bot hears the word "work" in any conversation it will incite you to invoke its favourite (and only) task, that of looking for a job for you. It's pretty keen.</p>
<pre># FETCH JOBS
jobbot.respond /any jobs today?/i, (res) -&gt;
  res.send "Checking..."

  # GO GO GADGET JOBS!
  jobapi = "https://jobs.github.com/positions.json"

  jobbot.http(jobapi)
   .header('Accept','application/json')
   .get() (err,response,body) -&gt;
   if err
    res.send "Encountered an error :( #{err}"
    return

   #PICK ONE
   data = JSON.parse body

   suggest = data[Math.floor(Math.random() * data.length)]
   res.send "How about #{suggest.title} at #{suggest.company} in #{suggest.location}? #{suggest.url}"
</pre>
<p>So, Job bot's main task is to go and look for a nice Job opportunity for you. In our example he will check Github for developer jobs and offer you one of them at random.</p>
<p>So what is happening up there? Firstly, when Job bot is specifically asked "any jobs today?" it will politely inform you it is "Checking...". Because there may be a delay connecting, you may have to wait...</p>
<p>While you are waiting, Job bot checks its limited dictionary of job boards (Github jobs), and asks it kindly for the current list of jobs, no ifs or buts: Kindly, because we politely inform Github that we are expecting a JSON response (which is not necessary), and we also reply with a totally uninformative error message if something goes wrong somewhere. Clearly this will be handled better in a professional environment, right?, <em>right?</em></p>
<p>When Job bot receives the list, he will pick one at random, and suggest it to you. Isn't that nice?</p>
<p><strong>NB:</strong> Coffeescript is <em>very</em> pedantic about indenting. Triple check your indenting is correct. If you get any "res is not defined" errors or similar, it's probably this.</p>
<h4>Let Hubot know about your script</h4>
<p>Finally, we must tell the Hubot framework to include our new script when it runs by <strong>including it in the hubot-scripts.json file</strong>, like so:</p>
<pre>['jobbot']</pre>
<p>Clearly, you can add as many scripts you like.</p>
<p>And that's it. Job bot is simple, and effective in his small way.</p>
<h4>Connect Slack</h4>
<p>The awesome thing about Hubot is that it is client agnostic: We use a plugin to enable it to "talk" with our client - which is called an adapter. We will be using the Slack adapter. Install it via npm like this:</p>
<pre>npm install hubot-slack --save</pre>
<h4>Testing the bot</h4>
<p>You can run Job bot in the command line as explained in the Hubot docs (link above). But it is more satisfying to see it respond in Slack. We can do this without deploying by fetching the Slack token you requested above (right?) and then passing it to local Hubot and adding the Slack adapter, like this:</p>
<pre>HUBOT_SLACK_TOKEN=xoxb-34005417601-pQWVEfulJVw7qLxlx7YCBnSh ./bin/hubot --adapter slack</pre>
<p>You should see your bot active in Slack. Wake him up, mention work and then ask for some jobs.</p>
<p><a href="https://i0.wp.com/derrybirkett.com/wp-content/uploads/2016/04/jobbotty.png"><img class="aligncenter size-full wp-image-2240" src="https://i0.wp.com/derrybirkett.com/wp-content/uploads/2016/04/jobbotty.png?resize=971%2C406" alt="" width="971" height="406" srcset="https://i0.wp.com/derrybirkett.com/wp-content/uploads/2016/04/jobbotty.png?w=971 971w, https://i0.wp.com/derrybirkett.com/wp-content/uploads/2016/04/jobbotty.png?resize=300%2C125 300w, https://i0.wp.com/derrybirkett.com/wp-content/uploads/2016/04/jobbotty.png?resize=768%2C321 768w" sizes="(max-width: 971px) 100vw, 971px" data-recalc-dims="1" /></a></p>
<h4>Deploying the bot</h4>
<p>The github adapter repo has a good guide for <a href="https://github.com/slackhq/hubot-slack">deploying Hubot to Slack</a> here, as well as other adapters. It goes something like this:</p>
<p>You'll need the bot token you requested as above, and your Heroku account. I recommend installing <a href="https://toolbelt.heroku.com/">Heroku toolbelt</a>, as we will use it here and it's pretty awesome actually. So, from the command line (with toolbelt installed and logged in):</p>
<pre>heroku create myjobbot</pre>
<p>Heroku will need your Slack token in order to connect the dots. So fetch your token and set it like this:</p>
<pre>heroku config:set HUBOT_SLACK_TOKEN=xoxb-1234567890-XXXXXXXXXXXXXXXXXXX</pre>
<p>This creates a (free) app instance on Heroku stack. It needs our git repo. If you haven't already, create a git repo, add everything and commit!</p>
<pre>git init
git add .
git commit -m "Go go gadget jobs!"</pre>
<p>("Go go gadget jobs" is not a good commit message btw)</p>
<p>Now we push that repo to Heroku which will take care of all the devops muckiness that we designers simply can't handle, thusly:</p>
<pre>git push heroku master</pre>
<p>Heroku will do its thing on the command line, which is itself a bot in some ways, I guess.</p>
<p>The free Heroku dyno sleeps pretty quickly, you may want to use this <a href="https://github.com/hubot-scripts/hubot-heroku-keepalive">Heroku keep alive</a> option to keep it burning longer.</p>
<p>And, in theory, you're good to go! You know that things can wrong at every turn, so ping me @derrybirkett if you <em>really</em> need to. Otherwise, follow the links and make sure no steps have been missed (and the coffeescript indenting is kosher).</p>
<p>PS: Here is my <a href="https://github.com/derrybirkett/jobbot">Jobbot repo</a> if you want to check it out.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/how-to-code-a-job-searching-ai-bot-with-hubot-and-slack/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2085</post-id>	</item>
		<item>
		<title>Quick Job Board with React Native</title>
		<link>http://derrybirkett.com/quick-job-board-with-react-native</link>
					<comments>http://derrybirkett.com/quick-job-board-with-react-native#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 09 Apr 2016 11:13:36 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[react]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2080</guid>

					<description><![CDATA[Part three of my “quick job board” series, this time for React Native — and deployable on mobile devices. This follows on from “quick job board in 48 lines of code” with Meteor, and the “quick job board with meteor and React” version. The beautiful thing about React is the syntax and structure is very similar, regardless [&#8230;]]]></description>
										<content:encoded><![CDATA[<p class="graf--h3">Part three of my “quick job board” series, this time for React Native — and deployable on mobile devices. This follows on from “<a href="http://derrybirkett.com/create-a-simple-job-board-web-app-with-48-lines-of-code/">quick job board in 48 lines of code</a>” with Meteor, and the “<a href="http://derrybirkett.com/a-quick-job-board-with-react-meteor-and-material-ui/">quick job board with meteor and React</a>” version.</p>
<p class="graf--h3"><span id="more-2080"></span></p>
<p class="graf--p">The beautiful thing about React is the syntax and structure is very similar, regardless of platform — so the React Native for devices code is very similar to any web based version.</p>
<p class="graf--p">For this app we have 2 files: Index and Results. The app is only a single feed on one page, but I have broken the App into two components to keep the “pages” in separate files (as well as being better practice).</p>
<p class="graf--p">So, after <a class="markup--anchor markup--p-anchor" href="https://facebook.github.io/react-native/">installing React Native</a> on your Mac and creating a blank app, Let’s create the index file:</p>
<p class="graf--p"><em class="markup--em markup--p-em">index.ios.js</em></p>
<pre class="graf--p graf--startsWithSingleQuote">‘use strict’;
import React, {
 AppRegistry,
 Component,
 StyleSheet
} from ‘react-native’;</pre>
<p>First we import the modules of React Native that we are going to use (above). Then we will "import" our Results page (below). The Results page we will create later.</p>
<pre>var Results = require('./Results');</pre>
<p>The index page is used simply as a navigation stack container. Our app only has one page, so this is fairly simple. We use React and NavigatorIOS as our "router": we give the page a title and set the contents (component) as our Results page (the one we imported above).</p>
<pre>class jblyrn extends Component {
 render() {
  return (
   &lt;React.NavigatorIOS
     style={styles.container}
     initialRoute={{
      title: 'Github',
      component: Results,
     }}/&gt;
  );
 }
}</pre>
<p>Now two small things are left on our Index page. We add a small amount of style to the page, to use Flexbox mainly, and we register our React app to the App Registry so that  xCode can compile it.</p>
<pre>var styles = React.StyleSheet.create({
 container: {
 flex: 1
 }
});</pre>
<pre>AppRegistry.registerComponent('jblyrn', () =&gt; jblyrn);</pre>
<p>Easy, no? Now let's build our job results page. Create a file called Results.js.  This is little more complex.</p>
<p><em>Results.js</em></p>
<p>First, we need access to the React components that we need, the same as we called above except we need a few extra modules this time:</p>
<pre>'use strict';
import React, {
 AppRegistry,
 Component,
 StyleSheet,
 Text,
 View,
 ListView,
 TouchableHighlight,
 LinkingIOS
} from 'react-native';</pre>
<p>We will use the Github jobs board again as our supplier. For now we will just set the URL to be fetched by our code later.</p>
<pre>var REQUEST_URL = "https://jobs.github.com/positions.json";</pre>
<p>Now we start to write our component. First the class and constructor:</p>
<pre>class Results extends Component {
 constructor(props) {
  super(props);
  this.state = {
   dataSource: new ListView.DataSource({
   rowHasChanged: (row1, row2) =&gt; row1 !== row2
   }),
  loaded: false,
 };
}</pre>
<p>With the contructor we are setting the initial state of the component, i.e. that the data hasn't yet loaded, for example. And we also set the datasource and type, which we will fill with data later.</p>
<p>Now we fetch our data. This could be written in one module, but I like to keep things separate.</p>
<pre>componentDidMount() {
 this.fetchData();
 }</pre>
<pre>fetchData() {
 fetch(REQUEST_URL)
  .then((response) =&gt; response.json())
  .then((responseData) =&gt; {
  console.log(responseData)
  this.setState({
   dataSource: this.state.dataSource.cloneWithRows(responseData),
   loaded: true,
  });
 })
 .done();
}</pre>
<p>The first method calls fetchData when the component has mounted, this is important. The fetchData() method then will use fetch API (<a href="https://developers.google.com/web/updates/2015/03/introduction-to-fetch?hl=en">More info here about this</a>). All it does is call the Github API url we set above, parses the JSON response and places it in the dataSource variables we set in the Constructor, which will automagically create our Listview of jobs using the iOS Listview component. Magic! We also set the loaded state to true, because now we <em>do</em> have our data.</p>
<p>So, in order to let users know we are actually loading data, and the app hasn't crashed, we use a small method which shows a loading icon while the data is being fetched, and is triggered by our constructor "loaded" variable. For now just define these "renderings", which are called in turn in the main React.render method at the end.</p>
<pre>renderLoadingView() {
 return (
  &lt;View style={styles.container}&gt;
   &lt;Text&gt;
    Loading Jobs...
   &lt;/Text&gt;
  &lt;/View&gt;
 );
}</pre>
<p>Now we must also prepare the View template for each Job listing that is returned from Github, and will be placed in our Listview:</p>
<pre>renderJobs(job) {
 return (
  &lt;TouchableHighlight onPress={() =&gt; { LinkingIOS.openURL(job.url); }}&gt;
   &lt;View style={styles.container}&gt;
    &lt;Text style={styles.title}&gt;
     {job.title}
    &lt;/Text&gt;
    &lt;Text style={styles.location}&gt;
     {job.company} - {job.location}
    &lt;/Text&gt;
   &lt;/View&gt;
  &lt;/TouchableHighlight&gt;
 );
}</pre>
<p>This method makes use of various React components that will translate into Native ones. You can look up these React components with the Native link I pasted earlier, but briefly: Touchable highlight is a link, the web equivalent of the &lt;a&gt; tag; the View tag is the equivalent of the web &lt;div&gt; (a container) and Text might roughly translate to &lt;span&gt;, I guess - We can't say the coding world doesn't keep us on our toes!</p>
<p>The elements in curly braces are references to our styles component that applies the "css" to the view: eg. styles.container will refer to the styles object we define at the end. React uses objects to hold styling data. And the second type of data in our curly braces are the job list results: eg. job.title. Job is the object Github return to us. You can see what <a href="https://jobs.github.com/api">Github returns to us from their page here</a></p>
<p>Now we can pull the awaiting render methods together in the main method: When the data has loaded we call the ListView component (otherwise we show the "loading" component) and we pass to it the datasource, the Jobs View object we created and the stylings as "props", thusly:</p>
<pre>render() 
 if(!this.state.loaded) {
  return this.renderLoadingView();
 }
 return (
  &lt;ListView
   dataSource={this.state.dataSource}
   renderRow={this.renderJobs}
   style={styles.listView}
  /&gt;
 );
}</pre>
<p>After that all that is left is to apply the styles, and export the Results component so that the Index page can reference it.</p>
<pre>const styles = StyleSheet.create({
 container: {
 flex: 1,
 justifyContent: 'center',
 alignItems: 'center',
 backgroundColor: '#F5FCFF',
 paddingBottom: 30,
 paddingTop: 30,
 borderBottomWidth: 1,
 borderBottomColor: '#eee',
 borderStyle: 'solid'
 },
 title: {
 fontSize: 20,
 textAlign: 'center',
 margin: 10,
 },
 location: {
 textAlign: 'center',
 color: '#999'
 },
 listView: {
 paddingTop: 20,
 backgroundColor: '#F5FCFF',
 },
});</pre>
<pre>module.exports = Results;</pre>
<p>You will need to compile this in xCode and run. You can even run it on your own device if you have an Apple developer account and watch the magic.</p>
<p>As before if you <em>really</em> have any problems, you can ping me - or - you can <a href="https://github.com/derrybirkett/jblyrn">pull my repo</a>. Sharing code is caring, er.. code.</p>
<p>Onwards, to React Desktop...</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/quick-job-board-with-react-native/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2080</post-id>	</item>
		<item>
		<title>UX Talk: Psychology in Experience Design</title>
		<link>http://derrybirkett.com/ux-talk-psychology-in-experience-design</link>
					<comments>http://derrybirkett.com/ux-talk-psychology-in-experience-design#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 18 Mar 2016 09:37:07 +0000</pubDate>
				<category><![CDATA[Comment]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2073</guid>

					<description><![CDATA[UX is focussed on user needs. And to discover user needs, we run through a “discovery” phase. But, what if people don’t know their needs? Or the needs discovered are distracted, irrelevant or not deep enough to really satisfy the designer. A good experience designer wants to seek out deep motivations: Motivations that oftentimes the [&#8230;]]]></description>
										<content:encoded><![CDATA[<p id="d911" class="graf--p graf-after--h3">UX is focussed on user needs. And to discover user needs, we run through a “discovery” phase. But, what if people don’t know their needs? Or the needs discovered are distracted, irrelevant or not deep enough to really satisfy the designer.</p>
<p id="b3fc" class="graf--p graf-after--p">A good experience designer wants to seek out deep motivations: Motivations that oftentimes the users themselves do not acknowledge. This is where experience design, for me, encroaches the territory of psychology.</p>
<p id="d1e1" class="graf--p graf-after--p">My ultimate goal as an experience designer is to design experiences that enable the user to grow, to realise themselves: This requires that I know what the user desires, what their dreams are — what they want to become.</p>
<p id="3cb4" class="graf--p graf-after--p">As psychologists know, desires are often buried in the subconscious, actively blocked by the conscious mind. So how can an experience designer uncover people’s deepest desires and make them a reality? Will experience designers need a degree in psychology?</p>
<p id="30fa" class="graf--p graf-after--p">Steve Jobs famously stated: “People don’t know what they want until you show it to them”.</p>
<p id="20f5" class="graf--p graf-after--p">Do good filmmakers “get out of the building” and ask their audience what they want to watch? Sure, there are industries that create products according to market research. But are these the really great products? Are films designed by committee the really great movies of all time?</p>
<p class="graf--p graf-after--p">I’ll research this and make another post.</p>
<p class="graf--p graf-after--p"><a href="https://medium.com/@derrybirkett/ux-talk-psychology-in-experience-design-da93118aeaf5#.403ulm1zp">originally posted on my Medium account</a></p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/ux-talk-psychology-in-experience-design/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2073</post-id>	</item>
		<item>
		<title>How to do good without an effort</title>
		<link>http://derrybirkett.com/how-to-do-good-without-an-effort</link>
					<comments>http://derrybirkett.com/how-to-do-good-without-an-effort#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 11 Feb 2016 11:12:16 +0000</pubDate>
				<category><![CDATA[Comment]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2052</guid>

					<description><![CDATA[A friend of mine recently sent an email round with a list of links and plugins that allow us to "do good" via charitable plugins and tools, without any effort. Plugins like AdBlock for Good, and Tabs for a Cause which show ads that donate to charities.  Here in this post I dutifully repost this [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A friend of mine recently sent an email round with a list of links and plugins that allow us to "do good" via charitable plugins and tools, without any effort. Plugins like AdBlock for Good, and Tabs for a Cause which show ads that donate to charities.  Here in this post I dutifully repost this veritable goldmine of goodness. Please partake, and share with your friends.</p>
<p><span id="more-2052"></span></p>
<p>And I quote:</p>
<p><a href="http://tab.gladly.io/?r=11336421">Tabs for a Cause</a></p>
<p>This plugin changes your New Tab Page. Money is being raised by some ads in the corner. Which, honestly, never bothered me at all. You can customize also the page with notes and bookmarks etc.</p>
<p>In <strong>1 month</strong> I raised enough to provide<strong> 1 person with clean water for 1 year. </strong>Collectively, all tabbers raised over $200k already!</p>
<p><a href="https://goodblock.gladly.io/">Goodblock</a></p>
<p>An adblocker with a purpose by the people who also created Tabs for a Cause. Basically, like any other adblocker, but 1-2 times a day a butterfly appears in the bottom left corner. When you click on in, you see a well-made ad. Each time you click you raise money.</p>
<p><a href="https://www.standsapp.org/">STAND</a></p>
<p>This adblock also lets you raise money for a cause you choose. However, some ads will still be displayed, if the web owner agrees to give a part of the winnings to charity. This way, the web owner can still make money, too.</p>
<p><a href="https://www.ecosia.org/">Ecosia Search Engine</a></p>
<p>Basically most of the money they make through ads, will be used to plant new trees. It works like google, it feels like google as well. So it didn’t really hurt me to switch. Plus, having a tree planted every 2-3 searches feels good as well.</p>
<p>In a week I made <strong>100 trees </strong>(implying the counting algorithm is correct). But they planted 3,430,817 Trees already</p>
<p><a href="http://smile.amazon.com/">Amazon Smile</a></p>
<p>If you shop at amazon, you can also have part of your spendings donated to a charity you choose. It has everything the normal amazon offers. So why not shop at amazon smile then?</p>
<p>Share the love.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/how-to-do-good-without-an-effort/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2052</post-id>	</item>
		<item>
		<title>KickstartPRO Launched on Studiopress Marketplace</title>
		<link>http://derrybirkett.com/kickstartpro-launched-on-studiopress-marketplace</link>
					<comments>http://derrybirkett.com/kickstartpro-launched-on-studiopress-marketplace#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 10 Feb 2016 17:01:34 +0000</pubDate>
				<category><![CDATA[Shop]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2043</guid>

					<description><![CDATA[So chuffed to have our KickstartPRO theme published to Studiopress Marketplace. The quality of themes here is so high I'm pretty blown away to be included. All credit (except design I guess) goes to co-founder Nick Davis for his awesome coding and his general positive kickass-ness. Take a look at KickstartPRO on Studiopress]]></description>
										<content:encoded><![CDATA[<p><a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/2016/02/kickstart_1170.jpg"><img class="aligncenter size-large wp-image-2230" src="https://i2.wp.com/derrybirkett.com/wp-content/uploads/2016/02/kickstart_1170-1024x438.jpg?resize=1024%2C438" alt="" width="1024" height="438" data-recalc-dims="1" /></a></p>
<p>So chuffed to have our KickstartPRO theme published to Studiopress Marketplace. The quality of themes here is so high I'm pretty blown away to be included. All credit (except design I guess) goes to co-founder Nick Davis for his awesome coding and his general positive kickass-ness.</p>
<p><a href="http://my.studiopress.com/themes/kickstart/">Take a look at KickstartPRO on Studiopress</a></p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/kickstartpro-launched-on-studiopress-marketplace/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2043</post-id>	</item>
		<item>
		<title>Dribbble Invites Giveaway x2</title>
		<link>http://derrybirkett.com/dribbble-invites-giveaway-x2</link>
					<comments>http://derrybirkett.com/dribbble-invites-giveaway-x2#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 10 Feb 2016 12:38:38 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=2039</guid>

					<description><![CDATA[Hello friends, I have a couple of invites to give away. So that I can check your work please: Paste your shot to my twitter, then follow me on Dribbble and like the invite post. So I can track you, see? Feel free to follow me on twitter and Dribbble if you like. Have fun. Derry]]></description>
										<content:encoded><![CDATA[<p><a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/dribbble-1.jpg" rel="attachment wp-att-2045"><img class="aligncenter size-full wp-image-2045" src="https://i1.wp.com/derrybirkett.com/wp-content/uploads/dribbble-1.jpg?resize=800%2C600" alt="dribbble" width="800" height="600" data-recalc-dims="1" /></a></p>
<p>Hello friends,</p>
<p>I have a couple of invites to give away.<br />
So that I can check your work please:</p>
<p><a href="https://twitter.com/derrybirkett">Paste your shot to my twitter</a>, then <a href="https://dribbble.com/derrybirkett">follow me on Dribbble</a> and <a href="https://dribbble.com/shots/2516697-2-Dribbble-Invites-to-Giveaway">like the invite post</a>. So I can track you, see?</p>
<p>Feel free to follow me on twitter and Dribbble if you like.</p>
<p>Have fun.<br />
Derry</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/dribbble-invites-giveaway-x2/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2039</post-id>	</item>
		<item>
		<title>Why I learned to code</title>
		<link>http://derrybirkett.com/why-i-learned-to-code</link>
					<comments>http://derrybirkett.com/why-i-learned-to-code#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 20 Jan 2016 16:02:07 +0000</pubDate>
				<category><![CDATA[Comment]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=1996</guid>

					<description><![CDATA[Imagine walking into a library and not being able to read. That is how I felt to be living in this age of information and data without being able to code. Data is everywhere, hence information is everywhere. I work in tech, and as such I am privy to common knowledge (in the tech world) [&#8230;]]]></description>
										<content:encoded><![CDATA[<p id="b096" class="graf--p graf-after--h3">Imagine walking into a library and not being able to read. That is how I felt to be living in this age of information and data without being able to code. Data is everywhere, hence information is everywhere.</p>
<p id="0adb" class="graf--p graf-after--p">I work in tech, and as such I am privy to common knowledge (in the tech world) that many people are not aware of. Do you know I could reach out (into the internet) and pull together a very decent profile of everyone who is/has been in my vicinity with relative ease? People who “check-in”, or post messages using Geo-location on their phone, for example, are fair game online. A cross reference here and there and I have a decent file on you. Especially if you have a unique identifier (like a telephone number).</p>
<p id="ebd3" class="graf--p graf-after--p">Snooping is of very little interest to me. But I do like the idea of being able to use code to gather information and empower me to make decisions. Small scripts (of code) — which can even be considered simple robots — are not difficult to create and can run a whole slew of boring tasks for you: searching for an apartment, ordering regular deliveries and so on. And once the Fridge starts to join the conversation, being able to “boss” my appliances around makes code even more appealing. (Right now, my Fridge is deaf and mute, but soon, oh so soon…)</p>
<p id="1041" class="graf--p graf-after--p graf--last">I decided that code is important and learned to code. Except, like any language, it’s difficult to become “fluent”. It requires constant practice. So, I continue to study, and write minimal scripts, and sharpen my fluency, as I wait for the day when I find writing code as easy as writing these sentences, and I watch the world turn around me, and I say “wow, did I really make that happen?”.</p>
<p class="graf--p graf-after--p graf--last">First published on my <a href="https://medium.com/@derrybirkett/why-i-learned-to-code-af9e2f769838#.jd9ge3fj9">Medium</a> account.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/why-i-learned-to-code/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1996</post-id>	</item>
		<item>
		<title>A quick job board with React, Meteor and Material UI</title>
		<link>http://derrybirkett.com/a-quick-job-board-with-react-meteor-and-material-ui</link>
					<comments>http://derrybirkett.com/a-quick-job-board-with-react-meteor-and-material-ui#comments</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 29 Nov 2015 18:44:05 +0000</pubDate>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[meteor]]></category>
		<category><![CDATA[react]]></category>
		<guid isPermaLink="false">http://derrybirkett.com/?p=1977</guid>

					<description><![CDATA[I recently wrote a mini-tutorial "How to write a job app in 48 lines of code" - and here it is again, but using React JS: Facebook's javascript love-child. This is slightly longer than 48 lines of code, but mainly because I also integrated a Material UI interface. I actually learned React to be able to use [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>I recently wrote a mini-tutorial "<a href="http://derrybirkett.com/create-a-simple-job-board-web-app-with-48-lines-of-code/">How to write a job app in 48 lines of code</a>" - and here it is again, but using React JS: Facebook's javascript love-child. This is slightly longer than 48 lines of code, but mainly because I also integrated a <a href="http://www.material-ui.com/">Material UI interface</a>. I actually learned React to be able to use this UI library. React is not strictly necessary with the Meteor framework, as Meteor is reactive out-of-the-box - but I like Google's Material UI style, and it required React, so here we are.</p>
<p><span id="more-1977"></span></p>
<h3>Getting Started</h3>
<p>Ok, so as before let's just add our packages to a new Meteor project:</p>
<pre>meteor create projectname</pre>
<pre>meteor add react coffeescript http cosmos:browserify mquandalle:jade meteorhacks:npm</pre>
<p>Clearly we need the react package, and we also need the browserify and npm packages for the Material UI library. To pull from Github API we need the http package, and I also added coffeescript and jade - because I prefer them to writing html and javascript.</p>
<h3>Main Template</h3>
<p>Our main page index.jade is fairly empty - we simply need to add the div which react hooks into - thusly:</p>
<pre>head
 title ReactJobs
body
 #App</pre>
<p>React will render the html to the #App div.</p>
<h3>Startup.jsx</h3>
<p>Now let's create our startup javascript file.</p>
<pre>Jobs = new Mongo.Collection("jobs");</pre>
<pre>if (Meteor.isClient) {
 Meteor.startup(function () {
 // injectTapEventPlugin();
 React.render(&lt;App /&gt;, document.getElementById("App"));
 });
}</pre>
<p>I created a collection to hold the jobs data, and in Clientside Startup we add base React.render method and React will render the html into the #App div we placed.</p>
<h3>App.jsx</h3>
<p>Now onto our app component. This is the largest file in the whole App, weighing in at 63 lines. I place all components seperately in a components folder inside the client folder: client/components. This is quite verbose, so maybe grab a coffee.</p>
<pre>const {
 Paper,
 List,
 ListItem,
 ListDivider,
 Avatar,
 RaisedButton,
 AppBar,
 FlatButton,
 IconButton,
 NavigationClose
} = mui;</pre>
<p>These are required to use the Material UI library. They refer to the components we will be using.</p>
<pre>const ThemeManager = new mui.Styles.ThemeManager();</pre>
<p>And here we attach the mui styles to Thememanager. So far, so good.</p>
<pre>App = React.createClass({
 mixins: [ReactMeteorData],</pre>
<p>Our app is a React class, and we attach our own methods to it. To use React with MeteorData we need to use their Mixin - which is apparently a temporary thing.</p>
<pre>childContextTypes: {
 muiTheme: React.PropTypes.object
},</pre>
<pre>getChildContext: function() {
 return {
  muiTheme: ThemeManager.getCurrentTheme()
 };
},</pre>
<p>These two methods are required to use MUI. I'm not going to go into details about the MUI library, if you want more info about it, you can check out the link at the top of this post.</p>
<pre>getMeteorData() {
 return {
  jobs: Jobs.find({}).fetch()
 }
},</pre>
<p>Here is our method to fetch the Jobs data we will pull from Github jobs API.</p>
<pre>componentDidMount() {
  {this.loadJobs()}
},</pre>
<pre>loadJobs() {
  loadJobs = Meteor.call("loadGithubJobs");
},</pre>
<p>When the component loads for the first time we will fetch the jobs list from Github: this could be written in one method, but I like to keep things seperate, so the second method calls the server-side meteor method that pulls from Github API.</p>
<pre>renderJobs() {
 return this.data.jobs.map((job) =&gt; {
  return &lt;Job key={job._id} job={job} /&gt;;
 });
},</pre>
<p>Using the new Ecmascript, or latest Javascript, functions we can quickly map the data to each instance of our Job component (which we will create shortly) and return a list of react/html components.</p>
<pre>render() {
 return (
  &lt;div className="wrapper"&gt;
  &lt;AppBar title="Github Jobs" /&gt;
&lt;div className="container"&gt;
  &lt;List subheader="Latest Github Jobs"&gt;
   {this.renderJobs()}
  &lt;/List&gt;
  &lt;/div&gt;
 &lt;/div&gt;
 );
 }
});</pre>
<p>Finally, we render the main App component. In the midst of this you will notice this.renderJobs() which will return the Material List components with our data filled in each one.</p>
<h3>Job Component</h3>
<p>Now we need the React Job Component we call in the above script:</p>
<pre>const {
FontIcons,
IconButton,
Icons,
List,
ListItem,
ListDivider,
Avatar
} = mui;</pre>
<p>I've been a bit lazy and haven't deleted the Material components I have not used. I left them there in case I was to expand this app. But you only need to include the components you want to use.</p>
<pre>// Task component - represents a single todo item
Job = React.createClass({
render() {
 return (
  &lt;ListItem
  primaryText={ this.props.job.title }
  leftAvatar={ &lt;Avatar src={ this.props.job.company_logo }/&gt; }
  secondaryText={ this.props.job.location }
  href={this.props.job.company_url}
  rightIcon={ &lt;IconButton iconClassName="muidocs-icon-custom-github"   tooltip="GitHub" /&gt; }
  /&gt;
);
}
});</pre>
<p>This React class will render our List Item component and fill it with the data from our collection and is available in "props".</p>
<h3>Pull in the Github data from the API</h3>
<p>On the server, we need the method(s) which will pull the Github jobs data via http calls. I write this in Coffeescript.</p>
<pre>Meteor.methods
 loadGithubJobs: -&gt;
 @unblock()
 Meteor.http.call "GET", "https://jobs.github.com/positions.json", (error,result) -&gt;
 if(error)
 console.log error
 if(result)
 Meteor.call "writeJobs", (result.data)</pre>
<pre>writeJobs: (jobs) -&gt;
 Jobs.remove({})
 Jobs.insert job for job in jobs</pre>
<p>Here we have two methods: the first one "gets" the jobs list from the API, and, if successful, calls the second method (writeJobs) to push them into our collection. I actually remove the previous Jobs loaded there as a temporary fix for this demo, so we also have the called data and no "old stuff".</p>
<p>I'm not going into the above methods, they are explained in the previous job app post I referenced at the top of this post which you can look into.</p>
<h3>Some other bits required for Material UI</h3>
<p>If you want to use MUI you will also have to add a couple of package files. You will need to add the following (for example) to your root package.json file:</p>
<pre>{
"material-ui": "0.10.1",
"externalify": "0.1.0"
}</pre>
<p>And in your client/lib folder you will need a couple of files for browserify. Your json options in the file <em>app.browserify.options</em></p>
<pre>{
"transforms": {
"externalify": {
"global": true,
"external": {
"react": "React.require"
}}}}</pre>
<p>And <em>app.browserify.js</em></p>
<pre>mui = require('material-ui');
injectTapEventPlugin = require('react-tap-event-plugin');</pre>
<p>More info about this at <a href="http://react-in-meteor.readthedocs.org/en/latest/client-npm/">React and Meteor</a>.</p>
<p>Ok and that's it. I'll admit, this is early stuff - syntax changes, and the React in Meteor mixin, along with the browserify hacks are patches (in my opinion). But, it's how it works right now. So, anyway, you should have a nice responsive, pretty web app like this running in localhost:</p>
<p><a href="https://i1.wp.com/derrybirkett.com/wp-content/uploads/mui-jobboard.png"><img class="aligncenter size-full wp-image-1980" src="https://i1.wp.com/derrybirkett.com/wp-content/uploads/mui-jobboard.png?resize=1178%2C1244" alt="mui-jobboard" width="1178" height="1244" data-recalc-dims="1" /></a></p>
<p><a href="http://jblyr.herokuapp.com/">And here is a live version</a></p>
<p>If you have any errors - well, I'm not surprised - this stuff is all pretty new and rough. But if it helps you can <a href="https://github.com/derrybirkett/jblyr">clone my repo</a>. A word of warning though: React is still very much in its infancy, and I've already found some compiling errors once packages were updated - you know how touchy these dependencies can be...</p>
<p>You can ping me on twitter <a href="http://twitter.com/derrybirkett">@derrybirkett</a> if you really want to.</p>
<p>For now, onward!</p>
]]></content:encoded>
					
					<wfw:commentRss>http://derrybirkett.com/a-quick-job-board-with-react-meteor-and-material-ui/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1977</post-id>	</item>
	</channel>
</rss>
