{"id":631,"date":"2014-07-14T10:13:13","date_gmt":"2014-07-14T17:13:13","guid":{"rendered":"http:\/\/pchristensen.com\/blog\/?p=631"},"modified":"2014-07-14T10:13:13","modified_gmt":"2014-07-14T17:13:13","slug":"learning-clojurescript-and-om","status":"publish","type":"post","link":"http:\/\/pchristensen.com\/blog\/articles\/learning-clojurescript-and-om\/","title":{"rendered":"Learning ClojureScript and Om"},"content":{"rendered":"<p>I missed a few weeks (months?) of writing about my learning sprints, because I&#8217;ve been way out of the routine that let me do independent work. At the end of April, I went to RailsConf in Chicago and had tons to process from everything I learned there. At the beginning of May, the company I worked for, Manilla, closed down and I had to find a new job. That took a month, and I started my new job at the Climate Corporation a few weeks ago. I&#8217;ve been getting up to speed and learning the code, systems, teams, products, etc there. But now things are settled and I&#8217;m back in the saddle.<\/p>\n<p>This sprint I&#8217;m going to work on ClojureScript, particularly Om, the view state library built on Facebook&#8217;s React. I&#8217;ve looked at a lot of Javascript frameworks and libraries, and most of them seem &#8230; wrong. Not bad, but each of them bugs me in its own way. React has a very solid conceptual basis and great implementation, and Om builds on that. Add the benefits of ClojureScript over vanialla Javascript and it seems like a great platform to learn.<\/p>\n<p>I&#8217;m going to start by working through David Nolen&#8217;s Om tutorials:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/swannodette\/om\/wiki\/Basic-Tutorial\">https:\/\/github.com\/swannodette\/om\/wiki\/Basic-Tutorial<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/swannodette\/om\/wiki\/Intermediate-Tutorial\">https:\/\/github.com\/swannodette\/om\/wiki\/Intermediate-Tutorial<\/a><\/li>\n<\/ul>\n<p>I have a project in mind if I have time (or maybe next sprint). I swim for exercise, and swim workouts tend to be a lot of: \u201cSwim X yards, Y times, on a time interval of Z\u201d. I&#8217;ve looked for an app that lets you setup and run the timer for those workouts, but this is one of the only times I haven&#8217;t found a single app that does what I&#8217;m looking for. While I don&#8217;t want to bring my iPhone to the pool, it seems like a tractable problem for a week or two:<\/p>\n<ul>\n<li>Parse a string like \u201c4&#215;100@3:00\u201d and add those sets to the workout<\/li>\n<li>Start a workout and count down each of the intervals<\/li>\n<li>Bonus: button to indicate when you finish each distance. The timer will continue, but this will let you know if you&#8217;re taking 2:30 of 3:00 and getting a short rest, or 1:30 of 3:00 and you should reduce your interval time.<\/li>\n<\/ul>\n<p>I&#8217;ll post my notes, results, and progress in a week or two.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I missed a few weeks (months?) of writing about my learning sprints, because I&#8217;ve been way out of the routine that let me do independent work. At the end of April, I went to RailsConf in Chicago and had tons to process from everything I learned there. At the beginning of May, the company I [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","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","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[14],"tags":[],"class_list":{"0":"post-631","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-clojure","7":"entry"},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pazgP-ab","_links":{"self":[{"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/posts\/631","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/comments?post=631"}],"version-history":[{"count":0,"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/posts\/631\/revisions"}],"wp:attachment":[{"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/media?parent=631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/categories?post=631"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/pchristensen.com\/blog\/wp-json\/wp\/v2\/tags?post=631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}