{"id":1077,"date":"2011-10-06T14:51:56","date_gmt":"2011-10-06T06:51:56","guid":{"rendered":"http:\/\/www.nargalzius.com\/blog\/archives\/2011\/10\/06\/abstraction\/"},"modified":"2011-10-06T14:51:56","modified_gmt":"2011-10-06T06:51:56","slug":"abstraction","status":"publish","type":"post","link":"http:\/\/nargalzius.com\/blog\/archives\/2011\/10\/06\/abstraction","title":{"rendered":"Abstraction"},"content":{"rendered":"<p>Abstraction is a term programmers like to use &#8211; the concept of which is basically to approach\/tackle a problem CONCEPTUALLY rather than with specific tools. In other words, if applied properly, you&#8217;d be able to do whatever it is you intend to do without being tied to a specific requirement (e.g. &#8220;I can&#8217;t do this unless I have this specific piece of equipment&#8221;)<\/p>\n<p>So why the hell am I talking about that right now? Nothing important, can&#8217;t a guy shoot the breeze once in a while? It&#8217;s been ages since I talked about something in the blog anyways \ud83d\ude09<\/p>\n<p>But sure, let&#8217;s apply that a bit on a current experience.<!--more-->I&#8217;ve confirmed that in Lion, the CPU+GPU combination of my <em>Hackintosh<\/em> is known to crash the Flash plugin on Safari and FireFox (FF). Chrome is left unaffected, however.<\/p>\n<p>I&#8217;ve confirmed this personally <span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_1');\" onkeypress=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_1');\" ><sup id=\"footnote_plugin_tooltip_1077_1_1\" class=\"footnote_plugin_tooltip_text\">1 <\/sup><\/a><span id=\"footnote_plugin_tooltip_text_1077_1_1\" class=\"footnote_tooltip\">Cuz you know, I don&#8217;t trust anything anyone says unless I can prove it myself hahaha<\/span><\/span><script type=\"text\/javascript\"> jQuery('#footnote_plugin_tooltip_1077_1_1').tooltip({ tip: '#footnote_plugin_tooltip_text_1077_1_1', tipClass: 'footnote_tooltip', effect: 'fade', predelay: 0, fadeInSpeed: 200, delay: 400, fadeOutSpeed: 200, position: 'top right', relative: true, offset: [10, 10], });<\/script> when I uninstalled Flash and found out that Chrome still could play Flash content <span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_2');\" onkeypress=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_2');\" ><sup id=\"footnote_plugin_tooltip_1077_1_2\" class=\"footnote_plugin_tooltip_text\">2 <\/sup><\/a><span id=\"footnote_plugin_tooltip_text_1077_1_2\" class=\"footnote_tooltip\">Suggesting that it had it&#8217;s own sandboxed player for the browser &#8211; which explains why it wasn&#8217;t affected the same way the other two were<\/span><\/span><script type=\"text\/javascript\"> jQuery('#footnote_plugin_tooltip_1077_1_2').tooltip({ tip: '#footnote_plugin_tooltip_text_1077_1_2', tipClass: 'footnote_tooltip', effect: 'fade', predelay: 0, fadeInSpeed: 200, delay: 400, fadeOutSpeed: 200, position: 'top right', relative: true, offset: [10, 10], });<\/script> I know about the whole HTML5 rage these days, but unfortunately, I make a living out of Flash &#8211; so this bug wasn&#8217;t something I could ignore.<\/p>\n<p>Now I&#8217;ve been using FF for a lot of years (possibly even before I got into programming). While I have no qualms switching from one browser to another, <span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_3');\" onkeypress=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_3');\" ><sup id=\"footnote_plugin_tooltip_1077_1_3\" class=\"footnote_plugin_tooltip_text\">3 <\/sup><\/a><span id=\"footnote_plugin_tooltip_text_1077_1_3\" class=\"footnote_tooltip\">as long as it wasn&#8217;t IE<\/span><\/span><script type=\"text\/javascript\"> jQuery('#footnote_plugin_tooltip_1077_1_3').tooltip({ tip: '#footnote_plugin_tooltip_text_1077_1_3', tipClass: 'footnote_tooltip', effect: 'fade', predelay: 0, fadeInSpeed: 200, delay: 400, fadeOutSpeed: 200, position: 'top right', relative: true, offset: [10, 10], });<\/script> I have to admit that I&#8217;ve gotten quite acclimated to it; investing time in setting it up for optimal daily use.<\/p>\n<p>As far as I know, it was first to market with extensions, and I believe they were also first with the bookmark syncing service. So it made sense I would use that. Just have all my machines use Firefox, sync the bookmarks, and everything is seamless.<\/p>\n<p>I&#8217;ve been paying the productivity price of putting all my eggs in one browser in one form or another over the years &#8211; but I haven&#8217;t been resting on my laurels; I&#8217;ve kept my eye out for services\/apps that could allow me to migrate from Firefox to what I&#8217;d hope would be <em>any<\/em> browser. <\/p>\n<p>For the bookmarks, I stopped using Firefox&#8217;s built-in sync service in favor of XMarks (formerly FoxMarks) &#8211; which is a bookmark syncing service that can sync across <strong>any<\/strong> browser. So that obviously solved my bookmarking problems.<\/p>\n<p>I&#8217;ve also found corresponding extension on the Chrome store that do pretty much the same thing as my Firefox extensions, so that&#8217;s been solved as well. I&#8217;m not closer to being ready to make the switch&#8230; but there&#8217;s still one major gotcha.<\/p>\n<p>One thing that keeps me on Firefox was its native keyword shortcuts. The keyword shortcut basically allows you to tie a keyword to your bookmarks, and it also allows you to use wildcards in your URL strings.<\/p>\n<p>So for example, if I wanted to search for &#8220;keyport&#8221; in my Flickr photostream for something, normally I&#8217;d<\/p>\n<ol>\n<li>Go to Flickr<\/li>\n<li>Go to my photo stream<\/li>\n<li>Type in my query<\/li>\n<li>Make sure I&#8217;ve selected <em>&#8220;your photo stream&#8221;<\/em> before hitting submit <span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_4');\" onkeypress=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_4');\" ><sup id=\"footnote_plugin_tooltip_1077_1_4\" class=\"footnote_plugin_tooltip_text\">4 <\/sup><\/a><span id=\"footnote_plugin_tooltip_text_1077_1_4\" class=\"footnote_tooltip\">And that option will ONLY appear if you&#8217;re in your photo  stream<\/span><\/span><script type=\"text\/javascript\"> jQuery('#footnote_plugin_tooltip_1077_1_4').tooltip({ tip: '#footnote_plugin_tooltip_text_1077_1_4', tipClass: 'footnote_tooltip', effect: 'fade', predelay: 0, fadeInSpeed: 200, delay: 400, fadeOutSpeed: 200, position: 'top right', relative: true, offset: [10, 10], });<\/script> &#8211; to make sure I&#8217;m only searching my pictures and not the entire Flickr database. <\/li>\n<\/ol>\n<p>The query URL that&#8217;s generated from the procedure I just did is <code>http:\/\/www.flickr.com\/search\/?w=87509947@N00&amp;#38;q=keyport<\/code><\/p>\n<p>Now, that&#8217;s at least 4 steps to get what I want. With Firefox&#8217;s customizable keyword shortcuts, I could just assign a keyword &#8220;flickr&#8221; to pre-populate the required URL string (<code>http:\/\/www.flickr.com\/search\/?w=87509947@N00&amp;#38;q=%s<\/code>) for the search and put a wildcard on the actual query (<code>%s<\/code>).<\/p>\n<p>So instead of doing 4 steps, I just type in directly on my browser something like <code>flickr keyport<\/code> <span class=\"footnote_referrer\"><a role=\"button\" tabindex=\"0\" onclick=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_5');\" onkeypress=\"footnote_moveToReference_1077_1('footnote_plugin_reference_1077_1_5');\" ><sup id=\"footnote_plugin_tooltip_1077_1_5\" class=\"footnote_plugin_tooltip_text\">5 <\/sup><\/a><span id=\"footnote_plugin_tooltip_text_1077_1_5\" class=\"footnote_tooltip\">Or in my case it&#8217;s really just the letter &#8220;f&#8221; &#8211; so it&#8217;s a keyletter instead of keyword hehehe<\/span><\/span><script type=\"text\/javascript\"> jQuery('#footnote_plugin_tooltip_1077_1_5').tooltip({ tip: '#footnote_plugin_tooltip_text_1077_1_5', tipClass: 'footnote_tooltip', effect: 'fade', predelay: 0, fadeInSpeed: 200, delay: 400, fadeOutSpeed: 200, position: 'top right', relative: true, offset: [10, 10], });<\/script> and it&#8217;ll do a <a href=\"http:\/\/www.flickr.com\/search\/?w=87509947@N00&amp;#38;q=keyport\">search of &#8220;keyport&#8221; in my Flickr photo stream<\/a> immediately.<\/p>\n<p>Pretty nifty &#8211; and I&#8217;ve spent a lot of time creating a bunch of them which makes me much faster with anything I do on the web. So it&#8217;s not that fun to migrate stuff unless I&#8217;m sure the solution would be a more permanent &#8220;abstraction&#8221; as it were.<\/p>\n<p>I kept on putting it off for later &#8211; cuz I wasn&#8217;t prepared to migrate that many shortcuts just yet. But now my hand has been forced -I <em>have<\/em> to use Chrome. So I finally bit the bullet, Sat myself down and started the grueling process of moving it to Alfred.<\/p>\n<div align=\"center\"><a href=\"http:\/\/farm7.static.flickr.com\/6239\/6216130047_a79a2cab5e_o.jpg\" target=\"_blank\" title=\"You may click on the image for more details\"><img decoding=\"async\" alt=\"\" src=\"http:\/\/farm7.static.flickr.com\/6239\/6216130047_40a2c86685_m.jpg\" class=\"wb\"><\/a><\/div>\n<p>It&#8217;s worth mentioning that there <em>are<\/em> extensions for Chrome and Safari which enables keyword shortcuts &#8211; but like I said earlier on, should something happen to those browsers down the road, I&#8217;d end up with the same problem I&#8217;m having right now with FF.<\/p>\n<p>So I figured putting it in Alfred would be a better method of &#8220;abstraction&#8221; &#8211; because the app doesn&#8217;t care what browser you&#8217;re using. It also consolidates everything into it. I remember the time (when Alfred wasn&#8217;t available) I would use QuickSilver for app launching, Spotlight for file searching, and Firefox for keyword shortcuts. At least now everything is done in one place and should make everything more intuitive&#8230; at least for me \ud83d\ude09 <\/p>\n<p>I&#8217;ve been so OC about this that I even put its custom searches database into Dropbox. That way, all the &#8220;Alfreds&#8221; on my other machines would be in sync \ud83d\ude42 I&#8217;ve even disabled all the &#8220;default&#8221; web searches it makes available (to avoid accidentally triggering the wrong search). For example, I&#8217;ve been so used to pressing &#8220;g&#8221; for my google searches in FF, that the habit carried over as well when in Chrome. I even tend to type in &#8220;g query&#8221; when searching through Google&#8217;s main site as well.<\/p>\n<p>So I&#8217;ve decided <strong>not<\/strong> to unlearn that habit, and just put it right into Alfred; bypassing all his automatic search features. That way I could just use my keywords work exactly as they did with FireFox, and know that same exact &#8220;phrase&#8221; I use would work across <strong>any<\/strong> browser I set as default.<\/p>\n<p>Now <em>that&#8217;s<\/em> abstraction \ud83d\ude42<\/p><div class=\"speaker-mute footnotes_reference_container\"> <div class=\"footnote_container_prepare\"><p><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_label pointer\" onclick=\"footnote_expand_collapse_reference_container_1077_1();\">Notes<\/span><span role=\"button\" tabindex=\"0\" class=\"footnote_reference_container_collapse_button\" style=\"display: none;\" onclick=\"footnote_expand_collapse_reference_container_1077_1();\">[<a id=\"footnote_reference_container_collapse_button_1077_1\">+<\/a>]<\/span><\/p><\/div> <div id=\"footnote_references_container_1077_1\" style=\"\"><table class=\"footnotes_table footnote-reference-container\"><caption class=\"accessibility\">Notes<\/caption> <tbody> \r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_1077_1('footnote_plugin_tooltip_1077_1_1');\"><a id=\"footnote_plugin_reference_1077_1_1\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">&#8673;<\/span>1<\/a><\/th> <td class=\"footnote_plugin_text\">Cuz you know, I don&#8217;t trust anything anyone says unless I can prove it myself hahaha<\/td><\/tr>\r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_1077_1('footnote_plugin_tooltip_1077_1_2');\"><a id=\"footnote_plugin_reference_1077_1_2\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">&#8673;<\/span>2<\/a><\/th> <td class=\"footnote_plugin_text\">Suggesting that it had it&#8217;s own sandboxed player for the browser &#8211; which explains why it wasn&#8217;t affected the same way the other two were<\/td><\/tr>\r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_1077_1('footnote_plugin_tooltip_1077_1_3');\"><a id=\"footnote_plugin_reference_1077_1_3\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">&#8673;<\/span>3<\/a><\/th> <td class=\"footnote_plugin_text\">as long as it wasn&#8217;t IE<\/td><\/tr>\r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_1077_1('footnote_plugin_tooltip_1077_1_4');\"><a id=\"footnote_plugin_reference_1077_1_4\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">&#8673;<\/span>4<\/a><\/th> <td class=\"footnote_plugin_text\">And that option will ONLY appear if you&#8217;re in your photo  stream<\/td><\/tr>\r\n\r\n<tr class=\"footnotes_plugin_reference_row\"> <th scope=\"row\" class=\"footnote_plugin_index_combi pointer\"  onclick=\"footnote_moveToAnchor_1077_1('footnote_plugin_tooltip_1077_1_5');\"><a id=\"footnote_plugin_reference_1077_1_5\" class=\"footnote_backlink\"><span class=\"footnote_index_arrow\">&#8673;<\/span>5<\/a><\/th> <td class=\"footnote_plugin_text\">Or in my case it&#8217;s really just the letter &#8220;f&#8221; &#8211; so it&#8217;s a keyletter instead of keyword hehehe<\/td><\/tr>\r\n\r\n <\/tbody> <\/table> <\/div><\/div><script type=\"text\/javascript\"> function footnote_expand_reference_container_1077_1() { jQuery('#footnote_references_container_1077_1').show(); jQuery('#footnote_reference_container_collapse_button_1077_1').text('\u2212'); } function footnote_collapse_reference_container_1077_1() { jQuery('#footnote_references_container_1077_1').hide(); jQuery('#footnote_reference_container_collapse_button_1077_1').text('+'); } function footnote_expand_collapse_reference_container_1077_1() { if (jQuery('#footnote_references_container_1077_1').is(':hidden')) { footnote_expand_reference_container_1077_1(); } else { footnote_collapse_reference_container_1077_1(); } } function footnote_moveToReference_1077_1(p_str_TargetID) { footnote_expand_reference_container_1077_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } } function footnote_moveToAnchor_1077_1(p_str_TargetID) { footnote_expand_reference_container_1077_1(); var l_obj_Target = jQuery('#' + p_str_TargetID); if (l_obj_Target.length) { jQuery( 'html, body' ).delay( 0 ); jQuery('html, body').animate({ scrollTop: l_obj_Target.offset().top - window.innerHeight * 0.2 }, 380); } }<\/script>","protected":false},"excerpt":{"rendered":"<p>Abstraction is a term programmers like to use &#8211; the concept of which is basically to approach\/tackle a problem CONCEPTUALLY rather than with specific tools. In other words, if applied properly, you&#8217;d be able to do whatever it is you intend to do without being tied to a specific requirement (e.g. &#8220;I can&#8217;t do this &hellip; <p class=\"link-more\"><a href=\"http:\/\/nargalzius.com\/blog\/archives\/2011\/10\/06\/abstraction\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Abstraction&#8221;<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[4,5,13],"tags":[473,595],"class_list":["post-1077","post","type-post","status-publish","format-standard","hentry","category-general","category-internet","category-technology","tag-general","tag-internet"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/posts\/1077","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/comments?post=1077"}],"version-history":[{"count":0,"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/posts\/1077\/revisions"}],"wp:attachment":[{"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/media?parent=1077"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/categories?post=1077"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/nargalzius.com\/blog\/wp-json\/wp\/v2\/tags?post=1077"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}