<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace V5 Site Server v5.13.159 (http://www.squarespace.com) on Thu, 23 May 2013 05:51:54 GMT--><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><title>Blog</title><subtitle>Blog</subtitle><id>http://chasenlehara.com/blog/</id><link rel="alternate" type="application/xhtml+xml" href="http://chasenlehara.com/blog/"/><link rel="self" type="application/atom+xml" href="http://chasenlehara.com/blog/atom.xml"/><updated>2012-11-30T23:38:24Z</updated><generator uri="http://five.squarespace.com/" version="Squarespace V5 Site Server v5.13.159 (http://www.squarespace.com)">Squarespace</generator><entry><title>Transitioning Cell-Based to View-Based Table Views in Cocoa</title><id>http://chasenlehara.com/blog/transitioning-cell-based-to-view-based-table-views-in-cocoa.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/transitioning-cell-based-to-view-based-table-views-in-cocoa.html"/><author><name>Chasen Le Hara</name></author><published>2012-11-30T23:35:07Z</published><updated>2012-11-30T23:35:07Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>Last year, Apple introduced OS X Lion with support for view-based <code>NSTableView</code>. The next version of <a href="https://ironmoney.com/mac/">Iron Money for Mac</a> requires OS X Lion, and thus I had the opportunity to start using view-based NSTableViews. I didn’t find a quick guide for going from cell-based NSTableViews to view-based NSTableViews, so here’s a quick look at what it takes. Note: this is for uses of <code>NSTableView</code> in Interface Builder without bindings.</p>

<h2>In Interface Builder</h2>

<p>Making the transition in Interface Builder is pretty easy. Simply select the <code>NSTableView</code>, go to the Attributes Inspector, then change the Content Mode from Cell Based to View Based. This will add NSTableCellViews to your existing columns.</p>

<p>You’ll want to copy the NSTableViewColumn’s identifier (under the Identity Inspector) to the new NSTableCellView’s identifier. You’ll also want to change the new NSTextFieldCells to match the attributes of your old ones.</p>

<h2><code>NSTableViewDelegate</code>: cell values</h2>

<p>You will want to replace your instances of <code>- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex</code> with <code>- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row</code>. In the <code>viewForTableColumn</code> method, you’ll use <code>- (id)makeViewWithIdentifier:(NSString *)identifier owner:(id)owner</code> to grab an instance of the view you need, and from there you can customize it. It’ll look something like this:</p>

<pre><code>- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTableCellView *tableCellView = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:self];
    if ([[tableColumn identifier] isEqualToString:@"identifier"]) {
        [[tableCellView textField] setObjectValue:@"object"];
    }
}
</code></pre>

<h2><code>NSTableViewDelegate</code>: customizing cells</h2>

<p>In Iron Money for Mac, the amount column displays positive amounts in green and negative amounts in red. <code>- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex</code> is not used in view-based NSTableViews, so you’ll want to customize the instances of <code>NSTableCellView</code> used in columns for which you’d like to customize their display.</p>

<p>First, create a new subclass of <code>NSTableCellView</code>. In this subclass, you can implement whatever methods you need to customize the display of your view (or the text field inside your view). In the case of Iron Money for Mac, that meant implementing <code>- (void)setBackgroundStyle:(NSBackgroundStyle)style</code> and changing the text field cell’s text color. Here’s an example of what it would look like if you wanted the column’s text to appear in red while it wasn’t selected:</p>

<pre><code>@implementation CustomTableCellView
-(void)setBackgroundStyle:(NSBackgroundStyle)style {
    if (style == NSBackgroundStyleDark) {
        [self.textField.cell setTextColor:[NSColor selectedTextColor]];
    } else {
        [self.textField.cell setTextColor:[NSColor redColor]];
    }
    [super setBackgroundStyle:style];
}
@end
</code></pre>

<p>Then, in Interface Builder, you’ll select the appropriate NSTableCellViews and change their Class (under the Identity Inspector) to an instance of your new <code>NSTableCellView</code> subclass.</p>
]]></content></entry><entry><title>Designing Budgeting for Iron Money</title><id>http://chasenlehara.com/blog/designing-budgeting-for-iron-money.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/designing-budgeting-for-iron-money.html"/><author><name>Chasen Le Hara</name></author><published>2012-10-31T22:31:39Z</published><updated>2012-10-31T22:31:39Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>I have been eagerly anticipating the introduction of budgeting to Iron Money for years. The original private beta had budgeting, and that was over three years ago. Ever since scrapping the private beta and not including budgeting in the first public beta, I knew that introducing budgeting would be one of my most important—and difficult—accomplishments. For years I’ve conceptualized how I think budgeting should work, and now it was time to finish designing how it would work and be integrated into Iron Money.</p>

<h2>Starlight</h2>

<p>Budgeting systems are very popular among consumers. I think people like to latch on to a system that they can follow, rather than just buy into an app or service and use the tools. Budgeting systems provide a little bit more structure and personality, and I wanted to make sure Iron Money not only allowed for other budgeting “systems,” but also had its own.</p>

<p>So, I defined the basic tenants of budgeting with Iron Money. As much as possible, I wanted it to be fairly hands-off; set it up, tweak it a little bit from month to month, but in general, don’t worry about it. I also think it’s really important to start designing products and services with voice in mind. If this were a voice-activated system, how would it work? If the budgeting system were a human, what would you ask it to do and how would you expect it to work?</p>

<p>I devised a fairly simple system: for each spending category, add an expected amount of spending per month/year. Iron Money will automatically distribute the requested money to each category from the user’s income. If the user doesn’t have enough cash on hand, credit could be used to cover necessary expenses.</p>

<p>That’s it. A simple list of budgets to check to see whether you have enough money to spend or not. Iron Money automatically handles distributing your income and saving up for future budgets. Everything you don’t budget for is counted against Available Funds. The simplicity of this system cannot be overemphasized.</p>

<h2>Red</h2>

<p>I typically prefer to design new features for iOS first. I find the simplicity required by iOS makes it easier to build the Mac and web apps correctly.</p>

<p>I took a look at the main budgets list. This list shows each budget and how much is available to spend—right now. This is arguably the most important view, especially in the iOS app—it answers the “can I afford to make a purchase right now?” question. In tandem with that question is “how long does this money need to last me,” which could be answered by a little progress bar under each budget; it subtly shows if you’re on track for the month or if it looks like you’re going to blow your budget. It’s tinted green if you’ve spent less than where you should, yellow if you’re over what you should’ve spent, and red if you’re over the budgeted amount.</p>

<h2>I Almost Do</h2>

<p>One issue I was really unsure about was prioritizing the budget. At first blush, the most simple answer is to not prioritize at all. I debated whether or not prioritization was absolutely necessary and came to the conclusion that <em>some</em> form of prioritization was needed. Iron Money’s budgeting system is based on the idea that there are some categories which must receive their money, and others for which it is optimal if they receive their full amount.</p>

<p>Thus, a binary prioritization scheme was born. Budgets would be separated by needs vs. wants, with needs always receiving their money (even if credit financing is required), while wants will get their money if they can (no credit financing allowed). This distinction provided a nice way of presenting this distinction in the interface; by telling Iron Money whether or not it was appropriate to borrow on credit to meet the budget, the entire budget would be prioritized. Everything after needs would simply be filled by date and percentage.</p>

<p>Percentage budgets are the only exception to this prioritization scheme. When income is made, any budgets with a percentage amount are immediately handled—whether or not they are a need or want. Then, as the time approaches for a “need” budget to be fulfilled, the need budget will steal from any percentage budgets that aren’t marked as need.</p>

<h2>State of Grace</h2>

<p>There are a number of things that I wanted to do that were cut.</p>

<p>First, I originally planned to have Savings based on each income category. The idea was that a budget could be tied to an income category so it would only pull money from that income category. However, there were a bunch of issues with this, so I had to pull it.</p>

<p>Second, I wanted Iron Money to have a reservation system for budgets. The idea (very similar to how Simple’s Goals feature works) was to have Iron Money set aside money for each of its budgets over time, so it could take money out of Savings and warn the user if they were getting close to not being able to fulfill a budget. This feature was a bit complicated and not as necessary (especially since the warning system could be built without having the reservation system), so it was pulled within the first couple of weeks of building budgeting. It saddens me that this was pulled, since I thought this was one of the primary awesome things about budgeting with Iron Money, but for the sake of simplicity, it was not going to happen in the first release.</p>

<p>Third, I’ve been on the fence as for whether or not a user should be able to set a budget for an “other” category. On one hand, since it’s a category, it should be allowed; on the other hand, “other” spending can be handled by the parent category, and the parent category can handle all other spending (even outside the “other” category). For now, I’ve stayed conservative and only allowed “spending” category to be used as a spending category for budgets.</p>

<p>Fourth, I originally planned for percentage budgets to exist. The idea is simple: when money is made, any budgets with a percentage amount immediately grab funds from the income. Again, simplicity (both in terms of implementation and user experience) won out and this was cut from the original release. This is something I’d really like to add in the future.</p>

<h2>Treacherous</h2>

<p>This wasn’t something that I had at all thought about before I started figuring out how Available Funds would work. Once I started looking at account types, I realized that Savings should only reflect liquid accounts, and thus it was born.</p>

<h2>Everything Has Changed</h2>

<p>It took me a couple months to implement budgeting: a few hundred man hours for what might seem like a relatively simple feature.</p>

<p>It was anything but.</p>

<p>A great example of the complexity of creating budgeting is in a simple feature built so that it would work correctly. As soon as a budget occurrence ends, funds are transferred out of the occurrence and to the next occurrence (for a rollover budget) or back to Available Funds. However, since transactions sometimes aren’t added for an occurrence until after it ends (e.g. a purchase at the end of the month that isn’t reconciled by the bank until the next month), Iron Money has to be able to modify the occurrence to reflect the correct amount spent, which also affects the amount that would move to a rollover budget or Available Funds. Depending on how far back the occurrence was, this could cascade and affect one or more occurrences.</p>

<p>To combat this “back from the future” issue, Iron Money monitors when Available Funds doesn’t have the amount required by the occurrence. If it doesn’t, it looks at transfers out from Available Funds and modifies them (by either making the transfer less or deleting the transfer completely).</p>

<p>This also works in unexpected ways with rollover budgets. When a budget has an overage and the overage transaction is deleted, the transfer from the future occurrence to the past occurrence (for the overage) is deleted and a new transfer from the past occurrence to the future occurrence (for the rollover) is created.</p>

<h2>I Knew You Were Trouble</h2>

<p>When a transaction is added (without splits), it either counts as part of Available Funds or an occurrence. Either way, either liquid funds or credit is used to cover the transaction. Iron Money must keep track of the liquid or credit split in order to reverse or edit it if a transaction is deleted or edited.</p>

<p>Credit/liquid splits are recorded on a per-transaction, per-split basis (because transactions and splits are kept track of separately, occurrence-wise). In-line with the budget occurrence info, the credit/liquid split info is kept: the amount applied as liquid, and the amount applied as credit.</p>

<p>In order to have this information for each transaction, the updater will go through each user’s transactions and figure out the correct allocation. This will be done by getting the accounts, subtracting each transaction from the account to get the starting balances, “adding” the accounts as available funds, then “adding” each transaction so that it’s counted correctly.</p>

<h2>The Last Time</h2>

<p>Less than a week before launch, I started working on handling income transactions. Yes, just six days before launch, I started working on the second “half” of the budgeting equation.</p>

<p>This proved to be a royal pain in the ass. When only liquid accounts are included in a budget, it’s easy enough: each transaction is liquid and only liquid funds can be affected. However, this completely changes with credit accounts: any income into a credit account with a positive balance can be seen as straight liquid income, but when the income is for an account with a negative balance, that’s actually a reduction of credit debt (and thus should affect the credit funds, not liquid funds); thus, it increases the credit available in Available Funds but not the liquid amount.</p>

<h2>Begin Again</h2>

<p>The litany of ways in which the budgeting system touches all parts of Iron Money continues to provide numerous issues to fix. Throughout the entire process, I thought of ways in which it might break and focused on testing the sensitive parts and fixing the bugs. I, without a doubt, have missed things that users will run into. However, as time goes on, I’ll continue to fix these issues and refine the system so that it approaches perfection.</p>
]]></content></entry><entry><title>iOS 6 Interface Conventions</title><id>http://chasenlehara.com/blog/ios-6-interface-conventions.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/ios-6-interface-conventions.html"/><author><name>Chasen Le Hara</name></author><published>2012-10-01T06:46:57Z</published><updated>2012-10-01T06:46:57Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>Apple provides the iOS Human Interface Guidelines for designing apps for iOS. The guidelines include general rules to follow while creating an application. However, Apple also uses a number of conventions within their own apps that aren’t included in the HIG but should be followed by developers. Using Apple’s unwritten conventions helps provide consistency in applications, which allows users to bring their background from other apps to new apps and allows developers to use the paradigms with which users are already familiar. This post is a summary of some of the conventions used throughout iOS.</p>

<h2>Navigation bars</h2>

<p>Navigation bars typically hold a button or two to interact with the current view or to go back to a previous one.</p>

<p>The back button is always displayed in the upper left, and any other buttons are typically placed in the upper right. When a single button is present in the bar, it should be in the upper right, unless it’s a Cancel button (in which case it should be in the upper left).</p>

<p>Add buttons usually go in the upper right, while Edit buttons go in the upper left (unless they are the only one; in which case, like other buttons, they should go in the upper right).</p>

<p>When an Edit button is tapped, any other irrelevant navigation buttons (including back buttons) should fade away as the Edit button changes into a Done button.</p>

<p>In modal views, the Done or Save button should be in the upper right with a cancel button in the upper left.</p>

<h2>Table views</h2>

<p>When a user taps on a navigation back bar button, any selection in the previous view should fade away as the previous view comes into place.</p>

<p>Rows that present alerts should be centered and look like buttons.</p>

<p>The color of the selected item in a table view should match the color of the checkmark.</p>

<h2>Search bars</h2>

<p>Search bars should be hidden when a view is displayed but easily accessible when the view is scrolled down. See this in Mail, Messages, Notes, etc.</p>

<p>Exceptions: in Calendar, the search bar always displays in the List view because it’s essentially an infinitely-scrolling list. Additionally, the search bar is always on screen in some apps where searching is a main function (such as looking for a contact in Maps).</p>

<h2>Text fields</h2>

<p>Text fields within table view rows with a label on the left should be lined up together.</p>

<h2>Consistency</h2>

<p>Consistency across all iOS apps helps users quickly become familiar with new apps and new features. While the above is only a brief summary of some of the unwritten guidelines, hopefully it provides a good basis for checking whether or not an app is consistent with other iOS apps.</p>
]]></content></entry><entry><title>Wading Through The OAuth 2.0 Specification</title><id>http://chasenlehara.com/blog/wading-through-the-oauth-20-specification.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/wading-through-the-oauth-20-specification.html"/><author><name>Chasen Le Hara</name></author><published>2012-08-31T13:00:53Z</published><updated>2012-08-31T13:00:53Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p><a href="https://tools.ietf.org/html/draft-ietf-oauth-v2-31" title="OAuth 2.0 Draft 31">OAuth 2.0</a>, the “next-generation” authorization protocol, has been in development for years and met with criticism because of its complexity. As the author of an API that currently uses <a href="https://tools.ietf.org/html/rfc5849">OAuth 1.0a</a>, I’ve followed along and even contributed to the specification. Now that the specification is almost complete, I’ve decided to go through the specification and extract the useful parts that pertain to <a href="https://ironmoney.com/api/">Iron Money’s API</a>.</p>

<h2>Changes in Terminology</h2>

<p>The original community OAuth 1.0 specification used terms that were replaced in RFC 5849, and some terms from OAuth 1.0 RFC have changed in the OAuth 2.0 specification. Below is a list of terms that have changed from the community, to 1.0, to 2.0. Some of these aren’t exact matches, but generally have the same concept.</p>

<ul>
<li>Consumer: client</li>
<li>Service Provider: server: resource server &amp; authorization server</li>
<li>User: resource owner</li>
<li>Consumer Key and Secret: client credentials</li>
<li>Request Token and Secret: temporary credentials: authorization grant</li>
<li>Access Token and Secret: token credentials: access token</li>
</ul>

<p>In 2.0, the “resource server” is what actually hosts the resources, while the “authorization server” is used for issuing tokens. Additionally, the request token (temporary credentials) is now part of the authorization grant process.</p>

<p>Furthermore, refresh tokens have been introduced as a way of renewing access tokens. Instead of having access tokens that are valid forever, or expire and require the resource owner to re-authorize, refresh tokens typically do not expire and can be used once an access token is no longer valid to get another valid access token with the same (or lesser) scope (permissions).</p>

<h2>Permissions and Scope</h2>

<p>OAuth 2.0 now implements a standard way to manage permissions via the “scope” parameter. The resource owner may or may not grant the entire list of requested permissions, so the authorization server responds with an access token and a scope parameter to indicate what scope is covered by the access token (and optional refresh token).</p>

<p>If a refresh token is used to get a new access token, the client may request the same or more limited scope.</p>

<h2>State</h2>

<p>A recommended part of the authorization process is including the “state” parameter. Useful for protecting against CSRF attacks, the “state” parameter is passed back to the client after the user authorizes it.</p>

<h2>Client Registration</h2>

<p>There are a few changes to client registration in OAuth 2.0.</p>

<p>First, the protocol no longer requires clients to be registered before making requests. Most APIs require client registration beforehand, but it’s no longer required by the protocol.</p>

<p>Second, clients are now classified by whether or not they can keep a shared secret (confidential vs. public, respectively).</p>

<p>Third, the client credentials (consumer key and secret) are now wrapped up into the “client identifier,” which is issued by the authorization server.</p>

<h2>Authorization Grant</h2>

<p>OAuth 2.0 provides a few different methods for a resource owner to authorize a client. In simple terms, these “authorization grants” are as follows:</p>

<ul>
<li>Authorization code: very similar to the OAuth 1.0a flow, an authorization code is retrieved after the resource owner authorizes the client. This is handy for both web services and native apps.</li>
<li>Implicit: uses browser redirection to authorize an in-browser application.</li>
<li>Resource owner password credentials: the user gives their credentials to the client, which then exchanges them for an access token. This is handy for secure clients, such as OS X exchanging a user’s Twitter username &amp; password for an access token.</li>
<li>Client credentials: for situations in which the resource owner and the client are the same, the client’s credentials are used for protected requests.</li>
</ul>

<p>In OAuth 1.0a, fetching temporary credentials (a request token) was required before sending the resource owner to the authorization server for authorization. This is no longer required. Instead, the client redirects the resource owner to the authorization server directly with a list of permissions (scope) requested.</p>

<p>Each authorization grant type has a slightly different flow for authorization. The specification includes handy diagrams showing the process required for each grant type.</p>

<h2>Moving an API from OAuth 1.0a to OAuth 2.0</h2>

<p>I plan on making OAuth 2.0 the official authorization protocol for Iron Money’s API. Below are the changes that would be required to make this a reality.</p>

<p>First, I would require clients to indicate whether or not they are of the “confidential” or “public” types.</p>

<p>Second, access tokens would no longer be issued with a key and secret. Applications could probably use existing access token secrets as their access token under the 2.0 protocol.</p>

<p>Third, <a href="https://ironmoney.com/api/permissions/">Iron Money’s API permissions</a> would be renovated to support the “scope” parameter.</p>

<p>Fourth, the “implicit” authorization grant type would be handy for supporting in-browser applications.</p>

<h2>Implementing a Provider</h2>

<p>The OAuth 2.0 specification can seem daunting at first, but considering the flexibility of the protocol, it’s fairly straight-forward once you’re familiar with the terminology.</p>
]]></content></entry><entry><title>Closing All Apps on iOS</title><id>http://chasenlehara.com/blog/closing-all-apps-on-ios.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/closing-all-apps-on-ios.html"/><author><name>Chasen Le Hara</name></author><published>2012-07-30T03:10:36Z</published><updated>2012-07-30T03:10:36Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p><a href="https://support.apple.com/kb/HT4211" title="iOS: Understanding multitasking">Apple explains</a> that multitasking on iOS “doesn’t slow down the performance of the foreground app or drain battery life unnecessarily”—and they’re right. However, it seems as if it’s entered common “knowledge” among iPad, iPhone, and iPod touch users that closing all the apps in the multitasking bar is required to keep a device operating in its prime. This isn’t true, and here’s a simplified explanation of why it isn’t true.</p>

<h2>The Multitasking Bar</h2>

<p>The multitasking bar shows a list of recently used apps. “Recently used” is a bit of a misnomer—it actually includes any app launched on the device, unless it has been removed from the list. You can <a href="https://support.apple.com/kb/ht5137" title="iOS: Force an app to close">remove a device from the list</a> by holding down on its icon in the multitasking bar and tapping on its red close button. Restarting the device does not remove apps from the multitasking bar.</p>

<p>The multitasking bar <em>does not</em> show a list of running apps.</p>

<h2>An App’s Lifecycle</h2>

<p>Tapping an app’s icon launches the app. Unless the app has already been launched, the app goes from not running to being launched and in the foreground. The app is free to run as it pleases, responding to your every touch and swipe.</p>

<p>Now, let’s imagine you hit the home button or the sleep/wake button. The app is put into the “background,” where it’s allowed to run for only five seconds (with a few exceptions listed below). Once it’s done in the background, the app is suspended and is no longer allowed to run. Suspended apps don’t use any battery life.</p>

<h2>The Background</h2>

<p>Apps are allowed to run in the background for very specific tasks. Below are some of the reasons why an app might run in the background.</p>

<p>If the app needs more time to run for a specific task, it’s allowed to ask for more time—up to ten minutes. For example, when <a href="https://ironmoney.com/ios/">Iron Money for iOS</a> enters the background while it’s syncing with <a href="https://ironmoney.com/">IronMoney.com</a>, it requests extra time to finish syncing. Again, the system only gives it ten minutes to finish; after ten minutes, the app is suspended.</p>

<p>If the app is playing audio, it’s allowed to stay in the background until you tell it to stop playing. For example, if you’re listening to music and put your device to sleep, the app will enter the background and continue to play music. If you stop playing music, the app will be suspended. If you start playing music again, the app will move back into the background so it can play music.</p>

<p>Some apps use location in the background. For navigation-like apps that require constant updates of your location, the app is moved into the background and allowed to run for as long as it’s keeping track of your location. A location services arrow will appear in the status bar while an app is tracking your location.</p>

<p>Otherwise, apps that just need general notification updates (e.g. you enter or exit specific regions, or your location has changed significantly) will be moved into the background when a noteworthy location change occurs. The app is not running the entire time—the system intelligently moves the app from being suspended to the background as required. The system will display an outlined location arrow in the status bar when an app is monitoring location changes.</p>

<p>There are a couple of other circumstances in which an app might run in the background, but the pattern is fairly clear: when an app has something to do for you, it’ll be moved into the background to run temporarily. Otherwise, the app will be suspended and won’t be running. In general, unless an app is actively doing something on your behalf, it isn’t running, and thus does not need to be manually closed.</p>

<h2>A Perfect World</h2>

<p>All of the above requires everything to work as planned. Of course, bugs happen, and things do not work perfectly. If your device is getting unusually warm, or your battery is draining quickly, you might want to manually close the apps you’ve used recently (especially if they use the GPS), or simply restart your device. However, this is a last resort and not something that needs to be done on a regular basis.</p>
]]></content></entry><entry><title>How I Get Things Done</title><id>http://chasenlehara.com/blog/how-i-get-things-done.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/how-i-get-things-done.html"/><author><name>Chasen Le Hara</name></author><published>2012-06-22T20:08:00Z</published><updated>2012-06-22T20:08:00Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Getting_Things_Done">Getting Things Done</a> is a popular system for being productive. However, I’ve never been able to fully integrate GTD into my workflow. Instead, I have a more simple method of getting things done.</p>

<p>First, there are two parts to what I do: my to-do list and my calendar. My to-do list has actions that I want to do, while my calendar has specific allotments of time to accomplish what I want in my to-do list.</p>

<h2>My To-Do List</h2>

<p>My to-do list is made up of multiple lists that keep everything organized. First, I have a few ongoing commitments (like this website and <a href="http://rotaractlb.org/">Rotaract</a>) that are essentially never ending (e.g. there’s no date by which I’d like to finish this website). I add to-do items to each of these commitments as I need, and having them grouped together makes it easier to do related things at the same time and to look back on what I’ve accomplished.</p>

<p>I also have specific projects, which differ from my ongoing commitments in that they have an end date. For example, Iron Money is an ongoing commitment, but I create a project for each major release. Again, each project has actionable to-do items, so I should be able to do all the things in the list to finish the project.</p>

<p>Everything that isn’t a priority goes into my someday list. Every once in a while I pick through these things to schedule them or do them today, or sometimes I just realize that they’re never going to be a priority and I simply delete them.</p>

<h2>My Calendar</h2>

<p>As mentioned above, I also use my calendar to get things done. All future events go into my calendar, and I like to fill in the past events as well when I do things on the fly. I also have a bunch of recurring events that provide structure for the things I want to do. For example, I have fifteen minutes allotted every day for writing, thirty minutes for language development (currently Spanish with Rosetta Stone), an hour for exercise, etc.</p>

<p>Although I have a “routine” in my calendar that provides time for everything I want to do, my day has never turned out how I originally planned—and this is perfectly okay. I often move things around as I re-prioritize my day, or depend on other people to get things done. The important part is that I still have set aside time to do what’s important and I typically don’t take time away from something without moving it to another part of the day or later in the week.</p>

<h2>Bringing It All Together</h2>

<p>There are two critical parts to this system: recording everything and being honest with myself.</p>

<p>I trust my to-do list and my calendar to tell me what I should be doing and when I should be doing it. I can only trust the system if I record everything: every to-do and every future commitment. By recording everything, I don’t worry about trying to remember when I have appointments or what I need to accomplish in order to get something done. This is what turns this method into a trusted system.</p>

<p><a href="http://www.earplant.com/writing/are-you-honest-with-yourself/">Being honest with myself</a> is another important component of my system. If I know I’m not actually going to do something—ever—then I simply get rid of the to-do item or calendar event; or hopefully, never add it in the first place. Saying “no” to the things that aren’t important to me help me focus on the things that are important.</p>

<p>And above all, that’s what a productivity system should do: help you focus on the important things in life.</p>
]]></content></entry><entry><title>The First Day</title><id>http://chasenlehara.com/blog/the-first-day.html</id><link rel="alternate" type="text/html" href="http://chasenlehara.com/blog/the-first-day.html"/><author><name>Chasen Le Hara</name></author><published>2012-05-24T02:00:00Z</published><updated>2012-05-24T02:00:00Z</updated><content type="html" xml:lang="en-US"><![CDATA[<p>Today, I graduated from <a href="https://www.csulb.edu/" title="California State University of Long Beach">college</a> with a bachelors in Financial Institutions. College provided me with a lot of opportunity to grow as a person, and this post is a summation of some things I’ve learned over the past five years.</p>

<p>Even before I actually went to my first college class, I learned to make the most of new opportunities. A few weeks after graduating from high school, I left for Balitmore and Washington D.C. for four weeks to work on my first two <a href="https://www.peopletopeople.com/">People to People</a> programs. My mom had only recently started <a href="https://en.wikipedia.org/wiki/Peritoneal_dialysis" title="Peritoneal dialysis">dialysis</a>, and I knew that something could happen while I was gone, but I ignored the fear of an uncertain future and took advantage of what I knew could happen: meeting dozens of new people that I would be friends with for years to come.</p>

<p>Meeting new people and developing friendships was one of the most important things I did during college. The diversity of the people I’ve met over the past five years has helped me expand my identity and push me into experiences I might otherwise not have had. I think college provided me a fertile ground from which I could figure out who I am and what I’m passionate about, and my relationships with people definitely cultivated my sense of self.</p>

<p>In 2008, after toying around with making a personal finance web app, I started working earnestly on <a href="https://ironmoney.com/">Iron Money</a> and decided to make it an actual business (as opposed to just a project I could hack on). Working on Iron Money proved to be a huge distraction from school, but it helped me discover what I was passionate about and what I wanted to do with myself in the future. I enjoyed working on Iron Money so much that in late 2009, I started thinking about taking time off from school. By November 2009, I had made up my mind: I would take a year sabbatical through all of 2010.</p>

<p>Going into college, I had never thought I would take time off from school; indeed, the decision surprised a number of my friends and family. I had become frustrated with not seeing my work projects go anywhere, so I thought the time off would help me figure out if they had a future. This rather unexpected decision turned out to be a mixed bag: the sabbatical gave me time to focus on my work projects, at the cost of delaying my post-college future by a year.</p>

<p>I still don’t know whether or not I should have taken time off, and I don’t expect to ever know if it was the “right” decision. I like to think that, of the two alternative universes that were created when I made that decision, I ended up in the better one. The entire experience helped me realize that sometimes there are no “right” decisions, but only ones that feel best.</p>

<p>When I returned to school at the beginning of 2011, I felt like school was taking my time away from what I wanted to be doing. By having both things I wanted to do and things I needed to do, I learned how to prioritize my time and use stress as an effective tool to focus on the things that were most important.</p>

<p>During the past year, I’ve definitely learned that school and work are important, but living a balanced lifestyle is important too. A “balanced lifestyle” means different things to different people, but to everyone I think it means looking at your priorities and making sure that what you do actually matches what you want to be doing. I doubt that anyone can do everything they want, but by prioritizing and setting time for goals, most people can do what is most important to them. For me, this means a strong combination of working and playing hard, while also maturing as a person and improving my relationships with people.</p>

<p>All in all, I’m really grateful for the time I’ve had in college. I definitely matured as a person and developed my relationships with people, and I learned quite a few things along the way. I don’t think college is for everyone, but for me, it’s just what I needed these past five years.</p>
]]></content></entry></feed>