Web Development https://www.kennycarlile.com/index.php/ en Flash Chord - Practice chords, scales, or arpeggios with an endless stream of randomized chords! https://www.kennycarlile.com/index.php/blog/2020-07-28/flash-chord-practice-chords-scales-or-arpeggios-with-an-endless-stream-of <span>Flash Chord - Practice chords, scales, or arpeggios with an endless stream of randomized chords!</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p><a href="http://www.flashchord.com/"><img alt="Flash Chord - Practice chords, scales, or arpeggios with an endless stream of randomized chords!" src="http://www.flashchord.com/images/flash-chord-logo.png" /></a></p> <p>I've recently published a new project called <a href="http://www.flashchord.com/">Flash Chord (at FlashChord.com)</a>&nbsp;which is a web-based tool for practicing chords, scales, and arpeggios against an endless stream of randomized chords.</p> <p>I've used various backing tracks and other tools, like <a href="https://irealpro.com/">iReal Pro</a>, for practicing chords and scales, but those tools require you to enter the chords ahead of time or use a pre-built track for practicing. This is great, but it allows you to fall into patterns of comfort without really challenging you to learn every part of your instrument. I couldn't find any tools that I thought met all the requirements for which I was looking, so I decided to create Flash Chord as a free web-based tool that would work for any instrument to help musicians practice.</p> <p>Flash Chord is configurable for various difficulty options which makes it usable for all levels of musicians. Configuration options include:</p> <ul> <li>Tempo</li> <li>Bars per chord</li> <li>Time signature</li> <li>Key</li> <li>Chord types</li> <li>Chord extensions</li> <li>Toggle rare enharmonic equivalents&nbsp;(C♭, B♯, F♭, E♯)</li> <li>Toggle next chord</li> <li>Toggle audible metronome</li> <li>Toggle visual metronome</li> </ul> <p><a href="https://github.com/KCarlile/flashchord">Flash Chord is also an open source project on GitHub</a>, so if you'd like to help contribute in any way (code, testing, documentation, etc.), please head over there and get involved.</p> <p>To stay updated on the latest with Flash Chord, be sure to&nbsp;<a href="https://twitter.com/flash_chord">follow us on Twitter&nbsp;<i class="fab fa-twitter" aria-hidden="true"></i>&nbsp;@Flash_Chord</a>.</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Tue, 07/28/2020 - 12:32</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/106" hreflang="en">Music</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/331" hreflang="en">Music Theory</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/21" hreflang="en">Guitar</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/64" hreflang="en">PHP</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/336" hreflang="en">JavaScript</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/341" hreflang="en">jQuery</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/56" hreflang="en">CSS</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/346" hreflang="en">Bootstrap</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1386&amp;2=field_blog_comments&amp;3=comment" token="-cLVq34bS2pjsbVdRCNj_CXZPmjjrnhqv3s_8xIgLHI"></drupal-render-placeholder> </section> Tue, 28 Jul 2020 19:32:36 +0000 Kenny 1386 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2020-07-28/flash-chord-practice-chords-scales-or-arpeggios-with-an-endless-stream-of#comments Drupal Module - Brickset Connect 8.x-1.0-alpha1 released https://www.kennycarlile.com/index.php/blog/2019-08-25/drupal-module-brickset-connect-8x-10-alpha1-released <span>Drupal Module - Brickset Connect 8.x-1.0-alpha1 released</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>I've published the first release (<a href="https://www.drupal.org/project/brickset_connect/releases/8.x-1.0-alpha1">8.x-1.0-alpha1</a>) of a Drupal 8 module I've been on which I've been work for a couple of months. <a href="https://www.drupal.org/project/brickset_connect">Brickset Connect</a> allows a user to connect to the <a href="https://brickset.com">Brickset.com</a> API and query Lego set information about a given set number and create a node with that data and associated images in the Drupal site in which the module is installed.</p> <p>From the <a href="https://www.drupal.org/project/brickset_connect">module's page</a>:</p> <blockquote> <p>Brickset Connect allows content creators to connect to the <a href="https://brickset.com/tools/webservices/v2" rel="nofollow">Brickset.com API V2</a> for importing information about Lego sets as stored in the Brickset database. This module defines:</p> <ul><li>Configuration for connecting to the Brickset.com API</li> <li>A content type for storing set information</li> <li>A mechanism for importing set information and creating nodes based on a set number</li> <li>A view for listing imported set numbers, suitable for exporting set numbers</li> <li>A searchable view for listing set details, suitable for searching sets</li> </ul></blockquote> <p>To see the imported data on my site, for example, you can check out the two views provided with the module:</p> <ul><li><a href="/brick-sets/set-numbers">Set Numbers</a> - This view is appropriate for exporting the list of set numbers which you have imported to the site for either backup or use elsewhere.<br /><img alt="Brickset Connect - Set Numbers" data-entity-type="file" data-entity-uuid="46117b75-7919-4004-9ecb-f74103a33781" height="309" src="/sites/kccom/files/inline-images/brickset-connect-set-numbers.jpg" width="278" loading="lazy" /></li> <li><a href="/brick-sets/set-listings">Set Listings</a> - This is a more usable and searchable view for information about each set that has been imported.<br /><img alt="Brickset Connect - Set Listings" data-entity-type="file" data-entity-uuid="9348488a-4810-4bce-9e3d-cb670d53aa75" height="462" src="/sites/kccom/files/inline-images/brickset-connect-set-listings.jpg" width="727" loading="lazy" /></li> </ul><p>There is still a lot of <a href="https://www.drupal.org/project/issues/brickset_connect?categories=All">cleanup and enhancement</a> to do, but this release met my requirements for a first pass at feature-complete status.</p> <p>If you'd like to help contribute or you just want to use the module, you can find it here: <a href="https://www.drupal.org/project/brickset_connect">https://www.drupal.org/project/brickset_connect</a></p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Sun, 08/25/2019 - 21:08</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/16" hreflang="en">Drupal</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/286" hreflang="en">Lego</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/291" hreflang="en">Bricks</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=961&amp;2=field_blog_comments&amp;3=comment" token="3sgPgSncIZTuyUBJoj9TjQEGRcvVmpuiI-hZq47hEbs"></drupal-render-placeholder> </section> Mon, 26 Aug 2019 04:08:45 +0000 Kenny 961 at https://www.kennycarlile.com Webinar - An Inside Look: Acquia Certified Drupal Site Builder Exam [June 23, 2015] https://www.kennycarlile.com/index.php/blog/2015-06-27/webinar-an-inside-look-acquia-certified-drupal-site-builder-exam-june-23-2015 <span>Webinar - An Inside Look: Acquia Certified Drupal Site Builder Exam [June 23, 2015]</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>I was recently asked by Peter Manijak of <a href="https://www.acquia.com/customer-success/learning-services/acquia-certification-program-overview" target="_blank">Acquia's cetification program</a> to participate in a webinar (with Peter and Jeff Beeman of Acquia) on the topic of providing an inside look into <a href="https://www.acquia.com/customer-success/learning-services/acquia-certified-drupal-site-builder-exam-blueprint" target="_blank">Acquia's Certified Drupal Site Builder exam</a>. Last February, I helped create the Site Builder exam and revise the <a href="https://www.acquia.com/customer-success/learning-services/acquia-certified-developer-exam-blueprint" target="_blank">Acquia Certified Developer exam</a>. If you'd like to view the slides and learn more about the webinar, you can find that information here: <a href="https://www.acquia.com/resources/acquia-tv/conference/inside-look-acquia-certified-drupal-site-builder-exam-june-23-2015" target="_blank">https://www.acquia.com/resources/acquia-tv/conference/inside-look-acquia-certified-drupal-site-builder-exam-june-23-2015</a></p> <p>You can also <a href="https://www.youtube.com/watch?v=ZL-6ZVrDHUg" target="_blank">watch the webinar on YouTube</a>&nbsp;or embedded below.</p> <p><iframe allowfullscreen="" frameborder="0" height="360" src="https://www.youtube.com/embed/ZL-6ZVrDHUg" width="640"></iframe></p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Sat, 06/27/2015 - 12:59</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/16" hreflang="en">Drupal</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/98" hreflang="en">Acquia</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/99" hreflang="en">Certification</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/100" hreflang="en">Site Builder</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/101" hreflang="en">Exam</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=35&amp;2=field_blog_comments&amp;3=comment" token="y_rBQOCxlfyDmTTz9kNTbJJHlKtGFMNX9hNzggVt3hg"></drupal-render-placeholder> </section> Sat, 27 Jun 2015 19:59:06 +0000 Kenny 35 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2015-06-27/webinar-an-inside-look-acquia-certified-drupal-site-builder-exam-june-23-2015#comments Drupal - Getting Clean URLs To Work With GoDaddy Shared Hosting https://www.kennycarlile.com/index.php/blog/2010-04-23/drupal-getting-clean-urls-to-work-with-godaddy-shared-hosting <span>Drupal - Getting Clean URLs To Work With GoDaddy Shared Hosting</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>If you're using GoDaddy for your web hosting and you've installed Drupal on your shared hosting (Economy, Deluxe, or Unlimited hosting plans), then you may have run into the issue where you can't enable Clean URLs for Drupal. Fortunately, there's an easy fix. Unfortunately, the fix is so easy, I'm not sure why GoDaddy hasn't fixed this.</p> <p>In your FTP client or the file browser in GoDaddy's tools, navigate to the root where your Drupal instance has been installed and look for your <em>.htaccess</em> file. Look for this important line, noted in red:</p> <pre> # # Apache/PHP/Drupal settings: # ... # Various rewrite rules. &lt;IfModule mod_rewrite.c&gt; ... # Modify the RewriteBase if you are using Drupal in a subdirectory or in a # VirtualDocumentRoot and the rewrite rules are not working properly. # For example if your site is at http://example.com/drupal uncomment and # modify the following line: # RewriteBase /drupal # # If your site is running in a VirtualDocumentRoot at http://example.com/, # uncomment the following line: <strong><span style="color: #ff0000;"># RewriteBase /</span></strong> ... &lt;/IfModule&gt; # $Id: .htaccess,v 1.90.2.5 2010/02/02 07:25:22 dries Exp $ </pre> <p>All you have to do here is delete the # in front of that line, which will uncomment that directive and allow Drupal to be able to successfully manage your site with Clean URLs. You will, however, have to enable it in your site configuration.</p> <p>Don't forget to save your file after editing and best practice is that you should probably backup the <em>.htaccess</em> file before editing it.</p> <p>See how easy that was? I wonder why GoDaddy hasn't fixed that yet. *shrug*</p> <p><strong>Sources:</strong> http://drupal.org/node/89089, http://drupal.org/node/364511</p> <p><em>Note: I'm aware that there are several places on the web that this is explained, but it's important for GoDaddy users to know if they are using Drupal, so I thought I would add one more instance of this information to help spread the knowledge.</em></p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Fri, 04/23/2010 - 23:38</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/16" hreflang="en">Drupal</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/18" hreflang="en">Hosting</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/19" hreflang="en">GoDaddy</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/20" hreflang="en">Apache</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=2&amp;2=field_blog_comments&amp;3=comment" token="CdJY_SzH-b9OZT5uqHtipOPQseJjEJj5aRpmwEa4k8M"></drupal-render-placeholder> </section> Sat, 24 Apr 2010 06:38:54 +0000 Kenny 2 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2010-04-23/drupal-getting-clean-urls-to-work-with-godaddy-shared-hosting#comments GoDaddy Shared Hosting Multiple-Domain And Subdomain Management https://www.kennycarlile.com/index.php/blog/2010-03-23/godaddy-shared-hosting-multiple-domain-and-subdomain-management <span>GoDaddy Shared Hosting Multiple-Domain And Subdomain Management</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>If you use GoDaddy's shared hosting plans that support multiple domains (the Deluxe or Unlimited plans) and you've tried to manage multiple domains and subdomains, then you probably are already familiar with the organizational frustrations that can occur.</p> <p>In a standard web server environment, each domain and subdomain has it's own directory, usually under a hosting directory, like this:</p> <pre> ~/ myprimarydomain.com/ www/ index.html ... somesubdomain/ index.html ... myotherdomain.net/ www/ index.html ... someothersubdomain/ index.html ...</pre> <p>Unfortunately, with the Godaddy shared hosting plans, <em>some</em> domain must be the primary domain and it must live in the root. That is, you'll end up with a directory structure like this.</p> <pre> ~/ footer.php header.php index.php images/ ... javascript/ ... myotherdomain.net/ index.php ... picturessubdomainforprimarydomain/ index.php ... someotherdomain.org/ index.php ... ...</pre> <p>As you can see, this gets pretty muddy when you have the code for a website for your primary domain mixed in with your other domains and subdomains. Unfortunately, there's no way to completely fix this issue with the inexpensive hosting plans. However, you do have a few options to organize your hosting directory.</p> <h2>Option 1 - The "Primary Domain Gets Screwed" Solution</h2> <p>You can setup a domain that you don't care about for the primary hosted domain. Then, just don't put anything in the root and start organizing your domains in folders with subdomains in those folders. With that method, you have to buy an extra domain that you aren't going to use.</p> <p>Another way you can do this is with a root-level redirect.&nbsp;You can put a single redirect in the root to point the primary domain to its properly nested directory.&nbsp;The problem with this is that you are going to get a long junky URL (after redirect, http://www.mydomain.com/managed_domains/mydomain.com/www/index.php) for the primary domain unless you can get mod_rewrite to work with GoDaddy. I haven't tried this, but I suspect you won't be able to rewrite the URLs in a pretty manner as you aren't allowed access to the Apache httpd.conf file.</p> <h2>Option 2 - The "Try To Keep The www Subdomain Content For Your Primary Domain Well-Organized/Minimal And Manage All Your Other Domains And Subdomains Correctly" Solution</h2> <p>Okay, maybe that solution needs a better name. :)</p> <p>This is the solution I'm currently using. My kennycarlile.com is my primary hosted domain, so I have to keep my www content in the root. I wanted to organize my other domains (and subdomains for kennycarlile.com), so I put my www.kennycarlile.com content in the root and then created a folder for other domains called "000_other_domains". I chose this name, with leading 0's because that will force it to always (well, in theory) put that directory first in an alphabetical listing of the parent directory.</p> <p>Within ~/000_other_domains/, I then create a folder for each domain, independent of the subdomain. That is, I have ~/000_other_domains/kennycarlile.com/ as a parent folder for all my other subdomains. For this case where this is for the primary domain, the www directory exists at the root (~/), but all other domains exist in this directory:</p> <pre> ~/ 000_other_domains/ 528digital.com/ www/ frofrolynx.com/ www/ kennycarlile.com/ demo/ wiki/ [www/ does not exist here because this is the primary domain and it must exist at ~/] kennycarlile.net/ gallery/ www/ moonfar.com/ www/ nwdirtriders.com/ forum/ gallery/ www/ ...</pre> <p>While you still end up with your primary domain's www directory mixed in the root with the 000_other_domains/ directory, you have the rest of your domain and subdomain structure organized logically.</p> <h2>Option 3 - The "You're Actually Making Money From Your Site So You Can Afford Some Real Hosting" Solution</h2> <p>If you're making money off your site and it's not just a hobby, you can probably splurge for the $35+/month virtual dedicated hosting that allows you to have a lot more control over your Apache configuration. This isn't a really a solution since the issue is trying to fix the shared hosting problem, but I just wanted to point out this option.</p> <h2>Fixing A Poorly Planned Hosting Setup</h2> <p>I hope that helps someone out there. I would have liked to have seen this kind of write up <em>prior</em> to starting to manage my hosting. As it was, I had all of my domains and subdomains in folders at the root (~/) of my hosting directory. To clean this up, I had to move many of my installs. I was worried about breaking/corrupting my applications that GoDaddy had installed for me (WordPress, PHPbb, Twiki, etc.), so on the advice of one of their very helpful and articulate tech support reps, I followed these steps:</p> <ol> <li>Using GoDaddy's File Manager in their hosting tools, create the 000_other_domains/ directory.</li> <li>Now create a directory for each domain under 000_other_domains/, such as kennycarlile.com/, frofrolynx.com/, etc.</li> <li>Using the File Manager tool, <strong>COPY</strong> the improperly placed folder where your subdomain (that includes the implicit ones like www, except for your primary domain, which has to stay at ~/) and rename the copied folder as appropriate. You should now have a directory structure like ~/000_other_domains/frofrolynx.com/www/ where a copy of your frofroynx.com content resides.</li> <li>In domain management, modify the record for each domain and subdomain (do subdomains first so you can go back and mange the parent domain while you are waiting for the subdomains to take effect, which happens every 30 minutes), so that it points to the <strong>NEW</strong> location: ~/000_other_domains/frofrolynx.com/www/. Again, this will take ~30 minutes to take effect.</li> <li>Rename your OLD directory to something like xxx_[foldername] so that you know 100% that you aren't accidentally seeing the old install because the domain change hadn't yet taken effect. This also helps you identify which folders you need to delete later.</li> <li>Now test your install. For some applications or plugins for applications, you may have to edit config files to point to the new server path, such as changing&nbsp;/home/content/u/s/e/username/html/old_domain_directory/... to /home/content/u/s/e/username/html/000_other_domains/frofrolynx.com/www/...</li> <li>Once you've been able to correct all the absolute paths to point to the new one, test again.</li> <li>After a day or two, if you feel confident that everything is working as is, you can delete your xxx_[foldername].</li> </ol> <p>Well, that about covers my experience with trying to fix a poorly-managed (by me) hosting account on GoDaddy's shared hosting. Hopefully that will safe someone else some pain and hassle by learning from my mistakes and experience. Good luck!</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Tue, 03/23/2010 - 12:37</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/19" hreflang="en">GoDaddy</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/31" hreflang="en">Domains</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/18" hreflang="en">Hosting</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/32" hreflang="en">Subdomains</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=6&amp;2=field_blog_comments&amp;3=comment" token="dpYbd2vVnCJCXcQ8O44h111--q6kOHp4vaZqvGM8kLU"></drupal-render-placeholder> </section> Tue, 23 Mar 2010 19:37:12 +0000 Kenny 6 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2010-03-23/godaddy-shared-hosting-multiple-domain-and-subdomain-management#comments Encoding Time Cues Into YouTube URLs https://www.kennycarlile.com/index.php/blog/2009-04-15/encoding-time-cues-into-youtube-urls <span>Encoding Time Cues Into YouTube URLs</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>I recently wanted to send someone a clip from The 'Burbs on YouTube, but I wanted them to see a specific line from the movie. I knew that if you added a timecode in MM:SS format to a comment that YouTube would parse that as a link to that timecode in the video, but I figured they had to have a way to do it in the URL as well.</p> <p>After a little bit of Googling, I ran across <a href="http://gadgetwise.blogs.nytimes.com/2009/03/07/how-to-send-youtube-videos-with-your-own-cue/" target="_blank">this post from the New York Times</a>, that explained exactly how to do it. I hadn't run across this before, so I thought I'd share to perpetuate the knowledge.</p> <p>If your video link is http://www.youtube.com/watch?v=krsdKDkyQds and you want it to jump to 5:40 in the clip, simply add #t=5m40s to the URL:&nbsp;<a href="http://www.youtube.com/watch?v=krsdKDkyQds#t=5m40s">http://www.youtube.com/watch?v=krsdKDkyQds#t=5m40s</a></p> <p>This doesn't seem to work for embedding, at least not with the WP plugins that I'm using or by hacking it into the embed code from YouTube. If someone knows a work-around for this, please post it in the comments. In the mean time, if you want to enjoy the specific scene that I wanted to reference, you'll have to drag the playhead to 5:40 manually. The clip ends at about 6:50. [Edit 4/9/2013: The video clip referenced no longer exists.]</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Wed, 04/15/2009 - 12:52</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/33" hreflang="en">YouTube</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/34" hreflang="en">Time Code</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/29" hreflang="en">Links</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=7&amp;2=field_blog_comments&amp;3=comment" token="3h2MLpIr9vIsNQ5sz4-Gx-WUb5ni1HFWKBdJltLMqbo"></drupal-render-placeholder> </section> Wed, 15 Apr 2009 19:52:33 +0000 Kenny 7 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2009-04-15/encoding-time-cues-into-youtube-urls#comments Kobayashi Maru For Developers https://www.kennycarlile.com/index.php/blog/2008-06-20/kobayashi-maru-for-developers <span>Kobayashi Maru For Developers</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>Being the geek that I am, I remembered the reference to the <a href="http://en.wikipedia.org/wiki/Kobayashi_Maru">Kobayashi Maru</a> from Star Trek many years ago, but I was surprised when one of my professors in college brought it up in reference to a sorting algorithm. His linking these two references changed the way I thought about solving problems.</p> <p><em>But first, a brief history...</em></p> <p>In Star Trek lore, there is a test that captains must go through. Notice I said "go through" rather than "pass". The purpose was to test the character of the captain-to-be. The test setup a no-win situation in which the captain had to choose between letting one of two groups of people die. It was impossible to save both groups of people. However, as the story goes, Kirk was the only captain to find a way to "pass" the test. He did so by reprogramming the simulator such that there was a way to pass.</p> <p><em>And now back to our story...</em></p> <p>In my Data Structures II class in college, we were given the task to write the most efficient program to sort a list of 1000 random integers from the set 1 to 1000. (I think it was 1-1000, it might have been 1-10000 or more. It doesn't really matter for the purpose of this explanation.) That is, the list could contain the same number twice or more or there may not be any instances of a particular number. Every student would be given the same list of numbers, so the test was to see how fast you could sort the list.</p> <p>Most students hit a wall when they Googled and found the fastest way to implement standard sorting algorithms that end up with O(<em>n</em> log&nbsp;<em>n</em>) time for best case performance. <a href="http://www.wou.edu/~andersc/">Dr. Charles Anderson</a>, one of my professors for another class (who is now my business partner at <a href="http://www.westernskiesweb.com/">Western Skies</a>), suggested that he had a way to perform the sort in O(<em>n</em>) time but that it was cheating and he wouldn't tell me how until after the contest was over. The only hint he gave me was "Kobayashi Maru". I know what the Kobayashi Maru was, but I had no idea how it applied here, so he left me quite confused.</p> <p>The next week, when the contest was over, he explained to me how he could sort the list of integers in O(<em>n</em>) time instead of O(<em>n</em> log&nbsp;<em>n</em>):</p> <ol> <li>Declare an array (we'll call it <code class="prettyprint">arr[]</code>) that is the size of the largest integer possible in the list, in this case 1000, and initialize all the values of the array places to 0.</li> <li>Pass over the list with a loop. A every position in the list, increment the value at that <em>location</em> in <code class="prettyprint">arr[]</code> by 1. That is, if the first item in the list is 47, perform <code class="prettyprint">arr[47] += 1</code>.</li> <li>Once that first loop has been created, pass over each place the array and print that <em>location</em> the number of times of the value stored in that location.</li> </ol> <p>In other words, in pseudocode:</p> <pre class="prettyprint"> arr[] = array(1000) // load array for x in unsortedIntegers while 0 &lt; i &lt;= 1000 arr[x] += 1 i++ // print sorted list for x in a arr[] while 0 &lt; i &lt;= 1000 while 0 &lt; j &lt;= arr[x] print i + ',' i++</pre> <p>The trick is that you aren't actually sorting the list. You are identifying how many times each number occurs and then using the array data structure to identify those occurrences in order. Rather than O(<em>n</em> log&nbsp;<em>n</em>), you've only passed over <em>n</em> twice, which is then O(2<em>n</em>), or just O(<em>n</em>).</p> <p>At the time, this blew my mind and, in a way, it still does. This isn't thinking outside the box. It's thinking of a different box to fix the problem in the first box! It opened up my mind to a new way of thinking and new possibilities.</p> <p>I recently used this when I needed to search for the occurrence of a 2-letter country code in an array of country codes in JavaScript. Rather than loop through the array and search for the country codes, I converted the array to a string and then searched for the occurrence in that string, which was a O(<em>n</em>) operation. I will admit, however, that I'm not familiar with the internal workings of JavaScript. This version may be as inefficient as looping over the array, which is probably what <code class="prettyprint">toString().search()</code> does anyway. Here's how I did it in JavaScript:</p> <pre class="prettyprint"> var countries = document.getElementById("CountryCode"); countries.onchange = function(){isEurope();}; function isEurope() { var codes = ["AL","DZ","AD","AO","AI","AQ","AM","AT","AZ","BH", "BY","BE","BJ","BA","BW","BV","BG","BF","BI","CM","CV", "CF","TD","KM","CG","CD","CI","HR","CY","CZ","DK","DJ", "EG","GQ","ER","EE","ET","FO","FI","FR","FX","GA","GM", "GE","DE","GH","GI","GR","GL","GN","GW","IS","IR","IQ", "IE","IL","IT","JO","KZ","KE","KW","KG","LV","LB","LS", "LR","LY","LI","LT","LU","MK","MG","MW","ML","MT", "MR","MU","YT","MD","MC","ME","MA","MZ","NA","NL", "NE","NG","NO","OM","PS","PL","PT","QA","RE","RO", "RU","RW","SH","SM","ST","SA","SN","RS","SC","SL", "SK","SI","SO","ZA","ES","SD","SJ","SZ","SE","CH", "SY","TJ","TZ","TG","TN","TR","TM","UG","UA","AE", "GB","UZ","VA","EH","YE","YU","ZM","ZW"]; var isEurope = false; for(i = 0; i &lt; countries.length; i++) { if(countries.options[i].selected) { if(codes.toString().search(countries.options[i].value) &gt; 0) { isEurope = true; } // end if test } // end if test } // end for loop if(isEurope) { // do some stuff } // end if test } // end function isEurope</pre> <p>And there you have it. My own little Kobayashi Maru. While this isn't the most spectacular example, the point of this demonstration is to show you that there are more interesting ways thinking about problems. Try putting the data in a different box to solve a problem.</p> <p><strong>Edit:</strong> Dr. Anderson pointed out to me that another way to do this would be to put all the country codes into an associative array and then search by looking for a value at index country code. Also, the complexity is more like O(<em>mn</em>) than O(<em>n</em>) as the <code class="prettyprint">search()</code> function, even implemented in C within JavaScript, has to be a linear search. Although that's still faster than doing your own nested search in JavaScript. The hot ticket is to put all the country codes into an associative array so that search is based on key, which drops the complexity to O(1).</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Fri, 06/20/2008 - 11:45</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/52" hreflang="en">Programming</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/53" hreflang="en">Star Trek</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/54" hreflang="en">Data Structures</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/55" hreflang="en">Sorting</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=14&amp;2=field_blog_comments&amp;3=comment" token="MWkKHP2AmYlJPPoRbiZwT_Yf5xOfApOMw_Kb2WBZEpo"></drupal-render-placeholder> </section> Fri, 20 Jun 2008 18:45:04 +0000 Kenny 14 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2008-06-20/kobayashi-maru-for-developers#comments Yahoo vs. Eric Meyer CSS Reset https://www.kennycarlile.com/index.php/blog/2008-06-18/yahoo-vs-eric-meyer-css-reset <span>Yahoo vs. Eric Meyer CSS Reset</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>In my post titled <a href="http://www.kennycarlile.com/2008/06/15/webvisions-2008-conference-debriefing/">WebVisions 2008 Conference Debriefing</a>, I mentioned the concept of a CSS reset and provided links to two versions: the <a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">Eric Meyer CSS Reset</a> and the <a href="http://developer.yahoo.com/yui/reset/">Yahoo UI Library CSS Reset</a>. Both address the issue of browser having their own internal stylesheets that don't necessarily match.</p> <p>For example: an <code class="prettyprint">h2</code> tag in one browser might have <code class="prettyprint">font-size: 16px;</code> and <code class="prettyprint">margin-bottom: 12px;</code> while another might have <code class="prettyprint">font-size: 18px;</code> and <code class="prettyprint">margin-bottom: 14px;</code>. That means that without any of your own CSS work, the same plain-Jane <code class="prettyprint">&lt;h2&gt;Some Subtitle&lt;/h2&gt;</code> code will look differently. These are the battles web developers have to face and why we hate IE for its non-standard renderings.</p> <p>The purpose of the concept of a CSS reset is to put all browsers on an even playing field before you begin to style the content. That is, make sure that all elements render the same on all browsers (or rather, all major browsers) so that adding your own styling will have the same effect across the spectrum of renderings. That's not to say that you won't need to make special hacks to fix inconsistent renderings <em>*cough-IE-cough*</em>, but a CSS reset puts you a lot closer to the end goal than where you started.</p> <p>I've only tried implementing and developing CSS with the Eric Meyer CSS reset and the Yahoo reset once each, so my experience here is somewhat limited, but these are my initial impressions. While both are essentially the same technique and could be adapted to behave more like the other, I'm going to address the out-of-the-box functionality.</p> <p><strong>Eric Meyer's CSS Reset</strong> - <a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">Eric Meyer CSS Reset</a></p> <p>This was my first attempt at using a CSS reset and you're looking at the results in this current blog theme (as of the date of this post). Meyer's method is to set all elements to be, essentially, unstyled. That is, all elements render as plain text. No bolding for <code class="prettyprint">&lt;strong&gt;</code>, no italics for <code class="prettyprint">&lt;em&gt;</code>, no margins for <code class="prettyprint">&lt;p&gt;</code>, etc. The nice thing about this is that you get to style everything from the ground up. The bad thing about this is that you <strong><em>have to</em></strong> style everything from the ground up. I was excited at first, but I became increasingly frustrated with having to write quite a bit of CSS just to get elements to behave even remotely like they normally do. I understand the purpose in doing this, but it is a ton of work just to get the most basic HTML to display with standard behaviors. I eventually realized that a work-around for this would be to develop a "CSS starting point" where there are definitions for elements that just define the basic behavior.</p> <p>Another downside to Meyer's method is that he simply provides the code. This didn't seem like a downside at all to me until I used Yahoo's implementation, which I will explain shortly. In fact, it never even occurred to me that there could be a better way.</p> <p>Don't get me wrong. I have a tremendous amount of respect for Eric Meyer and he has done a great job putting together the code for the CSS reset. I only see the ways to improve on it after having used Yahoo's CSS reset. *Segue*</p> <p><strong>Yahoo's CSS Reset</strong> - <a href="http://developer.yahoo.com/yui/reset/">Yahoo UI Library CSS Reset</a></p> <p>First, let me admit my bypasses. I didn't use, or even look at, the Yahoo CSS Reset before trying Eric Meyer's because...well...I'm a Google-guy. If the link had been to the exact same content at Google, I would have not even looked at (okay, that's an exaggeration) Meyer's version. I drink the Google-flavored Kool-Aid with the left hand and the Apple-flavored Kool-Aid with the right. (There, Microsoft zealots. Are you happy? I'm an admitted zealot too, just on the other side.)</p> <p>I was very impressed initially with the organization and presentation of the Yahoo page. The code was very readable and the instructions were clear and concise. They also provide a cheat sheet (PDF download), an SDK download, and several other tools and examples that I found very helpful and interesting.</p> <p>Yahoo also provides a hosted file for the CSS reset so you can simply call the include from their server in the head of your HTML. This was a nice feature. One less file to maintain and serve.</p> <p>Additionally, and this was the biggest selling-point for me, Yahoo provided the "CSS starting point" code that I was looking for to get the elements to their minimal display characteristics and, like the CSS reset, they also provided a hosted file for me to include. After adding two lines of meta code in the head of my HTML file, I had reset the CSS to zero and then styled it to a standard display. Perfect! Just what I was looking for and here it was in an easy to consume, highly supported codebase.</p> <p><em>Coming Soon...</em></p> <p><strong>Google CSS Library</strong> - <a href="http://code.google.com/p/blueprintcss/">Google Blueprint CSS Framework</a></p> <p>As I was writing about being a Google zealot and wishing that Google had a CSS reset, I decided to search for "google css reset" and, lo and behold, the very first link that Google returned (imagine that!) was for the Google Blueprint CSS Framework, which includes a CSS reset and starting point styling. I should have known that Google would swoop in and save the day. I'll try the Google CSS reset for my next site and report my findings.</p> <p><strong>EDIT:</strong></p> <p>I recently tried validating some CSS that I added to a site after using the Yahoo CSS reset. I was sad to find out that it doesn't validate. I think I read somewhere that the Eric Meyer CSS reset doesn't validate either. I decided to punt on this one and just make sure that my personal CSS code that I built on top of the reset code will validate, but then, technically, my whole page doesn't validate since I'm using the CSS reset. I guess that's something I'll have to wrestle with until a better solution comes along.</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Wed, 06/18/2008 - 23:09</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/56" hreflang="en">CSS</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/57" hreflang="en">Reset</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/58" hreflang="en">Yahoo</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/59" hreflang="en">Eric Meyer</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/60" hreflang="en">WebVisions</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/61" hreflang="en">Conference</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=15&amp;2=field_blog_comments&amp;3=comment" token="Su39uEtmGb5TGwGIb3Eyr4NoVO4Ofw4MyngXZefYMqA"></drupal-render-placeholder> </section> Thu, 19 Jun 2008 06:09:58 +0000 Kenny 15 at https://www.kennycarlile.com Sending Email From PHP On GoDaddy (And Possibly Other Hosts) https://www.kennycarlile.com/index.php/blog/2008-06-16/sending-email-from-php-on-godaddy-and-possibly-other-hosts <span>Sending Email From PHP On GoDaddy (And Possibly Other Hosts)</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>Recently, while working on the temporary site for <a href="http://www.moonfar.com/">Moonfar</a>, I wanted to send the user an email as confirmation that they had signed up for email notifications. Essentially, you define the recipient, the subject line, the body, a few headers, and then call the <code class="prettyprint">mail()</code> function while passing those parameters to it. PHP's <code class="prettyprint">mail()</code> function does the rest, provided that your host has PHP configured properly.</p> <p>Let me preface this by saying that I've only tested this on GoDaddy's Linux Deluxe Hosting plan. If you are trying to do this with another web host, you need to make sure that the install of PHP you are using supports the <code class="prettyprint">mail()</code> function.</p> <pre class="prettyprint"> &lt;?php $to = 'user@theirdomain.com'; $subject = 'Your subject line'; // the message here is HTML, but you could // use plain text in the same manner // this could also be pulled from a template file $message = ' &lt;html&gt; &lt;head&gt; &lt;title&gt;Your Title Here&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;p&gt;Your content here...&lt;/p&gt; &lt;/body&gt; &lt;/html&gt;'; // To send HTML mail, the Content-type header must be set $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Additional headers // I'm not sure how the To: field in the header functions since it's part // of the function call, so I've commented it out here //$headers .= 'To: ' . $emailAddr . "\r\n"; $headers .= 'From: YourName &lt;you@yourdomain.com&gt;' . "\r\n"; $headers .= 'Cc: ' . "\r\n"; // if you want to receive a copy $headers .= 'Bcc: you@yourdomain.com' . "\r\n"; // Mail it mail($to, $subject, $message, $headers); ?&gt;</pre> <p>It's as easy as that. That said, I read somewhere that there is a 1000 emails per day limit using this method on GoDaddy without paying for outbound emailing services, but I could be mistaken.</p> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Mon, 06/16/2008 - 22:37</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/19" hreflang="en">GoDaddy</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/64" hreflang="en">PHP</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/65" hreflang="en">Email</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=17&amp;2=field_blog_comments&amp;3=comment" token="aF_f2aYW3SGRfmrsffb5fOJlN5wEXJibvMUiQKm2VjE"></drupal-render-placeholder> </section> Tue, 17 Jun 2008 05:37:26 +0000 Kenny 17 at https://www.kennycarlile.com WebVisions 2008 Conference Debriefing https://www.kennycarlile.com/index.php/blog/2008-06-15/webvisions-2008-conference-debriefing <span>WebVisions 2008 Conference Debriefing</span> <div class="field field--name-field-blog-body field--type-text-long field--label-hidden field--item"><p>I recently attended the WebVisions 2008 conference in Portland, OR. It was my first conference, so I can't speak to the quality with much experience. However, my general opinion was that there was some good, some bad, and some ugly, as one might expect. That said, the good was well worth the experience. Plus, I won the grand prize raffle: Adobe CS3 Premier. Although, as of the date of this post, I have not yet received it.</p> <p>You can find the podcasts of the presentations and the associated presentation slides with these links:</p> <ul> <li><a href="http://www.webvisionsevent.com/wp/?p=65">WebVisions 2008 Presentation Podcasts</a></li> <li><a href="http://www.slideshare.net/event/webvisions-2008">WebVisions 2008 Presentation Slides</a></li> </ul> <p>Here is a quick debriefing of my impressions of the presentations and the most important things I learned:</p> <p><strong>Blogging For A Living</strong></p> <p>Jim Turner</p> <p><a href="http://www.genuineblog.com/">http://www.genuineblog.com/</a></p> <ul> <li>Bloggers are social media managers</li> <li>Be an evangelist through your blog</li> <li>Monitor the net for negative or inaccurate information about your organization and use your blog to rapidly respond and provide an official statement to correct misinformation</li> <li>"Control is an illusion. You can't control what is being said. It's already happening. You can't stop employees from spreading information, so push forward with positive blogging." (Paraphrased)</li> </ul> <p><strong>Hacking Social Media</strong></p> <p>DL Byron</p> <p><a href="http://texturadesign.com/">http://texturadesign.com/</a> <a href="http://bikehugger.com/">http://bikehugger.com/</a></p> <ul> <li>DL was a very inspiring individual, but there wasn't much that I was able to draw from the presentation except for providing examples of how small organizations can combine (through mashups, etc.) services for cheap, rich aggregate tools.</li> </ul> <p><strong>Design Is In The Details</strong></p> <p>Dan Rubin, Bryan Veloso</p> <p><a href="http://design.isinthedetails.com/">http://design.isinthedetails.com/</a></p> <p><a href="http://bryanveloso.com/">http://bryanveloso.com/</a></p> <p><a href="http://superfluousbanter.org/">http://superfluousbanter.org/</a></p> <ul> <li>Great presentation. The best of the conference.</li> <li>Let your layout breathe <ul> <li>Allow space between elements</li> <li>You don't need borders on elements if you have 2 elements with a different colored space in between, such as two white boxes with a gap between them on a black background</li> </ul> </li> <li>Multiples and factors of a common measurement <ul> <li>If your main text font is 12px, then 6, 12, 18, 24, etc. for margins and other sizes are a good way to keep common feel through your site</li> </ul> </li> <li>Subtle effects <ul> <li>Use effects subtly, such as in drop shadows</li> <li>Add noise for a subtle texture on a background to add a real-world feel</li> </ul> </li> <li>To get varying shades of the same color, pick your base hue, then add layers of black or white using soft light blending mode and transparencies to achieve shades and tints</li> </ul> <p><strong>Drupal</strong></p> <p>Sean Larkin</p> <p><a href="http://www.opensourcery.com/">http://www.opensourcery.com/</a></p> <ul> <li>This presentation was less of a "howto" and more of a "this is how we make money" presentation. I wanted to hear more about how to use Drupal.</li> </ul> <p><strong>Faster, Cheaper, Better</strong></p> <p>David Verba</p> <p><a href="http://www.adaptivepath.com/aboutus/david.php">http://www.adaptivepath.com/aboutus/david.php</a></p> <ul> <li>This was essentially a review of how it's cheaper and faster to make web apps now, which is obvious and doesn't require a conference session to make that point.</li> <li>Saying "...and finally..." 6 times is 5 times too many.</li> </ul> <p><strong>CSS Transformation</strong></p> <p>Christopher Schmidtt</p> <p><a href="http://christopherschmitt.com/">http://christopherschmitt.com/</a></p> <ul> <li>Your experience limits your designs</li> <li>Your browser limits your designs</li> <li>Start with semantic markup</li> <li>CSS RESET: the concept of offsetting the internal stylesheet that browsers have that auto-style your elements for you <ul> <li><a href="http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/">http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/</a></li> <li><a href="http://developer.yahoo.com/yui/reset/">http://developer.yahoo.com/yui/reset/</a></li> </ul> </li> </ul> <p><strong>Ruby On Rails</strong></p> <p>Jim Meyer</p> <p><a href="http://www.cucinamedia.com/">http://www.cucinamedia.com/</a> <a href="http://blog.geekdaily.org/">http://blog.geekdaily.org/</a></p> <ul> <li>Very pro-Agile Dev and pro-TDD (Test Driven Development)</li> <li>For any development, to improve scalability and performance: <ul> <li>Stay out of the DB as much as possible</li> <li>Stay out of the dynamic code as much as possible</li> <li>Push info (code?) as close to the user as possible</li> </ul> </li> </ul> <p><strong>Web Site Optimization</strong></p> <p>Kimberly Blessing</p> <p><a href="http://www.kimberlyblessing.com/">http://www.kimberlyblessing.com/</a></p> <ul> <li>Analyze, test, and tune</li> <li>Validate <ul> <li>declare a valid DOCTYPE to ensure that the browser will stay in STANDARDS MODE, otherwise it will go into QUIRKS MODE which will cause slower rendering</li> <li>Validate (X)HTML/CSS</li> </ul> </li> <li>Simplify <ul> <li>Imagemaps are good ideas (I personally disagree with this)</li> <li>Use CSS sprites: very cool idea - <a href="http://www.alistapart.com/articles/sprites">http://www.alistapart.com/articles/sprites</a></li> </ul> </li> <li>Concatenate <ul> <li>Use only 1 CSS file and 1 JS file; you can always merge at the build cycle if you prefer to keep them separate for development organization</li> </ul> </li> <li>IE-Proof CSS <ul> <li>Code against the FOUC (Flash Of Unstyled Content)</li> <li>Don't use @import, use link</li> </ul> </li> <li>Call Javascript As Needed <ul> <li>Define JS near where it is needed</li> </ul> </li> <li>Save Scripts For Last <ul> <li>If it isn't needed on load, define it at the end of the page to prevent parsing until the page has displayed</li> </ul> </li> <li>If you can't GZip, then strip <ul> <li>Get rid of whitespace and comments, convert spaces to tabs (if you want to save spacing) in build phase</li> </ul> </li> </ul> </div> <span><span lang="" about="/index.php/user/1" typeof="schema:Person" property="schema:name" datatype="">Kenny</span></span> <span>Sun, 06/15/2008 - 22:05</span> <div class="field field--name-field-blog-category field--type-entity-reference field--label-inline"> <div class="field--label">Category</div> <div class="field--items"> <div class="field--item"><a href="/index.php/blog/categories/web-development" hreflang="en">Web Development</a></div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">Tags</div> <div class="field--items"> <div class="field--item"><a href="/index.php/taxonomy/term/17" hreflang="en">Web Development</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/60" hreflang="en">WebVisions</a></div> <div class="field--item"><a href="/index.php/taxonomy/term/61" hreflang="en">Conference</a></div> </div> </div> <section> <h2>Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=18&amp;2=field_blog_comments&amp;3=comment" token="Hm8NpVysFuvAd5MqABltr4y4y5jisiYytp23JzS6M-s"></drupal-render-placeholder> </section> Mon, 16 Jun 2008 05:05:00 +0000 Kenny 18 at https://www.kennycarlile.com https://www.kennycarlile.com/index.php/blog/2008-06-15/webvisions-2008-conference-debriefing#comments