<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description></description><title>Eye Street</title><generator>Tumblr (3.0; @eyestreetblog)</generator><link>http://blog.eyestreet.com/</link><item><title>An article that expresses the components of...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_lpo2rolnxQ1qd7mlno1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;An article that expresses the components of &lt;a target="_blank" href="http://vidappy.com/"&gt;VidAppy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://shor.tswit.ch/hz"&gt;http://shor.tswit.ch/hz&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/8691016505</link><guid>http://blog.eyestreet.com/post/8691016505</guid><pubDate>Tue, 09 Aug 2011 11:23:48 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>Skype Enables Video on More Android Smartphones</title><description>&lt;p&gt;&lt;span&gt;
&lt;p&gt;IDG News Service — Skype has released version 2.1 of its application for Android, which allows more smartphones and tablets based on Google&amp;#8217;s (&lt;a title="Latest stock quote" href="http://finance.cio.com/idg.cio/quote?Symbol=GOOG"&gt;GOOG&lt;/a&gt;) operating system to use its video calling feature, it said in a blog post on Thursday.&lt;/p&gt;
&lt;p&gt;The company &lt;a href="http://blogs.skype.com/en/2011/08/skype_21_for_android.html"&gt;published a list of 17 devices&lt;/a&gt; that can now make video calls, including the HTC Desire, HTC Thunderbolt, Samsung Galaxy S, Samsung Galaxy Tab and Sony Ericsson Xperia Play.&lt;/p&gt;
&lt;p&gt;Initially, the HTC Desire S, Sony Ericsson Xperia neo, Sony Ericsson Xperia pro and the Google Nexus S were the only phones compatible with the feature.&lt;/p&gt;
&lt;p&gt;Users with Android 2.2-based smartphones that aren&amp;#8217;t on Skype&amp;#8217;s list should still be able to make video calls, according to the company. The feature can be enabled by going into &amp;#8220;Skype settings&amp;#8221; after launching the application and selecting &amp;#8220;enable video calling.&amp;#8221;&lt;/p&gt;
&lt;p&gt;If a user can&amp;#8217;t see the video calling settings, it means their Android phone does not meet the minimum requirements needed, according to Skype.&lt;/p&gt;
&lt;p&gt;In addition, the new version of Skype for Android has bug fixes and performance enhancements, which should further improve the user experience of Skype on Android-based smartphones.&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/8645483202</link><guid>http://blog.eyestreet.com/post/8645483202</guid><pubDate>Mon, 08 Aug 2011 10:51:40 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>How to Track a QR Code in Google Analytics</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lp0cq86iQF1qkndr3.png"/&gt;    &lt;span&gt;&lt;span&gt;This post is for those that are already familiar with what QR codes are. However, to quickly touch on the exactly what it is… it’s &lt;/span&gt;a two-dimensional bar code. QR means “Quick Response”. The code allows its contents to be decoded by devices like mobile phones that can scan and then quickly open website links right on the phone automatically.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;
&lt;p&gt;&lt;span&gt;So… You have created your QR code, but &lt;strong&gt;you don’t know &lt;/strong&gt;&lt;strong&gt;how many people actually scan it and visit your site&lt;/strong&gt;. In this post we will cover how to create a QR code that can be tracked in &lt;a target="_blank" href="http://google.com/analytics"&gt;Google Analytics&lt;/a&gt; so you can measure how many website visitors you receive because of  your QR codes.&lt;span id="more-1177"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If you create a shortened URL for your QR code, you will be able to more easily identify the referral traffic in your Google Analytics data. This makes reporting data a lot easier. First, you will need to have the website address (URL) of your QR code. If you have already created a QR code, but don’t have the URL, it will be almost impossible to track the activity from the QR code.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;The best way to track your QR code data is to first use the &lt;a target="_blank" href="http://www.google.com/support/analytics/bin/answer.py?answer=55578"&gt;Google URL Builder&lt;/a&gt;.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;img src="http://media.tumblr.com/tumblr_lp0cts1jUh1qkndr3.png"/&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;This tool will allow you to create your URL, define the &lt;em&gt;&lt;strong&gt;Campaign Source, Campaign Medium&lt;/strong&gt;&lt;/em&gt;and &lt;em&gt;&lt;strong&gt;Campaign Name&lt;/strong&gt;&lt;/em&gt;. Building your URL with this tool will also allow you to track exactly how many people scanned your QR code and which phones they use, how long they stayed on your website, and much more.&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After you build your URL using the Google URL Builder, you can now use a URL shortener to crunch it down to size. The hidden benefit to using a URL shortener is that some services allow you to edit the link after it has been shortened. &lt;a target="_blank" href="http://goo.gl/"&gt;Google’s URL Shortener&lt;/a&gt;does not allow you to edit the URL once it has been shortened, however, something like Shortswitch’s &lt;a target="_blank" href="http://www.shortswitch.com/"&gt;URL shortening service&lt;/a&gt; does let you edit afterwards. This will allow you to redirect the destination of the QR code in the future if ever you want to change the purpose of the specific QR code you’ve already created!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lp0cvpyy5K1qkndr3.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;span&gt;* UPDATE: &lt;strong&gt;&lt;a target="_blank" href="http://www.shortswitch.com/"&gt;Shortswitch.com&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt; will automatically create a QR code for each URL that you shorten&lt;/strong&gt;. So, this process gets even easier. You don’t have to go out and find a third-party QR creation tool this way.&lt;/em&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/8139595459</link><guid>http://blog.eyestreet.com/post/8139595459</guid><pubDate>Wed, 27 Jul 2011 16:00:13 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title> The Critical Importance of Web Usability Before, During and After a Disaster</title><description>&lt;p&gt;&lt;p class="MsoNormal"&gt;&lt;span&gt;In the past two years, Eye Street has had the opportunity to conduct user research with disaster survivors in Galveston, Atlanta, Nashville, Chicago and Raleigh.  We’ve conducted user research with disaster managers at conferences in Orlando, San Antonio, Toronto and also with those interested in disaster preparedness through multiple studies in the Washington DC area.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;Eye Street will recreate the experience of these user groups using new online resources that will eventually replace the resources that they currently use.  We have them try certain tasks on these Web sites and assess whether they can complete these tasks successfully.  Also, we’ve had the opportunity to listen to their stories - to hear and better understand what they went through in order to assure that the Web sites that are being created would meet the needs of these types of audience groups in the future. &lt;!-- more --&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Usability testing is a powerful experience in and of itself, for any audience group, but it becomes all the more meaningful when you realize that you can make a difference for those who are, as one survivor put it, “in that freaking out stage.” &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;There is so much that this usability testing and resulting reporting has accomplished over the past two years in providing information that has led to definitive improvements, but there is so much more still to do: to create Web sites for desktop and mobile devices that have what those involved in, or are preparing for, a disaster want and need; and to let them drill down quickly and efficiently to exactly those bits of information that are critical to their preparedness, their survival and their recovery. &lt;/span&gt;&lt;/p&gt;
&lt;!--EndFragment--&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/8054543439</link><guid>http://blog.eyestreet.com/post/8054543439</guid><pubDate>Mon, 25 Jul 2011 16:27:54 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>Evangelizing Usability: Training Those Who Create Disaster-Related Web sites.</title><description>&lt;p&gt;Back in 2009, a government client asked Eye Street for a series of “lunch and learn” sessions for those who create disaster-related Web sites for survivors, disaster managers and the general public. She proposed that we come up with a number of short usability-oriented topics, and perhaps offer one per month. This smaller idea snowballed into a total of eight topics centered around usability that were soon woven into a two-day usability workshop.&lt;!-- more --&gt;&lt;/p&gt;
&lt;p&gt;After about a year and a half of offering this course monthly, Eye Street has trained a total of approximately 350 attendees, including both government employees and contractors. The workshop was so successful that we was asked this year to create a “road show” – to take this course on the road and offer it to those who create similar sites all over the United States. By August 2011, we will have offered this course in seven cities around the United States.&lt;/p&gt;
&lt;p&gt;The workshop provides an overview of how to create sites that are both usable &amp;amp; accessible to disaster managers, disaster survivors and the general public. It includes discussion of how sites can be designed to cater to user needs, how content can be developed to be more easily comprehensible, and how an understanding of user research can help in web site development. Also included is an introduction to web accessibility for disabled web users, a discussion on search engine optimization and how that leads to better web site usability, and a review of information architecture, specifically how web sites should be structured for optimal findability.&lt;/p&gt;
&lt;p&gt;Teaching this course has been an incredible experience for Eye Street, as we feel we have had an impact on getting web teams to develop more usable sites. We’ve had the opportunity to open attendees’ eyes to issues that they may never have considered, and we have received emails and phone calls that expressed a lot&lt;/p&gt;
&lt;p&gt;Ultimately, these courses will help fix usability problems before they happen by giving teams the knowledge they need to create Web sites that are both usable and accessible. It is an incredible opportunity to help those who have experienced a disaster, those who manage disasters and those who prepare for disasters. We are able to provide knowledge that makes a difference.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7929386397</link><guid>http://blog.eyestreet.com/post/7929386397</guid><pubDate>Fri, 22 Jul 2011 11:28:00 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>ShortSwitch  ~ Your URL shrinky generator thingy... a white-labeled short URL service.</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lop8if7gKo1qkndr3.jpg" alt=""/&gt;&lt;a href="http://shortswitch.com/"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why &lt;a href="http://shortswitch.com/"&gt;ShortSwitch&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Brand Your Short URLs With Our White Label Service&lt;/p&gt;

&lt;p&gt;We are a custom URL shortening service that allows you to use your own domain or subdomain . Your users will know they are clicking on trustworthy links because it&amp;#8217;s your domain. Only your authorized users can create links on your short URL service. Your domain will show up in the tweets rather than someone elses short URL service.&lt;/p&gt;

&lt;p&gt;Monitor and analyze statistics for your short URLs on our admin interface, and provide new services via our API . Your short URLs never expire .&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7895471553</link><guid>http://blog.eyestreet.com/post/7895471553</guid><pubDate>Thu, 21 Jul 2011 15:50:00 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>Google+ iPhone App: 5 Things You Need to Know</title><description>&lt;p&gt;&lt;a href="http://www.cio.com/article/686461/Google_iPhone_App_5_Things_You_Need_to_Know_"&gt;CIO&lt;/a&gt; — Almost a month after Google (GOOG) announced its new social network, the Google+ iPhone app is finally available in the iTunes App Store. Those who downloaded the app Tuesday when it first went live complained of a litany of bugs. Google has since released an update, fixing many of the errors.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_loqqt1PWCU1qkndr3.jpg" alt=""/&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7894680029</link><guid>http://blog.eyestreet.com/post/7894680029</guid><pubDate>Thu, 21 Jul 2011 15:28:00 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>"Rodeo is a new tool for building websites into apps. Similar to something like Fluid.app but with..."</title><description>“Rodeo is a new tool for building websites into apps. Similar to something like Fluid.app but with some advantages over it. For one thing, the performance is much better because the views are preloaded into the app (this makes first launch especially fast) . There is also a way to browse and search further Also, because they are self contained, you can share the ones you have built with others. You can even build your own “app store” to share your Rodeo App Maker creations with others. For instance, here is a “app” of this site. There is a video (Flash) that helps to show it off and why it might be a good choice for you. Worth at least a peek.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://minimalmac.com/post/7802714981" class="tumblr_blog"&gt;Minimal Mac&lt;/a&gt;: &lt;a href="http://rodeoapps.com/Capture-Your-Web-Workflow-in-an-App/"&gt;Rodeo App Maker - Capture Your Web Workflow in an App You Can Share!&lt;/a&gt;  &lt;/em&gt;</description><link>http://blog.eyestreet.com/post/7856286199</link><guid>http://blog.eyestreet.com/post/7856286199</guid><pubDate>Wed, 20 Jul 2011 16:49:12 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>solr + autotest = continuously running tests</title><description>&lt;p&gt;You just implemented solr on your Rails app.  You&amp;#8217;re happy as a jaybird.  Later you make some change that causes a test to fail.  Autotest prints out the failed test and then&amp;#8230;runs again?  And again and again and again&amp;#8230;.&lt;/p&gt;

&lt;h3&gt;Just tell me how to fix it&lt;/h3&gt;

&lt;p&gt;Add &amp;#8220;solr&amp;#8221; to your .autotest file&amp;#8217;s exceptions.  Don&amp;#8217;t have one?  Here&amp;#8217;s what it&amp;#8217;ll look like:&lt;/p&gt;

&lt;script src="https://gist.github.com/1095143.js?file=.autotest"&gt;&lt;/script&gt;&lt;h3&gt;Longer version&lt;/h3&gt;

&lt;p&gt;What&amp;#8217;s happening is simple to explain - Autotest is detecting that some file has changed and, as it&amp;#8217;s programmed to do, reruns your tests.  The problem is that the file that has changed is one or many of your solr index files.  And the solr index files are changing all the time leading autotest to continuously believe it must rerun the tests.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7849967434</link><guid>http://blog.eyestreet.com/post/7849967434</guid><pubDate>Wed, 20 Jul 2011 13:51:43 -0400</pubDate><dc:creator>moviepoke</dc:creator></item><item><title>NIEM – A Practical Use Case</title><description>&lt;p&gt;If you work with the National Information Exchange Model (NIEM) as well as with other standards, you often run into issues related to how your overall work should incorporate (or not incorporate) NIEM.   The rules for NIEM allow you to use recognized external standards independently.  FEMA&amp;#8217;s Integrated Public Alert and Warning System (IPAWS) does this with it implementation of the Common Alerting Protocol (CAP) standard (&lt;a href="http://shor.tswit.ch/hb"&gt;http://shor.tswit.ch/hb&lt;/a&gt;).  You can also use components from an external Standard within a NIEM conforming schema, but only if you use the formally defined NIEM &amp;#8220;Adapter&amp;#8221; approach. You can also use NIEM inside an externally defined standard wrapper as shown in the graphic below.&lt;/p&gt;
&lt;p&gt;&lt;img height="500" width="800" src="http://grandpaham.com/blog/wp-content/uploads/2011/07/NIEM_In_Wrapper_Graphic.png"/&gt;&lt;/p&gt;
&lt;p&gt;Gary Ham, an Eye Street Solutions team member on the IPAWS Program will be giving a talk at the NIEM National Training Event (NTE) on August 23-25, 2011 in Philadelphia (&lt;a href="http://shor.tswit.ch/hc"&gt;http://shor.tswit.ch/hc&lt;/a&gt;).    During this talk he will discuss using an OASIS Emergency Data Exchange Language - Distribution Element (EDXL-DE) as a wrapper as shown in the diagram above, but it will go beyond that.  Gary will discuss how NIEM conforming data structures can be used &lt;em&gt;&lt;strong&gt;within the EDXL-DE wrapper itself&lt;/strong&gt;&lt;/em&gt; as DE conforming metadata to describe the content and desired distribution of the Information Exchange Package (IEP). The goal is to show an innovative use of NIEM that is actually made possible by the (also) innovative structure designed into the EDXL-DE standard. The actual content of the IEP will be an IPAW Profile conforming CAP message. The wrapping DE will use NIEM conforming metadata to define IPAWS distribution and content identification needs.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7763447940</link><guid>http://blog.eyestreet.com/post/7763447940</guid><pubDate>Mon, 18 Jul 2011 11:55:00 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>Plain Language and Respectable Web Writing </title><description>&lt;p&gt;The &lt;a href="http://www.plainlanguage.gov/plLaw/law/index.cfm"&gt;Plain Writing Act of 2010&lt;/a&gt; requires federal agencies to write, &amp;#8220;Clear government communication that the public can understand and use.&amp;#8221;  This aligns perfectly with good web writing.  With the upcoming July 13, 2011 deadline for the first round of improvements, it’s a good time to address my favorite federal web writing, “Bad Habit.”&lt;/p&gt;

&lt;p&gt;First, let’s go through the Act.&lt;/p&gt;

&lt;p&gt;The July 13 deadline requires each federal agency:&lt;br/&gt;
•	Designate a senior official for &amp;#8220;plain writing&amp;#8221; &lt;br/&gt;
•	Explain the Act&amp;#8217;s requirements to staff &lt;br/&gt;
•	Establish a procedure to oversee the implementation of the Act within the agency &lt;br/&gt;
•	Train agency staff in plain writing &lt;br/&gt;
•	Designate staff as points of contact for the agency plain writing web page &lt;br/&gt;
•	Post its compliance plan for meeting the requirements of the Act on its plain language web page&lt;/p&gt;

&lt;p&gt;These requirements are setting the stage for the larger October 13, 2011 deadline, which requires each federal agency:&lt;br/&gt;
•	Use plain language in any document that: &lt;br/&gt;
o	Is necessary for obtaining any federal government benefit or service or filing taxes&lt;br/&gt;
o	Provides information about an federal government benefit or service, or&lt;br/&gt;
o	Explains to the public how to comply with a requirement that the federal government administers or enforces&lt;br/&gt;
•	Write annual compliance reports and post these reports on its plain language web page&lt;/p&gt;

&lt;p&gt;The requirements are clearly written in order to help with implementation. We should be seeing plenty of activity in the next three or so months on federal websites as the Act is implemented.&lt;/p&gt;

&lt;p&gt;So my favorite “Bad Habit” is using the word “Pursuant.”  Pursuant is defined as, “in accordance with the law.” It’s a horrible lead to a web page.  The introduction paragraph of any web page should be a concise summary of the contents of the page with a focus to the end-user.  It should identify the user’s top tasks and describe your agency’s key activities.  That said, citing public law probably isn’t top of your list.   &lt;/p&gt;

&lt;p&gt;However, we aren’t tossing out the use public law references.  Add a section or sub-page with your laws and regulations to allow the user to read or ignore them as they wish.  Citation is important, but should not be the lead to your web page.&lt;/p&gt;

&lt;p&gt;In fact, we could drop pursuant for “in reference to” and improve the readability of our web pages. Microsoft Word has a feature you can turn on to access readability statistics on your text.  Shorter sentence structure, active voice and words with fewer syllables are easier to read than complicated, dense web copy. Test your document&amp;#8217;s readability - Word - Office.com&lt;/p&gt;

&lt;p&gt;&lt;br/&gt;
There are also free online tools that you can use:&lt;br/&gt;
•	Tests Document Readability&lt;br/&gt;
•	Readability index calculator&lt;/p&gt;

&lt;p&gt;How did this post score?  Using Word, I get a grade level score of 7.9.&lt;/p&gt;

&lt;p&gt;Learn More&lt;br/&gt;
&lt;a href="http://www.plainlanguage.gov"&gt;www.plainlanguage.gov&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7572868426</link><guid>http://blog.eyestreet.com/post/7572868426</guid><pubDate>Wed, 13 Jul 2011 10:14:48 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>:accepts_nested_attributes_for with Polymorphic Associations and a Custom Autosave</title><description>&lt;p&gt;Wheew… what a title… kinda dry, very geeky, but if you landed here, hopefully this will help. This blog documents some of the code wrangling that we did for a recent app, &lt;a href="http://vrcompliance.com"&gt;VRCompliance&lt;/a&gt;. I needed to have the ability to create multiple phone numbers when inputting either addresses or people in our system. It seemed like a great time to use models with with the &lt;code&gt;:accepts_nested_attributes_for :nested_model&lt;/code&gt; declaration. When doing this I found out that the default creation of a nested object was not what I wanted. Essentially, I wanted  a find_or_create for the nested object. After some searching I came across this &lt;a href="http://stackoverflow.com/questions/3579924/accepts-nested-attributes-for-with-find-or-create"&gt;StackOverflow article&lt;/a&gt; that describes a solution. This post adds to the discussed solution by going into additional detail and fleshing out the answer described in the previous link.&lt;/p&gt;

&lt;p&gt;For this post I’ve simplified our objects so our sample application has people, addresses, and phone numbers. Both a person and an address can have many phone numbers. Additionally, with our application’s data it is possible to have a many-to-many relationship between the phone numbers, people and addresses. Instead of using two separate join tables to describe these relationships, I went with a polymorphic association, calling our resulting common join table, &lt;em&gt;phonings&lt;/em&gt;, and the polymorphic relations a &lt;em&gt;phonable&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Our  models look similar to the snippets below:&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/1038766.js?file=address.rb"&gt;&lt;/script&gt;&lt;script src="https://gist.github.com/1038766.js?file=person.rb"&gt;&lt;/script&gt;&lt;script src="https://gist.github.com/1038766.js?file=phone_number.rb"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;And the initial phoning model was:
&lt;script src="https://gist.github.com/1038766.js?file=phoning_original.rb"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;With the models and their relationships defined, I built the forms for creating an address, and wanted to nest the creation of the phone numbers within the forms for the creating of both a person and address. Initially, I think I had  &lt;code&gt;:accepts_nested_attributes_for :phone_numbers&lt;/code&gt; in the address object, but there were issues with that approach. 

&lt;/p&gt;&lt;p&gt;First, deletion of the phone number deleted the object, and second, if I added the phone number to two different objects then I would get validation errors due to uniqueness constraints that I have on our real phone number object.  After digging around, I found some links that discussed making the nested attributes for the join table so that on deletion you are really deleting the join object and not the object it relates. This resulted in &lt;code&gt;:accepts_nested_attributes_for :phonings&lt;/code&gt; in the address object (as seen above).&lt;/p&gt;

&lt;p&gt;Deleting of an object no longer deleted my phone number object, just the phoning object. However, I still had the issue that if the same phone number was added to two addresses via nested attributes then two distinct phone number objects were created. The test below shows passing tests that document this issue. Two addresses are initialized and saved with the same nested phone number. After saving both, we find that we have two phone number objects with the same phone number.&lt;/p&gt;

&lt;script src="https://gist.github.com/1038766.js?file=address_test.rb"&gt;&lt;/script&gt;&lt;p&gt;Based on the StackOverflow thread from above, I realized that I needed to change the autosave creation of phone numbers. It should be noted that &lt;code&gt;accepts_nested_attributes_for&lt;/code&gt; automatically sets &lt;code&gt;:autosave&lt;/code&gt; for the model. Autosave means that associated records are automatically saved when the parent object is saved. In our examples this means that when an Address object is saved the Phoning object and the PhoneNumber object are saved. The default functionality is to create a new object. The gist below shows the necessary changes to our test to generate the desired functionality of the find or create for the nested phone numbers.&lt;/p&gt;

&lt;script src="https://gist.github.com/1038766.js?file=address_test_2.rb"&gt;&lt;/script&gt;&lt;p&gt;We can then move that functionality back in to our model:
&lt;script src="https://gist.github.com/1038766.js?file=phoning.rb"&gt;&lt;/script&gt;&lt;/p&gt;

&lt;p&gt;In a future post, I will walk through the view and controllers used for these nested forms.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7309604903</link><guid>http://blog.eyestreet.com/post/7309604903</guid><pubDate>Wed, 06 Jul 2011 14:27:15 -0400</pubDate><dc:creator>rwc9u</dc:creator></item><item><title>Customer Service – the Art of Not Saying No</title><description>&lt;p&gt;&lt;p class="MsoNormal"&gt;Eye Street Solutions has a strong commitment to customer service.&lt;span&gt;   &lt;/span&gt;Some people may think about customer service in terms of retail returns or IT help desk support, but it’s a key factor in content management, especially if the clients you serve aren’t web content professionals.&lt;span&gt;  &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The team at Eye Street interacts with hundreds of different clients across a large federal agency. &lt;span&gt; &lt;/span&gt;All are subject matter experts in their field, but have varied levels of web experience.&lt;span&gt;  &lt;/span&gt;Most of them publish as “other duties as assigned” or to meet a requirement.&lt;span&gt;  &lt;/span&gt;They are task focused on getting their material posted with the least amount of hassle (to them!).&lt;/p&gt;
&lt;p class="MsoNormal"&gt;To manage expectations, we have published service level agreements. Each request is evaluated against the agency’s written policies and procedures as well as federal laws and guidelines (such as Section 508 / accessibility). If there are any issues with the content package, it is sent back to the client for further review.&lt;span&gt;  &lt;/span&gt;Once the package is complete for processing, it’s assigned to a team member and an estimated publishing date is sent back to the client.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This process works well for routine updates as well as new information that follow established protocols, such as posting a publication.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;What gets tricky is when the request comes in that isn’t routine.&lt;span&gt;  &lt;/span&gt;Many times by the time it gets to the web team, there has been a lot of time and effort that has been put into the package without any recognition of federal requirements, the agency’s policies or procedures, or web writing best practices.&lt;span&gt;  &lt;/span&gt;It’s easy to say “no” but that isn’t effective.&lt;span&gt;  &lt;/span&gt;They need training or further education.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;We know the training objective – training/refreshing the content provider on federal requirements, the agency’s policies or procedures, or web writing best practices while getting the content fit for publication.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;For federal requirements, they will need to modify their package (say, provide a timed caption file for their online video).&lt;span&gt;  &lt;/span&gt;We’ll send them a link to a training video to help them complete this step. Requirements are easy. They have to be completed before anything can be posted. &lt;span&gt; &lt;/span&gt;Through this process, they will be aware of federal requirements for future postings.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;For policies and procedures, the discussion is more nuanced. For instance, their proposed information may be organized by how the office is structured, not by topic.&lt;span&gt;  &lt;/span&gt;We see from research and our metrics that the American public doesn’t look for information by how the agency is organized but by the topics that interest them. &lt;span&gt;  &lt;/span&gt;We’ll help them classify their information, while training them about how to classify new materials in the future.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Following web-writing standards is the most difficult as many times we are working with final cleared content.&lt;span&gt;  &lt;/span&gt;Getting materials cleared is a herculean, time-consuming process that we can’t revisit.&lt;span&gt;   &lt;/span&gt;What we can do is restructure, reorganize, as well as add sub-headers, bullets and images to help bring clarity to the information.&lt;span&gt;  &lt;/span&gt;As well as giving them tools to write for the web in the future, we also offer to help out earlier in the clearance process before the information is final.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;This training process is quick, customizable and meets the objectives.&lt;span&gt;  &lt;/span&gt;We meet the client’s mission while producing materials that are friendly to the end-customer, the American public.&lt;span&gt;  &lt;/span&gt;And it’s all done without having to say “no.&amp;#8221;&lt;/p&gt;
&lt;!--EndFragment--&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/7047951644</link><guid>http://blog.eyestreet.com/post/7047951644</guid><pubDate>Wed, 29 Jun 2011 12:40:00 -0400</pubDate><dc:creator>aubreyhine</dc:creator></item><item><title>SpeedTouch v1.2</title><description>&lt;p&gt;&lt;a href="http://blog.speedtouchapp.com/post/5554407025"&gt;speedtouchapp&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A new release of &lt;a title="SpeedTouch" href="http://itunes.apple.com/us/app/speedtouchapp/id378360978?mt=8"&gt;SpeedTouch&lt;/a&gt; is now available in the App Store.&lt;/p&gt;
&lt;p&gt;What’s New in Version 1.2&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Added ability to create Face&lt;span&gt;Time shortcuts.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fixed issue with international numbers.  &lt;/span&gt;&lt;span&gt;Grazie Francesco!&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Fixed issue with shortcut title.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Added high resolution shortcut icons.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;</description><link>http://blog.eyestreet.com/post/5554561433</link><guid>http://blog.eyestreet.com/post/5554561433</guid><pubDate>Mon, 16 May 2011 17:28:26 -0400</pubDate><dc:creator>eyestreet</dc:creator></item><item><title>Polishing Objective-C: Pulling Up into Categories</title><description>&lt;p&gt;Objective-C with Cocoa does a lot for you, but if you are used to other languages and frameworks, you&amp;#8217;ll quickly pine for the convenience methods that are missing.  Lets say that you need to trim whitespace from strings.  In Java, you can trim the whitespace from a String object like this:&lt;/p&gt;
&lt;pre&gt;String trimmedString = myString.trim();&lt;/pre&gt;
&lt;p&gt;No simple trim method exists in the Objective-C NSString class, so I&amp;#8217;ll use Google to find a code snippet to do the same thing.  Soon the snippet is sprinkled throughout my code:&lt;/p&gt;
&lt;pre&gt;NSString *trimmedString = [myString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]&lt;/pre&gt;
&lt;p&gt;The result is very repetitive and verbose.  If I want use this snippet in multiple places, I should extract it into a method:&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;-(NSString*)trimString:(NSString*)string
{
    return [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}&lt;/pre&gt;
&lt;p&gt;This reduces each trim operation to:&lt;/p&gt;
&lt;pre&gt;NSString *trimmedString = [self trimString:myString];&lt;/pre&gt;
&lt;p&gt;If I want to use it in multiple classes I can go further by pulling it out and making it a class method inside of a Utility class so it is accessible to all of my classes:&lt;/p&gt;
&lt;pre&gt;+(NSString*)trimString:(NSString*)string
//...&lt;/pre&gt;
&lt;pre&gt;NSString* trimmedString = [Utils trimString:myString];&lt;/pre&gt;
&lt;h2&gt;Categories&lt;/h2&gt;
&lt;p&gt;The method is pretty clean, but wouldn&amp;#8217;t you rather call a trim method directly on a string object?  Perhaps the most powerful refactoring tool in Objective-C is the category.  With categories, we can pull methods up into a class that is already defined by a framework.  In this case, we&amp;#8217;ll also define trim as a read only property for conciseness.&lt;/p&gt;
&lt;h3&gt;Create a header file.&lt;/h3&gt;
&lt;pre&gt;//NSString+Trim.h
@interface NSString(MyCategories)

@property(nonatomic, readonly) NSString *trim; // or stringByTrimming, if you want to name like Apple for derived objects.

@end
&lt;/pre&gt;
&lt;h3&gt;Create an implementation file.&lt;/h3&gt;
&lt;pre&gt;//NSString+Trim.m
@implementation NSString(MyCategories)

(NSString*)trim
{
    return [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

@end
&lt;/pre&gt;
&lt;h3&gt;Include the category in your prefix headers file(myApp.pch).&lt;/h3&gt;
&lt;pre&gt;//myApp.pch
#include "NSString+Trim.h"&lt;/pre&gt;
&lt;h2&gt;Result&lt;/h2&gt;
&lt;p&gt;The result is far more concise and readable than the original code:&lt;/p&gt;
&lt;pre&gt;NSString *trimmedString = myString.trim;&lt;/pre&gt;
&lt;p&gt;To see many more examples of convenience methods pulled up into categories, see the &lt;a title="es_ios_utils" target="_blank" href="https://github.com/peterdeweese/es_ios_utils"&gt;es_ios_utils&lt;/a&gt; library.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/4538425736</link><guid>http://blog.eyestreet.com/post/4538425736</guid><pubDate>Mon, 11 Apr 2011 19:56:53 -0400</pubDate><category>objective-c refactoring cocoa-touch</category><dc:creator>peterdeweese</dc:creator></item><item><title>Veporter - Shoot. Splice. Style. Submit.</title><description>&lt;div style="float:left; margin: 15px 15px 10px 10px;"&gt;&lt;a title="Veporter" target="_blank" href="http://veporter.com"&gt;&lt;img src="http://media.tumblr.com/tumblr_limqcggDy11qe27kw.png"/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;Introducing Veporter, an iPhone app that allows you to create a video to submit directly to your organization&amp;#8217;s c&lt;span&gt;ontent management (ECM/WCM) system&lt;/span&gt;.  Turn your users or employees into reporters!  Users can import videos and photos from the iPhone&amp;#8217;s cameras and albums, arrange them as desired with a simple crossfade, and upload the video to YouTube or a demonstration enterprise website.  The project is saved for future use and can be exported to your photo-roll.&lt;/p&gt;

&lt;p&gt;&lt;a title="Veporter" target="_blank" href="http://veporter.com"&gt;Vist our website&lt;/a&gt; to download Veporter.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_limqj9sLHd1qe27kw.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;While Veporter makes it easy for anyone to compose video, the real purpose is for the app to be customized for your enterprise.  Collect videos for direct journalism, product reviews, inspection evidence, media libraries, online training, or public relations.  We can include a custom asset library with a logo title screen and any other standard items needed.  Even better, we can integrate it with your servers and processes.  &lt;a title="Contact us" target="_blank" href="http://veporter.com/contact"&gt;Contact us&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;We are working to add a variety of features to Veporter such as titles, voice over, and support for tumblr.  Thousand of users have installed Veporter so far, and an April update will be released to respond to initial user feedback.&lt;/p&gt;

&lt;p&gt;&lt;a title="Download" target="_blank" href="http://itunes.apple.com/us/app/veporter-shoot-splice-style/id424007864?mt=8"&gt;&lt;img src="http://media.tumblr.com/tumblr_limqr4Qc211qe27kw.png"/&gt;&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/4089713817</link><guid>http://blog.eyestreet.com/post/4089713817</guid><pubDate>Fri, 25 Mar 2011 16:10:00 -0400</pubDate><dc:creator>peterdeweese</dc:creator></item><item><title>Internet Explorer Cookies Bug</title><description>&lt;p&gt;As a white labeling URL shortener, ShortSwitch.com needs to be able to support logins from not only our own domain but a user&amp;#8217;s account domain as well.  One of our customers opened a ticket to inform us that some of his customers - namely those using Internet Explorer - were having problems logging in.&lt;/p&gt;
&lt;p&gt;At the time we were setting the browser cookie to be .domain (e.g., .ab.cd, .abc.com) per a very nice write up on handling sessions in a multi-domain environment using &lt;a target="_blank" href="http://codetunes.com/2009/04/17/dynamic-cookie-domains-with-racks-middleware/"&gt;Dynamic cookies and Rack&lt;/a&gt;.  After adding debugging lines all over the Ruby on Rails core code we found the problem - IE was not setting cookies for domains of less than five characters.&lt;/p&gt;
&lt;p&gt;Internet research showed us Microsoft had fixed a &lt;a target="_blank" href="http://support.microsoft.com/kb/310676"&gt;bug&lt;/a&gt; where IE would not set a cookie for two letter domains.  Specifically they fixed it for root domains of two letters (e.g., ab.com).  But we had discovered that there&amp;#8217;s still a bug in IE where cookies will not be set for domains that are less than five characters (e.g., ab.cd).  Our findings were confirmed on &lt;a target="_blank" href="http://stackoverflow.com/questions/867796/internet-explorer-ignoring-my-cookies"&gt;StackOverflow&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In Ruby on Rails not setting the cookie creates a problem - the server thinks each request is a new request causing it to regenerate a new auth token.  Any server request that checks the auth token will fail with the ever frustrating ActionController::InvalidAuthenticityToken error.&lt;/p&gt;
&lt;p&gt;The &lt;a target="_blank" href="https://gist.github.com/671660"&gt;solution&lt;/a&gt; we ended up using was to not set the domain as a value in the cookie for any domain other than ShortSwitch&amp;#8217;s. Works just fine.&lt;/p&gt;
&lt;p&gt;Thanks for keeping us on our toes, Microsoft.&lt;/p&gt;</description><link>http://blog.eyestreet.com/post/1552927673</link><guid>http://blog.eyestreet.com/post/1552927673</guid><pubDate>Fri, 12 Nov 2010 10:50:32 -0500</pubDate><dc:creator>moviepoke</dc:creator></item><item><title>ShortSwitch: New Features - Allow duplicate URLs, filter spam URLs, token/URL search</title><description>&lt;a href="http://blog.shortswitch.com/post/1536082826/new-features-allow-duplicate-urls-filter-spam-urls"&gt;ShortSwitch: New Features - Allow duplicate URLs, filter spam URLs, token/URL search&lt;/a&gt;: &lt;p&gt;We have had a flurry of recent activity on ShortSwitch. Check out some of the new features.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shortswitch.com/post/1536082826/new-features-allow-duplicate-urls-filter-spam-urls"&gt;shortswitch&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We have recently rolled out a number of new features that we’re pretty excited about.&lt;/p&gt;
&lt;p&gt;When ShortSwitch was originally released there was a desire to only allow a given long URL to be shortened once and any subsequent shortenings of that long URL would return the existing token. Our users have…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.eyestreet.com/post/1536446446</link><guid>http://blog.eyestreet.com/post/1536446446</guid><pubDate>Wed, 10 Nov 2010 16:18:34 -0500</pubDate><dc:creator>eyestreet</dc:creator></item><item><title>RetireHQ Status: Public Participation</title><description>&lt;a href="http://status.retirehq.com/post/1155737377/public-participation"&gt;RetireHQ Status: Public Participation&lt;/a&gt;: &lt;p&gt;We’ve added a number of new features to &lt;a href="http://retirehq.com"&gt;RetireHQ/PayStubHQ&lt;/a&gt; over the past few weeks.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://status.retirehq.com/post/1155737377/public-participation"&gt;retirehq&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Tired of emailing your plan administrator to get your addressed fixed? Tired of receiving emails all day to fix the spelling of your participants’ son’s middle name? The PaystubHQ staff is very happy to tell all of you you will no longer have to do either of these. We have opened logins to all…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.eyestreet.com/post/1213963176</link><guid>http://blog.eyestreet.com/post/1213963176</guid><pubDate>Thu, 30 Sep 2010 00:33:30 -0400</pubDate><dc:creator>eyestreet</dc:creator></item><item><title>Additional Features To Maintain Your Brand</title><description>&lt;p&gt;Here are some recent changes from our ShortSwitch product.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shortswitch.com/post/816562703/additional-features-to-maintain-your-brand"&gt;shortswitch&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_l5m98xepE21qzhmo3.png" alt="Account Settings"/&gt;&lt;/p&gt;
&lt;p&gt;We recently had a request to allow the root URL of your white-labeled domains to be redirected to another location, instead of the &lt;a href="http://shortswitch.com"&gt;ShortSwitch homepage&lt;/a&gt;. Seemed like a great idea, so we added the feature. Now if someone sees your pithy short domain, and either strips the token or enters an invalid token, you can have them directed to a location on your web site. Both a custom invalid URL and a homepage redirect URL can be added in your account settings.&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.eyestreet.com/post/928334253</link><guid>http://blog.eyestreet.com/post/928334253</guid><pubDate>Mon, 09 Aug 2010 15:49:00 -0400</pubDate><dc:creator>eyestreet</dc:creator></item></channel></rss>

