<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nir Zion Pengas</title>
	
	<link>http://pengas.com</link>
	<description>Creative Technology</description>
	<lastBuildDate>Fri, 14 Jun 2013 21:36:16 +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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ThePengasBlog" /><feedburner:info uri="thepengasblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>scrum 101</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/f8_tMw2j6eg/</link>
		<comments>http://pengas.com/2012/10/23/scrum-101/#comments</comments>
		<pubDate>Tue, 23 Oct 2012 15:39:53 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[inspiration]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[whatever]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=715</guid>
		<description><![CDATA[scrum methodology is quite popular and i&#8217;d like to dedicate this post to making some sense out of it for those of you who are not familiar with it. if you are a development team, scrum could be an interesting fit for you or at the very minimum something new to consider and evaluate. scrum <a href="http://pengas.com/2012/10/23/scrum-101/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://pengas.com/wp-content/uploads/2012/10/scrum.jpg"><img class="alignright size-medium wp-image-745" alt="scrum" src="http://pengas.com/wp-content/uploads/2012/10/scrum-300x195.jpg" width="300" height="195" /></a>scrum methodology is quite popular and i&#8217;d like to dedicate this post to making some sense out of it for those of you who are not familiar with it. if you are a development team, scrum could be an interesting fit for you or at the very minimum something new to consider and evaluate.</p>
<p style="text-align: justify;">scrum is a software development methodology that works along the lines of lean manufacturing or agile. to make sure we all speak the same language, agile is lean is scrum in a superficial or high level view point. if you are wondering on the origin of the name, scrum is borrowed from rugby where the players lock up and try to get a hold of the ball by passing it with their feet. small iterations. makes sense?</p>
<p style="text-align: justify;">the methodology assists in defining the development life cycle and stages, the key players and roles and how responsibility is delegated. scrum also assists in figuring out how to stay on top of project and it&#8217;s progress, how to address and perform changes/enhancements to the development plan and how to deal with risks. taking a step forward, scrum can help lead development teams, be engaged in drawing conclusions and improve both product and process on regular basis.</p>
<p style="text-align: justify;">if you were a scrum, the world is roughly divided into you and <a href="http://en.wikipedia.org/wiki/Waterfall_model" target="_blank">waterfall</a>. &#8220;you&#8221; means agile methodologies such as <a href="http://en.wikipedia.org/wiki/Kanban" target="_blank">kanban</a> and <a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank">XP</a>. waterfall is a more sequential approach from the 70s that was (probably) influenced by traditional manufacturing, and is similar to the approach of building a house:</p>
<ul>
<li>there are restrictions on the order of operations (one cannot lay the roof before foundation for example)</li>
<li>mistakes are freaking expensive so better get it right by carefully planning and quality measuring your work</li>
<li>much repetition (many doors, many windows) so consolidating tasks means efficiency</li>
</ul>
<p>so with waterfall one first gather all the requirements for a product, then architect the solution, then dive into a detailed, technical design of each component, code it up, integrate, test test test, repair/fix and release.</p>
<p>with agile, developing software is more like designing a department store:</p>
<ul>
<li>usually there are loose restrictions on the order of the tasks at hand</li>
<li>a wide array of features</li>
<li>a detailed and strict planning may fail. small incremental steps and proper adjustments moving forward works better (scrum anyone?)</li>
<li>centralizing tasks helps to a certain extent</li>
</ul>
<h2>scrum in action:</h2>
<ul>
<li>with agile the team goes on sprints (2w minimum for us) when each run gets us one step closer to our goal</li>
<li>effectiveness is key: how many features (stories) were coded into the system. less lines of code in general, more code that does what the end user really needs</li>
<li>no elaborate MRD/PRD. with agile one maintains a backlog and direct communication. we hold daily meetings, spring planning and we retrospectively learn from our mistakes and success.</li>
<li>flat hierarchy across the team and more responsibilities is handed off to the developers. the team self manages using a structured process</li>
<li>a team is comprised with complementing skills, so each team can get stuff done on it&#8217;s own accord</li>
</ul>
<div>so agile is more of a philosophy than rules right?</div>
<div>
<ul>
<li>every activity is time measured and they are prioritized from the most important to the least. when time runs out we are hopefully better off than before we started as the product work was done priorly to make sure the most important features are on the top of the list (i.e. backlog)</li>
<li>with agile the developers are encouraged to write only what is absolutely necessary and most probably we will revisit this code later on for changes and enhancement. this is where a thought through QA process is essential</li>
</ul>
<p>think of scrum and agile as a framework for getting the job done. depending on the dynamics of your team and size of company agile maybe what you want to implement. i think it works very well for startups and collaborating with small teams when outsourcing projects. at the end of the day agile/waterfall are all ways to increase productivity and allow developers to make the best of their time.</p>
<p>good luck!</p>
</div>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/f8_tMw2j6eg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/10/23/scrum-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/10/23/scrum-101/</feedburner:origLink></item>
		<item>
		<title>healthcare and big data</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/-P--tivCSQg/</link>
		<comments>http://pengas.com/2012/10/19/healthcare-and-big-data/#comments</comments>
		<pubDate>Fri, 19 Oct 2012 18:50:18 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[healthcare IT]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=706</guid>
		<description><![CDATA[everywhere you turn people are talking about big data, hadoop and sharding. rightfully so. in today&#8217;s day and age managing a lot of data is not an easy task, as performance and scalability are key. traversing large data sets, dividing them into tiny sections and distributing the load among many machines (processors) is nothing new. <a href="http://pengas.com/2012/10/19/healthcare-and-big-data/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" style="margin: 10px; border: 1px solid black;" title="big data" src="http://www.greenbookblog.org/wp-content/uploads/2012/03/big-data.jpg" alt="" width="300" height="200" /></p>
<p style="text-align: justify;">everywhere you turn people are talking about big data, hadoop and sharding. rightfully so. in today&#8217;s day and age managing a lot of data is not an easy task, as performance and scalability are key. traversing large data sets, dividing them into tiny sections and distributing the load among many machines (processors) is nothing new.</p>
<p style="text-align: justify;">hadoop exists in order to solve specific problems and has emerged out of necessity. what hadoop does is provide the infrastructure to connect multiple (cheap) servers into a coherent environment with which high i/o and cpu problems (algorithms) are solved.</p>
<p style="text-align: justify;">it all started in 2004 when doug cutting of google released his document indexing project called lucene and decided to have it possible to achieve the same goals in distributed environment. hadoop BTW is his sun&#8217;s yellow elephant toy. in 2006 yahoo hired doug to improve his project so it can index the entire internet and made the project open source. that day marked the start of the revolution.</p>
<p style="text-align: justify;">at it&#8217;s core hadoop includes two projects: one for distributed storage and one for distributed computing. around those two projects a vast of projects have evolved (and still are).</p>
<p style="text-align: justify;"><strong>HDFS: hadoop distributed file system<br />
</strong>this file system is designed to store large files and enable large and effective r/w. this is done by dividing the file into sizable chunks, while each chunk is normally stored on 3 nodes which can be anywhere. there is a &#8220;name node&#8221; that runs the mapping between a document and it&#8217;s constituent pieces and the data nodes on which they are stored on.</p>
<p style="text-align: justify;"><strong>mapReduce:<br />
</strong>an API to write programs that will run in a parallel.  the developer really needs to write two simple functions: map and reduce that handle a single document (i.e. element of data) on multiple machines, when each node is responsible for the timing, handling errors and failures (network, i/o, etc). this allows for simple parallel batching, where a &#8220;job tracker&#8221; synchronizes the execution of the bach processes, when each one batch is sub divided into smaller tasks which are handled by the &#8220;task trackers&#8221;.</p>
<p style="text-align: justify;">over time yahoo and facbook (to mention a few) wrote their own drivers over HDFS and mapReduce and have shared their work with the community. so hadoop is a code name for a set of technologies who harnesses the computing power of many machines to perform simple tasks in parallel. hadoop emerged from the world of un structured data where hundreds of millions of pages are analyzed. today big data is being implemented and researched in every facet of the economy, including healthcare.</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/-P--tivCSQg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/10/19/healthcare-and-big-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/10/19/healthcare-and-big-data/</feedburner:origLink></item>
		<item>
		<title>why we use mongo DB</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/CGmrkFjRJXE/</link>
		<comments>http://pengas.com/2012/10/02/why-we-use-mongo-db/#comments</comments>
		<pubDate>Tue, 02 Oct 2012 20:54:05 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=696</guid>
		<description><![CDATA[from mongodb.org, mongo is a scalable, high performance, open source, schema-free, document oriented database. so the one size fits all philosophy doesn&#8217;t work anymore, does it? non relational databases scale horizontally much better. just add another machine and you are good to go, and these days where big data is a big deal &#8211; speed, <a href="http://pengas.com/2012/10/02/why-we-use-mongo-db/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-697" style="border: 1px solid black; margin: 10px;" title="mongo-db-huge-logo-300x100" src="http://pengas.com/wp-content/uploads/2012/10/mongo-db-huge-logo-300x100.png" alt="" width="300" height="100" /></p>
<p style="text-align: justify;">from mongodb.org, mongo is a scalable, high performance, open source, schema-free, document oriented database. so the one size fits all philosophy doesn&#8217;t work anymore, does it? non relational databases scale horizontally much better. just add another machine and you are good to go, and these days where big data is a big deal &#8211; speed, performance, flexibility and scalability are the names of the game. think about it&#8230; no schema, no concern with transactions. this is the commoditization of databases. what mongo does is try to perform as a key-value store with the functionality of RDBMS.</p>
<p style="text-align: justify;">speaking of &#8220;traditional&#8221; database capabilities, mongo can index and has failover/replication support. data is stored as documents in binary JSON format. yes. mongo &#8220;gets&#8221; JSON out of the box. is your JSON valid? good. you can now import and query it. and no schema means no more &#8216;alter table&#8217; crap, and the query syntax  is java script based and you can nest your queries as much as you want. moving right along, gridFS can store large binary objects efficiently . images. videos. whatever. just throw it in there.</p>
<p style="text-align: justify;">the documents are just like records. only mongo has them as JSON binary objects. collections are your old school tables if you will. when you query mongo you get a cursor back and not a record per se, and you iterate over the set of result set like a champ. you guessed it. no more loading everything to memory &#8211; just want you need. this is a big victory for the performance gods. mongo is wonderful to perform analysis  as it is a data warehouse. dump in your JSON and analyze the hell out of the data.</p>
<p style="text-align: justify;">mongo is not good handling transactions nor maintain the integrity of relationship between data. you can find out more at http://mongodb.org</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/CGmrkFjRJXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/10/02/why-we-use-mongo-db/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/10/02/why-we-use-mongo-db/</feedburner:origLink></item>
		<item>
		<title>CDA levels of interoperability</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/z7RK52b1pWc/</link>
		<comments>http://pengas.com/2012/07/10/cda-levels-of-interoperability/#comments</comments>
		<pubDate>Tue, 10 Jul 2012 19:53:11 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[healthcare IT]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=686</guid>
		<description><![CDATA[what does interoperability means in terms of the richness of the data when it comes to CDA documents? the CDA document has 3 levels of interoperability: level1: CDA header + body of unstructured blob (pdf for example) level2: CDA header + xml with narrative blocks, each block is code identified level3: CDA header + xml <a href="http://pengas.com/2012/07/10/cda-levels-of-interoperability/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>what does interoperability means in terms of the richness of the data when it comes to CDA documents? the CDA document has 3 levels of interoperability:</p>
<ul>
<li>level1: CDA header + body of unstructured blob (pdf for example)</li>
<li>level2: CDA header + xml with narrative blocks, each block is code identified</li>
<li>level3: CDA header + xml with narrative blocks + entries (SNOMED, CPT, ICD-9 encoded etc)</li>
</ul>
<p>as you can see, the richness of the data grows with each level and so does the capabilities of interoperability and quality of use. the coding for level2 and level3 is a requirement and adds clarity and consistency to the transaction. moreover, with level3, entries are encoded at varying levels of specificity, which is what HL7 refers to as &#8220;incremental semantic interoperability&#8221;, which allows the vertical and easy way into implementing the standards. as interoperability goes, the richness of the data is as important as the ability to exchange it, thus CDA level3 is what HIS should strive for, which will yield better care all across.</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/z7RK52b1pWc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/07/10/cda-levels-of-interoperability/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/07/10/cda-levels-of-interoperability/</feedburner:origLink></item>
		<item>
		<title>ACA and medicaid thoughts</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/w-UaTG5TkI8/</link>
		<comments>http://pengas.com/2012/07/10/aca-and-medicaid-thoughts/#comments</comments>
		<pubDate>Tue, 10 Jul 2012 19:43:25 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[healthcare IT]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=682</guid>
		<description><![CDATA[there are 60 million americans who are covered by their state. now with the passing of the ACA, medicaid programs are going to pick up. 30 million americans are about to get health coverage, from which 17 million are of medicaid low income patients. as eligibility is raised from 100% of the poverty line to <a href="http://pengas.com/2012/07/10/aca-and-medicaid-thoughts/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><span style="line-height: 12.800000190734863px;">there are 60 million americans who are covered by their state. now with the passing of the ACA, medicaid programs are going to pick up. 30 million americans are about to get health coverage, from which 17 million are of medicaid low income patients. as eligibility is raised from 100% of the poverty line to 133%, states wil be paying for coverage via federal funding from 2012-2014, from that date onward the states will start contributing to the cost, as fed share will not be lower than 90%. this pretty much means that medicaid will be become bigger and better and certainly more important.</span></p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/w-UaTG5TkI8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/07/10/aca-and-medicaid-thoughts/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/07/10/aca-and-medicaid-thoughts/</feedburner:origLink></item>
		<item>
		<title>how haptic technology may help mobile web</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/KmSLNrCj3kk/</link>
		<comments>http://pengas.com/2012/06/16/how-haptic-may-help-mobile-web-win-the-race/#comments</comments>
		<pubDate>Sat, 16 Jun 2012 20:39:17 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=672</guid>
		<description><![CDATA[the new world of smart devices has changed the game. for the first time in history last month, mobile use surpassed web. it seems the direction is clear &#8211; more robust, engaging and capable devices which are portable, easy to carry and connect us on a personal/social and professional level. every vertical on the planet <a href="http://pengas.com/2012/06/16/how-haptic-may-help-mobile-web-win-the-race/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" style="border: 1px solid black; margin: 10px;" title="haptic" src="http://f00.inventorspot.com/images/printedhug.img_assist_custom.jpg" alt="" width="291" height="359" /></p>
<p>the new world of smart devices has changed the game. for the first time in history last month, mobile use surpassed web. it seems the direction is clear &#8211; more robust, engaging and capable devices which are portable, easy to carry and connect us on a personal/social and professional level. every vertical on the planet is thinking of mobile and it can be utilized to achieve corporate goals, save money and enhance communication within the organization.</p>
<p>from the early start it was clear there is one daunting issue with mobile. fragmentation. this issue persists across history, from the inception of virtual machines to the web. ask any front</p>
<p>end web developer of their experience with coding for an array of different browsers and brace yourself for some horror stories that will most definitely make you cherish your choice of profession. yes &#8211; the browsers claim the support and implement specific standards, but at the end of the day having a concise experience across the 90% is major pain.</p>
<p>not far behind are mobile devices. a developer builds an app for iOS and now wants to develop it for android and blackberry. good luck. android has more devices out there an screen resolutions than one can count, and while going native is a great idea, one will need to double their effort in order to produce a solid experience across the eco system.</p>
<p>forget you not that the true open standard for mobile has always been the web. steve jobs explained so in the first iphone unavailing back in 2007, and indeed some great technologies have emerged for the mobile web that allow developers to deploy/convert/cross-compile their code so it will either run natively or be compatible across many  devices and operating systems.</p>
<p>while that is a good and interesting market that is just starting to awake, one very quickly experiences the big gaps between mobile web and native applications. most certainly on apple devices. the experience keeps the users wanting more. yes, HTML5&#8242;s canvas and CSS3 really offer some great features that do a good job &#8211; but it&#8217;s not the same and sometimes is not as responsive. let&#8217;s face it &#8211; a big part of mobile is the experience as it drives engagement which is a big part why mobile surpassed web. just play angry birds on crhome and then launch it from your iphone and you will see what i mean.</p>
<p>i have always been a fan of haptic technologies. in essence haptic provides the user sensory feedback so they can &#8220;feel&#8221; the surface of the touch screen, which are great, but there is still a missing sensual experience to what one is using. my mom for example does not like touch devices and prefers real buttons. who doesn&#8217;t? touch screens take time to get used to and bar none everyone would prefer to work with a physical keyboard for tasks that are longer than 140 characters.</p>
<p>IMHO haptic is a game-changer and one piece of technology that will take user experience to the next level. exposing developer APIs and allowing us to provide our users not only a visual but a sensual experience of the UI elements and interact with our technology on a deeper more intimate level. it may just be what will save the mobile web. touch is stronger than visual in my opinion, especially as displays have more pixels condensed per inch than ever before. how many of you are &#8220;blown away&#8221; by the new ipad&#8217;s retina display? how many of you think it&#8217;s &#8220;okay&#8221;, but certainly not something you would immediately shell out $550 to upgrade your ipad2?</p>
<p>being able to program what our fingers feel as they interact with a touch screen may be what the mobile web horizontal needs so it&#8217;s experience delivery is enhanced and gain more traction and acceptance.</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/KmSLNrCj3kk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/06/16/how-haptic-may-help-mobile-web-win-the-race/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/06/16/how-haptic-may-help-mobile-web-win-the-race/</feedburner:origLink></item>
		<item>
		<title>auto reference counting with iOS 5.0</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/AmUa-7t8ns8/</link>
		<comments>http://pengas.com/2012/04/19/auto-reference-counting-with-ios-5-0/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 20:23:40 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=666</guid>
		<description><![CDATA[iOS 5.0 introduced us to ARC for mobile. this is a major change (advantage) in the way developers  work. what was once a source for memory leaks, which required diligent memory allocation and management, becomes easier and much simpler of a task, allowing developers to focus on the code. LLVM rocks indeed. think of it <a href="http://pengas.com/2012/04/19/auto-reference-counting-with-ios-5-0/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><img class="alignright" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid; margin: 10px;" title="ARC" src="https://img.skitch.com/20110905-d7rkar175n2g6y5e7gycm5nn7k.png" alt="" width="422" height="293" /></p>
<p style="text-align: justify;">iOS 5.0 introduced us to ARC for mobile. this is a major change (advantage) in the way developers  work. what was once a source for memory leaks, which required diligent memory allocation and management, becomes easier and much simpler of a task, allowing developers to focus on the code.</p>
<p style="text-align: justify;">LLVM rocks indeed.</p>
<p style="text-align: justify;">think of it as new &#8216;best practices&#8217; one should incorporate into their coding habits, while disallowing other practices:</p>
<ul style="text-align: justify;">
<li>no more retain, release, autorelease nor dealloc</li>
<li>no more custom retain nor release method implementations</li>
<li>do not store obj pointers in C structures (use objects instead)</li>
<li>no more direct casting between objects and non objects (e.g. id and void*)</li>
<li>you are done with NSAutoreleasePool. use @autoreleasepool keyword to mark the block in curlies.</li>
</ul>
<p style="text-align: justify;">what ARC should encourage you to do is start thinking about the relationship between objects and object graphs, and not so much in terms of retain/release. there is now a new lifetime qualifiers for objects, which includes <strong>zeroing weak references</strong>. the value is automatically set to nil when the object it points to is deallocated. we now have qualifiers for vars and new <strong><em>weak</em></strong> and <strong><em> strong</em></strong> declared property attributes.</p>
<p style="text-align: justify;">apple is providing developers with migration tools which are build into xcode:</p>
<p style="text-align: justify;"><a href="https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/00-Introduction/Introduction.html#//apple_ref/doc/uid/TP40004626" target="_blank">https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/WhatsNewXcode/00-Introduction/Introduction.html#//apple_ref/doc/uid/TP40004626 </a>.</p>
<p style="text-align: justify;">switching to ARC means neglecting support for iOS &gt;5.0.<br />
add custom containers to the mix, much more control over customizing UIKit elements, storyboards, tableView&#8217;s new flexibility and much more.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">happy coding.</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/AmUa-7t8ns8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/04/19/auto-reference-counting-with-ios-5-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/04/19/auto-reference-counting-with-ios-5-0/</feedburner:origLink></item>
		<item>
		<title>self.brain-&gt;reset()</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/f7CqWVoo420/</link>
		<comments>http://pengas.com/2012/04/11/why-taking-time-off-is-crucial-to-ones-health/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 20:52:02 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[inspiration]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[whatever]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=656</guid>
		<description><![CDATA[our brains need the time to reset just like the gadgets and computers we use and operate. by experimentation i&#8217;ve learned that a minimum of 2-3 weeks vacation twice a year pretty much does the trick. think about it, in today&#8217;s day and age we are always on, always connected, always tapping into sources of data <a href="http://pengas.com/2012/04/11/why-taking-time-off-is-crucial-to-ones-health/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;"><a href="http://pengas.com/wp-content/uploads/2012/04/nir_playing.jpeg"><img class="alignright size-medium wp-image-658" style="border-image: initial; border-width: 1px; border-color: black; border-style: solid; margin: 10px;" title="nir_playing" src="http://pengas.com/wp-content/uploads/2012/04/nir_playing-300x156.jpg" alt="" width="300" height="156" /></a>our brains need the time to reset just like the gadgets and computers we use and operate. by experimentation i&#8217;ve learned that a minimum of 2-3 weeks vacation twice a year pretty much does the trick. think about it, in today&#8217;s day and age we are always on, always connected, always tapping into sources of data to keep us engaged. from the moment we wake up and check our smart phone which aggregates data from multiple social and professional networks, to email, text and voice mail &#8211; we are constantly engaging with our peers, families and consume multiple sources of data, easily streamlined for our convenience, easily shared and re-propagated. and this is just the digital disturbance <img src='http://pengas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">the human story for today is our need to focus. the need to do just one thing at a given moment and stick with it for many hours. developers know how to do so (hey nir, can you turn off the music and ask andrew to put his headphones on please?). i know that for me playing music does the trick and specifically practicing yoga. calming the mind is an art that requires constant and un interrupted practice. i cannot imagine the brain enjoying 100% capacity at any given moment, just as much as it enjoys 0% capacity. the truth is pretty much always in the middle. face it, we have learned to respond to these interruptions better than focus, and it goes back to the days where the telephone was invented.</p>
<p style="text-align: left;">sleeping is the best time for the brain to not consume new streams of data and process all it has been bombarded with, make new connections and archive/store the data. from a quick survey with close friends and family, i learn that sleeping patterns are very much affected and do worsen with time. how many of you out there in the internets sleep with the TV on?</p>
<p style="text-align: left;">this is why i take two long breaks from my work and focus on relaxing my mind and body, explore new geographical areas of our planet, meet new people, study a new language, and more often then not play/write music and expand my photography skills. this works in phases though and i find that it takes some time to re-adjust the mind and relax &#8211; slow down. the longest break i have ever taken from life was a 3 months trip to brasil. no iphone, no laptop, no internet connection. would you be surprised if i told you that it did not take long to re-adjust to the new situation and that i loved it? i took my best photos and wrote my best music while taking these breaks from life.</p>
<p style="text-align: left;">much like a hard reset, browser cache cleaning and the application of a new style sheet &#8211; one may immerge back with fresh energy and a newly re-wired brain. so &#8211; for the sake of your career, mental health and own happiness &#8211; plan on taking a longer time off. you deserve it.</p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/f7CqWVoo420" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/04/11/why-taking-time-off-is-crucial-to-ones-health/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/04/11/why-taking-time-off-is-crucial-to-ones-health/</feedburner:origLink></item>
		<item>
		<title>iPad 3 predictions</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/5hz3_SYSjx0/</link>
		<comments>http://pengas.com/2012/03/01/ipad-3-predictions/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 16:42:20 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[ipad]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[whatever]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=636</guid>
		<description><![CDATA[the ipad3 is around the corner as apple just announced a media event on march 7th. what will we possibly get? retina display: 2048×1536 pixels will make pretty much everything more gorgeous and engaging. A6 quad core processor: this means tremendous performance and response boost. LTE support. let&#8217;s face it &#8211; 4G network is where it&#8217;s <a href="http://pengas.com/2012/03/01/ipad-3-predictions/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p>the ipad3 is around the corner as apple just announced a media event on march 7th.</p>
<p><img class="alignright" style="border-image: initial; margin-left: 30px; margin-right: 30px; margin-top: 10px; margin-bottom: 10px; border-width: 1px; border-color: black; border-style: solid;" title="ipad3 event invitation" src="http://cdn.hypebeast.com/image/2012/02/apple-ipad-3-event-san-francisco-1.jpg" alt="ipad3 event invitation" width="372" height="248" /> <strong>what will we possibly get?</strong></p>
<ul>
<li style="text-align: left;">retina display: 2048×1536 pixels will make pretty much everything more gorgeous and engaging.</li>
<li style="text-align: left;">A6 quad core processor: this means tremendous performance and response boost.</li>
<li style="text-align: left;">LTE support. let&#8217;s face it &#8211; 4G network is where it&#8217;s all heading,<br />
as the internet will blend better and tighter with the device and our lifestyle.</li>
<li style="text-align: left;">better front and back camera. flash.</li>
<li style="text-align: left;">equal or better battery life.</li>
<li style="text-align: left;">unified GSM/CDMA support.</li>
<li style="text-align: left;">bluethooth 4.0 chip.</li>
</ul>
<p><strong><br />
what we may get:</strong></p>
<ul>
<li>smart bezel virtual buttons:<br />
imagine the bezel and back cover of the ipad responding to customized buttons which lit up.<br />
so you can setup the top left .bezel button to launch maps. more <a href="http://www.patentlyapple.com/patently-apple/2011/04/apple-blows-us-away-with-smart-bezel-details.html" target="_blank">here</a>.</li>
<li>NFC chip (not likely IMHO).</li>
<li>airdrop feature from ipad to mac.</li>
</ul>
<p><strong><br />
what we probably won&#8217;t get yet:</strong></p>
<ul>
<li>haptic feedback display. the game changer. it will be a great day when it arrives (though the image from apple may hint at it&#8230;).</li>
<li>solar charging of the device</li>
<li>new map system which apple has been <a href="http://www.padgadget.com/2011/03/25/apple-working-on-new-maps-app-for-iphone-and-ipad/" target="_blank">working on</a></li>
</ul>
<p><strong>final thoughts:</strong></p>
<ul>
<li>how does siri fit in? i am not sure yet&#8230;<br />
will iOS 6.0 be announced as well? if so, developers will a beta by early next week&#8230;</li>
</ul>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/5hz3_SYSjx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2012/03/01/ipad-3-predictions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2012/03/01/ipad-3-predictions/</feedburner:origLink></item>
		<item>
		<title>from: iphone -&gt; ipad; a quick guide.</title>
		<link>http://feedproxy.google.com/~r/ThePengasBlog/~3/i3MXb_QDZvQ/</link>
		<comments>http://pengas.com/2011/08/30/migrating-your-iphone-app-to-a-universal-application/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 20:28:46 +0000</pubDate>
		<dc:creator>Nir Pengas</dc:creator>
				<category><![CDATA[All Mac]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[user experience]]></category>
		<category><![CDATA[whatever]]></category>

		<guid isPermaLink="false">http://pengas.com/?p=565</guid>
		<description><![CDATA[it&#8217;s time to expand your iphone app and introduce it on the ipad. that is an interesting move for any product as the ipad is not an iphone &#8211; it is used for different things at different circumstances. yeah &#8211; you are going to practically re-think your app&#8230; which is great because you get to revisit <a href="http://pengas.com/2011/08/30/migrating-your-iphone-app-to-a-universal-application/">Continue reading &#8594;</a>]]></description>
				<content:encoded><![CDATA[<p><span><span style="font-family: symbol;"><span class="Apple-style-span" style="border-style: initial; border-color: initial;"><a href="http://ipadstory.net/wp-content/uploads/2011/05/Pages-Universal-App.jpeg"><img class="alignright" style="border-style: initial; border-color: initial; border-width: 0px; margin: 10px;" title="universal app (photo by ipadstory.net)" src="http://ipadstory.net/wp-content/uploads/2011/05/Pages-Universal-App.jpeg" alt="" width="283" height="221" /></a></span>it&#8217;s time to expand your iphone app and introduce it on the ipad. that is an interesting move for any product as the ipad is not an iphone &#8211; it is used for different things at different circumstances. yeah &#8211; you are going to practically re-think your app&#8230; which is great because you get to revisit your code and make sure your pipeline is tight, secure, fast and reliable. all that with the elegance of the ipads &#8211; split view controllers</span></span></p>
<p><span style="font-family: symbol;"> where do one starts? well, you can start be designing your app for the ipad and take by thinking about the following:</span><br />
<span style="font-family: symbol;"><span style="text-decoration: underline;"> orientation</span>, <span style="text-decoration: underline;">layout</span> and <span style="text-decoration: underline;">gestures</span>. all of which vary significantly from the iphone (unfortunately). side note: one thing i really like about webOS is that you develop your mobile app once and the system takes care of adjusting the interface to a slated device.</span></p>
<p><span style="font-family: symbol;">next thing to learn about the ipad is it&#8217;s split views, popovers and specific hardware features &#8211; all of which are ipad unique. you will need to use conditional coding to learn if a specific hardware feature you are looking for is available. this is necessary as you will need to load the right resources to handle that hardware. more specifically one should write conditional coding for:</span></p>
<p><span style="font-family: symbol;"><strong>resources</strong>: in your code, recognize which platform is running and load the right nib files. you will also need to load the right graphics that match the screen size and resolution.</span><br />
<span style="font-family: symbol;"> <strong>classes</strong>: check for class availability based on the device you are running on as some are iPad/iPhone specific.</span><br />
<span style="font-family: symbol;"> <strong>methods</strong>: weak-link any device specific methods and perform a check at runtime for the availability of that method and wether the object responds to a specific selector.</span></p>
<p><span style="font-family: symbol;"><strong>hardware</strong>: test for cmarea/gps/gyro support before utilizing it.</span></p>
<p><span style="font-family: symbol;">okay &#8211; we are done with the overview. let&#8217;s roll up our sleeves and dig right into it.</span></p>
<p><span style="font-family: symbol;">first thing&#8217;s first &#8211; lets let xcode help us start the process by duplicating the current target (an iphone target) into an ipad one.<br />
</span>right click on your target and choose &#8220;duplicate&#8221;. two options here &#8211; duplicate only and duplicate and transitoin to ipad. let&#8217;s go with the later.<br />
what xcode does here is create a new virtual folder (i.e. group) called &#8220;Resources-iPad&#8221; and copies the main nib file there. xcode really takes care of the main nib file and creates it for us. no other nib files to be touched. why? because the rest of the nib files are usually tied right into apps view controller so xcode leaves it up to us to define both the view and it&#8217;s controller. xcode sets the targeted device family (TDF) build settings to iphone/ipad and modify the base SDK of the project which will support both device types. no need to touch nor worry about the deployment target. you will see a new plist for the ipad app with it&#8217;s relevant settings.</p>
<p>in order to see it in action &#8211; run the app using the ipad simulator. what you will see is the iphone app running inside the ipad simulator and you can x2 time it to fit. boooo. one more step necessary (thanks apple for leaving it up to us) is to update the scheme to use the new and shiny ipad target. so go ahead and duplicate your iphone scheme (or create a new one) and under run  - choose the ipad executable. boom. wait &#8211; it really looks bad here.</p>
<p>well &#8211; as you may know iOS uses the MVC design pattern heavily. you may not know that MVC is actually a compound design pattern which includes 5 patterns. luckily this abstraction makes the process of porting an iphone app to an ipad a bit easier, as potentially one needs to take care of the view &#8211; making sure the right outlets are updated based on the design of the UI, and also heavily touch upon the controller to see which device is used and then follow a specific code path to match. the good news is the model can stay untouched <img src='http://pengas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>if you are happy with the IBOutlet you currently have on the iphone and would like to only use those (i cannot image why, but yeah&#8230;) all you need to do at this point is adjust the springs and struts in the size inspector when loading up your nib in IB. you should also make sure to support the orientations required for the app. in order to do this you will need to  implement <em><strong>s</strong><strong>houldAutorotateToInterfaceOrientation: </strong></em> and test for the device running the code and allow rotation. if you have singleton object place this code in it&#8217;s header file:</p>
<pre class="brush: objc; title: ; notranslate">
#define IS_IPAD   (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
</pre>
<p>ipod touch returns UIUserInterfaceIdiomPhone. FYI.</p>
<p>or place it wherever works for you, as long as you have access to this macro from wherever. this is useful as you will need to update your controllers to test for the hardware running and follow a specific code path to update your view and outlets.</p>
<p>one example of using this code and auto rotating is this:</p>
<pre class="brush: objc; title: ; notranslate">
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

	 if (IS_IPHONE)
	 {
		 if (interfaceOrientation == UIInterfaceOrientationPortrait ||
			 interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown)
		 {
			 return YES;
		 }
	 }

	 if (IS_IPAD)
	 {
		 if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft ||
			 interfaceOrientation == UIInterfaceOrientationLandscapeRight)
		 {
			 return YES;
		 }
	 }

	 return NO;
 }
</pre>
<p>pretty easy and straight forward right? moving along.</p>
<p><em><strong>cautionary tale:<br />
</strong></em>the app now must be careful with the symbols it uses. if you want to use <em><strong>UISplitViewController</strong></em> while running on iOS 3.1 &#8211; your app will crash as there are no split VCs on 3.1.<br />
the way you should be thinking about this is by mentally tuning into the &#8216;runtime checks&#8217; zone, where you will test if a particular symbol exists. more about that later.</p>
<p><em><strong>updating VC and views:<br />
</strong></em>this is where the bulk of the work really is &#8211; redoing your views and adding code (or creating new) view controllers. what can we do &#8211; the view size varies between the iphone and the ipad and that certainly needs to be taken into consideration. so start off by redesigning the views for the ipad. if you plan on scaling the existing view could work okay, but more often than not will not be the result you are hoping for. think of it this way &#8211; the new ipad interface should make use of the new available space and the elements which only exist on the ipad (splitVCs and popovers for example). the outcome is good UI and top UX.</p>
<p>also consider the following. for view controllers:<br />
a) create new nib files for each device (if you use nib files that is).<br />
b) if you code your views &#8211; make sure you support both devices when you do so.</p>
<p>for views:<br />
a) if you override <em><strong>drawrect: </strong></em>make sure the method can draw to different view sizes.<br />
b) if you implemenet the <strong><em>layoutSubviews</em></strong> method, the code must adapt to different view sizes.</p>
<p><em><strong>symbol checking during runtime:   </strong></em>if deep down inside you had hoped that this step will somehow be avoidable &#8211; fear not <img src='http://pengas.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  runtime checks for newer symbols is easy as pie and is the type of topic you can discuss with your boss and sound really clever.<br />
all of this is under the assumption you support different versions of the OS. just like a good soldier &#8211; you MUST protect your code from using symbols that do not exist. this happens all the time when you update an app to use new features and want to continue to support previous versions running on older OSs. all you need to do is create different code paths to follow, based on the OS currently running on the device executing your app. if you don&#8217;t do that your app is guaranteed to crash and that is not something us pros do, so let us quickly look into an example of how one goes about creating a code path when checking for newer symbols during runtime:</p>
<p>if you are linking against iOS 4.2 you are in luck my friend. that version has a weak linking support built right in, which allows you to check for the existence of a given class object and determine if it&#8217;s usable to you. like so:</p>
<pre class="brush: objc; title: ; notranslate">
if ([UIPrintInteractionController class]) {
   // Create an instance of the class and use it.
}
else {
   // The print interaction controller is not available.
}
</pre>
<p>seriously now &#8211; how simple was that?<br />
bare in mind that if you want to use this feature of the OS you must build your app with LLVM and Clang.<br />
deployment target should be 3.1 or later. sorry.</p>
<p>if your app links against &lt; 4.1, use <em><strong><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">NSClassFromString</span></strong></em><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;"> to see if a class is defined. if nil is returned &#8211; you&#8217;re shit out of luck.</span></p>
<p>for example:</p>
<pre class="brush: objc; title: ; notranslate">
Class splitVCClass = NSClassFromString(@&quot;UISplitViewController&quot;);
if (splitVCClass)
{
   UISplitViewController* mySplitViewController = [[splitVCClass alloc] init];
   // Configure the split view controller.
}</pre>
<p>for testing if an object  can be sent a specific message (i.e. has implemented that method), use the oh so convenient <strong><em>instancesRespondsToSelector:</em></strong> class method (yes, it is a class method, it&#8217;s not a type).</p>
<p>if you are a registered iphone developer and have not done so &#8211; check out the <a href="http://developer.apple.com/library/iOS/documentation/DeveloperTools/Conceptual/cross_development/Introduction/Introduction.html#//apple_ref/doc/uid/10000163i" target="_blank">SDK compatibility guide</a> by apple.</p>
<p><em><strong><br />
runtime checks &#8211;&gt; conditional code paths:<br />
</strong></em>based on the interface idiom described earlier &#8211; let&#8217;s start creating cool code paths to support both devices. a simple <em><strong>if-else</strong></em> statement will do just fine thank you very much. moving right along.</p>
<p>This concludes this first steps required to port your app from iphone to an ipad. next is a quick rundown on how to use split view controllers in your ipad app.<br />
<strong> </strong></p>
<img src="http://feeds.feedburner.com/~r/ThePengasBlog/~4/i3MXb_QDZvQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://pengas.com/2011/08/30/migrating-your-iphone-app-to-a-universal-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://pengas.com/2011/08/30/migrating-your-iphone-app-to-a-universal-application/</feedburner:origLink></item>
	</channel>
</rss>
