Ascend Visual - Bloghttp://ascendvisual.com/Chris ForretteiPhone Adventureshttp://ascendvisual.com/blog/2008/07/14/iphone-adventures<p> As I sat in line outside of the <a href="http://maps.google.com/maps?q=stonestown+mall+san+francisco&amp;ie=UTF8&amp;oe=utf-8&amp;client=firefox-a&amp;z=16&amp;iwloc=addr" title="Stonestown Galleria - San Francisco" target="_blank">Stonestown mall in San Francisco</a> Friday evening, waiting to purchase the brand new <a href="http://www.apple.com/iphone/" title="Apple iPhone 3G" target="_blank">iPhone 3G</a>, I couldn't help but take a step back and look at myself from a 3rd person perspective. I thought of what I would think of myself if I were 5-6 years younger, back in the days when I was in <a href="http://www.interpunk.com/item.cfm?Item=51723" title="One More Day - Zero to Sixty" target="_blank">a punk band</a> and whatnot. I would definitely think my current self was a big tard. I've grown into a huge, flourishing nerd and that's OK. </p> <p> I've never waited in a huge line for anything, not for new Nike shoes, not for an XBox or a Wii, nothing. So this was a first, and probably a last for me. I got in line at around 7pm and I was thinking, "If this line moves along nicely, I'll stay, otherwise I'm getting the hell out of here." We had tried going to the <a href="http://www.att.com" title="AT&amp;T" target="_blank">AT&amp;T</a> store by our house about 15 minutes before the store opened that morning. We waited til about 15 minutes after it opened, with no line movement with the 200+ person line, and left. After standing in line at Stonestown for about 15 minutes, I was told by a friendly Apple Store employee that I was the very last person that was going to receive an iPhone that night, and I was now accompanied by a security guard that was going to make sure of it. It was a sign, and I had to stay now! I was the chosen one! </p> <p class="center"><img src="/img/blog/matrix_the_chosen_one.jpg" alt="The Chosen One" /></p> <p> The most entertaining and sad part of the night was all of the people who just couldn't believe the line was closed. It's truly amazing how selfish people can be! Apple Store employees are human after all, and need to go home&mdash;don't they? There must have been a good 50+ people who came and argued with the security guard and/or the Apple employees monitoring the line, things like: "But I called ahead and they told me to come down and it was only an hour wait", "But I drove here all the way from the northern part of the city (for any non-San Franciscans, that's a grueling 8.5 minute drive)", etc. I mean it's just a phone. And everyone who was complaining followed their complaint session with a cell phone call (a good 90% of whom made their calls with 1st gen. iPhones) to bitch to their friends about it, so it's not like they were in dire need of the phone. </p> <p> You might be thinking, "Well Chris, you were waiting in the gigantor line, so you're as pathetic as those complaining people". No dude. I was the chosen one. And if they had told me the line was closed, I simply would have left and gone to eat at <a href="http://chevys.com/" title="Chevy's Fresh Mex" target="_blank">Chevy's</a>, which was conveniently located within about 60 feet of the line. They have this really good corn stuff and <a href="http://www.dosequis.com" title="Dos Equis" target="_blank">Dos Equis Amber</a>, mmm. </p> <p class="center"><a href="http://www.dosequis.com" title="Dos Equis" target="_blank"><img src="/img/blog/dos_equis_amber.jpg" alt="Delicious Dos Equis Amber" /></a></p> <p> So we waited until 10:30pm, when we were about 15 people from the front of the line they announced, "Sorry folks, the AT&amp;T servers are completely down". Lots of cursing, ooh-ing and aww-ing ensued, but thankfully they gave us front-of-the-line vouchers to use the next day. Woohoo! While waiting for our vouchers, me and <a href="http://www.ashleyforrette.com" title="Ashley Forrette Photography" target="_blank">the wife</a> manage to thwart a few would-be line-dropper-inners who tried to grab the goods without waiting the 3.5 hours. Hi 5, wife. </p> <p> So Saturday we took a nice leisurely morning, headed back to the Apple store around 12:30 and got right in line with about 5 people ahead of us and got our phones, woohoo! I have to say the iPhone is pretty amazing, and with all of the new apps, so very useful and fun! I've always resisted getting a <a href="http://www.twitter.com" title="Twitter" target="_blank">Twitter</a> account because it's just never seemed interesting to me, but as a result of my iPhone and the <a href="http://iconfactory.com/software/twitterrific" title="Iconfactory : Software : Twitterific" target="_blank">Twitterific</a> app, I am now the nerdy owner of a spankin new <a href="http://twitter.com/chrisforrette" title="Twitter / chrisforrette" target="_blank">Twitter account</a>. </p> <p class="center"><a href="http://www.twitter.com/chrisforrette" title="Twitter / chrisforrette" target="_blank"><img src="/img/blog/logo_twitter.gif" alt="Twitter" /></a></p> <p> I'm not sure if it's because I'm already a Mac user, but it's crazy how easy and intuitive it is to use. Within hours of using it, I already felt like a pro. The one tricky part is the keyboard, but I'm sure I'll get used to it. I've already got the AIM app, <a href="http://www.loopt.com/" title="Your Social Compass | Loopt" target="_blank">Loopt</a>, Twitterific, and I'm going to give <a href="http://evernote.com/" title="Remember Everything. | Evernote Corporation" target="_blank">Evernote</a> a try since it has an app, and I've heard such good things about it from <a href="http://www.tuaw.com/" title="The Unofficial Apple Weblog" target="_blank">TUAW</a>. Anyone else get a new iPhone? Any new apps that are rockin your world? </p> <p> On an entirely unrelated note (or two), <a href="http://www.juanzo.com" title="Juanzo" target="_blank">Juan</a> stayed with us for the week and stole our toothpaste upon departure. We all went to <a href="http://www.upperquad.com/" title="Upper Quad" target="_blank">Phil's</a> (another fellow <a href="http://www.cubancouncil.com/" title="Cuban Council - Superb Digital Solutions" target="_blank">Cubano</a>) wedding last Sunday, which was beautiful and awesome. We had the most delicious tacos in the world on Friday at <a href="http://www.yelp.com/biz/la-taqueria-san-francisco" title=" La Taqueria San Francisco, Mission | Yelp" target="_blank">La Taqueria</a>, and it was bitter-sweet without Phil around. Normally we all do 2 tacos without going into a food coma but Phil always challenges us to a 3rd. He's usually the only one who accepts the challenge. He's in Jamaica with his lady, rockin' the ganj and getting dreadlocks. That's all for now folks, talk to you soon! </p>Mon, 14 Jul 2008 17:44:00 -0700http://ascendvisual.com/blog/2008/07/14/iphone-adventuresChris ForretteEasy click tracking with MooTools & CakePHPhttp://ascendvisual.com/blog/2008/07/03/easy-click-tracking-with-mootools-cakephp<p> My pal and fellow <a href='http://www.cubancouncil.com' title='Cuban Council - Superb Digital Solutions' target='_blank'>Cubano</a>, <a href='http://juanzo.com/' title='Juanzo' target='_blank'>Juan</a> has always hated how I track my links on this site. When I first started it up, I wanted to create a shared library on here, where I could sync up all of my links from <a href='http://del.icio.us' title='del.icio.us' target='_blank'>del.icio.us</a> in a table in my local database, and use those links all over, in my posts, etc., track their clicks, and then have a listing of all my links by tag, and, from tracking clicks, also be able to sort them by popularity. It still might happen eventually, but I haven't been thoroughly motivated to finish it up. I used to want to finish it really badly so I could use it for my own purposes. I use <a href='http://www.mozilla.com/en-US/firefox/' title='Firefox web browser'>Firefox</a> along with the <a href='https://addons.mozilla.org/en-US/firefox/addon/3615' title='Delicious Bookmarks :: Firefox add-ons'>Delicious</a> plugin, and I always want to search links by all of the tags I enter. For example, if I put in 'Subversion Manual' (that combo is used a lot), I only want to see the links that have <strong>both</strong> of those tags, not <strong>either</strong> of them. Well it seems with the update to Firefox 3 there was also an update to the Delicious plugin that takes care of this for me. Motivation fully depleted. </p> <p> Either way, I have been thinking of reworking the link tracking for quite some time. I've been using the format '/links/go/123' to track the links, rather than the URL itself. I think this frustrated <a href='http://juanzo.com/' title='Juanzo' target='_blank'>Juan</a> because he likes to see his status bar update at the foot of his browser and decide if he wants to go to that link or not. There have been a number of projects I've worked on where link tracking has been asked for by the client, so I decided to throw something together today. </p> <p> I created a <a href='http://www.mootools.net/' title='MooTools: The Compact Javascript Framework' target='_blank'>MooTools</a> class called 'LinkTrack' that, in a simple 19 lines of code, scans the page for the links you specify, and, on the click event, sends the link information to a specified URL via AJAX. Here's what the class looks like: </p> <pre class="textmate-source monokai"><span class="source source_js"><span class="storage storage_type storage_type_js">var</span> LinkTrack <span class="keyword keyword_operator keyword_operator_js">=</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="meta meta_function meta_function_json meta_function_json_js"><span class="entity entity_name entity_name_function entity_name_function_js">track</span>: <span class="storage storage_type storage_type_function storage_type_function_js">function</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="variable variable_parameter variable_parameter_function variable_parameter_function_js">links, url</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> links<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>each<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>item<span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> item<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addEvent<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>click<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="storage storage_type storage_type_js">var</span> request <span class="keyword keyword_operator keyword_operator_js">=</span> <span class="meta meta_class meta_class_instance meta_class_instance_constructor"><span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js">new</span> <span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js">Ajax</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>url<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> method: <span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>post<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span> data: <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>url<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span>: item<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>getProperty<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>href<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span> <span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>title<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span>: item<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>getProperty<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>title<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">,</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>request<span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre> <p>And here's what the function call looks like:</p> <pre class="textmate-source monokai"><span class="source source_js"><span class="support support_class support_class_js">window</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>addEvent<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>domready<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> LinkTrack<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>track<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="keyword keyword_operator keyword_operator_js">$$</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>a[target=_blank]<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="string string_quoted string_quoted_single string_quoted_single_js"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_js">'</span>/links/track/<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_js">'</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre> <p> So here I passed in all 'a' tags with a '_blank' target, so I track every link leading away from the site. You could easily change this to track all links with the class 'link', or whatever else you can think up. I've got this site running in <a href='http://www.cakephp.org/' title='The rapid development PHP framework' target='_blank'>CakePHP</a>, so I made a 'track' method in my 'links' controller that looks like this: </p> <pre class="textmate-source monokai"><span class="source source_php"><span class="source source_php source_php_embedded source_php_embedded_block source_php_embedded_block_html"><span class="punctuation punctuation_definition punctuation_definition_embedded punctuation_definition_embedded_begin punctuation_definition_embedded_begin_php">&lt;?php</span> <span class="meta meta_class meta_class_php"><span class="storage storage_type storage_type_class storage_type_class_php">class</span> <span class="entity entity_name entity_name_type entity_name_type_class entity_name_type_class_php">LinksController</span> <span class="storage storage_modifier storage_modifier_extends storage_modifier_extends_php">extends</span> <span class="entity entity_other entity_other_inherited-class entity_other_inherited-class_php">AppController</span> {</span> <span class="keyword keyword_operator keyword_operator_string keyword_operator_string_php">...</span> <span class="meta meta_function meta_function_php"> <span class="storage storage_type storage_type_function storage_type_function_php">function</span> <span class="entity entity_name entity_name_function entity_name_function_php">track</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_php">(</span>)</span> { <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">autoRender</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="constant constant_language constant_language_php">false</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> <span class="keyword keyword_control keyword_control_php">if</span> (<span class="support support_function support_function_php_pcre support_function_php_pcre_php">preg_match</span>(<span class="string string_regexp string_regexp_single-quoted string_regexp_single-quoted_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'/</span>http:\/\/(www<span class="constant constant_character constant_character_escape constant_character_escape_regex constant_character_escape_regex_php">\.</span>)?ascendvisual.com(.<span class="keyword keyword_operator keyword_operator_regexp keyword_operator_regexp_php">*</span>)<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">/'</span></span>, <span class="variable variable_other variable_other_global variable_other_global_safer variable_other_global_safer_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>_SERVER</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">HTTP_REFERER</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>]) <span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_php">&amp;&amp;</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">RequestHandler</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="meta meta_function-call meta_function-call_object meta_function-call_object_php">isAjax</span>() <span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_php">&amp;&amp;</span> <span class="keyword keyword_operator keyword_operator_logical keyword_operator_logical_php">!</span><span class="support support_function support_function_construct support_function_construct_php">empty</span>(<span class="variable variable_other variable_other_global variable_other_global_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>_POST</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">url</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>])) { <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>data</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="variable variable_other variable_other_global variable_other_global_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>_POST</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> <span class="keyword keyword_control keyword_control_php">if</span> (<span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>find</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">Link</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="meta meta_function-call meta_function-call_object meta_function-call_object_php">find</span>(<span class="meta meta_array meta_array_php"><span class="support support_function support_function_construct support_function_construct_php">array</span><span class="punctuation punctuation_definition punctuation_definition_array punctuation_definition_array_begin punctuation_definition_array_begin_php">(</span><span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">url</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span> <span class="keyword keyword_operator keyword_operator_key keyword_operator_key_php">=&gt;</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>data</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">url</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>]<span class="punctuation punctuation_definition punctuation_definition_array punctuation_definition_array_end punctuation_definition_array_end_php">)</span></span>) { <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">id</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>find</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">Link</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>][<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">id</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>]<span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>out</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">Link</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="meta meta_function-call meta_function-call_object meta_function-call_object_php">saveField</span>(<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">clicks</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>, (<span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>find</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">Link</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>][<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">clicks</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>] <span class="keyword keyword_operator keyword_operator_arithmetic keyword_operator_arithmetic_php">+</span> <span class="constant constant_numeric constant_numeric_php">1</span>))<span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> } <span class="keyword keyword_control keyword_control_php">else</span> { <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>data</span>[<span class="string string_quoted string_quoted_single string_quoted_single_php"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_begin punctuation_definition_string_begin_php">'</span><span class="meta meta_string-contents meta_string-contents_quoted meta_string-contents_quoted_single meta_string-contents_quoted_single_php">clicks</span><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_end punctuation_definition_string_end_php">'</span></span>] <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="constant constant_numeric constant_numeric_php">1</span><span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>out</span> <span class="keyword keyword_operator keyword_operator_assignment keyword_operator_assignment_php">=</span> <span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>this</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="variable variable_other variable_other_property variable_other_property_php">Link</span><span class="keyword keyword_operator keyword_operator_class keyword_operator_class_php">-&gt;</span><span class="meta meta_function-call meta_function-call_object meta_function-call_object_php">save</span>(<span class="variable variable_other variable_other_php"><span class="punctuation punctuation_definition punctuation_definition_variable punctuation_definition_variable_php">$</span>data</span>)<span class="punctuation punctuation_terminator punctuation_terminator_expression punctuation_terminator_expression_php">;</span> } } } } <span class="punctuation punctuation_definition punctuation_definition_embedded punctuation_definition_embedded_end punctuation_definition_embedded_end_php"><span class="source source_php">?</span>&gt;</span></span></span></pre> <p> I run a check to make sure the request is coming from my own site, that it's an AJAX request (using CakePHP's <a href='http://api.cakephp.org/1.2/class_request_handler_component.html' title='API for CakePHP: RequestHandler Component' target='_blank'>RequestHandler Component</a>), and that a URL is set. The I scan my links table to see if that URL is already in there. If it is, I increment the click count, if not, the record is created with a click value of '1'. Pretty simple eh? </p> <p> Feel free to let me know what you think, and, if you'd like, you can download the MooTools LinkTrack class I made by <a href='/snippets/download/1' title='Download MooTools LinkTrack class'>clicking here</a> or over on the right under 'Related Snippets'. That's all for now folks, have a fantastic 4th of July weekend! </p>Thu, 03 Jul 2008 22:50:00 -0700http://ascendvisual.com/blog/2008/07/03/easy-click-tracking-with-mootools-cakephpChris ForretteNew Website: Ashley Forrette Photographyhttp://ascendvisual.com/blog/2008/06/20/new-website-ashley-forrette-photography<p> Hey folks! It's been a while! Sorry it's been a while but that's just how I roll. I've actually been thinking up all sorts of nerdy subject matter, it's just been crazy as always and I haven't forced myself to post. I finally got myself into a corner to post for you today, awesome right? </p> <p> It's been live for a while now, but I finally got my wife <a href='http://www.ashleyforrette.com' target='_blank' title='Ashley Forrette Photography'>Ashley's photography portfolio website </a> launched, go check it out! Today I'm going to spill the beans on how I made it, and hopefully give some of you folks some good ideas. It was a fairly quick and simple build using <a href='http://api.cakephp.org/' target='_blank' title='CakePHP'>CakePHP</a>, the <a href='http://www.flickr.com/services/api/' target='_blank' title='Flickr API'>Flickr API</a> and some <a href='http://www.mootools.net/' target='_blank' title='MooTools'>MooTools</a> magic. </p> <p class='center'><a href='http://www.ashleyforrette.com' target='_blank' title='Ashley Forrette Photography'><img src='/img/blog/ashley_forrette.jpg' alt='Ashley Forrette Photography' /></a></p> <p> So the coolest thing about the site is that it's all Flickr-fed. Ashley chose a set of categories she wanted to use and I had her create Flickr sets for each of them. Each category you click on references a specific Flickr set that's pulled in and cached via a nice, reusable table-less Flickr model I created for <a href='http://api.cakephp.org/' target='_blank' title='CakePHP'>CakePHP</a>. Why is that even cool you ask? Because I didn't have to worry about handling and storing uploads or anything&mdash;the site requires no admin interface at all&mdash;and it also works as a bit of extra exposure for her shots, being both on the Flickr site and her portfolio site. The Flickr model I've created has proven useful in a number of cases&mdash;I even use it on this very site for when user comments are posted. I basically just disable Cake's table linkage and used a few methods to access Flickr's various API methods. </p> <p> The most challenging part of the site was the Javascript. If you check the site out, you can see that the image is preloaded (using the MooTools <a href='http://docs.mootools.net/Plugins/Assets' target='_blank' title='MooTools Docs - Plugins/Assets'>Assets</a> class), the thumb menu is animated, and there are some nice fade transitions in there too. I accomplished it all in a custom MooTools class called 'Photoset'. It ended up being about 180 lines of code&mdash;not too bad&mdash;and handles all of the javascript on the site&mdash;the loading, fades, menu, everything. The load/fade transition was the trickiest part, but I used the Asset class along with MooTools chaining and did it in about 12 lines of code: </p> <pre class="textmate-source monokai"><span class="source source_js"><span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>loader<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">start</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="constant constant_numeric constant_numeric_js">1</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>chain<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="meta meta_class meta_class_instance meta_class_instance_constructor"><span class="keyword keyword_operator keyword_operator_new keyword_operator_new_js">new</span> <span class="entity entity_name entity_name_type entity_name_type_instance entity_name_type_instance_js">Asset.image</span></span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span>load<span class="meta meta_delimiter meta_delimiter_object meta_delimiter_object_comma meta_delimiter_object_comma_js">, </span><span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="meta meta_function meta_function_json meta_function_json_js"><span class="entity entity_name entity_name_function entity_name_function_js">onload</span>: <span class="storage storage_type storage_type_function storage_type_function_js">function</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_begin punctuation_definition_parameters_begin_js">(</span><span class="punctuation punctuation_definition punctuation_definition_parameters punctuation_definition_parameters_end punctuation_definition_parameters_end_js">)</span></span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>loader<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">start</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="constant constant_numeric constant_numeric_js">0</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>chain<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>photoFade<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">start</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="constant constant_numeric constant_numeric_js">0</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>chain<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="storage storage_type storage_type_js">function</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">()</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">{</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>photo<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">src</span> <span class="keyword keyword_operator keyword_operator_js">=</span> load<span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>photoFade<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span><span class="support support_constant support_constant_dom support_constant_dom_js">start</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="constant constant_numeric constant_numeric_js">1</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>showing<span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>setText<span class="meta meta_brace meta_brace_round meta_brace_round_js">((</span>index <span class="keyword keyword_operator keyword_operator_js">+</span> <span class="constant constant_numeric constant_numeric_js">1</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">))</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="variable variable_language variable_language_js">this</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>loading <span class="keyword keyword_operator keyword_operator_js">=</span> <span class="constant constant_language constant_language_boolean constant_language_boolean_false constant_language_boolean_false_js">false</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>bind<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">))</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>bind<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">))</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span>ˇ <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>bind<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">)</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span> <span class="meta meta_brace meta_brace_curly meta_brace_curly_js">}</span><span class="meta meta_delimiter meta_delimiter_method meta_delimiter_method_period meta_delimiter_method_period_js">.</span>bind<span class="meta meta_brace meta_brace_round meta_brace_round_js">(</span><span class="variable variable_language variable_language_js">this</span><span class="meta meta_brace meta_brace_round meta_brace_round_js">))</span><span class="punctuation punctuation_terminator punctuation_terminator_statement punctuation_terminator_statement_js">;</span></span></pre> <p> Basically I fade in the 'loading' indicator, preload the image via <a href='http://docs.mootools.net/Plugins/Assets#Assets:image' target='_blank' title='MooTools Docs - Plugins/Assets - Assets.image'>Asset.image</a>, fade out the loader, fade out the previous photo, change the photo source, and fade it back up. Whew! Chaining is a little tricky to structure in a nice, readable way, but so nice to use! With <a href='http://docs.mootools.net/Class/Class.Extras#Chain:chain' target='_blank' title='MooTools Docs - Class/Class.Extras - Chain'>MooTools chaining</a>, you can set a stack of time-based functions in line to occur one after the other. It's basically like using an onComplete event to call another function, just much easier and cleaner. </p> <p> And that's all! <a href='http://www.ashleyforrette.com' target='_blank' title='Ashley Forrette Photography'>Check out the site</a> and you know where to go if you need a good (and sexy) photographer. Feel free to post comments if you have any questions and look out for plenty more updates coming soon. </p>Fri, 20 Jun 2008 00:48:00 -0700http://ascendvisual.com/blog/2008/06/20/new-website-ashley-forrette-photographyChris ForretteSpringLoops poweredhttp://ascendvisual.com/blog/2008/05/13/springloops-powered<p><a href='http://www.springloops.com/' target='_blank' title='SpringLoops: Code collaboration for Web Developers'><img src='/img/blog/logo_springloops.gif' alt='SpringLoops' /></a>I'm proud to make a very important announcement today, that this site is now fully SpringLoops-powered. Woohoo! I <a href='/blog/2008/03/31/the-ideal-web-development-environment' title='The Ideal Web Development Environment'>mentioned before</a> that I'm a mega cheapo and don't want to spend the $9 to get the 1GB plan and that the free 10MB wasn't enough for me. Well they've recently upped their free space to 25MB so I've managed to squeeze a couple of projects into it. Unfortunately you're limited to only 3 deploys a day, so on the days where I'm actually making updates, I'm extremely cautious, on all the other days, I'm finding excuses to use those 3 deploys. Deploying rules really hard! End nerd rant.</p> <p>On a side note, I'm currently developing <a href='http://www.ashleyforrette.com/' target='_blank' title='Ashley Forrette Photography'>my wife's</a> brand new photography website, in which her portfolio will be powered by the <a href='http://www.flickr.com/services/api/' target='_blank' title='Flickr API'>Flickr API</a> and some <a href='http://www.mootools.net/' target='_blank' title='MooTools: The compact Javascript framework'>MooTools</a> fanciness. I'll post links and such when it's all ready. Oh and if I didn't mention it, <a href='http://www.rockstargames.com/IV/' target='_blank' title='Grand Theft Auto IV'>Grand Theft Auto IV</a> rules hard. Those damn mobsters burned down me and my cousin Roman's apartment the other day though, that sucked. There will be vengeance. Everyone have an awesome day!</p>Tue, 13 May 2008 11:09:00 -0700http://ascendvisual.com/blog/2008/05/13/springloops-poweredChris ForretteCurrent Rockin: Protest the Hero - Fortresshttp://ascendvisual.com/blog/2008/05/08/current-rockin-protest-the-hero-fortress<p><a href='http://protestthehero.com/' title='Protest the Hero' target='_blank'><img src='/img/blog/cover_protest-the-hero-fortress.jpg' class='border' alt='Protest the Hero - Fortress' /></a>It's been a crazy month (or so) of work and nothing will snap you in the ass like a strong latte and and an awesome metal album. My best, most productive days are when I can squeeze in a latte (or 2) from my &uuml;ber favorite coffee joint, <a href='http://www.bluebottlecoffee.net/' target='_blank' title='Blue Bottle Coffee'>Blue Bottle Coffee</a>, and blast this album in the earbuds 3+ times a day. Yesss. This is indeed one of those albums that will scare <a href='http://www.upperquad.com/' target='_blank' title='Upper Quad'>Phil</a> or any other innocent, faint-hearted passerby, but it rocks my pants off. Lots of incredible musicianship, screaming, growling, high-pitched singing&mdash;everything a boy could ask for in this one.</p> <p>I heard about this band a while back with their release <a href='http://www.vagrant.com/release/details/51' target='_blank' title='Protest the Hero - Kezia'>Kezia</a> from my old buddy <a href='http://code3tales.wordpress.com/' target='_blank' title='Code 3 Tales'>Ryan</a> but I didn't get into them at the time. But, yet again, <a href='http://www.colbynichols.com' target='_blank' title='Illustration by Colby Nichols'>Colby</a> comes through in <a href='/blog/2008/04/01/current-rockin-minus-the-bear-planet-of-ice' title='Current Rockin: Minus the Bear - Planet of Ice'>keeping me hip with the kids</a> and got me hooked on this one. Thanks again Colby, high 5. Rock on folks...</p>Thu, 08 May 2008 23:29:00 -0700http://ascendvisual.com/blog/2008/05/08/current-rockin-protest-the-hero-fortressChris ForretteExposaroonie!http://ascendvisual.com/blog/2008/05/07/exposaroonie<p>I'm not doing much for work on the side these days because of this strange desire to "maintain sanity"&mdash; whatever that means right? But I do make an exception for very special people. One such project was fairly recently launched called <a href='http://www.exposaroonie.com' target='_blank' title='Exposaroonie'>Exposaroonie</a>. It is a really awesome photo community/challenge site created by <a href='http://www.ashleyforrette.com' target='_blank' title='Ashley Forrette Photography'>my wife</a> and <a href='http://www.emilypie.com' target='_blank' title='Emily Pie'>her pal Emily</a>.</p> <div class='img'><a href='http://www.exposaroonie.com' target='_blank' title='Exposaroonie'><img src='/img/blog/exposaroonie.jpg' alt='Exposaroonie - Expose Yourself' /></a><p>Don't let the caption give you any dirty ideas with my wife's site, capiche?</p></div> <p>They are a couple of talented photographers and decided to collaborate and create this site on the premise of helping aspiring and experienced photographers alike with articles and interviews and with their weekly <a href='http://challenge.exposaroonie.com' target='_blank' title='Exposaroonie Photo Challenge'>Exposaroonie Challenge</a>, where you submit your photography based on a different theme every week and then the winner is voted on the following week. I did the design and back end of the site including the logo (which I think is pretty sweet) and the templates were a bit of a challenge because half of the site is run in Google Blogger and half of it on my own server. I personally think my design could be much better, but my limited knowledge of the Blogger template system made it tough, but the ladies love it and I'm sure it will evolve over time.</p> <p>So <a href='http://www.exposaroonie.com' target='_blank' title='Exposaroonie'>go check the site out!</a> Let me know what you think! And if you are into photography, <a href='http://challenge.exposaroonie.com' target='_blank' title='Exposaroonie Photo Challenge'>get started with this week's challenge, 'Bad Habits'</a>. Could be fun/gross/awesome! Fungrossawesome!</p>Wed, 07 May 2008 14:28:00 -0700http://ascendvisual.com/blog/2008/05/07/exposaroonieChris ForretteRebooted and LAhttp://ascendvisual.com/blog/2008/05/07/rebooted-and-la<p>You might have noticed I rebooted, woohoo! I hear you asking, "Wait Chris, now your site looks exactly the same, what the dillio?" First of all, I don't think we're supposed to use the word 'dillio' anymore, and, as I mentioned, It's been busy! I added a few minor tweaks a couple of days ago, including the new fancy, 'Subscribe' button up on the left, I added pagination to the top of the page (it used to only be at the bottom, now you can actually see it!), and I added a few nice buttons to the bottom of each post. I recently re-designed the site just within the window of reboot-eligibility, so there! Voting is open through Thursday I believe (I know, great timing) so <a href='http://www.may1reboot.com/' target='_blank' title='May 1st Reboot'>head on over and vote for me!</a> Look for Ascend Visual at the bottom of the list somewhere...</p> <p>Things are still a bit crazy 'round these parts and I thought things were letting up just a tad until last Friday...</p> <div class='img'><a href='http://www.flickr.com/photos/chrisforrette/2473425807/' target='_blank' title='Car Crash'><img src='http://farm4.static.flickr.com/3279/2473425807_dcf69c88ff.jpg?v=0' /></a></div> <p>Yep, that's our car. Me, <a href='http://ashleyforrette.blogspot.com/' target='_blank' title='Clever Blog Name Here'>the wife</a>, and <a href='http://www.flickr.com/photos/ashleyforrette/2434111753/' target='_blank'>the</a> <a href='http://www.flickr.com/photos/ashleyforrette/2434927318/' target='_blank'>kids</a> made our way to Los Angeles last Friday and ran into a little hickup. Ashley had to go down for a business trip so we decided to make a weekend of it and visit with my mom down there. Everyone is OK except the Rav4&mdash;she's a little pissed. Other than that we had a pretty good time. We went bowling with my parents, hung out, etc.</p> <div class='img'><a href='http://www.flickr.com/photos/chrisforrette/2474247936/' target='_blank' title='Bowling Shoes'><img src='http://farm4.static.flickr.com/3068/2474247936_a429752e8f.jpg' alt='Bowling' /></a><p>Bowling!</p></div> <p>Now we're back home, back to business, and after a rough weekend, decided to spoil myself by picking up a copy of <a href='http://www.rockstargames.com/IV/' target='_blank' title='Grand Theft Auto IV'>Grand Theft Auto IV</a> so just as a warning, my language might be getting a little dirtier here in the coming weeks.</p>Wed, 07 May 2008 11:25:00 -0700http://ascendvisual.com/blog/2008/05/07/rebooted-and-laChris ForretteMay 1st Reboothttp://ascendvisual.com/blog/2008/04/25/may-1st-reboot<p>This year, for the first time ever, I'm participating in the <a href='http://www.may1reboot.com/' target='_blank' title='May 1st Reboot'>May 1st Reboot</a>. Basically the premise is that you take your site offline for a week (starting later today!) with a nice pink placeholder along the lines of this...</p> <div class='img'><a href='http://www.may1reboot.com/' target='_blank' title='May 1st Reboot'><img src='/img/blog/reboot.gif' alt='May 1st Reboot' /></a></div> <p>... and then the whole community 'reboots' simultaneously on May 1st with brand new sites. I might be sort of cheating as I just recently redesigned my site, so when I come back, not much will have changed. I'd like to say there might be some nice new tidbits here and there that I've been thinking of implementing, but I think I'm just too busy for it at the moment.</p> <p>Either way, I'm excited! Some of the coolest web nerds in the world are involved in the project and I found out about it while I was in school a few years ago through a very talented designer/developer by the name of <a href='http://www.bubblebathgirl.com/' target='_blank' title='Bubble Bath Girl: Paul Szypula'>Paul Szypula</a>, whom I believe is responsible for the Flash radness that is the site. It was founded (in part) by another designer whom I really admire, <a href='http://www.idiocase.com/' target='_blank' title='Idiocase: James Widegren'>James Widegren</a>, and my very own web-nerd-cool <a href='http://www.blather.org' target='_blank' title='Blather: Mike Buzzard'>boss</a> has an incredibly inspiring quote floating around on the May 1st site. Are you participating in the reboot? Show me some before and after baby! Don't miss me too much while I'm away...</p>Fri, 25 Apr 2008 02:19:00 -0700http://ascendvisual.com/blog/2008/04/25/may-1st-rebootChris ForretteBack from Costa Rica!http://ascendvisual.com/blog/2008/04/23/back-from-costa-rica<p>So I've been a little quiet lately because things have been crazy insane at work and we just went on a week-long trip to Costa Rica.</p> <div class='img' style='width: 467px'><a href='http://flickr.com/photos/ashleyforrette/2428549883/in/set-72157604521261864' target='_blank' title='Flickr: Covered in clay'><img src='http://farm4.static.flickr.com/3074/2428549883_e0a1cfaa44.jpg' title='Me and the wife covered in clay from a natural hot spring' /></a><p>This is what vacation looks like.</p></div> <p>We had an awesome time! We did loads of fun stuff like hiking through the rain forest, hanging out at volcanoes, horse back riding, river rafting, hangin at the hot springs, etc., etc. My lady took some lovely photos&mdash;<a href='http://flickr.com/photos/ashleyforrette/sets/72157604521261864/' target='_blank' title='Flickr: Costa Rica'>check out the Flickr set</a> so see all of the shenanigans.</p> <p>Things are still going to be crazy at work for a bit, but I'm going to start building up a fun snippet library on this site and I want to get it started in one of my next few posts. I've got a few cool <a href='http://www.mootools.net/' target='_blank' title='MooTools: A Compact Javascript Framework'>MooTools</a> Javascript classes that I've had in my pocket for a while and found some good repeat use for. So keep your eyes peeled nerds, and I will not let you down...</p>Wed, 23 Apr 2008 12:44:00 -0700http://ascendvisual.com/blog/2008/04/23/back-from-costa-ricaChris ForretteWinning Burritoshttp://ascendvisual.com/blog/2008/04/02/winning-burritos<p><img src='/img/blog/logo_chipotle.jpg' alt='Chipotle' />If you hang out with me for a good 5 minutes or so, chances are I will mention <a href='http://www.chipotle.com/' target='_blank' title='Chipotle: Gourmet Burritos and Tacos'>Chipotle</a>. It's <strong>delicious</strong>. You either love it or hate it, but I think their burritos are awesome, especially being a chain. I realize they're not authentic Mexican food, but delicious has no nationality my friend. On to my point...</p> <p>I tend to frequent the joint with the guys at <a href='http://www.cubancouncil.com' target='_blank' title='Cuban Council - Superb Digital Solutions'>Cuban Council</a> or I'll meet up with <a href='http://www.ashleyforrette.com' target='_blank' title='Ashley Forrette Photography'>my lovely wife, Ashley</a>. On one such occasion, I was filling up my soda cup and decided I'd put both mine and my lady's business cards in the 'Lunch on us' drawing pot next to the soda machine, since the cards were so conveniently located in my wallet. That was several weeks ago.</p> <p>So today, I'm working from home, and I get a phone call from my lady and she says, "You'll never guess who I just got off the phone with&mdash;<strong>Chipotle</strong>!!". I had to fight not to pee myself—turns out we won 5 free burritos! Woohoo! Now I realize it's just burritos, but it's my favorite burritos, and they're <strong>FREE</strong>, so I'm captain insane-o excited! I think anything being free and actually desired on any level is a rad-awesome rare thing. So it is the purpose of this post to share my joy with you all. Tomorrow me and the boys are meeting up with the lady to eat some delicious burritos for lunch. Cheers to you, and keep those business cards a-flowin...</p>Wed, 02 Apr 2008 13:23:00 -0700http://ascendvisual.com/blog/2008/04/02/winning-burritosChris ForretteCurrent Rockin: Minus the Bear - Planet of Icehttp://ascendvisual.com/blog/2008/04/01/current-rockin-minus-the-bear-planet-of-ice<p><a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=260675725&amp;id=260675620&amp;s=143441' target='_blank' title='iTunes: Minus the Bear - Planet of Ice'><img src='/img/blog/cover_minus-the-bear-planet-of-ice.jpg' class='border' alt='Minus the Bear - Planet of Ice' /></a>My good pal <a href='http://www.colbynichols.com' target='_blank' title='Illustration by Colby Nichols'>Colby</a>, of <a href='http://jolby.blogspot.com/' target='_blank' title='JOLBY'>Jolby</a> fame (that's <a href='http://www.enyocreative.com' target='_blank' title='The Creative Portfolio of John Kenyon'>Josh</a> + <a href='http://www.colbynichols.com' title='Illustration by Colby Nichols' target='_blank'>Colby</a> = <a href='http://jolby.blogspot.com/' target='_blank' title='JOLBY'>Jolby</a>) and I are pretty good about sharing music and such (he's also much hipper with the kids than I am and teaches me the street lingo, such as the word <a href='http://www.urbandictionary.com/define.php?term=taint' target='_blank' title='Urban Dictionary: Taint'>'taint'</a>) and he recently got me into <a href='http://minusthebear.com/' target='_blank' title='Minus the Bear'>Minus the Bear's</a> newest release, <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=260675725&amp;id=260675620&amp;s=143441' target='_blank' title='iTunes: Minus the Bear - Planet of Ice'>Planet of Ice</a> and it's rockin my world. It's one of those albums where you go to sleep and then the next morning you wake up and realize one of the songs played through your head the whole night and then you can't even be functional until you listen to that very song. 15 times. You know what I mean? Check my recent songs over there on the left, chances are they'll be in there.</p> <p>It's a really great album, nice and rockin' yet relatively mellow in contrast with some of the crazy hardcore stuff I listen to. There's lots of nice, atmospheric guitar riffs and I think the drummer is fantastic—they complement each other well. And then there's the song, <a href="http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=260675802&amp;id=260675620&amp;s=143441" title='iTunes: Minus the Bear - Planet of Ice - White Mystery' target='_blank'>'White Mystery'</a> which is basically like indie rock Barry White. Wanna get romantic with your lady, emo kids? Put this song on repeat, turn the lights down low and go to town. That's much better than <a href='http://www.colbynichols.com' title='Illustration by Colby Nichols' target='_blank'>Colby's</a> prescription of <a href='http://www.last.fm/music/Protest+the+Hero' target='_blank' title='Last.fm: Protest the Hero'>speed metal...</a></p>Tue, 01 Apr 2008 15:50:00 -0700http://ascendvisual.com/blog/2008/04/01/current-rockin-minus-the-bear-planet-of-iceChris ForretteThe Ideal Web Development Environmenthttp://ascendvisual.com/blog/2008/03/31/the-ideal-web-development-environment<p>So begins my first step into blog nerd-dom. For my very first web development topic, I'd like to discuss what I believe to be is the ideal web development environment. I started learning web design on my own about 8 years ago, starting in Dreamweaver 4 and since then, my work environments have changed a number of times, usually depending on new technology and the continued growth of my learning in the field. Once I started at <a href='http://www.cubancouncil.com' title='Cuban Council - Superb Digital Solutions' target='_blank'>Cuban Council</a>, I was already at a pretty good place, but the guys over here helped me to step it up to a level of comfort and efficiency that I've never had before. If you've ever struggled with your development environment, I hope my example might help you out...</p> <h3>Mac 4 Lyfe</h3> <p>First of all, I develop on a Mac. The Mac operating system comes with a lot of great technologies already built in for web development, making getting off the ground that much easier. I could go on about the countless advantages of using a Mac, but I'll keep it simple for now—it rules.</p> <h3>Sleep at night with <a href='http://subversion.tigris.org/' title='Subversion' target='_blank'>Subversion</a></h3> <p><a href='http://subversion.tigris.org/' title='Subversion' target='_blank'><img src='/img/blog/logo_subversion.gif' alt='Subversion' /></a>The first technology I'll discuss is <a href='http://subversion.tigris.org/' title='Subversion' target='_blank'>Subversion</a>. <a href='http://subversion.tigris.org/' title='Subversion' target='_blank'>Subversion</a>, if you're not familiar with it, is version control software. It is a must-have if you are working on projects with a team of people, and it's even great for a single developer because it can serve as a step-by-step back up of your work. I've gotten to the point where using <a href='http://subversion.tigris.org/' title='Subversion' target='_blank'>Subversion</a> has become my <a href='http://charliebrown.com/comics/peanuts/meet_the_gang/meet_linus.html' title='Charlie Brown - Linus' target='_blank'>security blanket</a>—if I'm not committing every half hour (or more) I start getting a little paranoid. Even as I'm typing this blog, I'm wishing there were a commit button somewhere. <i>(Note to self: add svn commit functionality to blog editor)</i> I also have nerd nightmares of people breaking into my home at night and stealing my laptop knowing that I decided to hold off on committing my work to the remote repository until morning. </p> <p>Starting with Subversion, however, is not simple—or at least it wasn't for me. I remember first trying to wrap my brain around the concepts of Subversion and it can really blow your mind. And it's one of those things you really have to understand and use correctly without getting into lots and lots of trouble. When I first started at <a href='http://www.cubancouncil.com' title='Cuban Council - Superb Digital Solutions' target='_blank'>Cuban Council</a>, one of my first projects was refactoring a website. It was the first time I had been required to use Subversion, so, being the inexperienced user that I was, I decided I would develop the entire site, and then do a commit at the end. Very bad choice. If you're using Subversion, <strong>commit as often as possible!</strong> I ended up having problems with my commit, it gave me problems with some directories or something—yadda, yadda, yadda, basically I ended up using the <code>svn delete --force</code> flag in an unexpected way and deleting about 90% of my work. And no, I couldn't just recover it from the trash can. And yes, I realize (now) that anything with "force" and "delete" in the same command should be handled with caution. With great power comes great responsibility my friends, <a href='http://svnbook.red-bean.com/nightly/en/index.html' title='Manual - Subversion' target='_blank'>go forth and commit.</a></p> <h3>Give FTP the finger with <a href='http://www.springloops.com/' title='Rapid coding collaboration: Springloops' target='_blank'>SpringLoops</a></h3> <p><a href='http://www.springloops.com/' title='Rapid coding collaboration: Springloops' target='_blank'><img src='/img/blog/logo_springloops.gif' alt='SpringLoops' /></a>One of the small hurdles of Subversion is that, in good practice, you are keeping your development code in a completely separate location from your live code. So if you make any changes, you need to: commit, export your code from the repository, and then pick out each and every file that you made changes to and FTP it. F that. We recently started using <a href='http://www.springloops.com/' title='Rapid coding collaboration: Springloops' target='_blank'>SpringLoops</a> and it's friggin amazing. They are a Subversion repository hosting service, but they have one amazing feature that makes them rock: <strong>Deploy</strong>. Basically for every project you host in your account, you can add X amount of deployment servers (depending on what level you pay for), so you stick in your FTP login and you've got yourself a deployment server. It then has an interface where you can select which server you want, which revision number you want to deploy, click deploy, and bam! Your server is updated! The great part is that it figures out which files have been added, modified, or deleted from the existing state of your server and the deployment only concerns itself with those files. They offer a free version of the service but you only get 10MB and a limited amount of deployments per day. The next step up is $9 per month, which is enough to keep me from using it on a personal basis. On to figuring out how they did it and bringing it to my desktop!</p> <h3><a href='http://www.mamp.info/' title='living-e AG: MAMP - Mac - Apache - MySQL - PHP' target='_blank'>MAMP:</a> Web server in a box</h3> <p><a href='http://www.mamp.info/' title='living-e AG: MAMP - Mac - Apache - MySQL - PHP' target='_blank'><img src='/img/blog/logo_mamp.gif' alt='MAMP' /></a>I used to install all of my server software like PHP, MySQL, etc., by compiling from source, which was great to learn the <acronym title='Command Line Interface'>CLI</acronym> but it's the future baby, and we don't have to do it anymore (at least locally). <a href='http://www.mamp.info/' title='living-e AG: MAMP - Mac - Apache - MySQL - PHP' target='_blank'>MAMP</a> runs just like any other application and has all of that stuff ready to go. It's great because it's almost all-inclusive but remains flexible, extensible, and customizable. You can activate and deactivate Apache modules and you can even switch between PHP 4 and 5. I recently tried to experiment with <a href='http://www.djangoproject.com/' title='Django | The Web framework for perfectionists with deadlines' target='_blank'>Django</a> in it and could not get it to work, <a href='http://muffinresearch.co.uk/archives/2006/12/20/compiling-mod_python-for-mamp/' title='Compiling mod_python for MAMP | Muffin Research Labs by Stuart Colville' target='_blank'>but there are folks who have.</a> With web technologies always changing, it's much easier to update a single application than upgrading your various installations.</p> <h3>FTP with <a href='http://www.panic.com/transmit/' title='Panic - Transmit' target='_blank'>Transmit</a></h3> <p><a href='http://www.panic.com/transmit/' title='Panic - Transmit' target='_blank'><img src='/img/blog/logo_transmit.gif' alt='Transmit' /></a>Although I gave it the finger earlier, FTP is still necessary for the job. It is pretty simple, so I'm not too picky, but Transmit has a very nice, intuitive interface and is simple to work with. Probably the coolest part of Transmit is being able to modify files directly from a remote server. When you're connected, select a file, hit Cmd+J, modify and save the file and it's updated to the server. Sweet.</p> <h3>Rule the (nerd) earth with <a href='http://macromates.com/' title='TextMate text editor' target='_blank'>TextMate</a></h3> <p><a href='http://macromates.com/' title='TextMate text editor' target='_blank'><img src='/img/blog/logo_textmate.gif' alt='TextMate' /></a>I use TextMate for code editing and it never stops blowing me away! For all of the useful goodies this program is chock full of, you'd think it would chug along, but it runs great. There are tons of nice, intuitive keyboard shortcuts and with the use of <a href='http://macromates.com/textmate/manual/bundles' target='_blank'>Bundles</a>, "code completion" is evolved to a whole new level. There are tons of built-in Bundles that include key combination or tab-triggered code snippets, commands, etc. that make your coding life a breeze, and the great thing is that you can make your own Bundles too! I've made my own for simple stuff like todo notes, etc. The more I explore <a href='http://macromates.com/' title='TextMate text editor' target='_blank'>TextMate</a>, the more easter eggs I find, and the more it rules.</p> <h3>The achilles heel: the MySQL GUI</h3> <p><img src='/img/blog/logo_navicat+cocoamysql.jpg' alt='Navicat and CocoaMySQL' />That's right. If web development were a Trojan War, you would just have to slice me in the MySQL GUI and I would be down for the count. I've been using a combination of <a href='http://cocoamysql.sourceforge.net/' title='CocoaMySQL - A MySQL GUI for Mac OS X' target='_blank'>CocoaMySQL</a> and <a href='http://navicat.com/' title='Navicat MySQL Admin Tool' target='_blank'>Navicat</a>. They make a cute couple, I have to admit, but using 2 apps for one purpose is a little sucky. They both have some great features and they both have their shortcomings. <a href='http://navicat.com/' title='Navicat MySQL Admin Tool' target='_blank'>Navicat</a> has a great Data/Structure synchronization tool and a nice, safe table designer that doesn't apply your changes until you click 'Save'. But it hangs and crashes a lot and importing and exporting is not as simple as it is with <a href='http://cocoamysql.sourceforge.net/' title='CocoaMySQL - A MySQL GUI for Mac OS X' target='_blank'>CocoaMySQL</a>. <a href='http://cocoamysql.sourceforge.net/' title='CocoaMySQL - A MySQL GUI for Mac OS X' target='_blank'>CocoaMySQL</a> makes it really easy to export exactly what you want, table by table, with data or not. <strong>Nerd pet peeve:</strong> It include the table's <code>AUTO_INCREMENT</code> value even if you tell it not to export it's data—easily solved, however, with a simple regex search-and-replace in <a href='http://macromates.com/' title='TextMate text editor' target='_blank'>TextMate</a>. And it's also open source so it's development seems to come along slowly. I've also tried <a href='http://www.advenio.com/sqlgrinder/' title='SQLGrinder - Database Developer IDE for Mac OS X' target='_blank'>SQLGrinder</a>, <a href='http://www.malcolmhardie.com/sqleditor/' title='SQLEditor for Mac OS X' target='_blank'>SQLEditor</a>, and the MySQL Administrator and Query Browser apps, none of which are quite up to far in my opinion. I've actually considered learning a software development language just so I can take a stab at doing it right.</p> <p>So that's it! I hope I've helped shine some light on some soft spots for some of you, and if anyone knows any solutions for my achilles heel, or has any other suggestions, I've love to hear em.</p>Mon, 31 Mar 2008 00:31:00 -0700http://ascendvisual.com/blog/2008/03/31/the-ideal-web-development-environmentChris ForretteTop Ten Albums of 2007!http://ascendvisual.com/blog/2008/03/18/top-ten-albums-of-2007<p>Yet again, my timing has come into question. I know, 2007 was like a year ago, but one of the reasons I wanted to make this blog is to make a top 10 album list for 2007! "That sounds a little crazy Chris", I hear you saying, but I love music and 2007 was probably the best year for new music I have yet to experience. So, without further ado, here is my list:</p> <ol> <li> <a href='http://awilhelmscream.com/' target='_blank'>A Wilhelm Scream</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=266422912&amp;s=143441' target='_blank'>Career Suicide</a><br/> This band rocks! Each and every one of their records gets even better and this one is harder hitting than ever. It's an awesome punk record and the musicianship of the band is incredible. <strong>Fun fact:</strong> My high school band, One More Day, played with these guys, long, long ago when they were called "Smackin' Isaiah". Well, I thought it was cool... </li> <li> <a href='http://www.myspace.com/poisonthewell' target='_blank'>Poison the Well</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=250698059&amp;id=250698058&amp;s=143441' target='_blank'>Versions</a><br/> These guys are my favorite hardcore band of all time and their new record got a lot of listens. I will say, I think their previous release, <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=1710170&amp;id=1710180&amp;s=143441' target='_blank'>You Come Before You</a>, was their best to date, but they still manage to grow their sound and keep things original within the genre. </li> <li> <a href='http://everytimeidie.com/' target='_blank'>Every Time I Die</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=262621731&amp;id=262621692&amp;s=143441' target='_blank'>The Big Dirty</a><br/> Another awesome hardcore album, the production quality of this record was fantastic, hence the rocking is even harder than you might normally expect. <strong>Fun fact:</strong> This record scares <a href='http://www.upperquad.com/' title='upper quad' target='_blank'>Phil</a>. I try to avoid playing this crazy stuff in the office, but when it does he asks me if I need a hug. </li> <li> <a href='http://thisisastandoff.com/' target='_blank'>This is a Standoff</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=265693980&amp;id=265693889&amp;s=143441' target='_blank'>Be Excited</a><br/> These guys are a super fast, pretty technical punk band and this record won't let you sit still. They came from the ashes of the band <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=21887948' target='_blank'>Belvedere</a>, and they stepped it way up with this one. </li> <li> <a href='http://thereceivingendofsirens.com/' target='_blank'>The Receiving End of Sirens</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=260546885&amp;id=260546351&amp;s=143441' target='_blank'>The Earth Sings Mi Fa Mi</a><br/> At the first few listens I thought this album was lame and was kind of disappointed with the direction the band was headed in. But somehow, into 2008, I started listening to it every day (sometimes several times) and it turns out it rules. They have a really interesting "post hardcore" sound and I find a good deal of the lyrics appealing (which is quite rare, I'm usually just focused on the rockin). </li> <li> <a href='http://www.jose-gonzalez.com/' target='_blank'>Jos&eacute; Gonz&aacute;lez</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=263438167&amp;id=263438139&amp;s=143441' target='_blank'>In Our Nature</a><br/> This is a lot more mellow than most of the other stuff on my list, which I think is why I like it so much. This is a really nice record with an almost spanish guitar feel to it&mdash;but not. His intricate guitar playing and overall song writing keep this record very interesting. </li> <li> <a href='http://alchemyindex.com/' target='_blank'>Thrice</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=266010917&amp;id=266010853&amp;s=143441' target='_blank'>The Alchemy Index Vols. I &amp; II: Fire &amp; Water</a><br/> I've always loved Thrice albums and they've always been great about pushing themselves and growing musically with every release. I think 2007 was the year of the concept album, but I remember hearing about the idea for this&mdash;a four-volume earth, wind, fire, and water album&mdash;quite a while before it actually came out. The music is varied, unique, awesome, and makes me itch for the release of the <a href='http://www.vagrant.com/release/details/179' target='_blank'>remaining 2 volumes</a>. </li> <li> <a href='http://chairpage.com/' target='_blank'>Silverchair</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=259021715&amp;id=259021699&amp;s=143441' target='_blank'>Young Modern</a><br/> Remember these guys? I got into them when they first got together with <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=157454583&amp;id=157454516&amp;s=143441' target='_blank'>Frogstomp</a>. I followed them for a few years and forgot about them. I stumbled upon this release in which they completely reinvented their sound into a very unique rock style which I found to be quite rad. </li> <li> <a href='http://dustinkensrue.com/' target='_blank'>Dustin Kensrue</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=207315362&amp;id=207315021&amp;s=143441' target='_blank'>Please Come Home</a><br/> This is a fantastic record and not quite what you would expect from the singer of Thrice, but it just goes to show you that his influences and interests are all over, which is probably why he makes such a great musician. This is a great acoustic, folky kind of record with a rockin edge to it. <strong>Fun fact:</strong> I performed the song 'Pistol' from this record for <a href='http://ashleyforrette.blogspot.com/' title='Clever blog name here' target='_blank'>my wife</a> at our wedding last year with my pals <a href='http://www.enyocreative.com/' title='The Creative Portfolio of Josh Kenyon' target='_blank'>Josh</a>, Kurt, Nico, and my awesome (new) father Jim. </li> <li> <a href='http://www.kanyeuniversecity.com/' target='_blank'>Kanye West</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=263305080&amp;id=263305063&amp;s=143441' target='_blank'>Graduation</a><br/> I've never been a rap/hip hop guy at all&mdash;well except when I was 9, I used to buy all the Snoop Dogg and Dr. Dre stuff I could get a hold of without the 'Parental Advisory' sticker on them&mdash;but since then, nothing of the sort. Kanye is a cocky bastard but this album caught me by surprise and it's pretty awesome. <strong>Fun fact:</strong> Just this last weekend, we were listening to 'Stronger' in the car. Upon hitting a stop light, I did the robot and my wife went into an in-car-seat booty-bounce dance. Thanks Kanye. </li> </ol> <p>And there we have it. And, like I said, this was a great year for music, so here's a few honorable mentions:</p> <ul> <li><a href='http://foofighters.com/' target='_blank'>Foo Fighters</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=263094272&amp;id=263094258&amp;s=143441' target='_blank'>Echoes, Silence, Patience &amp; Grace</a></li> <li><a href='http://www.baysideisacult.com/' target='_blank'>Bayside</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=213592642&amp;id=213592580&amp;s=143441' target='_blank'>The Walking Wounded</a></li> <li><a href='http://radiohead.com' target='_blank'>Radiohead</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=270079880&amp;id=270079778&amp;s=143441' target='_blank'>In Rainbows</a></li> <li><a href='http://www.myspace.com/chasingvictory' target='_blank'>Chasing Victory</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=251911195&amp;id=251910801&amp;s=143441' target='_blank'>Fiends</a></li> <li><a href='http://pattonoswalt.com/' target='_blank'>Patton Oswalt</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=258369476&amp;id=258368231&amp;s=143441' target='_blank'>Werewolves &amp; Lollipops</a> (not music, but awesome nonetheless)</li> <li><a href='http://www.modestmouse.com' target='_blank'>Modest Mouse</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=216544545&amp;id=216544035&amp;s=143441' target='_blank'>We Were Dead Before The Ship Even Sank</a></li> <li><a href='http://boysnightout.com' target='_blank'>Boys Night Out</a> - <a href='http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?i=257758410&amp;id=257758362&amp;s=143441' target='_blank'>S/T</a></li> </ul> <p>Yea, it was tough to wear down. So officially this is now the top 17 albums of 2007. Thanks for joining me while I got this out of my system. If you can remember all the way back then, let me know what your top 10-17 were for last year. Maybe even predictions for next year, oooh...</p>Tue, 18 Mar 2008 02:13:00 -0700http://ascendvisual.com/blog/2008/03/18/top-ten-albums-of-2007Chris ForretteWelcome to 2001: An Introduction to my new Bloghttp://ascendvisual.com/blog/2008/03/18/welcome-to-2001-an-introduction-to-my-new-blog<p>Hello there, and thanks for visiting my brand spankin' new website/blog. I know it's not 2001 as this entry title would indicate, but blogs started becoming popular right around then and, of course, I'm right on the band wagon in 2008. Chances are, as soon as I get this thing live, blogs will not be cool anymore. It'll be either that I made them uncool, or that my timing is just simply terrible.</p> <p>This website has been a bitch! I've been building it pretty much since I got out of school about 3 years ago. Being the indecisive and very busy designer/developer that I am, this has taken countless iterations and hours to get before you today. Hopefully that makes it feel a little more special than it really is. If nothing else, this paragraph was my digital sigh of relief. I will now collapse on a digital couch and consume a digital beer. OK, enough of that. I know things are looking a little scant but this place is a work in progress and I will be adding bits and pieces on as I go. I'm just too antsy to wait any more years than I already have. Soon enough, I will reinstate my portfolio along with a few other goodies that I hope you'll enjoy.</p> <div class='img'> <a href='http://flickr.com/photos/chrisforrette/2342744588/' target='_blank' title='Jumpin!'><img src='http://farm3.static.flickr.com/2073/2342744588_c74d3fc233.jpg?v=0' alt='Jumpin!' /></a> <p>Jumpin around in the sunset. Taken by <a href='http://www.ashleyforrette.blogspot.com/' title='Clever blog name here' target='_blank'>my wife</a></p> </div> <p>So what's this place about? It's all about me! It's a test run really—I've never had a blog so its going to be a mystery whether I'll actually keep it up. But I've got a lot of nerdiness and miscellany to get off of my chest, so where better than my own website? I want to use this place to talk about all the things I love: design, code, San Francisco, dogs, my wife, beverages, hockey, etc. That list is in no particular order and does not act as a limit to what will show up here. I want it to be an outlet for my thoughts and ideas as well as a collaborative two-way road with like-minded people to open discussion and feedback on my posts. You interested? I hope you'll come back for more...</p>Tue, 18 Mar 2008 00:05:00 -0700http://ascendvisual.com/blog/2008/03/18/welcome-to-2001-an-introduction-to-my-new-blog