<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>OG Consulting</title>
	<atom:link href="http://og-consulting.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://og-consulting.com</link>
	<description>Leaders in Open Source</description>
	<lastBuildDate>Wed, 30 Jun 2010 18:46:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Drop Shadows and Snapshot Borders &#8211; Automating Image Manipulation</title>
		<link>http://og-consulting.com/2008/06/13/drop-shadows-and-snapshot-borders-automating-image-manipulation/</link>
		<comments>http://og-consulting.com/2008/06/13/drop-shadows-and-snapshot-borders-automating-image-manipulation/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 15:04:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/?p=40</guid>
		<description><![CDATA[Many of the web projects we do have tons of images that require manipulation and processing. Although the GIMP and Adobe Photoshop are extremely powerful tools, they require a user. That would you be you, sitting in your chair, operating on images by hand with your mouse, stylus, and keyboard. You can do amazing things, [...]]]></description>
			<content:encoded><![CDATA[<p>
Many of the web projects we do have tons of images that require manipulation and processing.  Although the GIMP and Adobe Photoshop are extremely powerful tools, they require a user.  That would you be you, sitting in your chair, operating on images by hand with your mouse, stylus, and keyboard.  You can do amazing things, but a lot of times you&#8217;re just processing over and over and over.  When you want to speed things up and move on to more interesting tasks, you will turn to <a href="http://www.imagemagick.org/">ImageMagick</a>, a set of command line utilities for processing images en masse.</p>
  <p>A nice effect that I enjoy is the &quot;snapshotization&quot; of digital photos.&nbsp; Take a look.</p>
  <p><img width="480" height="350" src="/files/2008/06/2007_camp_eureka_0088_sm.jpg" class="alignnone size-medium wp-image" /></p>
  <p>Parameters I wish to adjust:<br /></p>
  <ul>
    <li>Rotation (arbitrary)</li>
    <li>Border width and color</li>
    <li>Shadow depth, transparency.</li>
    <li>Background color<br /></li>
  </ul> <span id="more-41"></span>
  <p>So what you want to do is draw a border.&nbsp; ImageMagick&#8217;s &quot;convert&quot; has a <code>-bordercolor</code> and <code>-border</code> directives that allow you to set the color and the width.&nbsp; Make sure to set <code>-bordercolor</code> first, because ImageMagick doesn&#8217;t parse the command line in a sane way.&nbsp; It&#8217;s a small detail, but if you don&#8217;t set <code>-bordercolor</code> first, you&#8217;ll get gray borders every time.&nbsp; Took me forever to figure out why it wasn&#8217;t working for me.</p>
  <p>We will now rotate the image with the border.&nbsp; In order to keep our image as a separate entity, i.e. with a transparent background, we need to specify <code>-background none</code> and then apply the <code>-rotate</code> directive.&nbsp; Try this line without <code>-background none</code> to see what I&#8217;m talking about.</p>
  <p><img width="480" height="383" class="alignnone size-medium wp-image" src="/files/2008/06/2007_camp_eureka_0088_sm1.jpg" /></p>
  <p>That&#8217;s not what we want, eh?&nbsp; So remember to specify <code>-background none</code> first.<br /></p>
  <p>Next you want to use the <code>-shadow</code> directive in a cloned layer.&nbsp; We want to create a layer in memory using the <code>+clone</code> directive, draw a rectangular shape under our first layer with the border, blur the layer and offset it.&nbsp; The default creates a layer above our first one, which is no good, so we swap it and render it as a proper drop shadow.&nbsp;&nbsp; See the script below for a complete example.<br /></p>
  <pre><code>
#!/bin/bash

BGCOLOR="#ffffff"

file="$1"

RANGE=30
number=$RANDOM
let "number %= $RANGE"
let number=$number-15

WIDTH=`identify -ping -format "%[fx:w]" "$file"`
HEIGHT=`identify -ping -format "%[fx:h]" "$file"`
STROKEWIDTH=`echo "scale=0; $WIDTH/50" | bc `
BLUR=20
SHADOW_OFFSET_X=10
SHADOW_OFFSET_Y=10
CURVATURE="0"

OUTPUT_FILE=`echo "$file" | iconv -f LATIN1 -t ASCII//TRANSLIT`
OUTPUT_FILE=`echo $OUTPUT_FILE | tr "[:upper:] " "[:lower:]_"`
echo $OUTPUT_FILE

convert -quality 90 "$file" -size ${WIDTH}x${HEIGHT} -fill none \
-background none -bordercolor "#ffffff" -border "$STROKEWIDTH" -rotate $number \
\( +clone -background black -shadow "$STROKEWIDTH"x${BLUR}+${SHADOW_OFFSET_X}+${SHADOW_OFFSET_Y} \) \
-swap 0 -background "$BGCOLOR" -layers merge +repage -resize 480x480 "${OUTPUT_FILE%.jpg}_sm.jpg"
</code></pre>
  <p>$RANDOM is a built in random number generator which I use here to set the arbitrary rotation of the images, between -20 and +20 degrees.&nbsp; It&#8217;s simple to return numbers in this range.&nbsp; Take any random number, divide it by your desired range (40 in this case), and retrieve the modulo (remainder).&nbsp; Then subtract half your range to get an even distribution between -20 and +20.&nbsp;&nbsp; It&#8217;s an old trick, but it still works.<br /></p>
  <p>The variables $WIDTH, $HEIGHT are necessary to set the border and blur parameters.&nbsp; Again, I use ImageMagick to pull in the dimensions of the image in question.&nbsp; </p>
  <p><code>identify -ping -format &quot;%[fx:w]&quot; &quot;$file&quot;</code></p>
  <p>This will get you the width of the input file. <code>&quot;%[fx:w]&quot;</code> will get you the height.&nbsp;</p>
  <p>I set $STROKEWIDTH (for borderwidth) to be 1/50th of the image&#8217;s width.&nbsp; That&#8217;s a pretty good number for what I&#8217;m doing.&nbsp; Obviously, you can change that to something else.</p>
  <p>I haven&#8217;t worked out exactly how ImageMagick&#8217;s blur works, but I set $BLUR at 20, which seems to work well (I&#8217;m not sure if it&#8217;s a pixel value or what).&nbsp; I&#8217;ll post more when I figure out exactly what it&#8217;s doing and how to control it.<br /></p>
  <p>Now this script is not particularly pretty.  It doesn&#8217;t take any parameters on the command line (except the filename), has no help, and does no input checking.  This is a pretty quick hack to solve a simple problem for myself.  Maybe later I&#8217;ll fancy it up a bit, optimize, and make a proper program out of it, but for now, it solves my problem.</p>
  <p>If you want to process a directory of images, you can wrap it in the following:<br /></p>
  <p><code>ls *.jpg | while read file; do script_name &quot;$file&quot;; done</code> </p>
  <p>And that&#8217;s it.&nbsp; Stupid simple, no?<br /></p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2008/06/13/drop-shadows-and-snapshot-borders-automating-image-manipulation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql 4.0.x LATIN1 to Mysql 4.1.x UTF-8 Nightmares</title>
		<link>http://og-consulting.com/2007/12/02/mysql-40x-latin1-to-mysql-41x-utf-8-nightmares/</link>
		<comments>http://og-consulting.com/2007/12/02/mysql-40x-latin1-to-mysql-41x-utf-8-nightmares/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 01:07:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2007/12/02/mysql-40x-latin1-to-mysql-41x-utf-8-nightmares/</guid>
		<description><![CDATA[Whew! Finally I have accomplished what I had been putting off for a while, namely a MySQL upgrade that had been due. Here&#8217;s the problem: ­What would normally be a straightforwa­rd LATIN1 or ­ISO-8859-1 to UTF-8 character conversion turns out NOT to be. Why? Well, just because the old database character set defaulted to LATIN1, [...]]]></description>
			<content:encoded><![CDATA[<p>Whew! Finally I have accomplished what I had been putting off for a while, namely a MySQL upgrade that had been due. Here&#8217;s the problem:</p>
  <p>­What would normally be a straightforwa­rd LATIN1 or ­ISO-8859-1 to UTF-8 character conversion turns out NOT to be. Why? Well, just because the old database character set defaulted to LATIN1, and most things were <em>stored</em> in LATIN1, not <em>everything</em> was. This very website, powered by WordPress, has been storing data as UTF-8 since forever. So we have a problem. Can you see it? The database and its data are mostly LATIN1, but some data are not. </p>
  <p>An automated mass conversion would not be possible.<br /></p>
  <p>See why I had been putting it off?</p>
  <p>The solution, if you can call it a solution, is to convert all the tables that are NOT WordPress first.</p> <span id="more-40"></span>
  <p><code>mysqldump -h localhost -u username -p --all-databases -c dbname &gt; dump.sql</code></p>
  <p>Then modify that file by cutting and pasting WordPress from the SQL file (or any other application that stores its data in UTF-8).  Using vim you only have to place your cursor at the beginning of WordPress, where it says CREATE DATABASE wordpress, hit &quot;ctrl-v&quot; then &quot;shift-v&quot; and then &quot;/&quot; and type CREATE DATABASE.  This has the result of selecting all text between the CREATE DATABASE statements.  It&#8217;s extremely convenient for selecting possibly hundreds of megabytes of text.  Next, hit the key &quot;d&quot; to delete the SQL statements pertaining to WordPress.  WordPress is now stored in your buffer.  You can save that file, then type &quot;e&quot; and a filename like &quot;wordpress.sql&quot;.  Next hit &quot;ctrl-p&quot; to paste what is in your buffer (possibly hundreds of megabytes of data).  Exit and save.  You now have two files: one called dump.sql with all of your LATIN-1 data, and another called wordpress.sql with just your WordPress stuff.<br /></p>
  <p>Now convert your dump.sql file to UTF-8 </p>
  <p><code>iconv -f ISO-8859-1 -t UTF-8 dump.sql &gt; dump_utf8.sql</code></p>
  <p>In this case, we will start with a fresh install of Mysql (so we don&#8217;t have to drop any databases). Import like this (because we used &#8211;all-databases in the dump, all the DROP and CREATE statements are included, so no need to manually create the databases):<br /></p>
  <p><code>mysql -u username --max_allowed_packet=16M -p --default-character-set=utf8 dbname &lt; dump_utf8.sql</code>­ ­</p>
  <p>I assume you have backed up your old installation, just in case this whole procedure goes south.­  In my case, keyword changes between MySQL 4.0.x to MySQL 4.1.x resulted in various import errors.  I have to go through the SQL dump and alter the database schemas by hand.  Be advised.  It was thorny, but I write this little tutorial to let you know that it is possible.  I received no less than 20 different errors in my database import.  I altered them one by one, wiped, and re-imported.  Eventually, my database was ticking along just fine.  It can be done.</p>
  <p>Next you just have to import your wordpress.sql file as it was, and you are done. </p>
  <p>Of course, MySQL 5.x is out and 4.1.x is screaming to be upgraded, so I&#8217;ll now have to wade knee deep into the thicket of thorns again.  This exercise above, has prepared me for the pain though, I think I&#8217;ll be able to handle it.</p>
  <p>Actually, 4.1.x to 5.x wasn&#8217;t bad.&nbsp; No problems.&nbsp; Just follow the standard upgrade guide.&nbsp; Make sure to do a full dump and just import everything as specified.&nbsp; Since we were already on UTF-8, there weren&#8217;t any gotcha on my end.&nbsp; <br /></p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2007/12/02/mysql-40x-latin1-to-mysql-41x-utf-8-nightmares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fighting the Good Fight Against Spammers</title>
		<link>http://og-consulting.com/2006/12/22/fighting-the-good-fight-against-spammers/</link>
		<comments>http://og-consulting.com/2006/12/22/fighting-the-good-fight-against-spammers/#comments</comments>
		<pubDate>Fri, 22 Dec 2006 19:06:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2006/12/22/fighting-the-good-fight-against-spammers/</guid>
		<description><![CDATA[The holiday season is crazy enough for ordinary citizens going about their daily routine, shopping, fighting traffic, long lines, time deadlines.&#160; Then there's the threat of credit card and identity theft.&#160; If that's not enough, we workers in the IT world have to deal with the maleficent opportunists that seem to come out of the [...]]]></description>
			<content:encoded><![CDATA[<p>The holiday season is crazy enough for ordinary citizens going about their daily routine, shopping, fighting traffic, long lines, time deadlines.&nbsp; Then there's the threat of credit card and identity theft.&nbsp; If that's not enough, we workers in the IT world have to deal with the maleficent opportunists that seem to come out of the woodwork to ply their warez, spam, and botnets at this time of year.<br /></p><p>Over at Altamente, I've been battling spammers and hackers constantly since the day after Thanksgiving.&nbsp; Why Thanksgiving, do you ask?&nbsp; I'm so glad you asked.&nbsp; It's simple.&nbsp; In the US, from Thanksgiving to the last shopping day before Christmas, consumers will account for roughly 17% of all retails sales.&nbsp; </p><p>Spammers and hackers want their cut.&nbsp; </p><p>Whether it be phishing, hacking, or spamming, they have been a constant pain in the neck.&nbsp; </p><p>Imagine my surprise this morning when I noticed the email was slow.&nbsp; I peeled back the carpet to find a hoard of roaches swarming about.&nbsp; </p><p>Yeach.&nbsp; <br /></p><p>Tons of messages were in the outgoing queue from an anonymous user, spam messages sent by my server to unwilling recipients.&nbsp; I was shocked and disgusted.&nbsp; How could this have happened?&nbsp;&nbsp; I took a deep breath, decided not to panic and calmly looked through the logs and web traffic.&nbsp; I already suspected a rogue web script on some virtual host somewhere.&nbsp; Let's have a look at which client has gotten a bump in server traffic recently.<br /> </p><p>And there is was, a script being used by one of Altamente's clients, <a href="http://dev.wp-plugins.org/wiki/wp-email">wp-email.php</a>.&nbsp;
Now, in all fairness to the author, he has since applied a bit of paint
to his &quot;Email Article&quot; plugin for WordPress in the form of a Captcha.&nbsp; In my case, however, I overlooked the patch and the result: spammers had been injecting an automated attack against the script to deliver their payload as if it was a normal email.</p><p>Solved!&nbsp; But I'm still annoyed.&nbsp; Remember people, any php or web script that allows a user to send email needs to be thoroughly checked against such variable over-writing.&nbsp; All input strings must be parsed and checked.&nbsp; Put up email forms at your own peril.</p><p>Or at least watch them carefully during the Holidays.&nbsp;</p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2006/12/22/fighting-the-good-fight-against-spammers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Multi-lingual WordPress with Apache2 and Content Negotiation via index.html.var</title>
		<link>http://og-consulting.com/2006/09/26/multi-lingual-wordpress-with-apache2-and-content-negotiation-via-indexhtmlvar/</link>
		<comments>http://og-consulting.com/2006/09/26/multi-lingual-wordpress-with-apache2-and-content-negotiation-via-indexhtmlvar/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 16:32:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2006/09/26/multi-lingual-wordpress-with-apache2-and-content-negotiation-via-indexhtmlvar/</guid>
		<description><![CDATA[That&#8217;s a mouthful, isn&#8217;t it. In short, I&#8217;m writing this little tutorial for those that need to maintain a WordPress site in more than one language. This particular setup is geared toward WordPress, but the techniques can be used for other html files and Content Management Systems. First, use Apache&#8217;s new index.html.var file. You will [...]]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s a mouthful, isn&#8217;t it. In short, I&#8217;m writing this little tutorial for those that need to maintain a WordPress site in more than one language. This particular setup is geared toward WordPress, but the techniques can be used for other html files and Content Management Systems.</p>

  <p>First, use Apache&#8217;s new index.html.var file. You will find a copy in your default webroot that comes with a default Apache installation. This index.html.var file will take the place of your index.html or index.html.xx file residing in your root directory. Without getting too technical the file is just a mapping of user language requests to appropriate localized content <em>wherever</em> it may be.&nbsp; It&#8217;s way more flexible than MultiViews.<br /></p><span id="more-35"></span>

  <p>To create a two language WordPress site, one for Spanish and one for English, I set up the two blogs on the same codebase (WordPress 2.0.4). The base URL for Spanish is /es/ and for English is /en/. I also wanted my users to be drawn from the same users table (no sense in having them register twice for the site). Place the following line your wp-config.php</p>

  <p><code>define ('CUSTOM_USER_TABLE', 'YOUR_TABLE_PREFIX_users');</code><br /></p>

  <p>Where YOUR_TABLE_PREFIX is wp_ or whatever is in the variable $table_prefix for your common users table.</p>

  <p>Also, in order that your users won&#8217;t have to log in twice in case they visit both the English and Spanish sites, we&#8217;ll have to modify the cookie paths.  Basically, if you login in English then pass over to the Spanish, your login will stay valid (rather than prompting you to login again).  We need to modify the wp-config.php in both directories to make sure where ever the user enters first, that login sticks.</p>

  <p>In your <strong>es</strong> directory put the following in your wp-config.php:</p>

  <p><code>define ('COOKIEPATH', '/en/');</code><br /></p>

  <p>In your <strong>en</strong> directory put the following in your wp-config.php:</p>

  <p><code>$public_cookiehash = md5('http://foo.com/es');<br />
  define('USER_COOKIE', 'wordpressuser_'. $public_cookiehash);<br />
  define('PASS_COOKIE', 'wordpresspass_'. $public_cookiehash);<br />
  define ('COOKIEPATH', '/es/');</code></p>

  <p>The result: if you login to the English side and then get a hankering for Spanish, your login stays valid.  If you are feeling a little latino at first and then later decide to peruse some English content, your login stays valid.  ¿<em>Entienden</em>? </p>

  <h3>Apache and Content Negotiation </h3>

  <p>Place the index.html.var file I mentioned before in your base directory / with the following mappings for my localized blogs.</p>

  <p><code>URI: /en/<br />
  Content-language: en<br />
  Content-type: text/html<br />
  <br />
  URI: /es/<br />
  Content-language: es<br />
  Content-type: text/html</code></p>

  <p>Normally, in the default index.html.var, index.html.es maps to Spanish content, and index.html.en maps to English content. I didn&#8217;t want that, since the base directory is meaningless and empty except for index.html.var. My actual localized content is in the respective directories /es/ and /en/. I didn&#8217;t want a splash screen asking the user to choose his/her language either. The computer should comply with the user&#8217;s browser preferences. If a Spanish speaking user has their language preference configured as Spanish, Apache should very well give it to them.</p>

  <p>You can think of index.html.var as Apache mod_rewrite specifically geared towards internationalization. Now any English-speaking request to http://foo.com/ will negotiate to http://foo.com/en/ and Spanish-speaking requests map to http://foo.com/es/</p>

  <p>As usual, I write this because the process is so simple no one thought to spell it out quite so explicitly.</p>

  <p>To sum up: index.html.var has replaced the MultiViews directive in Apache, is more flexible, and will help you out way more than trying to write php, mod_rewrite, or javascript to replicate the same functionality.<br /></p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2006/09/26/multi-lingual-wordpress-with-apache2-and-content-negotiation-via-indexhtmlvar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Five Most Common Lies in Business</title>
		<link>http://og-consulting.com/2006/06/27/the-five-most-common-lies-in-business/</link>
		<comments>http://og-consulting.com/2006/06/27/the-five-most-common-lies-in-business/#comments</comments>
		<pubDate>Tue, 27 Jun 2006 22:17:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Newsbytes]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2006/06/27/the-five-most-common-lies-in-business/</guid>
		<description><![CDATA[From an article on Fast Company Lie: &#34;People are our most important asset.&#34; Truth: &#34;People are our most worrisome and unpredictable asset. Our most important assets are really our financial assets.&#34; How is this true? A pile of capital &#8211; so what does it do? Really, I&#8217;d like to know about this autonomous manifestation. If [...]]]></description>
			<content:encoded><![CDATA[<p>From an article on <a href="http://www.fastcompany.com/magazine/10/5lies.html">Fast Company</a></p>

  <blockquote>
    <h3>Lie: &quot;People are our most important asset.&quot;</h3>

    <p><strong>Truth:</strong> &quot;People are our most worrisome and unpredictable asset. Our most important assets are really our financial assets.&quot;</p>
  </blockquote>

  <p>How is this true?  A pile of capital &#8211; so what does it do?  Really, I&#8217;d like to know about this autonomous manifestation.  If true, I could retire today.  While I agree, people are our most worrisome and unpredictable asset, they are no doubt the most IMPORTANT asset.<br /></p><span id="more-31"></span>

  <blockquote>
    <h3>Lie: &quot;This was a rational decision.&quot;</h3>

    <p><strong>Truth:</strong> &quot;I wanted to do this.&quot;</p>
  </blockquote>

  <p>Well maybe you wanted to do this because it was a rational decision.  Emotional or irrational decisions in business lead to disaster.<br /></p>

  <blockquote>
    <h3>Lie: &quot;We judge people by their performance.&quot;</h3>

    <p><strong>Truth:</strong> &quot;I judge your performance based on how much I like you.&quot;</p>
  </blockquote>

  <p>On what else can you judge them?  Paul LaFontaine mentions that we keep people we like and get rid of people we don&#8217;t.  This makes sense because generally people we like do a good job and people who get along with <strong>no one</strong> generally make a mess of things.  Why is that so hard to understand?  Is he honestly trying to say that companies get ahead by promoting suckups over performers?  No, people you really like tend to be people you respect.  Respect is a clear marker for a solid performer.  This one&#8217;s a no brainer, Paul.<br /></p>

  <blockquote>
    <h3>Lie: &quot;This is business, it isn&#8217;t personal.&quot;</h3>

    <p><strong>Truth:</strong> &quot;Everything&#8217;s personal.&quot;</p>
  </blockquote>

  <p>Yes, everything is personal, but those that can get past it and see the sunk cost, or eliminate the factors that really have no bearing on the problem, then we can get ahead.  Look, I don&#8217;t hate you, but the fact remains, I performed $100,000 of work for which I have not been paid.   That makes me mad, but I&#8217;m not taking action because I&#8217;m mad.  I&#8217;m taking action because I can&#8217;t write off $100,000.  I&#8217;m sorry that your company is in a bind, that your several hundred employees might be in the unemployment line next week.  If you don&#8217;t pay me X% by %Y, I will file suit.   It sucks, so yes, go ahead and yell.  Everything is personal, but the fact that you can rise above and maintain objectivity regardless of the sob story will be the difference between your employees in unemployment or his.<br /></p>

  <blockquote>
    <h3>Lie: &quot;The customer comes first.&quot;</h3>

    <p><strong>Truth:</strong> &quot;I come first.&quot;</p>
  </blockquote>This is true, of course, but HOW do I come first?  By staying in business and earning a profit.  How do we, in fact, stay in business:  By serving our customers well enough to make a profit.  So who comes first again?<br />]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2006/06/27/the-five-most-common-lies-in-business/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Procedural Flash Animation in Linux</title>
		<link>http://og-consulting.com/2006/03/18/procedural-flash-animation-in-linux/</link>
		<comments>http://og-consulting.com/2006/03/18/procedural-flash-animation-in-linux/#comments</comments>
		<pubDate>Sat, 18 Mar 2006 15:06:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2006/03/18/procedural-flash-animation-in-linux/</guid>
		<description><![CDATA[<p>This is an introduction to creating completely non-interactive, or procedural flash animation using  Linux.  The beauty of this is not that you can do more, or that it's prettier, or even faster to create.  The beauty lies in the power.  Once an animation procedure is set, the elements can be changed simply by including new images, colors, or messages.  In fact, I'm working on a simple web-form to generate the above animation by simply uploading elements and text inputs. </p>

  <p>But first, let's get to the tutorial, shall we?<br /></p>

<p>The door scene modeled in <a href="http://www.povray.org/" target="_blank">POV-ray</a> scene description language and is typical of Old San Juan, Puerto Rico Spanish Colonial architecture.  The real doors are beautiful.  If you ever get a chance to take a cruise from/to Puerto Rico, don't miss the chance to walk around Old San Juan (El Viejo San Juan) and check them out.  I rendered three frames with the doors rotated from 0 to 75 degrees to simulate... guess what?  Opening doors.  Clever, huh?</p>]]></description>
			<content:encoded><![CDATA[<div style="border: 1px solid #cccccc;padding: 10px;float: right;margin-left: 10px">
<object width="320" height="240" data="/files/images/slideshow.swf" type="application/x-shockwave-flash">
<param name="src" value="/files/images/slideshow.swf">
<img src="/files/images/puerta_open_sm.jpg" width="320" height="240">
</object>
</div>

  <p>This is an introduction to creating completely non-interactive, or procedural flash animation using  Linux.  The beauty of this is not that you can do more, or that it&#8217;s prettier, or even faster to create.  The beauty lies in the power.  Once an animation procedure is set, the elements can be changed simply by including new images, colors, or messages.  In fact, I&#8217;m working on a simple web-form to generate the above animation by simply uploading elements and text inputs. </p>

  <p>But first, let&#8217;s get to the tutorial, shall we?<br /></p>

<p>The door scene modeled in <a href="http://www.povray.org/" target="_blank">POV-ray</a> scene description language and is typical of Old San Juan, Puerto Rico Spanish Colonial architecture.  The real doors are beautiful.  If you ever get a chance to take a cruise from/to Puerto Rico, don&#8217;t miss the chance to walk around Old San Juan (El Viejo San Juan) and check them out.  I rendered three frames with the doors rotated from 0 to 75 degrees to simulate&#8230; guess what?  Opening doors.  Clever, huh?</p>

  <p>There&#8217;s a lot of POV code, here&#8217;s a little bit of what it looks like:</p>

<code>cylinder { &lt;0, 0.5, 0&gt;, &lt;0, -0.5, 0&gt;, 0.5<br />
     texture {<br />
        pigment { color rgb &lt;0.6, 0, 0&gt; }<br />
        normal { granite 0.02 turbulence &lt;0.5, 0.9, 0.2&gt; scale 0.25 }<br />
        finish { specular 0.1 reflection .1 }<br />
     }<br />
  }</code>

  <p>It&#8217;s pretty simple. You place objects in an X-Y-Z space (Cartesian coordinates) like a sphere, cylinder, box or any other of the predefined primitives. You can merge them, subtract them, intersect them in creative ways. Finally, you apply some sort of texture which includes a pigment, a surface (normal), and a finish (reflections effects etc). There are easier ways to model, but sometimes POV-ray&#8217;s scene description language is just the most elegant and easiest way to model something.</p>

  <p>The next step was to convert the png files to jpegs for inclusion in the flash animation. I used a little sprinkle of bash and a dash of kosher ImageMagick&#8217;s convert.<br /></p>

  <code>for file in *.png; do convert -quality 100 &quot;$file&quot; &quot;${file%.png}.jpg&quot;; done</code>

  <p>For each png file, convert the png file to a 100 percent quality jpeg file.  We use 100% quality because I&#8217;m going to let the swftools take care of the final compression.  There&#8217;s no sense in lossy compressing then lossy compressing again.  That&#8217;s just crazy talk.<br /></p>

  <p>We will now create the flash source file.  Open a new file slideshow.sc.  This is the textual language for the swftools Linux Flash toolkit.  I have never ever ever looked at a flash source file from any Macromedia product, so I have no idea if this animation description method looks/acts/walks/talks in anyway shape or form like Macromedia&#8217;s products.  Don&#8217;t know, don&#8217;t care.</p>


<code>.flash bbox=640x480 filename=&quot;slideshow.swf&quot; version=6 fps=25 compress background=white<br />
  <br />
  .jpeg s1 &quot;puerta_open03.jpg&quot;<br />
  .jpeg s2 &quot;puerta_open02.jpg&quot;<br />
  .jpeg s3 &quot;puerta_open01.jpg&quot;<br />
  .font font &quot;gilc____.ttf&quot;<br />
  .font arial &quot;arialbi.ttf&quot;<br />
  .text text1 text=&quot;Opening Doors&quot; font=font<br />
  .text text2 text=&quot;Opening Doors&quot; font=font<br />
  .text text3 text=&quot;Opening Doors&quot; font=font<br />
  .text text4 text=&quot;OG&quot; font=arial<br />
  .text text5 text=&quot;Experts in&quot; font=font<br />
  .text text6 text=&quot;Open Source&quot; font=font<br />
  <br />
  .put s1 scalex=640 scaley=480 alpha=100%<br />
  .put text1 scale=100% x=40 y=220 alpha=0%<br />
  <br />
  .frame 25<br />
  .put s2 scalex=640 scaley=480 alpha=0%<br />
  .change text1 alpha=100%<br />
  .put text2 scale=100% x=40 y=220<br />
  <br />
  .frame 100<br />
  .change s2 alpha=0%<br />
  .change text1 alpha=100%<br />
  .change text2 alpha=100%<br />
  <br />
  .frame 125<br />
  .change text1 alpha=0%<br />
  .change text2 alpha=100%<br />
  .change s2 alpha=100%<br />
  .put s3 scalex=640 scaley=480 alpha=0%<br />
  .put text3 scale=100% x=40 y=220<br />
</code>

  <p>And so on (that&#8217;s not the whole file, but the rest is just repetition.  There are 71 total lines of code for that little flash animation.  Is that a lot or a little?  Seems pretty small to me anyway.  Basically, with swftools you define an object (image, or text); you put it; then you change it.  You can change its fade, size, location, and more.  The swfc program will implement the change from the object&#8217;s last known state.  Check out <a href="http://www.swftools.org/" target="_blank">swftools</a> for more examples (that&#8217;s where I got all the reference I needed to make my little flash thingie).<br /></p>

  <p>So there you have it.  I walk through the frames, changing elements, putting, fading, growing, moving stuff around.  It&#8217;s was all described from start to finish in a procedural language, from the POV-ray scene description language, to bash and ImageMagick for command line image manipulation, and finally to swftools flash scene language for the final animation.  Pretty nifty, huh?</p>

  <p>Check out: <a href="http://www.altamente.com">http://www.altamente.com/</a> for another example.<br /></p>

  <p>The neat thing about this is that once the procedure has been developed, you can reuse it for other clients, other looks, colors, messages, etc.  In fact, you could directly render it on the server to update information on the fly via end user input.  There&#8217;s no limit to what you can do with something like this.<br /></p>

  <p>Of course if you&#8217;re on Windows, you would probably just buy Macromedia&#8217;s software&#8230; but where&#8217;s the fun in that?<br /></p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2006/03/18/procedural-flash-animation-in-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails &#8211; Insert Multiple Child Records</title>
		<link>http://og-consulting.com/2006/03/09/ruby-on-rails-insert-multiple-child-records/</link>
		<comments>http://og-consulting.com/2006/03/09/ruby-on-rails-insert-multiple-child-records/#comments</comments>
		<pubDate>Thu, 09 Mar 2006 06:39:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2006/03/09/ruby-on-rails-insert-multiple-child-records/</guid>
		<description><![CDATA[<p>I have been having a bafflingly hard
time trying to figure out the proper way to insert multiple child
records from one single webform.&#160; It is the standard fare for posting
things like invoice headers and details.&#160; Say for example, you've got
an invoice record which consists of an order number, date and whatnot.&#160;
That particular piece of tabular data is then considered the parent of
its child line items (product_id, description, quantity, price, etc).&#160;
So you've got this Order which consists of an invoice and line items. <br /></p>]]></description>
			<content:encoded><![CDATA[<p>I have been having a bafflingly hard
time trying to figure out the proper way to insert multiple child
records from one single webform.&nbsp; It is the standard fare for posting
things like invoice headers and details.&nbsp; Say for example, you&#8217;ve got
an invoice record which consists of an order number, date and whatnot.&nbsp;
That particular piece of tabular data is then considered the parent of
its child line items (product_id, description, quantity, price, etc).&nbsp;
So you&#8217;ve got this Order which consists of an invoice and line items.&nbsp; </p>
  <p>It&#8217;s
pretty basic, but I&#8217;ve had the hardest time figuring out how to do this
is Ruby on Rails.&nbsp; I know it&#8217;s not hard in theory, but with Rails,
since there is only One Right Way(TM) to do things, &#8217;cause you&#8217;re on
Rails, it takes a bit of doing to figure out this Right Way(TM).&nbsp; I
personally don&#8217;t have a problem doing it Rails&#8217; way, but please dear
God, just tell me what it is.&nbsp; I bought the book and everything.</p>
  <p>So
here&#8217;s the dope, folks.&nbsp; Please correct me if there&#8217;s a better way of
doing this, &#8217;cause I&#8217;m a Rails n00b.&nbsp; For reference sake, I am using
Ruby on Rails 1.0 with Postgres 8.0.4 and Ruby 1.8.4<br /></p><span id="more-29"></span>
  <p>First the webform:</p>
  <p> <code>&lt;ul id=items&gt;<br />&nbsp;&nbsp; &lt;% for item in @items %&gt;<br />&nbsp;&nbsp;
&lt;li&gt;&lt;%= check_box_tag 'line_item', item.id, checked=false,
{:name =&gt; &quot;line_item[item_id][]&quot;, :id =&gt;
&quot;line_item_id_#{item.id}&quot; }&nbsp; %&gt;&lt;label for=&quot;line_item_id_&lt;%=
item.id %&gt;&quot;&gt; &lt;%= item.title&nbsp; %&gt;&lt;/label&gt;&lt;/li&gt;<br />&nbsp;&nbsp; &lt;% end %&gt;<br />&lt;/ul&gt;</code></p>
  <p>Make sure to use check_box_tag instead of check_box.&nbsp; check_box holds a hidden text input that by default inserts a 0 into the database.&nbsp; From <a href="http://rubyonrails.org/api/classes/ActionView/Helpers/FormHelper.html">http://rubyonrails.org/api/classes/ActionView/Helpers/FormHelper.html</a><br /> </p>
  <blockquote>
    <p>The <tt>checked_value</tt> defaults to 1 while the
default <tt>unchecked_value</tt> is set to 0 which is convenient for
boolean values. Usually unchecked checkboxes don’t post anything. We
work around this problem by adding a hidden value with the same name as the
checkbox. </p>
  </blockquote>
  <p>You don&#8217;t want that.&nbsp; You want the plain vanilla check_box_tag which
does none of that nonsense, because you in fact, don&#8217;t want your
line_item table being filled with up with all kinds of line_items
referring to product &quot;0&quot; or product &quot;NULL&quot;.</p>
  <p>So that&#8217;s our form.&nbsp; The line <code>&lt;% for item in @items %&gt; </code>comes
from the items.rb model and is just a little database query to get all
the items associated with a particular order for posting in our
invoice.&nbsp; Why would we use checkboxes?&nbsp; Well, maybe we&#8217;re not going to
invoice the whole order.&nbsp; Maybe we&#8217;re out of some items.&nbsp; We&#8217;ll let our
warehouse guy check off the checkboxes on his wireless pda.&nbsp; How&#8217;s that?</p>
  <p>If
you were watching closely, you&#8217;ll notice that I modified the
check_box_tag behavior with options of my own with the following:</p>
  <p><code>:name =&gt; &quot;line_item[item_id][]&quot;</code></p>
  <p>This is what gives us multiple lines (an array of items) to pass to the controller.&nbsp; [] is the important part.</p>
  <p>Now,
so far this is easy, or at least I thought so.&nbsp; I&#8217;ve done this a
hundred times in php, but that&#8217;s just the problem, I got tired of
writing and re-writing this.&nbsp; I wanted Rails to handle all the parent
child relationships for me and leave me alone.&nbsp; I&#8217;m lazy.</p>
  <p>But I
couldn&#8217;t figure out exactly how to do this.&nbsp; Frankly, I&#8217;m still trying
to fit all the method/class/object/instance/variable blah blah blah
into my head and keep all the Invoice invoice invoices straight.&nbsp; I
know, I know, it&#8217;s probably me, but I&#8217;ll wager there are a few more
slow-witted programmers out there for whom this is all so confusing.&nbsp; A
phrase that I have been becoming more familiar with while working in
Ruby on Rails is, &quot;Use the force.&quot;&nbsp; It&#8217;s funny, but most of the time
when I relax and make stuff up without trying to &quot;understand,&quot;&nbsp; things
usually Just Work(TM).&nbsp; Jedi Programming&#8230; who knew?<br /></p>
  <p>So we&#8217;ve got our form.&nbsp; Now we need to post the parent and the children in one fell swoop.</p>
  <p>Now
for the model (no, not Victoria&#8217;s Secret):&nbsp; Invoice will not reference
the children (the children will come running when they hear their
parent&#8217;s voice regardless of whether they are called by name).&nbsp; The
parent &quot;has_many&quot; children and does not bother remembering their names
or ids or anything.&nbsp; The children on the other hand &quot;belong_to &quot; (or
reference) the parent and are tattooed with the parent_id stamp of
ownership (big ears for example).&nbsp;&nbsp; When they are required, they will
all line up under the parent and file out like good little children.</p>
  <p>Got it?&nbsp; Parent -&gt; has_many :children, Child -&gt; belongs_to :parent &#8211; the model of a perfect Catholic Rails family.<br /></p>
  <p>Now we need to post the stuff.&nbsp; This is a snippet from the invoice_controller.rb:</p>
  <p><code>&nbsp;&nbsp; def create<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @invoice = Invoice.new(params[:invoice])<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @invoice.order_id = @session[&quot;order_id&quot;]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for item_id in params[:invoice_item][:item_id] do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @invoice.invoice_items &lt;&lt; InvoiceItem.new(:item_id =&gt; item_id)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if @invoice.save<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; flash[:notice] = 'Invoice was successfully created.'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirect_to :action =&gt; 'list'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :action =&gt; 'new'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp; end<br /></code></p>
  <p>order_id
is stored in the session array and is used to reference the invoice.&nbsp;
The invoice in turn has items added to it for each item_id in the
params passed from our form.&nbsp; What happens on @invoice.save is the
following:</p>
  <ol>
    <li>Rails inserts the invoice header (the parent)</li>
    <li>Immediately fetches currval(invoices_id_seq) to retrieve the newly created invoice_id</li>
    <li>Uses that invoice_id number and iterates over the invoice_items inserting both the item_id and invoice_id</li>
    <li>commits the results if successful<br /></li>
  </ol>That&#8217;s
it!&nbsp; Easy, huh?&nbsp; Well it took me all day to figure it out.&nbsp; I knew it
was easy, but perhaps I don&#8217;t have mad google sklz or something,
because it left me scratching my head.&nbsp; Hopefully someone will find
this useful.&nbsp; Leave a comment and I&#8217;ll do my best to answer your
questions.&nbsp; If not, I&#8217;m sure I&#8217;ll forget it in a few months and have to
reread this *G*.<br />]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2006/03/09/ruby-on-rails-insert-multiple-child-records/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Tras la Pista del Consumidor Tecno-Sapiens</title>
		<link>http://og-consulting.com/2005/11/14/tras-la-pista-del-consumidor-tecno-sapiens/</link>
		<comments>http://og-consulting.com/2005/11/14/tras-la-pista-del-consumidor-tecno-sapiens/#comments</comments>
		<pubDate>Mon, 14 Nov 2005 20:32:02 +0000</pubDate>
		<dc:creator>lmgorbea</dc:creator>
				<category><![CDATA[Education]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2005/11/14/tras-la-pista-del-consumidor-tecno-sapiens/</guid>
		<description><![CDATA[El Consumidor Tecno-Sapiens,<br />variante del ser humano moderno que está virando al revéz<br />su relación con los medios. Hasta ahora la literatura del<br />usuario del consumidor de televisión lo presentaba como una<br />persona aplataná en el sofá sirviendo de esponja a todo<br />lo que se sirve por las ondas televisivas o el famoso “couch<br />potato.”&#160;&#160; Al pensar en mercadear o desarrollar marcas se pensaba<br />en exposiciones a productos a ese receptor pasivo.]]></description>
			<content:encoded><![CDATA[<p>En la evolución del ser humano
se han dado nombres a vertientes que muestra una divergencia
significativa de la evolución. Homo Habilis era hábil
con herramientas, Homo erectus caminó de pie. A modo de
diversión pero a la vez para reflejar un cambio en la
conceptualización del consumidor.  Por ello en vez de empezar
con “homo” empiezo con consumidor asumiendo que el poder
adquisitivo lo ejerce un ser humano.  En repaso de las nuevas
tecnologías y su efecto sobre el consumidor hablo entonces del
“Consumidor Tecno-Sapiens.”  El Consumidor Tecno-Sapiens,
variante del ser humano moderno que está virando al revéz
su relación con los medios. Hasta ahora la literatura del
usuario del consumidor de televisión lo presentaba como una
persona aplataná en el sofá sirviendo de esponja a todo
lo que se sirve por las ondas televisivas o el famoso “couch
potato.”   Al pensar en mercadear o desarrollar marcas se pensaba
en exposiciones a productos a ese receptor pasivo.</p> <span id="more-28"></span>

<p>Pero la tecnología sigue
cambiando a un ritmo acelerado y las relaciones caracterizaban la
creación y transmisión de información están
sufriendo cambios dramáticos.  Hoy día, si tienes una
duda, ya no te razcas la cabeza, ni abres la encyclopedia, muchas
veces antes de consultar con padres o amigos, lo más inmediato
es buscarlo en portales como Google. “Google” ya no es una
palabra rara sino para muchos es un verbo sinónimo a búscalo
- “google it!” y para otros es el nombre de una sabia inversión
monetaria. Conexiones de banda ancha en las casas, oficinas, hoteles
y hasta en Starbucks, facilitan que el consumidor presente con más
frequencia sus inquietudes y busque en el ciberespacio sus
respuestas.  Si esta es la economía de la información,
los consumidores ya tienen el hábito de buscar información
en el Internet.  En esta nueva economía donde la información
es el objeto de intercambio hay muchas relaciones de poder,
entretenimiento y negocios que están siendo afectadas.   En
breve damos exploramos consecuencias de estos cambios y estrategias
de negocios y mercadeo para atenderlos.</p>
<h3>Tecno-Sapiens reorganiza el flujo de la
información
</h3>
<p>En los 90 se hablaba de webcasts, se
vaticinaba que el usuario dejaría de buscar su entretenimiento
en el televisor. Quizás no hemos dejado a un lado el televisor
pero el uso del mismo y el Internet han cambiado patrones de
interacción.  Probablemente no muchos conozcan el TiVo pero a
sí el cambio fundamental que el TiVo impulsó.  Hoy día
por medio de muchas compañías de satélite se han
introducido a las casas grabadores de televisión (TV DV-R&#8217;s)
que permiten pausar la transmisión y automáticamente
comenzar a grabarla. Cuando se re-establece la transmisión el
televidente puede pasar por alto los comerciales.  De igual manera
con este dispositivo se puede seleccionar grabar todas las
ocurrencias de un tema o programa y eliminar los comerciales de la
grabación.  El patrón trasciende de esta nueva
tecnología: el consumidor evita los anuncios televisivos.</p>

<p>Nuestras computadoras no se han
convertido aún en sustitutos del televisor pero sí se
ha convertido en un agresivo proveedor de contenido.  Nuevas
generaciones buscan en el Internet música, grabaciones de
programas o películas.  No piensen que esto último es
área exclusiva de piratas y contenido ilegal. El Internet ha
reanimado a muchos artistas facilitando la creación de
comunidades que apoyan su contenido. Un atractivo al consumidor de
contenido en-línea es la ausencia de comerciales.</p>
<p>El fenómeno de pod-casting es un
paso más en esta evolución que socava el acostumbrado
impacto de comerciales.  Se refiere a la transmisión de
contenido de video o audio en dispositivos manuales como un “i-pod.”
 El patrón dominante favorece al consumidor que más y
más puede disfrutar del contenido de su predilección a
la hora de su conveniencia.
</p>
<h3>Cambios en el del consumidor  Tecno-Sapiens</h3>
<p>Las nuevas tecnologías están
fomentando un cambio en la transmisión de contenido que apunta
a la reducción en el impacto del comercial tradicional.  Por
un lado veremos más películas como “Herbie”
sobrecargadas con publicidad de marcas a lo largo de la producción.
Pero ciertamente, no estamos vaticinando la desaparición de
comerciales. Lo que sí recomendamos es un cambio en su
conceptualización.  En un panorama donde el consumidor está
tomando un rol más activo sobre su consumo de producciones de
video y audio, y evitando ver comerciales, una alternativa es cuidar
el contenido y crear en vez corto-metrajes atractivos.</p>

<p>Recientemente, en EEUU campañas
comerciales que utilizan el web para darle mayor vida a los anuncios
se están viendo más. El ejemplo más reciente fue
el esándoloso comercial de Carl Jr&#8217;s con Paris Hilton lavando
un carro hamburguesa en mano.  Puerto Rico vió un ejemplo de
esta misma estrategia de vanguardia que en la campaña reciente
de Holsum.  Holsum invirtió en la creación de algo más
grande que lo que acostumbramos pensar cuando pensamos en un
comercial. El corto metraje apeló a su audiencia mediante la
selección de una historia que resonaba con el público
puertorriqueño, el uso de artistas locales, y la elegancia de
utilizar toda clase de suplidores locales.  El corto metraje se
anunció en varios medios. Corrió en la televisión
y en el Internet.  Miles de personas visitaron el sitio web designado
para volver a ver el mega comercial y cientos de personas
voluntariamente compartieron el video con familiares y amigos.
</p>

<p>Este ejemplo enmarca al comercial como
algo más que un anuncio en un espacio televisivo atractivo. El
comercial se convierte en la generación de contenido con un
valor añadido que invita al consumidor a participar. En
términos de “push” y “pull.”  El consumidor
tecno-sapiens está buscando maneras de evitar ese contenido
que le impulsan a modo de bombardeo.  La innovación en
mercadeo impulsada por las nuevas tecnologías será
buscar maneras en las que se hala al consumidor a participar.
</p>
<h3>Contenido que hala</h3>
<p style="margin-bottom: 0in">Si partimos del punto de vista del
consumidor tecno-sapiens el mismo comienza con una pregunta o duda.
Un portal efectivo hoy día debe ir más allá del
monólogo   “nuestra historia” y “quiénes somos,”
para enfocar en la información que sus clientes estarán
buscando y que podrían servir como antemesa a una venta o como
servicio público que fomenta el desarrollo de su marca.</p>

<p>En esta economía de la
información la tendencia de algunos es pensar que tienen que
guardar sus secretos. Pero las tendencias en el mercado demuestran lo
contrario.  Hay que dar, o invertir para cosechar fruto.  Al dar algo
de valor en su sitio web la meta debe ser establecer una razón
por la cual regresar.  Esto suele ser contenido educativo,
formularios para acortar procesos,  entretenimiento como videos,
galerías de imágenes, o juegos, calculadoras de costo,
u otros programas que aclaran las dudas de sus clientes.Entre las
empresas norteamericanas vemos que gigantes como Budweiser, Chrysler,
Nabisco, AETNA y otras marcas ya tienen estrategias de internet que
atienden sus consumidores tecno-sapiens.  En estos sites uno puede
buscar contenido educativo, entretenimiento y acortar pasos en el
proceso de comprar o solicitar servicios.
</p>

<p>Localmente la industria bancaria es la
más adelantada en facilitar procesos para consumidores
tecno-sapiens pero el contenido de sus sitios web no son
multi-plataforma.  A menudo la información reside en imágenes
y animaciones que google no puede leer y catalogar.  Esto restringe
su consumo y uso a uno local donde se sepa cual es el nombre y
dominio del banco.  El sector automotriz revela los cambios más
dramáticos en la evolución de un énfasis
sobrecargado en diseño y efecto a utilidad y servicios al
consumidor.  Una industria que ha venido incorporando tecnología
para hablarle a los Consumidores Tecno-Sapiens es la del turismo.
Más y más gracias a esfuerzos en parte subsidiados por
el gobierno se ha incorporado el uso del Internet para atender
preguntas y reservaciones de consumidores vía el Internet.
</p>

<p>Sectores empresariales puertorriqueños
rezagados en el uso de la tecnología pero con gran potencial
para desarrollo son la industria de alimentos y materiales de
construcción.  En este sector notables excepciones lo son el
sitio web de Holsum, Lanco y Carmelo.
</p>
<h3>Preguntas guías para repensar su
estrategia de Internet:</h3>

<ul><li><p>¿Qué preguntas
	contestan en su portal?
	</p>
	</li><li><p>¿Porqué habría
	de toparse con su sitio web un Consumidor Tecno-Sapiens?</p>
	</li><li><p>¿Qué gestiones puede
	realizar el consumidor en el portal?</p>
	</li><li><p>¿Cuán versátil
	es su contenido? ¿Puede Google o una palm leer su contenido o
	está el mismo encerrado en un dibujo o animación?</p>
	</li><li><p>¿Puede el visitante
	compartir fácilmente la información con amistades?</p>
	</li><li><p>¿Porqué habrían
	de volver los consumidores tecno-sapiens?</p>
</li></ul>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2005/11/14/tras-la-pista-del-consumidor-tecno-sapiens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why Good Programmers Are Lazy and Dumb</title>
		<link>http://og-consulting.com/2005/08/26/why-good-programmers-are-lazy-and-dumb/</link>
		<comments>http://og-consulting.com/2005/08/26/why-good-programmers-are-lazy-and-dumb/#comments</comments>
		<pubDate>Fri, 26 Aug 2005 13:34:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Newsbytes]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/?p=21</guid>
		<description><![CDATA[We at OG Consulting have been saying this for years.&#160; Frankly, we are the laziest and dumbest consultants around.&#160;Why Good Programmers Are Lazy and Dumb by Philipp Lenssen I realized that, paradoxically enough, good programmers need to be both lazy and dumb.Lazy, because only lazy programmers will want to write the kind of tools that [...]]]></description>
			<content:encoded><![CDATA[<p>We at OG Consulting have been saying this for years.&nbsp; Frankly, we are the laziest and dumbest consultants around.&nbsp;</p><p><a href="http://blog.outer-court.com/archive/2005-08-24-n14.html">Why Good Programmers Are Lazy and Dumb</a>  by Philipp Lenssen</p>

<blockquote><p>I realized that, paradoxically enough, good programmers need to be both lazy and dumb.</p><p>Lazy, because only lazy programmers will want to write the kind of tools that might replace them in the end. Lazy, because only a lazy programmer will avoid writing monotonous, repetitive code – thus avoiding redundancy, the enemy of software maintenance and flexible refactoring. Mostly, the tools and processes that come out of this endeavor fired by laziness will speed up the production.</p></blockquote>

<p>Of course, we work very hard at being lazy.&nbsp; We&#8217;ll find resources you might not have thought of (because we&#8217;re lazy).&nbsp; We might write a business automation system (because punching numbers is boring and computers are good at it&#8230; and we&#8217;re lazy).&nbsp; We might help you better <em>program</em> your employees because we don&#8217;t want to do their work and neither do you.&nbsp; And we will ask the dumb questions you might not.&nbsp; In short, we don&#8217;t assume we know more than you do about your business.&nbsp; In consulting there is no shortage of professionals who help you spend your hard earned money to complicate your processes, accounting, Internet strategy, or software implementation.&nbsp; </p><p>We&#8217;ll probably lose our membership in the Secret Order of Consulting Professionals for saying this, but we don&#8217;t suppose it&#8217;s any secret &#8211; consultants obfuscate things to render the illusion of success or progress while billing by the hour.&nbsp; OG Consulting is neither motivated enough nor smart enough to pull that off.&nbsp; We&#8217;d rather help you make your business processes brain-dead simple so we don&#8217;t have to think so hard and neither will you.</p><p>And that&#8217;s the bottom line.&nbsp; We&#8217;re too lazy and dumb to fail.</p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2005/08/26/why-good-programmers-are-lazy-and-dumb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The True Price of Software</title>
		<link>http://og-consulting.com/2005/07/23/the-true-price-of-software/</link>
		<comments>http://og-consulting.com/2005/07/23/the-true-price-of-software/#comments</comments>
		<pubDate>Sat, 23 Jul 2005 23:15:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Newsbytes]]></category>

		<guid isPermaLink="false">http://www.og-consulting.com/2005/07/23/the-true-price-of-software/</guid>
		<description><![CDATA[Free/Libre Open Source Software has been criticized for undermining the pricing of software.&#160; This interesting piece published in ONLamp, exposes the true financial underbelly of the software market.&#160; We find out, that software really wasn&#8217;t worth much to begin with.except from &#34;Calculating the True Price of Software&#34; by Robert Lefkowitz &#8230; the major difference in [...]]]></description>
			<content:encoded><![CDATA[<p>Free/Libre Open Source Software has been criticized for undermining the pricing of software.&nbsp; This <a target="_blank" href="http://www.onlamp.com/pub/a/onlamp/2005/07/21/software_pricing.html">interesting piece</a> published in <a target="_blank" href="http://www.onlamp.com/">ONLamp</a>, exposes the true financial underbelly of the software market.&nbsp; We find out, that software really wasn&#8217;t worth much to begin with.</p><p><span style="font-style: italic">except from &quot;</span><em>Calculating the True Price of Software&quot;</em> by <a href="http://www.onlamp.com/pub/au/2338">Robert Lefkowitz</a></p>
<blockquote><p>&#8230; the major difference in worldview between open source advocates
and proprietary software license advocates is explainable as a differing
opinion on the correct value of the volatility of maintenance and upgrade
pricing.  People who believe that the pricing on maintenance is stable and
unlikely to change see greater intrinsic value in the software. People who
fear that the pricing is subject to large fluctuations see no intrinsic value
in the up-front license; stripped of the options, the license value approaches
$0.</p>

<p>For the open source movement, perhaps a better way to position the change
that OSS is making is this: we&#8217;re converting warrants on future maintenance and
enhancements into options, which means that instead of having a sole supplier
(warrants), we have created a third-party market (options) of these
derivatives.</p>

<p>How capitalistic is that?</p></blockquote>

<p>The conclusion is that even without all the financial analysis, Free/Libre Open Source programmers have stumbled upon an inevitable truth; software by itself isn&#8217;t worth much and the proprietary vendors know it.&nbsp; What has flourished in recent years is a free flowing market where vendors may compete to sell customers maintenance, support, and upgrades.&nbsp; </p>]]></content:encoded>
			<wfw:commentRss>http://og-consulting.com/2005/07/23/the-true-price-of-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

