tag:blogger.com,1999:blog-90020902304489429232024-03-04T22:05:06.084-08:00Anton CohenThe #1 Anton Cohen site on the interweb. All about Linux, System Administration, San Francisco, and stuff I like.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comBlogger35125tag:blogger.com,1999:blog-9002090230448942923.post-57319328430543160572016-10-23T18:00:00.000-07:002016-10-23T18:00:06.014-07:00Python generators with multiple threadsSometimes when writing Python there is a CPU expensive task that needs to be done for every item in an iterator. You might go to Google and search for <span style="font-family: Courier New, Courier, monospace;">python multithreading</span>, which might take you to the <a href="https://docs.python.org/2.7/library/threading.html">threading module</a>. But that isn't very useful, so next you look to the <a href="https://docs.python.org/2/library/multiprocessing.html">multiprocessing module</a>. That looks more promising, but all the examples have managers or queues or pipes or some other complicated stuff.<br />
<br />
<i>I want simple</i>. All I want to do is write a generator that yields something, have that something passed to a thread or process to compute the result, then have a generator yield the result when it is ready. Sounds simple. Unfortunately is is hard to find examples of how to do this in Python.<br />
<br />
So here are some examples!<br />
<br />
In the example below <span style="font-family: Courier New, Courier, monospace;">increasing_sleeps()</span> is the function that yields something and <span style="font-family: Courier New, Courier, monospace;">rand_sleep()</span> is the function that takes a long time to process each thing yielded by <span style="font-family: Courier New, Courier, monospace;">increasing_sleeps()</span>. It uses <span style="font-family: Courier New, Courier, monospace;">multiprocessing.dummy</span> to use threads instead of full processes.<br />
<br />
<script src="https://gist.github.com/antoncohen/e5dacc150ec6c03de6ff6a90d57a0a85.js"></script>
<br />
The results will look something like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Slept 0 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 0 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 1 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 1 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 4 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 4 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 3 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 5 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 1 seconds</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 4 seconds</span><br />
<br />
Cool! But what if I need to know what input was sent to <span style="font-family: Courier New, Courier, monospace;">rand_sleep()</span> so I can correlate the results with the input? Simple, just yield the input from <span style="font-family: Courier New, Courier, monospace;">rand_sleep()</span>. The example below does that correlation, and also uses full Python processes instead of threads. Threads are cheaper, but there are cases where you will need to use processes to get around the Global Interpreter Lock (GIL). One big gotcha with using full processes is that Python needs to pickle the function being sent to the new process (it doesn't share memory like with threads), and it can't pickle functions or instance methods. Oddly enough it can pickle instances of custom classes, so you can make a callable class and pass that instead of a function.<br />
<br />
<script src="https://gist.github.com/antoncohen/c81799f75cf48d761fbd56e013c4bd3c.js"></script>
<br />
The results will look something like this:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Slept 0 seconds of max 0</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 1 seconds of max 1</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 1 seconds of max 2</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 0 seconds of max 3</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 3 seconds of max 5</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 0 seconds of max 6</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 4 seconds of max 4</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 2 seconds of max 8</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 5 seconds of max 7</span><br />
<span style="font-family: Courier New, Courier, monospace;">Slept 8 seconds of max 9</span><br />
<br />
Nice! That makes it clear that the results are coming back out of order. I you want the results to comeback in order, use <span style="font-family: Courier New, Courier, monospace;">Pool.imap()</span> instead of <span style="font-family: Courier New, Courier, monospace;">Pool.imap_unordered()</span>.<br />
<br />
And finally, here is an example of a simple yet useful use of these methods:<br />
<br />
<script src="https://gist.github.com/antoncohen/11fca2b1723c3d201282cc070fbd0bf1.js"></script>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-46823186102170777142013-06-04T00:33:00.000-07:002013-06-04T00:37:01.455-07:00Role-based Puppet with HieraThis is a method of configuring machines with <a href="https://puppetlabs.com/">Puppet</a> based on their roles. It's similar to Jordan Sissel's <a href="http://www.semicomplete.com/blog/geekery/puppet-nodeless-configuration">nodeless Puppet</a> in that there are no individual node declarations, just a default node that assigns one class. That one class is responsible for including all the other classes based on what 'roles' are assigned to the node. One difference between this role-based puppet and Jordan's nodeless puppet is that I'm not using an ENC. Instead of an ENC I'm using <a href="http://docs.puppetlabs.com/hiera/1/index.html">Hiera</a> to assign to roles and specify custom parameters for the nodes. I put together a demo of role-based puppet as a <a href="http://www.vagrantup.com/">Vagrant</a> configuration, which you can <a href="https://github.com/antoncohen/vagrant-roles-demo">get on GitHub</a>.<br />
<br />
Here is what the default node looks like:<br />
<script src="https://gist.github.com/antoncohen/5703957.js"></script><br />
<br />
The role class searches Hiera for 'roles' and includes them:<br />
<script src="https://gist.github.com/antoncohen/5703974.js"></script><br />
<br />
In Hiera multiple roles can be assigned, and data can be added to customize the roles. In this case we are adding the 'role::lb' load balancer role along with 'role::base', and specifying how much memory memcached should use and how many nginx processes should run.<br />
<script src="https://gist.github.com/antoncohen/5703988.js"></script><br />
<br />
The roles then include the actual classes that do the work, in this case nginx and memcache. In the real world the role would probably do a lot more, like <a href="https://github.com/thias/puppet-sysctl">configure sysctl</a>. The role can pass site specific parameters to the classes, but it can also rely on <a href="http://docs.puppetlabs.com/hiera/1/puppet.html#automatic-parameter-lookup">Puppet to lookup parameters in Hiera.</a><br />
<script src="https://gist.github.com/antoncohen/5704005.js"></script><br />
<br />
<h3>
Site-specific roles and generic modules</h3>
Every site is different, but there is no reason that every company should have its own nginx module. Modules should be generic and customizable, they shouldn't make assumptions about how you want to configure something. Roles are site-specific, they bring together modules in the way your site uses them. Data in Hiera can then customize modules or roles in node-specific ways.<br />
<br />
For example <a href="https://github.com/puppetlabs/puppetlabs-nginx">puppetlabs-nginx</a> (and <a href="https://github.com/jfryman/puppet-nginx">jfryman's nginx module</a> that it's based on) configures a yum repo hosted on nginx.org, and they don't allow you to specify custom templates for configuration files. That means I would have to fork and customize the puppet module if I wanted to use my own yum repo with a version of nginx compiled with <a href="https://github.com/pagespeed/ngx_pagespeed">ngx_pagespeed</a>. It shouldn't be that way. <a href="https://github.com/antoncohen/puppet-nginx">I forked puppetlabs-nginx</a> and added parameters to use custom templates, I'm going to continue working on it to make it more generic while still being easy for the 90% use case. I would like Puppet to be as simple as <a href="http://ansible.cc/">Ansible</a> for the easy cases, and still be efficient and powerful when you need to customize.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-89186988190491413242013-06-03T02:53:00.000-07:002013-06-03T02:53:20.468-07:00How to fix Droid 4 random shut offEver since I got my Motorola Droid 4 it has randomly turned itself off multiple times a day. It's not a software crash, it's not the power button getting stuck down or bumped in my pocket. It's the stupid battery! The Droid 4 has a fixed battery that you can't remove, yet somehow they made it so the battery could easily lose its connection.<br />
<br />
To test this I removed the back cover, you need to stick a pin in the hole at the top right of the back to remove the cover. With the cover off I poked at the battery, I found that if I pressed the top left of the battery it would cause the bottom right of the battery to lift up and lose its connection, and the phone would shut off.<br />
<br />
To fix this I folded up some paper and taped it to the bottom of the battery and replaced the back cover. My phone hasn't powered off in days!<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUtx63xbeX45dACF1El6LOeUoFVMv_UzdQzmSqQyY1yfTYPbb0GsIS8g5hUNRQAdEbM_eEnGBNXpDGl8k4VeIs6sFsb1aRTHyo7g6OBYzec6iqahjSXfuf0Zni60K9rA5PGVasg_BOm5E/s1600/Phone_Fix_Droid4_Battery.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUtx63xbeX45dACF1El6LOeUoFVMv_UzdQzmSqQyY1yfTYPbb0GsIS8g5hUNRQAdEbM_eEnGBNXpDGl8k4VeIs6sFsb1aRTHyo7g6OBYzec6iqahjSXfuf0Zni60K9rA5PGVasg_BOm5E/s400/Phone_Fix_Droid4_Battery.png" width="400" /></a></div>
<br />
If you try this you might want to pick some materials that aren't flammable, I just used what I had lying around.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-80159459015631956332013-05-25T19:12:00.000-07:002013-05-25T22:41:25.771-07:00GoDaddy's crippled NetApp filersI just finished helping my friend <a href="http://www.adamaragon.com/">Adam Aragon</a> with an issue on his <a href="http://www.antipretty.com/">AntiPretty</a> [NSFW-ish] alternative modeling site. It's a WordPress site running on GoDaddy. He was getting an error every time he tried to upload new images. Directory permissions were fine, as was all the PHP and WordPress stuff. GoDaddy support couldn't find a problem. So I logged in with SSH and tried to 'touch' a new file in the directory.<br />
<div>
<br /></div>
<div>
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace;">$ touch /path/wp-content/uploads/2013/05/testfile1<br />touch: cannot touch `/path/wp-content/uploads/2013/05/testfile1': File too large</span></blockquote>
</div>
<div>
<a name='more'></a><br /></div>
<div>
Um, so an empty file is too large? This directory has 7508 files in it. That may sound like a lot, but it should be able to take millions of files. So I did a little digging. It turns out user content is NFS mounted from a NetApp filer running ONTAP 8.1.2. You can see the admin page for the filer at <a href="https://184.168.195.15/na_admin/">https://184.168.195.15/na_admin/</a>. Is NetApp's admin interface secure enough to be publicly accessible? I know GoDaddy's shared hosting isn't secure. Oh, and GoDaddy's servers are running 32-bit CentOS 5 with a PAE kernel, and 24GB of RAM, on a 64-bit Intel Xeon L5609 processor. Is GoDaddy scared of 64-bit kernels?</div>
<div>
<br /></div>
<div>
NetApp has a setting called 'maxdirsize' which limits the number of KB of metadata and links a directory can have. The default is 1% of system RAM, on a filer with 32GB of RAM that would be 335544KB, or about 10 million files per directory. For some bizarre reason GoDaddy has set it to 600KB (seen with 'ls -lksd'), which in this case was 7508 files.</div>
<div>
<br /></div>
<div>
I submitted a ticket to GoDaddy and the response was:</div>
<div>
<br /></div>
<blockquote class="tr_bq">
<i>After reviewing your issue, the maximum limit for uploads to our Linux shared accounts is 1028 files in any directory. Anything over this limit will decrease the speed of the server and can result in issues further down the road like you are seeing now.</i></blockquote>
<div>
<br /></div>
<div>
Wow, just wow. You've crippled your filers on purpose.</div>
<div>
<br /></div>
<div>
Anyway, with the addition of a couple <a href="http://wordpress.org/plugins/amazon-s3-and-cloudfront/">plugins</a> the images are now being uploaded to and served from <a href="http://aws.amazon.com/s3/">Amazon S3</a>, and they are loading much quicker.<br />
<br />
<h4>
Ditch GoDaddy</h4>
<div>
<br /></div>
I think most people know GoDaddy sucks. Whether it's their incredible slowness, their horrible user interface, their annoying up-selling, or their support of <a href="http://arstechnica.com/tech-policy/2011/12/godaddy-faces-december-29-boycott-over-sopa-support/">SOPA</a>. There is nothing good about GoDaddy. But they are a well known domain registrar, and once people use them to register a domain they get stuck. So here are some alternatives.<br />
<br />
<b>Domain Name Registration</b><br />
<br />
I like <a href="http://en.gandi.net/">Gandi.net</a>, I use them, <a href="https://www.eff.org/">EFF</a> uses them. Their motto is "<a href="http://en.gandi.net/no-bullshit">no bullshit</a>", they don't try to up-sell you, private registration (hiding your contact details) is free, and they give you an SSL cert for free. When GoDaddy supported SOPA, Gandi.net <a href="https://www.eff.org/deeplinks/2011/12/moveyourdomain-protest-internet-blacklist-bills">donated $1 to EFF</a> for every domain transfered from GoDaddy. A lot of people also like <a href="https://www.namecheap.com/">Namecheap</a>, which also donated to EFF.<br />
<br />
<b>DNS</b><br />
<b><br /></b>
Most people seem to use their domain registrar for the name servers. Which is fine, but domain registrars don't specialize in DNS, and they can be slower than specialized <a href="http://en.wikipedia.org/wiki/Anycast">Anycast</a> DNS services. I'm a fan of <a href="http://www.dnsmadeeasy.com/">DNS Made Easy</a>, which is as low as $30/year for Anycast DNS. Another option is Dyn's <a href="http://dyn.com/dns/business/">DynECT</a> service, which starts at $15/month. They are two of the top three <a href="http://www.solvedns.com/dns-comparison/2013/04">fastest DNS providers</a>, the other is <a href="https://www.cloudflare.com/index">CloudFlare</a>, which is actually free.<br />
<br />
<b>Web Hosting</b><br />
<b><br /></b>
This is harder one, it really depends on what you are doing. I don't like PHP CMSs, as I've <a href="http://www.antoncohen.com/2011/05/you-should-stop-using-wordpress.html">written about before</a>. I think most of the sites I see out there should be static files, if your site only has a few pages, and they don't change often, your don't need a big fat CMS with a database. Static site generators like <a href="http://jekyllrb.com/">Jekyll</a> and <a href="http://middlemanapp.com/">Middleman</a> can easy the process of updating static sites. You can host static sites for practically free on <a href="http://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteHosting.html">S3</a>, <a href="http://pages.github.com/">GitHub Pages</a>, Google's <a href="https://developers.google.com/appengine/docs/python/gettingstartedpython27/staticfiles">App Engine</a> or <a href="https://developers.google.com/storage/docs/website-configuration">Cloud Storage</a>, and others. For really simple sites you don't even need a static site generator, for example for <a href="http://resume.antoncohen.com/">my resume</a> I used templates for the HTML and a YAML file for the data, and used Rake to compile the templates and push the results to S3. I put an <a href="https://github.com/antoncohen/resume-web-example">example of my resume building code</a> on GitHub. <a href="http://twitter.github.io/bootstrap/">Twitter Bootstrap</a> can also be a great help when designing sites.<br />
<br />
For dynamic sites I think <a href="http://en.wikipedia.org/wiki/Platform_as_a_service">Platform as a Service</a> (PaaS) clouds are a great way to go. <a href="https://www.heroku.com/">Heroku</a>, <a href="https://developers.google.com/appengine/">App Engine</a>, and <a href="https://www.openshift.com/">OpenShift</a> are some examples of PaaS.<br />
<br />
Take advantage of services that specialize in hosting a certain things. Such as <a href="http://www.blogger.com/">Blogger</a>, <a href="https://www.tumblr.com/">Tumblr</a>, and <a href="http://wordpress.com/">WordPress.com</a> for blogs.<br />
<br />
If you insist on GoDaddy-style shared hosting, <a href="http://dreamhost.com/">DreamHost</a> is probably a better option.<br />
<br />
And of course there is running your own servers, probably virtual cloud servers like <a href="http://aws.amazon.com/ec2/">Amazon EC2</a>, <a href="http://www.rackspace.com/cloud/servers/">Rackspace Cloud Servers</a>, <a href="https://cloud.google.com/products/compute-engine">Google Compute Engine</a>, <a href="https://www.linode.com/">Linode</a>, and <a href="https://www.digitalocean.com/">Digital Ocean</a>. But I can't recommend running your own servers unless you have a dedicated sysadmin.</div>
Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-71467178187813073872013-05-13T20:38:00.000-07:002013-05-13T20:41:41.729-07:00Phishing, a failure of OAuthSomeone I know was recently the victim of a phishing attack. They found out when a ton of their contact sent emails asking "what's this link you sent me?". It turns out they sent out an email that said:<br />
<br />
<blockquote class="tr_bq">
<i>"You might be interested in this properties Click Here to view listing"</i></blockquote>
<br />
The email went out to a lot of people, possibly everyone in the address book. So how did this happen?<br />
<br />
The day before this happened my friend received the same email, with the same link, from a friend of his. The email looked legit, it had his friends full signature, with phone number and street address. And hell, he's in the housing industry, so looking at properties for sale isn't weird. So my friend clinked the link. He was presented with a page that looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFoc3f1L7Q0yVr6eHSoUKVMWN8kHEJP-2p2bYP3qQSD4IoDTsRQ1DBXEbVzRv0FHYIYEi4OpvyxB06tbtsUupaU0Klms-_F4GHLaGRAM7NsDeyJWygLkcYzonKLSMmn99KVK821KBHd1s/s1600/phishing_remax_2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFoc3f1L7Q0yVr6eHSoUKVMWN8kHEJP-2p2bYP3qQSD4IoDTsRQ1DBXEbVzRv0FHYIYEi4OpvyxB06tbtsUupaU0Klms-_F4GHLaGRAM7NsDeyJWygLkcYzonKLSMmn99KVK821KBHd1s/s320/phishing_remax_2.png" width="280" /></a></div>
<br />
It looks pretty normal. Lots of sites ask users to log-in with credentials. My friend dutifully provided his Gmail credentials, and was promptly redirected to remax.com. It all seemed pretty normal.<br />
<br />
And there we have a failing of OAuth. My friend knew he should never provide his password to a third-party site. But the prevalence of sites asking users to "Log-in with Facebook" or "Log-in with Google" has conditioned users to think it's normal to provide give third-party sites your password. Of course OAuth doesn't send third-party sites with your password. With real OAuth the third-party site should redirect you to your authentication provider, for example it should say google.com in your address bar, once you authenticate google.com they will redirect you back to the third-party site, and provide that site with a special token.<br />
<br />
The problem is users don't know that the URL bar should say google.com. Worse yet, on mobile devices the log-in pages will often be in a WebView without a URL bar, and even if you could see the URL there is no way to trust it. Even if users know the URL bar should say google.com, they have been so conditioned to OAuth that they are likely to just go through the process without thinking to look at the URL.<br />
<br />
So that's a problem. OAuth is better than providing your password to a third-party, and having a few main authentication providers is better than the password proliferation of having a password for every site. But it's still a problem.<br />
<br />
What's the solution? The obvious one is to look at the address bar. But that isn't good enough. Sometimes the address bar won't be there. More than that, it's way too easy to get lulled into a sense of normality and fall for a phishing scam.<br />
<br />
<h4>
Two-Factor Auth</h4>
As much as passwords suck, we aren't getting rid of them anytime soon. Right now the best solution to reduce the impact of phishing attacks is Two-Factor Authentication. As the name suggests 2-factor auth requires two forms of authentication. It's like being asked for two forms of picture ID. Usually you want the two froms of ID to be different in a way it would be hard for someone else to get both, for example something you know and something you have. The most common form of 2-factor auth asks for a username and password (something you know) and a time-limited code that comes from a physical device (something you have).<br />
<br />
The best example of two-factor authentication is Google (Gmail, Google Apps, etc.), explained in pretty pictures <a href="http://support.google.com/accounts/bin/answer.py?hl=en&answer=180744">here</a>, and <a href="http://support.google.com/accounts/bin/answer.py?hl=en&answer=1085463">here</a>. When you log into Google it will ask for your username and password, then it asks for a special code. The code can be sent to your phone via SMS, come from a voice call (Google calls you), or from a mobile app called <a href="http://support.google.com/a/bin/answer.py?hl=en&answer=1037451">Google Authenticator</a>, which is an <a href="https://code.google.com/p/google-authenticator/">open source</a> app that any site can use. Google Authenticator is a great implementation of two-factor auth tokens, I wish more sites used it or similar software instead of text messages, right now it can be used with <a href="http://www.google.com/landing/2step/">Google</a>, <a href="http://aws.amazon.com/mfa/">AWS</a>, <a href="http://mbmccormick.com/2013/01/use-facebooks-2-factor-authentication-with-third-party-totp-generators/">Facebook</a>, <a href="https://www.dropbox.com/help/363/en">Dropbox</a>, <a href="http://blogs.technet.com/b/microsoft_blog/archive/2013/04/17/microsoft-account-gets-more-secure.aspx">Microsoft</a>, and any others that support <a href="http://en.wikipedia.org/wiki/Time-based_One-time_Password_Algorithm">TOTP</a>.<br />
<br />
There are some difficulties that come with 2-factor auth. Having to enter the code can be annoying, but Google allows you to remember the computer you are on, so you only have to enter the code every 30 days. Not having your phone is another issues, Google allows you to print special "<a href="http://support.google.com/accounts/bin/answer.py?hl=en&answer=1187538">backup codes</a>" for those cases. Then there is the issue that not everything that requires your password knows how to use 2-factor auth. For example if you are using Mail.app on your Mac to check Gmail, you'll run into a problem because Mail.app doesn't know how to ask you for the special code. There is a solution, Google allows you to generate <a href="http://support.google.com/accounts/bin/answer.py?hl=en&answer=185833">application-specific passwords</a>, these are special passwords designed to be entered into things like email and chat clients. They are long and complex passwords that you are not supposed to remembered, instead you have the application remember them.<br />
<br />
<h4>
Specifics of this phishing attack</h4>
The link in the email to shortened with bit.ly. The phishing page didn't appear to have any attack code, there was very minimal JavaScript. It pretended to be an OAuth login page to access Remax. When a user entered their username and password the data was POSTed to a PHP script, which redirect to www.remax.com. To a lot of users it probably seemed very normal, especially if they were is the real estate business.<br />
<br />
One interesting thing about the spam emails is that they were not sent with SMTP, which would be the easy way to send through Gmail and the like. Instead they were actually sent through the web interface. Presumably there wasn't a human clicking around, and instead it was automated, probably on a botnet. Though oddly enough one of the spam messages I saw was sent from a computer hidden behind <a href="http://www.hidemyass.com/">Hide My Ass</a>. The reason sending though the web interface is significant is twofold. Firstly in means the hacked account's email signature will be used. Emails look much more legitimate when it comes for a friend or business associate and their normal signature is used. The other significate thing is it raises the sending limit. With Google Apps there is a 99 recipient limit per message when sending through SMTP, but it's 500 through the web interface.<br />
<br />
<h4>
Report Phishing</h4>
If you come across a phishing site, please report it. You can <a href="http://www.google.com/safebrowsing/report_phish/">report phishing sites</a> to Google's Safe Browsing service. Google's service is used by Chrome, Firefox, and Safari to block malicious sites. It's also used by services like bit.ly to block shortened links to malicious site. I reported the the phishing site to Safe Browsing and it with promptly blocked by Chrome and bit.ly.<br />
<br />
Stay safe on the web, know what to <a href="http://www.google.com/safebrowsing/static/faq.html#q1">phishing sites look like</a>, and consider using Two-Factor Authentication for sensitive or high profile sites.<br />
<br />Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-58615901594876734482013-03-05T15:56:00.000-08:002013-03-26T16:05:41.564-07:00Apple Mac computers don't cost more than PCsIf you talk to people about buying a new laptop or read comments online you will see a consistent meme -- Macs cost way more than PCs. Lets look into that.<br />
<br />
<h3>
Base Prices</h3>
<table border="0" cellspacing="0" cols="8" style="font-family: arial;"><colgroup span="2" width="113"></colgroup><colgroup width="259"></colgroup><colgroup span="5" width="113"></colgroup><tbody>
<tr><td align="LEFT" height="22" style="font-size: small;"><b>Laptop</b></td><td align="LEFT" style="font-size: small;"><b>OS</b></td><td align="LEFT" style="font-size: small;"><b>CPU</b></td><td align="LEFT" style="font-size: small;"><b>RAM</b></td><td align="LEFT" style="font-size: small;"><b>Drive</b></td><td align="LEFT" style="font-size: small;"><b>Display</b></td><td align="LEFT" style="font-size: small;"><b>Weight</b></td><td align="LEFT" style="font-size: small;"><b>Price</b></td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Dell XPS 13</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i5 1.7GHz (2.6GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">128 GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 1366x786</td><td align="LEFT" style="font-size: small;">2.99 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="999.99" style="font-size: small;">$999.99</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Apple MacBook Air 13</td><td align="LEFT" style="font-size: small;">Mac OS X 10.8</td><td align="LEFT" style="font-size: small;">Core i5 1.8GHz (2.8GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">128 GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 1440x900</td><td align="LEFT" style="font-size: small;">2.96 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1199" style="font-size: small;">$1,199.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Lenovo ThinkPad X1 Carbon</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i5 1.7GHz (2.6GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">128 GB SSD</td><td align="LEFT" style="font-size: small;">14" 1600x900</td><td align="LEFT" style="font-size: small;">2.99 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1249" style="font-size: small;">$1,249.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Google Chromebook Pixel</td><td align="LEFT" style="font-size: small;">Chrome OS</td><td align="LEFT" style="font-size: small;">Core i5 1.8GHz (2.8GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">32GB SSD</td><td align="LEFT" style="font-size: small;">12.85" 2560x1700</td><td align="LEFT" style="font-size: small;">3.35 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1299" style="font-size: small;">$1,299.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">HP Envy Spectre 14</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i5 1.7GHz (2.6GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">128 GB SSD</td><td align="LEFT" style="font-size: small;">14" 1600x900</td><td align="LEFT" style="font-size: small;">3.98 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1399.99" style="font-size: small;">$1,399.99</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Apple MacBook Pro 13 with Retina</td><td align="LEFT" style="font-size: small;">Mac OS X 10.8</td><td align="LEFT" style="font-size: small;">Core i5 2.5GHz (3.1GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">128 GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 2560x1600</td><td align="LEFT" style="font-size: small;">3.57 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1499" style="font-size: small;">$1,499.00</td></tr>
</tbody></table>
<br />
<a name='more'></a><br />
<h3>
Closest to ~3GHz max CPU, 8GB RAM, 256GB SSD</h3>
<table border="0" cellspacing="0" cols="8" style="font-family: arial;"><colgroup span="2" width="113"></colgroup><colgroup width="259"></colgroup><colgroup span="5" width="113"></colgroup><tbody>
<tr><td align="LEFT" height="22" style="font-size: small;"><b>Laptop</b></td><td align="LEFT" style="font-size: small;"><b>OS</b></td><td align="LEFT" style="font-size: small;"><b>CPU</b></td><td align="LEFT" style="font-size: small;"><b>RAM</b></td><td align="LEFT" style="font-size: small;"><b>Drive</b></td><td align="LEFT" style="font-size: small;"><b>Display</b></td><td align="LEFT" style="font-size: small;"><b>Weight</b></td><td align="LEFT" style="font-size: small;"><b>Price</b></td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Google Chromebook Pixel (LTE)</td><td align="LEFT" style="font-size: small;">Chrome OS</td><td align="LEFT" style="font-size: small;">Core i5 1.8GHz (2.8GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">64GB SSD</td><td align="LEFT" style="font-size: small;">12.85" 2560x1700</td><td align="LEFT" style="font-size: small;">3.35 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1449" style="font-size: small;">$1,449.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Apple MacBook Air 13</td><td align="LEFT" style="font-size: small;">Mac OS X 10.8</td><td align="LEFT" style="font-size: small;">Core i7 2.0GHz (3.2GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">256GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 1440x900</td><td align="LEFT" style="font-size: small;">2.96 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1599" style="font-size: small;">$1,599.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Dell XPS 13</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i7 2.0GHz (3.1GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">256GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 1920x1080</td><td align="LEFT" style="font-size: small;">2.99 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1599.99" style="font-size: small;">$1,599.99</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Apple MacBook Pro 13 with Retina</td><td align="LEFT" style="font-size: small;">Mac OS X 10.8</td><td align="LEFT" style="font-size: small;">Core i5 2.6GHz (3.2GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">256GB SSD</td><td align="LEFT" style="font-size: small;">13.3" 2560x1600</td><td align="LEFT" style="font-size: small;">3.57 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1699" style="font-size: small;">$1,699.00</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">HP Envy Spectre 14</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i7 1.9GHz (3.0GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">256GB SSD</td><td align="LEFT" style="font-size: small;">14" 1600x900</td><td align="LEFT" style="font-size: small;">3.98 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1799.99" style="font-size: small;">$1,799.99</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Lenovo ThinkPad X1 Carbon</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i7 2.0GHz (3.2GHz max)</td><td align="LEFT" style="font-size: small;">8GB</td><td align="LEFT" style="font-size: small;">256GB SSD</td><td align="LEFT" style="font-size: small;">14" 1600x900</td><td align="LEFT" style="font-size: small;">2.99 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="1969" style="font-size: small;">$1,969.00</td></tr>
</tbody></table>
<br />
<h3>
Random Others</h3>
<table border="0" cellspacing="0" cols="8" style="font-family: arial;"><colgroup span="2" width="113"></colgroup><colgroup width="259"></colgroup><colgroup span="5" width="113"></colgroup><tbody>
<tr><td align="LEFT" height="22" style="font-size: small;"><b>Laptop</b></td><td align="LEFT" style="font-size: small;"><b>OS</b></td><td align="LEFT" style="font-size: small;"><b>CPU</b></td><td align="LEFT" style="font-size: small;"><b>RAM</b></td><td align="LEFT" style="font-size: small;"><b>Drive</b></td><td align="LEFT" style="font-size: small;"><b>Display</b></td><td align="LEFT" style="font-size: small;"><b>Weight</b></td><td align="LEFT" style="font-size: small;"><b>Price</b></td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">Dell Inspiron 15</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Celeron 1.5GHz (1.5GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">320GB 5400 RPM Hard Drive</td><td align="LEFT" style="font-size: small;">15.6" 1366x768</td><td align="LEFT" style="font-size: small;">4.96 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="349.99" style="font-size: small;">$349.99</td></tr>
<tr><td align="LEFT" height="22" style="font-size: small;">HP Pavilion g6t-2300</td><td align="LEFT" style="font-size: small;">Windows 8</td><td align="LEFT" style="font-size: small;">Core i5 2.5GHz (3.1 GHz max)</td><td align="LEFT" style="font-size: small;">4GB</td><td align="LEFT" style="font-size: small;">500GB 5400 RPM Hard Drive</td><td align="LEFT" style="font-size: small;">15.6" 1366x768</td><td align="LEFT" style="font-size: small;">5.46 lbs</td><td align="RIGHT" sdnum="1033;0;[$$-409]#,##0.00;[RED]-[$$-409]#,##0.00" sdval="549.99" style="font-size: small;">$549.99</td></tr>
</tbody></table>
<br />
First off, a couple odd balls. The MacBook Pro with Retina display and the Chromebook have significantly better screens than the rest, there are no other laptops on the market with screens even close the their quality. The Retina also has a much faster base CPU than the rest, and a minimum of 8GB of RAM. The Chomebook is just plain odd. It runs Chrome OS, which is like having a computer where the only piece of software it will run is Google's Chrome web browser. You can't install things like Photoshop, Office, or Firefox. It also has a much smaller hard drive than the rest, you are supposed to store everything in Google Drive (cloud storage).<br />
<br />
Now for the prices. The Apple computers are clearly not the most expensive, in fact they are in the middle of the pack. Apple gets accused of charging a lot for upgrades, but compared to PC manufacturers they are pretty good. The specs are all pretty similar, odd balls notwithstanding, but what about things not on the spec sheet. Things like touchpad usability, build quality, and display quality.<br />
<br />
<i>"The XPS 13 isn't quite there, held back by its display, somewhat disappointing battery life, and lack of ports or adapters."</i> <a href="http://www.theverge.com/2012/3/6/2848346/dell-xps-13-review">The Verge</a><br />
<br />
<i>"The Envy 14 Spectre is a perfectly fine, competent and desirable machine. It checks most of the right boxes up and down the line. Still, I have to admit, I wonder for whom it would be the right choice. While it's a striking machine, to be sure, I can't honestly say it beats the MacBook Air on any crucial point, and it costs $100 more. HP paints a lovely picture in bold strokes, but lacks Apple's attention to detail."</i> <a href="http://www.theverge.com/2012/3/14/2869658/hp-envy-14-spectre-review">The Verge</a><br />
<br />
<i>"So, is the Lenovo X1 Carbon the ultimate Ultrabook? Not quite. Its display is merely fair, as is its battery life, and it's far from the cheapest choice out there."</i> <a href="http://www.engadget.com/2012/08/14/lenovo-thinkpad-x1-carbon-review/">Engadget</a><br />
<br />
<i>"[The MacBook Air] steamrolls the competition in terms of speed, even when pitted against another Ivy Bridge machine. Just as important, the Air continues to have the best keyboard-and-trackpad combination of any ultraportable -- something Ultrabook makers are still struggling to get right."</i> <a href="http://www.engadget.com/2012/06/18/macbook-air-review/">Engadget</a><br />
<br />
<i>"I barely noticed the keyboard and trackpad [on the Chromebook Pixel], which is about the highest compliment I can pay them. I'm used to the MacBook Air, which I firmly believe has the best keyboard and the best trackpad of any device on the market… the Pixel's screen is the best laptop display I've ever seen. Its only rival is the Retina MacBook Pro, and it really doesn't matter which is better… I love the Chromebook Pixel. I can't remember the last time I so unequivocally enjoyed using a device. Its display, keyboard, trackpad, and overall fit and finish are as good as any laptop I've ever used… And yet, when it came time to write this review, edit and upload pictures, and do real research, I opened up my MacBook Air again."</i> <a href="http://www.theverge.com/2013/2/25/4023830/google-chromebook-pixel-review">The Verge</a><br />
<br />
<h3>
Why are do people think PCs are cheaper?</h3>
<div>
Most of the inexpensive PC laptops are complete crap. They are made of plastic which will break and bend. Their keyboards are annoying and their trackpads are almost unusable. The inexpensive laptops are usually very heavy, weighing ~2 lbs. more than "good" laptops.<br />
<br />
All the laptops in the top two charts use SSDs, while the two cheap laptops use 5400 RPM spinning hard drives. Depending on what you are measuring SSDs are 5x - 70x faster than 5400 RPM HDDs. When a family member or friend tells me their computer is slow, and I take a look, the slowness is <i>always</i> caused by the computer waiting for hard drive access. HDDs are the slowest part, get an SSD and your computing life will be much less frustrating.<br />
<br />
Notice how the computers in the first chart all have Intel Core i5 CPUs as their base CPU? Apple doesn't sell any computers with less than a Core i5, because CPUs below that suck. Here is the order of Intel laptop/desktop CPUs from worst to best: Atom -> Celeron -> Pentium -> Core i3 -> Core i5 -> Core i7. PC manufacturers are happy to sell you computers with horribly slow processors.<br />
<br />
For these reasons Intel created the "<a href="http://en.wikipedia.org/wiki/Ultrabook">Ultrabook</a>" spec. Intel was tired of companies making Netbooks that were so slow they would be unusable in 6 months. To be called an Ultrabook a laptop would have to meet various requirements related to battery life, thickness, CPU, drive performance, boot (or resume) time. If PC makers wanted to call their computers Ultrabooks they would have to use better quality materials and faster components -- they would have to build a MacBook Air.</div>
<br />
<h3>
Do yourself a favor</h3>
Mac OS X isn't for everyone. I've been using Mac OS X for a long time and I still think the user interface (though not user experience) of Windows 2000 (and Gnome 2) is better. But every version of Mac OS X has gotten better, easier to use, with well thought out features. While every version of Windows since XP has gotten worse, harder to use, with a horrible mess of poorly thought out and executed features.<br />
<br />
But still, you might want to use Windows, and that's OK. But do yourself a favor and a good laptop with an SSD, a decent CPU, and enough RAM.<br />
<br />Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-15351337648301729472012-01-19T23:37:00.001-08:002012-01-20T01:43:40.579-08:00DoJ proves SOPA and PIPA not needed, seizes MegauploadYesterday I <a href="http://www.antoncohen.com/2012/01/sopa-pipa-and-due-process.html">wrote</a> <i>"If SOPA or PIPA passes Megaupload would be kicked off the internet."</i> Today the United States Department of Justice kicked Megaupload off the internet [<a href="http://www.justice.gov/opa/pr/2012/January/12-crm-074.html">DoJ</a>][<a href="http://online.wsj.com/article_email/SB10001424052970204616504577171060611948408-lMyQjAxMTAyMDEwOTExNDkyWj.html">WSJ</a>][<a href="http://torrentfreak.com/megaupload-shut-down-120119/">TF</a>]. Yes that's right, without SOPA or PIPA the US government was able to shutdown a foreign "rogue" site. How foreign? Datacenters in the US, Canada, and the Netherlands were raided. Charges were brought against 7 people who are citizens of Germany, the Netherlands, Slovakia, Estonia, Turkey, Hong Kong, and New Zealand -- none of them US citizens. Four of them were arrested in New Zealand.<div>
<br /></div>
<div>
How did this happen without without SOPA or PIPA? The same way all federal cases happen, a grand jury issued an indictment. In 2010, over the Thanksgiving weekend the US Immigration and Customs Enforcement seized 82 domains, and a year later admitted some were a <a href="http://www.techdirt.com/articles/20111208/08225217010/breaking-news-feds-falsely-censor-popular-blog-over-year-deny-all-due-process-hide-all-details.shtml">mistake</a>. And Thanksgiving weekend of 2011 they <a href="http://www.techdirt.com/articles/20111128/01460616907/ice-seizes-another-150-domains-as-sopapipa-debate-heats-up.shtml">seized</a> 150 domains.</div>
<div>
<br /></div>
<div>
So the DoJ has done a great job in proving that SOPA and PIPA are not needed. Not only can they seizes domains, property, and arrest those involved with foreign "rogue" sites, they can do it all without due process. Killing a business and then having a trial (or not even having a trial in the <a href="http://www.techdirt.com/articles/20111208/08225217010/breaking-news-feds-falsely-censor-popular-blog-over-year-deny-all-due-process-hide-all-details.shtml">case</a> of <a href="http://dajaz1.com/">Dajaz1</a>) is like executing a suspect and then holding a trial to convict them. Even if Megaupload is found not guilty, they will likely never recover from having $50 million in assets seized, the company has been killed but not convicted.</div>
<div>
<br /></div>
<div>
This kind of skirt around due process makes sense in some cases. If you suspect someone is a terrorist and has a bomb in their backpack it makes sense to arrest them and blow up their backpack, then hold a trial. Hundreds of lives are at risk if a bomb goes off, destroying a $30 backpack does little harm, it's fair.</div>
<div>
<br /></div>
<div>
The DoJ have been so brainwashed by the RIAA and MPAA that they think pirated entertainment is as dangerous as terrorism. In 2010 Universal Music Group made $5.7672 billion in revenue. Maybe Megaupload cost them $100,000 in revenue, so without Megaupload UMG would have made $5.7673 billion. No one is dying because of Megaupload. Of course the DoJ doesn't say it cost them $100 thousand, they say Megaupload cost the industry over $500 million. They use funny math for that, like when Arista Records <a href="http://www.pcworld.com/article/223431/riaa_thinks_limewire_owes_75_trillion_in_damages.html">requested</a> damages of $150,000 per infringing file. Or that every download of a movie costs the industry the $45 retail price of a Blu-ray disc. Realistically the amount that piracy actually costs the entertainment industry is tiny, and probably <a href="https://torrentfreak.com/mpaa-costs-hollywood-more-than-us-bittorrent-piracy-111122/">less than the amount they spend on the MPAA</a> and RIAA.</div>
<div>
<br /></div>
<div>
Seriously, SOPA and PIPA are not needed. Laws and legal processes already exist to protect intellectual property. What we really need is a law to protect due process, like the <a href="http://www.opencongress.org/bill/112-s2003/show">Due Process Guarantee Act</a> that Dianne Feinstein introduced. That act protects due process for terrorist suspects. Yet Dianne Feinstein is sponsoring PIPA. Apparently she thinks terrorist deserve more rights than web site owners. Guess who I'm not voting for next Senate election.</div>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-17940812365212331762012-01-18T15:39:00.000-08:002012-01-18T20:56:32.453-08:00SOPA, PIPA, and Due ProcessBy now hopefully everyone in the US has heard about <a href="http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act">SOPA</a> and <a href="http://en.wikipedia.org/wiki/PROTECT_IP_Act">PIPA</a>. But why are these laws bad? Isn't it good to eliminate rogue sites dealing in illegal goods? Of course it is, but that's why we have courts and due process.<br />
<br />
Procedural Due Process protects individual against laws by allowing them a fair opportunity to affect the result of a judgement, in other words people have the right to their day in court. The <a href="http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act">DMCA</a> eliminated due process by allowing content owners to have content removed from sites without going to court. The copyright holder issues a DMCA Takedown notice and the websites are obliged to remove the content.<br />
<br />
That may seem fair, except the media companies (i.e., the backers of SOPA and PIPA) have been abusing the DMCA to take down content the <i>do not</i> own, for example YouTube videos they disagree with. SOPA and PIPA extend this ability to remove content by allowing the copyright owners to remove <i>entire sites</i> from the internet.<br />
<br />
The backers of SOPA and PIPA will tell you they only target foreign rogue sites. But who is to say what is rogue? <a href="http://www.dailymotion.com/">DailyMotion</a> is foreign (French), and they probably have rogue content uploaded by users. Should the whole of DailyMotion, a French site, be eliminated from the internet because a US media company doesn't like them? No. <a href="http://megaupload.com/">Megaupload</a> is foreign (Hong Kong), US media companies <a href="http://torrentfreak.com/mpaa-lists-notorious-pirate-sites-to-u-s-government-111028/">clearly</a> <a href="http://torrentfreak.com/riaa-wants-to-shutter-torrent-sites-and-more-111116/">think</a> Megaupload is rogue, even if they are a legitimate business that responds to DMCA Takedown notices. If SOPA or PIPA passes Megaupload would be kicked off the internet. That's censorship. We already have copyright laws and courts to enforce them, we don't need to eliminate due process.<br />
<br />
So what if media company wrongly kicks DailyMotion or YouTube off the internet, DailyMotion or YouTube could sue the media company or service providers that helped them, right? I mean we're talking about millions or billions in revenue. Nope. The laws are written so the media companies and service providers cannot be held liable.<br />
<br />
The Khan Academy has an excellent video explaining SOPA and PIPA, I highly recommend watching it:<br />
<a href="http://www.khanacademy.org/video/sopa-and-pipa?playlist=American+Civics">What SOPA and PIPA are at face value and what they could end up enabling</a><br />
<br />
If you don't believe me that media companies abuse the DMCA, read these news articles:<br />
<a href="http://techcrunch.com/2010/03/18/youtube-viacom-secretly-uploading-content/">Viacom uploads videos from Kinko's, then sues YouTube over them</a><br />
<br />
<a href="http://www.guardian.co.uk/music/2011/dec/13/megaupload-universal-youtube-video">Universal Music removes Megaupload Song from YouTube, claiming they own the copyright, even though they don't</a><br />
<br />
<a href="http://arstechnica.com/tech-policy/news/2011/11/warner-admits-it-issues-takedowns-for-files-it-hasnt-looked-at.ars">Warner Brothers issues takedown notices to Hotfile for content they don't own</a><br />
<br />
<b><a href="https://blacklist.eff.org/">Contact</a> <a href="http://en.wikipedia.org/wiki/Special:CongressLookup">Congress</a> to voice your opposition.</b>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-19361034422873983252011-12-19T23:20:00.000-08:002012-01-13T20:26:47.597-08:00Linux Mint 12 with MATE<span style="font-size: large;">MATÉ</span><br />
<div>
If you are a fan of GNOME 2 you probably think GNOME 3 is unusable garbage. Linus <a href="https://plus.google.com/106327083461132854143/posts/SbnL3KaVRtM">does</a>. Well <a href="http://mate-desktop.org/">MATE</a> is here to save the day. <a href="http://en.wikipedia.org/wiki/MAT%C3%89_(desktop_environment)">MATE</a> is a fork of GNOME 2 that can be installed on the same system as GNOME 3. <a href="http://linuxmint.com/">Linux Mint</a> 12 comes with MATE and GNOME 3 + MGSE.<br />
<a name='more'></a></div>
<div>
<br /></div>
<div>
MGSE (Mint Gnome Shell Extensions) are a set of extensions that make GNOME 3 less sucky, important things like an applications menu, a task bar, and task switching (Alt+Tab) that actually switches tasks not applications.</div>
<div>
<br /></div>
<div>
Even with MGSE I found GNOME 3 unbearable. There's no application launcher (Quick Launch) on the panel. You can add an extension which will put "favorites" on panel, but you can't customize or rearrange the favorites list. There are annoying "hot corners". If you are in a full screen video and you move the cursor to the bottom-right to click the button to exit full screen, an annoying notifications overlay pops up, blocking the button you are trying to click. If you accidentally move the cursor to the top-left you're in for a treat! An activities overlay will cover your whole screen, what fun! You'll probably try to desperately click in empty areas, the desktop, or menu bars trying to get rid of it, but the overlay won't leave unless you hit Esc.</div>
<div>
<br /></div>
<div>
MATE saves the day. Mint with MATE is awesome. It's slick looking, fast, and productive.</div>
<div>
<br /></div>
<div>
One issue I had with MATE was that the fonts were HUGE. For some reason the MATE font DPI was set to something like 370dpi. To fix that go to the Mint [Start] Menu -> System -> Preferences -> Appearance, select the Fonts tab, click Details in the bottom-right, change the dots per inch to something sane like 96.</div>
<div>
<br />
<span style="font-size: large;">Real transparency in gnome-terminal</span><br />
If you have tried to use a transparent background in Terminal under GNOME 2 you have probably noticed it's not really transparent, all you can see behind it is the desktop background. In GNOME 3 the terminal can be truly transparent, like the Mac OS X Terminal. With GNOME 3 being unusable, I'm using MATE, which defaults to the old fake transparency (technically it's mate-terminal in MATE).<br />
<br />
But you can fix it! Go to the Mint [Start] Menu -> System -> Peferences -> Desktop Settings. Select Windows. Check 'Use Gnome compositing' -- boom, real transparency. Apparently window compositing has existed since 2008 with the release of GNOME 2.22, I just never noticed it before.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTE1-_Asak6yst0yGxR0BIzF1f7aMCARjr32O0G44VcUrKdYJzO41EtFGPvy35Pw7Patm9ToR4WvmeGt0BRPWndS01cEIweHD3y7chPbS9heOZ1z3Qf9aiKcesxkOZDkTGBUDtyWVT_8I/s1600/Screenshot-terminal-trans.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTE1-_Asak6yst0yGxR0BIzF1f7aMCARjr32O0G44VcUrKdYJzO41EtFGPvy35Pw7Patm9ToR4WvmeGt0BRPWndS01cEIweHD3y7chPbS9heOZ1z3Qf9aiKcesxkOZDkTGBUDtyWVT_8I/s640/Screenshot-terminal-trans.png" width="640" /></a></div>
<br />
<br />
<span style="font-size: large;">Volume level</span><br />
For some reason the system would not remember the sound volume level I set, instead resetting it to 100% after every reboot. That was especially annoying in GNOME 3 because it blasted some login sound, at least MATE doesn't play annoying sounds by default.<br />
<br />
I decided to set the sound lower on every log-in, here's how:<br />
<br />
<ol>
<li>Find the PulseAudio sink index number associated with your sound card. </li>
<ol>
<li>Run 'pactl list short sinks'.</li>
<li>The index number in first column, it's probably 0.</li>
</ol>
<li>Test it with pactl, e.g., 'pactl set-sink-volume 0 25%'.</li>
<li>Go to Mint Menu -> System -> Preferences -> Startup Applications.</li>
<li>Click Add, give the new startup program a name like "Lower Volume"</li>
<li>In Command enter 'pactl set-sink-volume 0 25%', or whatever index and volume you want.</li>
<li>Click Add and Close.</li>
</ol>
<div>
<span style="font-size: large;">mint4win</span></div>
<div>
min4win.exe is a Windows installer for Linux Mint, basically the same as wubi.exe for Ubuntu. It comes on the Linux Mint 12 CD, but not on the DVD. I thought these installers were useless, I thought they were just a splash screen the told you to restart you computer with the CD in the drive. Boy was I wrong!<br />
<br />
The Windows installer is amazing. It actually installs Linux from within Windows, it even adds Linux to <i>Add or Remove Programs</i> so it can be uninstalled in a familiar way. The best part is that it doesn't re-partition your hard drive or replace the boot loader.<br />
<br />
The installer works by creating a large file on your hard drive (C:\linuxmint\disks\root.disk), the file is loop mounted as the root file system. A smaller swap file is also created and loop mounted. The installer modifies boot.ini to add <span style="font-family: 'Courier New', Courier, monospace;">C:\wubildr.mbr = "Linux Mint"</span> which loads GRUB, and GRUB boots Linux with the loop devices. When you turn on the computer the Windows boot loader will give you a choice of Windows or Linux.<br />
<br />
Your C:\ drive is mounted as /host, with full read-write access. So the Linux root file system can be small, and you can continue to store large files in your Windows My Documents folder.<br />
<br />
I installed Linux Mint 12 on a desktop and Linux Mint 10 LXDE on a netbook using mint4win.exe. The Mint 12 installer is super easy, all the defaults are sane. The Mint 10 LXDE installer is a little quirky. The first part of the install from within Windows is good, there aren't really any options other than hard disk size. Once the Windows install completes you reboot and choose Linux Mint at the prompt. This is where things get odd. It boots Linux, but it's not really the installed Linux you would expect, instead it is basically a LiveCD with an installer. You then have to install Linux Mint for real by clicking the icon the the desktop. But don't accept the defaults!<br />
<br />
By default the LiveCD installer wants to install the boot loader (GRUB) in the MBR of /dev/sda. You don't want to do that, it will overwrite the Windows boot loader. Instead tell it to install the boot loader on /dev/loop0, which is your Linux root disk. That way the Windows boot loader is unmolested and you can uninstall Linux Mint if you want to.<br />
<br />
Linux Mint 12 is great. Every geek running Windows should go install it <a href="http://www.linuxmint.com/download.php">right now</a>, with mint4win you have nothing to lose. It can do everything Windows can do, except stream Netflix. And it's so much nicer to use.</div>
</div>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-5727138913451782662011-11-30T21:32:00.001-08:002011-12-01T00:49:31.340-08:00Don't be cheap, be frugalNumber 8 in Paul Graham's essay <a href="http://www.paulgraham.com/13sentences.html">Startups in 13 Sentences</a> is<i> </i>"Spend Little. I can't emphasize enough how important it is for a startup to be cheap." It's a good essay, and even more interesting to <a href="http://www.stypi.com/hacks/13sentences">watch as he writes and corrects it</a>. But he is wrong on about #8. Cheapness is always bad, frugality is good. It may seem like minor semantics, but from someone as influential as <a href="http://en.wikipedia.org/wiki/Paul_Graham_(computer_programmer)">Paul Graham</a> it makes a difference.<a name='more'></a><div>
<br /></div>
<div>
To be cheap is to be stingy or miserly [<a href="http://www.thefreedictionary.com/cheap">1</a>]. A cheap person is unwilling to spend money to their own detriment [<a href="http://en.wikipedia.org/wiki/Miser">2</a>]. They are incapable of making smart financial decision because of an irrational fear of spending money. Being cheap is being penny-wise, pound-foolish. It's short-term profit leading to long-term losses. Cheapness is what destroyed the American automotive industry.</div>
<div>
<br /></div>
Frugality is "prudent or economical in the use of consumable resources such as food, time or money, and avoiding waste, lavishness or extravagance. In behavioral science, frugality has been defined as the tendency to acquire goods and services in a restrained manner, and resourceful use of already owned economic goods and services, to achieve a longer term goal." [<a href="http://en.wikipedia.org/wiki/Frugality">3</a>]<div>
<br /></div>
<div>
Numbers 5 and 6, "Better to make a few users love you than a lot ambivalent" and "Offer surprisingly good customer service," are not possible for a cheap person, those things cost time and money. A frugal person will understand that the extra money is required to achieve the long-term goal.</div>
<div>
<br /></div>
<div>
As an example let us consider what it takes to host a startup's web service. A cheap person will insist that the site can be hosted on GoDaddy for $6/month. Any rational person knows that's not possible, the site will go down with the first PR push. A person capable of making rational financial decisions will know that the company cannot survive on shared hosting, so they will suggest spending $60/month on load-balanced cloud servers or VPSs. That's 10x more money, no way a cheap person is going to spend that. Sure it's a trivial amount of money that could saved by not going to Starbucks everyday, but that kind of rational thought doesn't occur in cheap people. A frugal person will take the rational thought a step further to realize the engineering cost of operating their own cloud servers isn't worth it at a small scale. The fugal person will suggest spending $120/month on <a href="http://www.heroku.com/">Heroku</a> so they can better use their engineering resources on their core business. That kind of intelligent spending is incomprehensible to a cheap person, even though they could save that much money by bringing lunch from home and not buying <a href="http://mixtgreens.com/">$10 salads</a> every day.</div>
<div>
<br /></div>
<div>
The issue compounds itself over time. Eventually the cheap person will cave to reality and peer pressure. But they are not accustomed to making wise financial decisions, so they overreact. To replace the failing GoDaddy hosting they might buy physical servers, maybe even rent space in a data center. Once the shock of spending that money hits them the fear will kick-in. They will then be too cheap to pay for the Operations staff required to manage the physical servers in the data center. The new servers will fail and the cycle of being cheap followed by wasting money will continue.</div>
<div>
<br /></div>
<div>
Cheapness is akin to a metal disorder symptom like hoarding. If you have someone who demonstrates an ingrained cheapness, they need to be removed from the process of making financial decisions. If you are a normal, rational person trying to achieve Ramen Profitability, don't strive to be cheap, be frugal instead.<br /><br />[1] <a href="http://www.thefreedictionary.com/cheap">http://www.thefreedictionary.com/cheap</a><br />[2] <a href="http://en.wikipedia.org/wiki/Miser">http://en.wikipedia.org/wiki/Miser</a><br />[3] <a href="http://en.wikipedia.org/wiki/Frugality">http://en.wikipedia.org/wiki/Fruga</a><a href="http://en.wikipedia.org/wiki/Frugality">lity</a></div>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-45359907882563376772011-10-20T02:20:00.000-07:002011-10-20T02:23:01.380-07:00Pictures and video of South Beach, Fleet Week, and motorcycles.<div class="separator" style="clear: both; text-align: left;">
Here a bunch of pictures I took around South Beach Harbor, AT&T Park, Fleet Week, and some videos of awesome motorcycle riding at Pier 30/32.</div>
<a name='more'></a><br />
<div class="separator" style="clear: both; text-align: left;">
South Beach Harbor is located near AT&T Park. The pier behind the ballpark has lovely views of San Francisco and the Bay Bridge. Day, night, and sunrise.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNNa4nTY7Pbz0ykupZcx8UhYonKHMVnTvbmziYL65SAtYFpU-sLkhfx61vB_h5M9Q_T26-VaMwrLmbftJIUd8_JDXbHfLn-av6Rsxh_kRetaCcTmQkFgLPc2wHGriB8HIslv1TOOi_hcs/s1600/IMG_20110825_180526.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNNa4nTY7Pbz0ykupZcx8UhYonKHMVnTvbmziYL65SAtYFpU-sLkhfx61vB_h5M9Q_T26-VaMwrLmbftJIUd8_JDXbHfLn-av6Rsxh_kRetaCcTmQkFgLPc2wHGriB8HIslv1TOOi_hcs/s400/IMG_20110825_180526.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_cJueTVoi847LQqbLWkKnyDtRGHYXW80YD5jfDxo2gmSyuVxeTtHpYrmWbJRKUGp_Jx2d_iI_sUrAIYkFGvza0CVaUWbyiZHY1sdXIem_HxWJsSL7katiMTlAtYgzk-pF_hSneDFSbXQ/s1600/IMG_20110825_180806.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_cJueTVoi847LQqbLWkKnyDtRGHYXW80YD5jfDxo2gmSyuVxeTtHpYrmWbJRKUGp_Jx2d_iI_sUrAIYkFGvza0CVaUWbyiZHY1sdXIem_HxWJsSL7katiMTlAtYgzk-pF_hSneDFSbXQ/s400/IMG_20110825_180806.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaXNrNHbrBHQAQO007iyMvu7WyLXNOJV8HGIbpGXZ9d8bqhgNGsT0OepYruI-KuHN3ckNQfcUics7ciA4hFhtSYUMX42eeHEG7CH1rfWMIJeGwgBXrN1iOEoUFiLiqZ9CGLTSIHLAxFRw/s1600/IMG_20110914_193523.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaXNrNHbrBHQAQO007iyMvu7WyLXNOJV8HGIbpGXZ9d8bqhgNGsT0OepYruI-KuHN3ckNQfcUics7ciA4hFhtSYUMX42eeHEG7CH1rfWMIJeGwgBXrN1iOEoUFiLiqZ9CGLTSIHLAxFRw/s400/IMG_20110914_193523.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs4d40Ge1Zf9e203QmPXytCLvbVQ62GRJwNE4x0q-u2Ww-cFkuJ3Qw8u0W0ZnKgEjQlDSRRaWtIh9ktp6iB7YSH8WRGB-yaAwRLyHdwfAa3q7ktlGG5UCQegOyqnJg6XHuPDZXLhyj5dM/s1600/IMG_20110930_064416.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs4d40Ge1Zf9e203QmPXytCLvbVQ62GRJwNE4x0q-u2Ww-cFkuJ3Qw8u0W0ZnKgEjQlDSRRaWtIh9ktp6iB7YSH8WRGB-yaAwRLyHdwfAa3q7ktlGG5UCQegOyqnJg6XHuPDZXLhyj5dM/s400/IMG_20110930_064416.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAlaIxBBqTTrbBm-fJYM9AkxU-d2yWnWHPnYc-CdQuVcD5B7lsuZsSJmrnAtVOsGf24w9B53qLKdBAdFeXSR1qMnvWx_M7VdVqbzIG56Cd9Xinxo12OXO7jW4h99N3s9okAJcGS3rVXuw/s1600/IMG_20110930_064432.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAlaIxBBqTTrbBm-fJYM9AkxU-d2yWnWHPnYc-CdQuVcD5B7lsuZsSJmrnAtVOsGf24w9B53qLKdBAdFeXSR1qMnvWx_M7VdVqbzIG56Cd9Xinxo12OXO7jW4h99N3s9okAJcGS3rVXuw/s400/IMG_20110930_064432.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1gkWUXCrOL3J9r8TEJuxgak83yzJUrD9W14AjvmEsxnlcJdXR9pIy16dcrjNdf8qk2rcdbrdHUwES-iwBiUdU9QI_TLiJXvqENPfSLj8E08KcdYpWB_lAbMlsWiXVAMzvZIyKVs-VaA/s1600/IMG_20110930_064700.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ1gkWUXCrOL3J9r8TEJuxgak83yzJUrD9W14AjvmEsxnlcJdXR9pIy16dcrjNdf8qk2rcdbrdHUwES-iwBiUdU9QI_TLiJXvqENPfSLj8E08KcdYpWB_lAbMlsWiXVAMzvZIyKVs-VaA/s400/IMG_20110930_064700.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWwI1npnR438FxrrEHdINGKobuAMVtl58nsv8FFlejgzkhE8itVCgtFGcldUgtfgHSsMrjY7WiTZbWtN93N5swyAzfURztQnP8f7gdhU_t1A32n2aYyiOm5YD70Z4b-djP0kiWKz8f2ME/s1600/IMG_20110930_064706.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWwI1npnR438FxrrEHdINGKobuAMVtl58nsv8FFlejgzkhE8itVCgtFGcldUgtfgHSsMrjY7WiTZbWtN93N5swyAzfURztQnP8f7gdhU_t1A32n2aYyiOm5YD70Z4b-djP0kiWKz8f2ME/s400/IMG_20110930_064706.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgzndEDEouM6WOpaT2ospx3nnxheBa02uSL0v2IGq2v_F8RvnCoTrUzI5lk2t6-rZhz_XFsNyhIq9OTUqglS8U4G2fQLfNu0fiqIVHTuYoGr_NFhna79TumRnrOhCYVm2mG__SotRz2bU/s1600/IMG_20110930_065056.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgzndEDEouM6WOpaT2ospx3nnxheBa02uSL0v2IGq2v_F8RvnCoTrUzI5lk2t6-rZhz_XFsNyhIq9OTUqglS8U4G2fQLfNu0fiqIVHTuYoGr_NFhna79TumRnrOhCYVm2mG__SotRz2bU/s400/IMG_20110930_065056.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiMLA-NzB7C08M3C1BEKk-J77IOdRIVV5M5NV4wC2-SUdvFDpaIcvt_gAjpXjFZAlmsFFU3lJvzt7wTlr9DTzcpZ7NAud6hxAy-NoRkEFgQQYDuDb9fcAVkomUMa_Q9lgZbOI3LTqx5Vg/s1600/IMG_20111001_110415.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiMLA-NzB7C08M3C1BEKk-J77IOdRIVV5M5NV4wC2-SUdvFDpaIcvt_gAjpXjFZAlmsFFU3lJvzt7wTlr9DTzcpZ7NAud6hxAy-NoRkEFgQQYDuDb9fcAVkomUMa_Q9lgZbOI3LTqx5Vg/s400/IMG_20111001_110415.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
On the backside of AT&T Park there is a free viewing area, open during Giants games. It has great field level views. No seats or food stands in there, but it's fun to watch a couple innings. Check it out next time you're in the area during a Giants game.</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTivsp_1NQ8k3vUT3L8Q8WdJbnHRTx49qSOk9CTD-kUf1Y4lKXSoFO30f0m4MR8M1iIIgj7PFyrbnTqf2QG1USrOc6mqtUp1pLabKCK18JM_ZeIo5ButedQDwwxqw-ROhs923q0OwnblM/s1600/IMG_20110828_155955.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTivsp_1NQ8k3vUT3L8Q8WdJbnHRTx49qSOk9CTD-kUf1Y4lKXSoFO30f0m4MR8M1iIIgj7PFyrbnTqf2QG1USrOc6mqtUp1pLabKCK18JM_ZeIo5ButedQDwwxqw-ROhs923q0OwnblM/s400/IMG_20110828_155955.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Fleet Week is a great week in San Francisco. The Blue Angels are awesome, and there are cool ships to tour. I tried to watch the Blue Angels on Sunday this year, sadly they cancelled their show early due to fog. This is about all I saw.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj37H1AsRhXTxbjGpN2bZFtuNf-f4_H1axQ8fr8OlpAnZo28PDUCmHjYtupOTPCOkzmE4j-8NRnVJ9IQ86zbRudQYZZaoSxpxTO6BjsCNjxwD9QN3dJYIqLVk1vnWNtrXLt8_JOGN45OFI/s1600/IMG_20111009_152043.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj37H1AsRhXTxbjGpN2bZFtuNf-f4_H1axQ8fr8OlpAnZo28PDUCmHjYtupOTPCOkzmE4j-8NRnVJ9IQ86zbRudQYZZaoSxpxTO6BjsCNjxwD9QN3dJYIqLVk1vnWNtrXLt8_JOGN45OFI/s400/IMG_20111009_152043.jpg" width="400" /></a></div>
<br />
<br />
The <a href="http://en.wikipedia.org/wiki/USS_Bonhomme_Richard_(LHD-6)">USS Bonhomme Richard (LHD-6)</a> is usually at Pier 30/32 during Fleet Week. LHD-6 is an Amphibious Assault Ship ship. It's main mission is to carry over 1,000 Marines, along with amphibious vehicles, hover craft, and helicopters. This is a great ship to tour, you get to talk to Marines, go inside helicopters and armored vehicles, and hold big guns.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlhpjlht2u23YGt1qpBrpyesDV-8jKCuelkcSxRd5HcZfEuqEBCg_dnKvJ4oHxIftUsNOv3Zha9-XedJalHBGjoFiosRR8G_nb7IZWptF6uyKXDSYICyoGhf15qMee2YcR3_2jFSRGNvQ/s1600/IMG_20111006_121812.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlhpjlht2u23YGt1qpBrpyesDV-8jKCuelkcSxRd5HcZfEuqEBCg_dnKvJ4oHxIftUsNOv3Zha9-XedJalHBGjoFiosRR8G_nb7IZWptF6uyKXDSYICyoGhf15qMee2YcR3_2jFSRGNvQ/s400/IMG_20111006_121812.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR_-oUlL5rz0hYDPRBvg7vD63RlDjhkJo-Q8ItSuiEekF2yWGQ-LxL-y9JiCe2zoxDK4e3JI7bB-BxxFPnTpTuzzJs19pyl3ccATGxT5sE7AY77-SdSbvIb3Brw_Ne_QtnJfkmmuJ-Pds/s1600/IMG_20111010_113033.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhR_-oUlL5rz0hYDPRBvg7vD63RlDjhkJo-Q8ItSuiEekF2yWGQ-LxL-y9JiCe2zoxDK4e3JI7bB-BxxFPnTpTuzzJs19pyl3ccATGxT5sE7AY77-SdSbvIb3Brw_Ne_QtnJfkmmuJ-Pds/s400/IMG_20111010_113033.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSI9SWtJBfmymmvoP9DJJTUz6HPf-65xgszuCp9qBDjpC9HHsVZMWliKyRPDgcpZfTq3XwYLTDFIYft-CQDIq9BY6Y2eARJYL6JtO33tY5HCllM8nvL8KAEDfXnGjc_BJl70x1Tf8lwlE/s1600/IMG_20111010_112918.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSI9SWtJBfmymmvoP9DJJTUz6HPf-65xgszuCp9qBDjpC9HHsVZMWliKyRPDgcpZfTq3XwYLTDFIYft-CQDIq9BY6Y2eARJYL6JtO33tY5HCllM8nvL8KAEDfXnGjc_BJl70x1Tf8lwlE/s400/IMG_20111010_112918.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://en.wikipedia.org/wiki/Sikorsky_CH-53E_Super_Stallion">Sikorsky CH-53E Super Stallion</a>. This thing is huge, it make the tandem rotor <a href="http://en.wikipedia.org/wiki/Boeing_Vertol_CH-46_Sea_Knight">CH-46 Sea Knight</a> look small:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_eDexX2kU6fykxbJhKEULhfM5JW-TjJomh6uCof9ReDjDFMz0kJ-3Iu-86lsaIq2RU0pFwJkddpP8UDVPqXz0NEjkk2WK8vpsbiXzVoIVxrCl0IWP-dYHa69vxR4WdgCNJ0O6-YIB1w0/s1600/IMG_20111010_104119.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_eDexX2kU6fykxbJhKEULhfM5JW-TjJomh6uCof9ReDjDFMz0kJ-3Iu-86lsaIq2RU0pFwJkddpP8UDVPqXz0NEjkk2WK8vpsbiXzVoIVxrCl0IWP-dYHa69vxR4WdgCNJ0O6-YIB1w0/s400/IMG_20111010_104119.jpg" width="400" /></a></div>
<br />
<div style="text-align: center;">
<a href="http://en.wikipedia.org/wiki/Milkor_MGL">Milkor MGL</a> grenade launcher:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbnRGnzMXgVU0cZ2wGgIhoiMLPi47mVGfPEqDpd4ub-DcocytYGMEeEMYUhX9BC1xOTM8lxRorH9yEm-vctThiHzdjqzlN_JfibkC3X3SpRuVG5cro907Wf-ieRltlSCUBeMQ1_cG-XI/s1600/IMG_20111010_110550.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWbnRGnzMXgVU0cZ2wGgIhoiMLPi47mVGfPEqDpd4ub-DcocytYGMEeEMYUhX9BC1xOTM8lxRorH9yEm-vctThiHzdjqzlN_JfibkC3X3SpRuVG5cro907Wf-ieRltlSCUBeMQ1_cG-XI/s400/IMG_20111010_110550.jpg" width="400" /></a></div>
<br />
<div style="text-align: center;">
<a href="http://en.wikipedia.org/wiki/Benelli_M1014">Benelli M1014</a> combat shotgun, 6+1 semi-auto:</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizOhilMT6w8yRKN-tGItyCqoC2EiZ6JFHnmReFrZyDV_pttqCF9n7TkjR8uAUE2CEaHoOrPnRvBIQK25hXZYgCtxZQtewbA3OR1kAaH6nrweYZVdWJMdA9Kt5hldfvWVHUuL8U7M1-qLE/s1600/IMG_20111010_110557.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizOhilMT6w8yRKN-tGItyCqoC2EiZ6JFHnmReFrZyDV_pttqCF9n7TkjR8uAUE2CEaHoOrPnRvBIQK25hXZYgCtxZQtewbA3OR1kAaH6nrweYZVdWJMdA9Kt5hldfvWVHUuL8U7M1-qLE/s400/IMG_20111010_110557.jpg" width="400" /></a></div>
<br />
<div style="text-align: center;">
<a href="http://en.wikipedia.org/wiki/M39_Enhanced_Marksman_Rifle">M39 Enhanced Marksman Rifle</a>, this is the new <a href="http://en.wikipedia.org/wiki/Designated_marksman">Designated Marksman</a> Rifle for the Marine Corps, semi-auto 7.62mm NATO:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQJRtACwyVle3dA79Xcdb5knt9zOcDBgVQUKc16j1ImKX8x3qHphBbO9jM4rZTuYqS_Tl03ux-muHpSldYvjCqXQ0yuAlqfaSOSmD76mvvvGO2aDtyBb8Sv-NKZaVNGopJ7jSPoTwL1J8/s1600/IMG_20111010_110718.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQJRtACwyVle3dA79Xcdb5knt9zOcDBgVQUKc16j1ImKX8x3qHphBbO9jM4rZTuYqS_Tl03ux-muHpSldYvjCqXQ0yuAlqfaSOSmD76mvvvGO2aDtyBb8Sv-NKZaVNGopJ7jSPoTwL1J8/s400/IMG_20111010_110718.jpg" width="400" /></a></div>
<br />
<div style="text-align: center;">
Ahh, the next generation of recruits:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcNIX9GbDG0hb-ZmJfkpY8KpgoLEM8ENSE7BC1MvB80xsWZB3je35ikWn7SM7A4lnwCd9g5JIYu-fKprMqotXil8nvU72CnIobQriEl8evbIibHzX0oK9YXgli3Org0lL-w0UWzYAstKI/s1600/IMG_20111010_113845.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcNIX9GbDG0hb-ZmJfkpY8KpgoLEM8ENSE7BC1MvB80xsWZB3je35ikWn7SM7A4lnwCd9g5JIYu-fKprMqotXil8nvU72CnIobQriEl8evbIibHzX0oK9YXgli3Org0lL-w0UWzYAstKI/s400/IMG_20111010_113845.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
The weekend after Fleet Week some motorcycles showed up at Pier 30/32 and put on a great show, until the police showed up.<br />
<br />
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/_0_MFhkvJXo?rel=0" width="420"></iframe></div>
<div style="text-align: center;">
<br /></div>
<div style="text-align: center;">
<iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/iteicmcRNBE?rel=0" width="420"></iframe></div>
<div class="separator" style="clear: both; text-align: -webkit-auto;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0g8xyTzCmGHF7TWAG5aWkfYQQ533vqKg_VLygpMZo8CIMjBX192_79EdeNG2ojutSCKzy2rZUl6LhcG8DUFa80Qu4UAlRmD0vOObqzKvPWIf1hLDQx2-2uqEUbnyY3nXmmt2DEVFr-Xc/s1600/IMG_20111015_132923.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0g8xyTzCmGHF7TWAG5aWkfYQQ533vqKg_VLygpMZo8CIMjBX192_79EdeNG2ojutSCKzy2rZUl6LhcG8DUFa80Qu4UAlRmD0vOObqzKvPWIf1hLDQx2-2uqEUbnyY3nXmmt2DEVFr-Xc/s400/IMG_20111015_132923.jpg" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-876849809813578992011-10-19T19:51:00.000-07:002011-10-21T23:48:41.053-07:00Airsoft and laser tag at Escape Sonoma County<span class="Apple-style-span" style="font-size: large;"><b>Airsoft</b></span><br />
<br />
This past weekend I went to <a href="http://www.escapesonomacounty.com/">Escape</a> in Rohnert Park to play <a href="http://en.wikipedia.org/wiki/Airsoft">airsoft</a>. For those that don't know, airsoft is played like <a href="http://en.wikipedia.org/wiki/Paintball">paintball</a>, but the guns shoot plastic BBs instead of paint. The guns are generally realistic replicas of military firearms, as opposed to the funky looking paintball guns. A lot of the guns are such accurate replicas that accessories designed for the real guns fit the airsoft guns.<br />
<br />
At Escape airsoft is only played on Sundays, and they use the same arena as QZAR laser tag. The arena is a close quarters battle (CQB) field, it consists of a bunch of little rooms with windows and doors, and random barrels everywhere (just like in video games!). In first-person shooter (FPS) terms the gametype in Team Deathmatch (TDM) without respawn. The rounds end up being pretty short, probably because the area is quite small (5000 sq ft). Overall it's a lot of fun, the people are friendly, and it's well worth the money.<br />
<a name='more'></a><br />
If you bring your own equipment you can play pretty much constantly, if you are renting equipment you have to take turns sharing the equipment. It's much cheaper to play self-equipped, so if you like airsoft it is worth buying your own stuff. They impose a 350 feet-per-second max with 20g BBs.<br />
<br />
There is a new airsoft and paintball arena opening in Santa Rosa called <a href="http://www.playland707.com/">Playland</a>. It's not open yet, but it is going to be huge, probably the largest indoor airsoft arena in the western US.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Laser Tag</b></span><br />
<br />
Last month I played QZAR laser tag at Escape. The laser tag was really fun, and faster paced than airsoft. But the gameplay and scoring are, well, stupid. The gametype is a lot like Capture The Flag (CTF), there is an objective in each base that the opponents are supposed to shoot. But the scoring is more like TDM. You "respawn" about 10 seconds after dying. For the those 10 seconds you can't shoot, but for part of that time <i>you can be shot.</i>.. yeah.<br />
<br />
The scoring goes like this, you get one (1) point for shooting someone, you lose one (1) point for being shot, you get ten (10) points for shooting the objective. The team score is the sum of the player scores. The reason I say the scoring is stupid is because 10 points isn't enough. In most objective gametypes the team wins or loses based on the objective, e.g., one point every time your team captures the flag, kills don't count for team points. As a player you attack or defend the objective at all costs to yourself. At only 10 points the objective is worthless, you will die 10 times in your attempt you get the objective. This is compounded by the fact that you are double penalized (you lose a point AND the other team gets a point), and that period of respawn where you can be shot but can't defend yourself guarantees you will die a lot.<br />
<br />
What ends up happening is that the players that would normally score the highest, the ones that aggressively attack the enemy base, actually end up scoring the lowest because the die the most, and the objective can't make up for that. Ultimately if you want to score high you camp on defense. But that's not fun. It works in airsoft because airsoft takes more skill and tactics. You can't even accurately aim the laser tag guns because they don't have sights.<br />
<br />
It's a lot of fun to play, but for a competitive person the scoring kind of spoils it. So fix the friggin' scoring, it's either CTF or TDM, not both, and remove the double penalty for dying.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-4551387946122979012011-10-03T00:38:00.000-07:002011-10-03T00:38:51.886-07:00What the... Cherry.com washed my car for free!A few days ago I was walking down the street and I saw two guys with bright red shirts, they looked kind of like Facebook employee shirts, except they said <i><a href="http://cherry.com/">Cherry</a></i> on them. And they were putting business cards on cars, including my car. I took the card off my car, it said:<br />
<br />
<blockquote>
<i>"The Carwash that comes to you<br />Park anywhere, check in online and we'll wash you car right where you left it, in real time.<br />Get your free carwash at cherry.com"</i></blockquote>
What a brilliant idea! I live in an area of San Francisco without driveways and hose hookups. Getting a car wash means I have to drive somewhere, and lose my valuable parking space. The business card has been sitting on my desk for a few days, and tonight I decided to sign up. Registration was easy and they have a good website (once you login). I browsed around the site, their HQ is a couple blocks away, and they are hiring a <a href="http://cherry.com/careers.html">front-end dev</a>. Normally car washes are $25, but I get a free one, I decided I'd use it later this week.<br />
<br />
All this thinking about my car made me remember, it's street cleaning tonight, I have to move my car--right now. So I rush out the door. I find two more Cherry business cards on my car. Luckily I find a good parking spot on a different street. As I'm closing my car door I notice something, the door is smooth, like really smooth, like just waxed smooth. What the...!? I haven't washed my car in over a month, it's too much of a pain. I only drive once every few weeks. My car should be filthy... but it's clean... really clean.<br />
<br />
Yes, Cherry washed my car for free, and I didn't even ask them to. I don't know whether they were supposed to wash another car and washed mine by accident, or if this is just brilliant marketing. But I'm happy! I tried to think, is there a time I wouldn't want my car washed for free? I try to avoid drive-through car washes, but I'm always in favor of a good hand wash. If I had I classic car or a show car, I wouldn't want it washed by a random person. Then again, if I had a show car I wouldn't park it on the street covered in two months of dust. Cherry probably thought through the same thing. Most people are going to be happy, just don't wash any '65 Mustangs or Lamborghini Murcielagos without being asked.<br />
<br />
Cherry's website says they are "building an online/offline technology to connect consumers with services they use every day." I have a feeling they are planning to do more than wash cars. It's a closed beta, if you want a free car wash <a href="http://cherry.com/free/j8hfa40">click here</a>. Cherry is on Twitter <a href="http://twitter.com/cherry">@Cherry</a>.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-68498145588121614572011-09-28T12:50:00.000-07:002011-09-28T12:50:37.286-07:00Python libraries should not be licensed under the GPLGNU General Public License (<a href="http://www.gnu.org/copyleft/gpl.html">GPL</a>) is great. It has helped the computing world in huge ways. I don't think Linux would be where it is today if it weren't for the GPL requirement that people who distribute modified versions of Linux also release their modifications. The GPL is what is called a copyleft license, it means modified versions of GPL'd software must be released under the GPL or a GPL-compatible license. In this way the GPL is infectious, like a virus. If you release software that includes any GPL'd code, your software in now under the GPL, or your software is illegal. Your software cannot be licensed under a permissive open source license like the <a href="http://www.opensource.org/licenses/bsd-license.php">BSD</a> or <a href="http://www.opensource.org/licenses/mit-license.php">MIT</a> licenses.<br />
<br />
The viral nature of the GPL poses a problem for code libraries, because anything released that uses the library will have to be GPL licensed. Mercurial has a good <a href="http://mercurial.selenic.com/wiki/License">explanation</a> of how the GPL works. It's really easy to write a little web application to display info about your local Mercurial repositories, all you have to do is <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">import hg</span> and write 50 lines of code. But if you do <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">import hg</span>, and you release your code, it must be released under the GPL. This is fine for a major stand-alone application like Mercurial, but not for libraries that don't function on their own. I have been disappointed by how many Python libraries are licensed under the GPL, for example all the DHCP-related libraries I have found are GPL.<br />
<div>
<br />
<span class="Apple-style-span" style="font-size: large;"><b>The LGPL</b></span><br />
<br /></div>
<div>
The GNU Lesser General Public License (<a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>) is specifically designed to be used by libraries, it allows a license-incompatible application to link to a LGPL'd library. I personally find the LGPL to be extremely confusing for non-C applications. The terms it uses like "linking" and "header files" don't make sense for most interpreted laguages like Python and Ruby. The confusion has led to the creation of the <a href="http://opensource.franz.com/preamble.html">Lisp LGPL</a>. The Free Software Foundation has tried to <a href="http://www.gnu.org/licenses/lgpl-java.html">clarify</a> this confusion for Java, but even their clarification is confusing.</div>
<div>
<br /></div>
<blockquote>
<i>"Applications use Java's “import” functionality to access classes from these libraries. When the application is compiled, function signatures are checked against the library, creating a link."</i></blockquote>
<div>
<br /></div>
<div>
So in Java it works correctly because Java compiles and links? What about Python which compiles at runtime? Or combined/minified JavaScript? <a href="http://twistedmatrix.com/">Twisted</a> was originally licensed under the LGPL, then it was changed to the MIT License. In regards to choosing the LGPL, Glyph Lefkowitz the creator of Twisted, said:</div>
<br />
<blockquote>
<i>"In that, the confusing wording of the LGPL as it regards
Python code was an asset. It would be a halfway accurate statement that
I selected the LGPL exactly because it doesn't make any sense."</i></blockquote>
I'm not a lawyer, but I agree, the LGPL doesn't make sense, if for no other reason than it has created all this <a href="http://slashdot.org/story/03/07/17/2257224/LGPL-is-Viral-for-Java">confusion</a>.<br />
<div>
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Real World Example</b></span><br />
<br /></div>
<div>
For a real world example lets look at MySQL. The MySQL database and libraries are licensed under the GPL, with a key exception, it allows linking from <a href="http://www.opensource.org/">OSI</a>-compliant open source software. That linking exception allows MySQLdb, the Python interface to MySQL to be dual-licensed under the GPL and the old <a href="http://www.opensource.org/licenses/Python-2.0">Python License</a>. The Python License is a liberal BSD-like license. As a result of the permissive licensing of MySQLdb, the extremely popular <a href="https://www.djangoproject.com/">Django</a> framework, licensed under a BSD License is able to use MySQLdb. And a cool project like <a href="http://www.reviewboard.org/">Review Board</a>, licensed under the MIT License is able to use Django. If MySQL didn't have the linking exception, MySQLdb, Django, and Review Board would all have to be GPL licensed.<br />
<br />
More realistically if the MySQLdb team had decided to only license it under the GPL, Django and all other frameworks would not use it. Instead they would use a BSD-licensed alternative, and the MySQLdb project would die. The same is true in the Ruby world, Ruby on Rails is MIT licensed. If you are writing some really cool Ruby library, and you hope it's going to become uber popular and included in Rails, you better not license it under the GPL.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Your Choice</b></span><br />
<br />
The developers of software have the right to choose what license they use, and I don't mean to sound like I'm telling them what to do. I understand many people strongly believe in the GPL, and they choose it knowing the full implications of it. But I think, or at least I hope that most open source developers writing libraries want their libraries to be as widely used and useful as possible. If that's the case, I strongly believe that BSD-like licenses, like the <a href="http://www.opensource.org/licenses/BSD-2-Clause">BSD 2-Clause License</a>, <a href="http://www.opensource.org/licenses/MIT">MIT License</a>, or <a href="http://www.opensource.org/licenses/ISC">ISC License</a> are the way to go.</div>
Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-20709109499839674172011-09-11T21:15:00.000-07:002011-09-11T21:42:47.744-07:00My Memories of 9/11My alarm went off at 5:55am PDT. I used my Aiwa stereo as an alarm, tuned to <a href="http://www.kgoam810.com/">KGO</a> Newstalk 810. There was some breaking news about an airplane hitting one of the Twin Towers in New York. Some eye witness said it was an airliner, like a Boeing 737. I thought yeah right, airliners don't crash into buildings, it was probably a little Cessna. I went downstairs and turned on the TV. I watch replays of the plane hitting, it was an airliner. At 6:03am PDT I watched live as a plane hit the second tower. The TV anchor didn't notice it was a second plane, he said it was a replay, but I noticed. One tower had smoke coming from it, and a plane hit the other tower. The TV said <i>Live</i>. It was shocking.<br />
<br />
It was time to get ready for school. I had a Linux Administration class that morning, the official title of the class was probably something silly like "Introduction to UNIX", but it used Red Hat Linux. I brought a radio into the bathroom and listened to KGO as I got ready. After getting ready for school I went back to watching TV. I saw the people jumping out of the buildings. Then one of the towers collapsed. A wave of dust rushing down the streets. Then another tower collapses. It still brings tears to my eyes to think about it. It was horrific. I went to school.<br />
<br />
Some people in class hadn't heard about the attack. It was hard to form the words to explain it. The towers were just <i>gone</i>. It was a very quiet and somber day in my Linux Administration class that morning.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-15289130423889842622011-09-05T19:58:00.000-07:002011-09-06T18:23:17.088-07:0099 Bottles of Beer in CoffeeScript<a href="http://99-bottles-of-beer.net/">99 Bottles of Beer</a> is a really fun (for a geek) website that has a huge collection of programs written in different programming languages, that all print the lyrics to "99 Bottles of Beer." It is a great way to show off the basic elements of a language, such as conditionals, loops, variables, string printing, etc.<br />
<br />
There are examples of language simplicity, such as <a href="http://www.99-bottles-of-beer.net/language-python-808.html">this Python version</a>. Or the complete absurdity of a language, like the Perl example the looks like <a href="http://www.99-bottles-of-beer.net/language-perl-737.html">ASCII art of bottles of beer</a>, but is actually executable Perl. Then there are the crazy funny languages like <a href="http://www.99-bottles-of-beer.net/language-lolcode-1544.html">lolcode</a> and <a href="http://www.99-bottles-of-beer.net/language-cow-146.html">COW</a>.<br />
<br />
<a href="http://coffeescript.org/">CoffeeScript</a> is a language the compiles to JavaScript, but it is simple and elegant like Python. While I was learning about CoffeeScript I noticed there were no CoffeeScript versions of 99 Bottles of Beer. So I wrote <a href="https://gist.github.com/1196354">one</a>! It's not fancy, it's the most straight forward way I could think to do it. I submitted it to <a href="http://99-bottles-of-beer.net/">99-bottles-of-beer.net</a>, hopefully they will accept it.<br />
<br />
If you are using Mac OS X you can use <a href="http://mxcl.github.com/homebrew/">Homebrew</a> to install CoffeeScript and <a href="http://nodejs.org/">Node.js</a> (required for command-line CoffeeScript).<br />
<br />
<script src="https://gist.github.com/1196354.js?file=99bottles.coffee">
</script>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-71215428050175885032011-06-21T22:41:00.000-07:002011-06-21T22:41:04.193-07:00A sad day: 428 days of uptime lostMy Linux workstation had been up for 428 days without a reboot. No cheating, I don't think I even logged out of my X session in that time. But today is a sad day, I had to move my workstation to a new room.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1NitChbXX65RBo8G1lQm31ickI4onq-U7-ld5VFKpNV5mk0G92JUFFW09B4ntey-vWi4A6CVzi_uZUAHnw4OyHzVoRHKYax1zOZQerUx_micBD57J8c_uytGD1MtZ2ut6lOFci3IeNw/s1600/uptime-428-crop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW1NitChbXX65RBo8G1lQm31ickI4onq-U7-ld5VFKpNV5mk0G92JUFFW09B4ntey-vWi4A6CVzi_uZUAHnw4OyHzVoRHKYax1zOZQerUx_micBD57J8c_uytGD1MtZ2ut6lOFci3IeNw/s1600/uptime-428-crop.png" /></a></div><br />
I considered getting a UPS and trying George's <a href="http://www.tbs.com/video/index.jsp?oid=170832&eref=sharethisUrl">Frogger</a> move from Seinfeld. But it probably wouldn't have worked.<br />
<br />
The upside is the reboot restarted all the memory leaks, so I'm not using 1GB of swap anymore!Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-63174018572065132602011-05-30T16:33:00.000-07:002011-10-05T07:02:26.237-07:00You should stop using WordPress<span class="Apple-style-span" style="font-family: inherit;">It's not just WordPress, it's all Content Management Systems. </span>A self-hosted <a href="http://en.wikipedia.org/wiki/Web_content_management_system">CMS</a> is a bad choice for a personal site or a small business. There are better choices than taking on the risks that come with using WordPress, Drupal, Joomla, and other CMSs.<br />
<a name='more'></a><br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>What's Wrong With CMSs</b></span><br />
<i>Security</i>. According the Secunia Advisories <a href="http://secunia.com/advisories/mailing_lists/">Mailing List</a>, in the past 2 months there have been 18 vulnerabilities related to WordPress, 10 for Joomla, and 9 for Drupal. A lot of them are with plug-ins or modules, but some are in the core product. If you host the CMS you will have to update it constantly.<br />
<br />
You are probably thinking <i>that's easy</i>, there is this nice little button in the admin interface that allows me to upgrade with one click. That's bad, very bad! What that means is that your web site can update itself. Your web server has permission to write scripts in your document root. If there is a security vulnerability it can be used to upload a whole new site! In technical terms, the user running your web server, usually www-data or apache, should not have write permissions or own files/directories that are used to serve pages. There are obvious exceptions, like a directory for image uploads, but those directories should have the script handlers for .php, .py, etc. turned off.<br />
<br />
Even if you only allow write access during the upgrade, or upgrade from a tar file, how do you know it will work? Have you tested the upgrade? Do you have a test environment with that custom module or theme? Most small businesses don't have the test infrastructure to test web site upgrades.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Why Would Anyone Hack My Little Site</b></span><br />
You're not the CIA, no one wants your data. What they want is a place to advertise male enhancement drugs and push malware on to your users. They don't target you, no one is sitting there hacking your site. There are automated bots the crawl the web looking for vulnerable sites, and using file upload or SQL injection exploits to post their illegal content on <i>your</i> site.<br />
<br />
Some companies do have valuable data, even if it is not stored on the web server, your data may be at risk. If someone does hack your site, how hard would it be for them to change the log-in page to email your password to them? The likelihood of someone in your company using the same password for the web site and their email is high. With access to an employee's email they can reset their password to your source code version control, then they steal the source code for that top secret project your company is working on. It sounds like paranoia, but that is how hacks really happen.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Why Are People Using WordPress</b></span><br />
I think all the people running to WordPress and Drupal is a reaction to large monolithic Flash sites and other sites where the business owner can't update content without paying the web developer to do it. I also think CMSs have become the new Dreamweaver, an easy way for people new to web design to get into it. Flash sites have always been bad thing, I have to say I'd much rather have WordPress than Flash. But there are other options.<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<span class="Apple-style-span" style="font-size: large;"><b>Are You Going To Create The Site In Custom PHP</b></span></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<i>STOP! Don't do it!</i> It seems like a valid reaction to automatic exploits of open source content management systems, but it isn't, at least not for the average person. I recently looked into a developer that was using a custom PHP CMS. I went to the web developer's site, and checked out a few reference customers. And guess what, every form of user input allowed for SQL injections; the URL bar, the search box, the log-in page -- they all allowed me to type in SQL and have the database run it! If you don't know what an <a href="http://xkcd.com/327/">SQL injection</a> is you should not be writing PHP or any other web language for that matter. That includes WordPress plug-ins and Drupal modules.</div>
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Pick a Hosted Platform</b></span><br />
There are good reasons to have a site that is easy to update, like this blog. But <i>you</i> should not be responsible for keeping the blog software up-to-date. Blogger will host your site, at a domain you own, for free! WordPress.com (not the WordPress open source software) will host your site for a minimal fee. Tumblr and Posterous are free. I consider WordPress.com a much safer option that hosing your own WordPress install. The people at WordPress.com make WordPress, it will always be up-to-date. They only allow a limited number of supported <a href="http://en.support.wordpress.com/plugins/">Plug-ins</a>, and lets face it, plug-ins written by Joe Blow are the biggest security problem.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Or Don't</b></span><br />
Do you actually need a dynamically generated site? If you are like most small businesses you only need to update your site once or twice a year. If you are a little technical, and you have a good web designer, maybe they will do your site in something like <a href="http://jekyllrb.com/">Jekyll</a>. It could be even be hosted on <a href="http://aws.amazon.com/about-aws/whats-new/2011/02/17/Amazon-S3-Website-Features/">Amazon S3</a>.<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>What Else Is Out There</b></span><br />
Is there a good hosted web site platform targeted at small businesses? There are <a href="http://www.squarespace.com/">Squarespace</a> and <a href="http://www.weebly.com/">Weebly</a> for SMBs, and <a href="http://www.behance.net/prosite">Behance ProSite</a> targeted creative professionals. Squarespace looks pretty awesome, and at $11-$13/month they seem way better then having to host your own site for $5+/month. Does anyone know of other good hosted platforms for business web sites?<br />
<br />
I wish there were more CMSs that would publish to static HTML, while keeping all the dynamic scripts behind your firewall. <a href="http://www.movabletype.org/">MovableType</a> can publish to static. It would be great if they had a little button that would commit a static site to a version control system like <a href="http://git-scm.com/">Git</a>, which you could then push out to a public web server.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-21084158707930461322006-04-24T00:34:00.000-07:002011-05-17T22:48:12.649-07:00My New CarI bought a 1999 Miata a few months ago, it's black with a hardtop.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZtXBHvQfRKk1ZgHzTy2AeyYE9d3LEVWUohfKUd7BsIhy3-LMOTmgAnQ8AtK2EqMMO-km9hbF6d-bz0wWEEgr553s15gyzuqeax2hKSo3fDUisKUpdluhteq92sg5N6FQIhAJW8ZpPT40/s1600/CRW_2026_800x600.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZtXBHvQfRKk1ZgHzTy2AeyYE9d3LEVWUohfKUd7BsIhy3-LMOTmgAnQ8AtK2EqMMO-km9hbF6d-bz0wWEEgr553s15gyzuqeax2hKSo3fDUisKUpdluhteq92sg5N6FQIhAJW8ZpPT40/s200/CRW_2026_800x600.jpg" width="200" /></a></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsyN1lPFuQGxWxMB5VzH-shx2NPhkF1MJVPyMuNY-vOawGGpAf7ezLSfyV1wUY4F6UylE8rkSF_JX4YqXkUyLzacVCixtHgMQmipQj1xivWB48CkTlLuQaje0JKTjaeVXP2Oq7ZPJ-9ck/s1600/CRW_2003_800x600.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsyN1lPFuQGxWxMB5VzH-shx2NPhkF1MJVPyMuNY-vOawGGpAf7ezLSfyV1wUY4F6UylE8rkSF_JX4YqXkUyLzacVCixtHgMQmipQj1xivWB48CkTlLuQaje0JKTjaeVXP2Oq7ZPJ-9ck/s200/CRW_2003_800x600.jpg" width="200" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_yHVnZfDPxPKVZ5oj7uPQE0mIXcjVNrFdUEQsCduqWL_QafUsBiuCsV2f3Gu7WKt31lqOqmtos1Lrnri9B3AY1naGIfZlFS69SZJoFfqmV7qPosPo6xH1bYKkzblyYXHcEs7RvsRRvo/s1600/CRW_2010_800x600.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd_yHVnZfDPxPKVZ5oj7uPQE0mIXcjVNrFdUEQsCduqWL_QafUsBiuCsV2f3Gu7WKt31lqOqmtos1Lrnri9B3AY1naGIfZlFS69SZJoFfqmV7qPosPo6xH1bYKkzblyYXHcEs7RvsRRvo/s200/CRW_2010_800x600.jpg" width="200" /></a></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkCbNXKksa77k4h9ijk2IAkCDJjQJdjIvuHIYMCSZKjtRPCH3Y1fvnIXI54C3KqMGs__uihBBItwwExOR4e-ESTyyL5WcnTC2cvkwh8ul-7rW27htbUL289H3RSn5SUgvCYL1gGEeDms/s1600/CRW_2015_800x600.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmkCbNXKksa77k4h9ijk2IAkCDJjQJdjIvuHIYMCSZKjtRPCH3Y1fvnIXI54C3KqMGs__uihBBItwwExOR4e-ESTyyL5WcnTC2cvkwh8ul-7rW27htbUL289H3RSn5SUgvCYL1gGEeDms/s200/CRW_2015_800x600.jpg" width="200" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFTQThNtDaXz3JtB1gA7u5Gtk-aH1GwKT4lJBViJDuHGLdKBTbtlzJ3fk7Qxn4QrnAdNbowL5N7dMoBwwWty3N2AZ21iQ9YMt21eKYVUtPW7frfV1zlTdyu6yUdLdXrGTITNsWdUo8yog/s1600/CRW_2024_800x600.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFTQThNtDaXz3JtB1gA7u5Gtk-aH1GwKT4lJBViJDuHGLdKBTbtlzJ3fk7Qxn4QrnAdNbowL5N7dMoBwwWty3N2AZ21iQ9YMt21eKYVUtPW7frfV1zlTdyu6yUdLdXrGTITNsWdUo8yog/s200/CRW_2024_800x600.jpg" width="200" /></a></div>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-7236732346854257482006-03-26T02:28:00.000-08:002011-05-24T23:05:01.211-07:00Sky Tower PicturesI recently went to New Zealand, one of the coolest things I did while there was go up the <a href="http://www.skycityauckland.co.nz/skycity/auckland/sky-tower/sky-tower_home.cfm">Sky Tower</a> in Auckland. At first I thought it was going to be pretty lame, it's just another tall building, but the view up there is amazing. They have glass floors you can walk on, it took a lot of nerve, but eventually I was totally comfortable walking on them, check out the picture below. I took a lot of pictures up there, including nine I stitched into a panorama.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkFXWrQcBKnMHK-F0d-LOLpcDalrQD8vGJR1JCaUnFKOxwBGQR2DMVPgFL2sQNqBL3MbR8Xs6mVFxcJqZImC16R8KMHjHHYUyHAUOV8UAOP_k-b2dpj0vHcHaix5aK0UZCImHruj4GwHA/s1600/CRW_1920_800x600.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkFXWrQcBKnMHK-F0d-LOLpcDalrQD8vGJR1JCaUnFKOxwBGQR2DMVPgFL2sQNqBL3MbR8Xs6mVFxcJqZImC16R8KMHjHHYUyHAUOV8UAOP_k-b2dpj0vHcHaix5aK0UZCImHruj4GwHA/s200/CRW_1920_800x600.jpg" width="200" /><span class="Apple-style-span" style="-webkit-text-decorations-in-effect: none; color: black;"></span></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE9JKv-Xur644meL6ZG6LDE8OFORg-CkQchv_5un4skm1eafUKN6eXErYl3krGTzlK0fUDAVpZKDtL9G0tVEGwThLBl1nfZpsQzbm7GDbHrLZPAN_ZvxfJgECVxd7fYOwvknzDM3Pf76o/s1600/CRW_1926_800x600.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE9JKv-Xur644meL6ZG6LDE8OFORg-CkQchv_5un4skm1eafUKN6eXErYl3krGTzlK0fUDAVpZKDtL9G0tVEGwThLBl1nfZpsQzbm7GDbHrLZPAN_ZvxfJgECVxd7fYOwvknzDM3Pf76o/s200/CRW_1926_800x600.jpg" width="200" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii88guS0SvPLuJZi28R66CMkU_RqeZdcgzkeRYEiuJ9pNX25ZWDNhIXp5N4A9RNnLTA6h2XBvgnO5-6qa-AD7CcQKGGQg7THXRhMFWp5IJe_Tyo-A7AkMqb3S5uhZXaCQVCG6mAYT9krM/s1600/auckland_panorama_8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="57" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEii88guS0SvPLuJZi28R66CMkU_RqeZdcgzkeRYEiuJ9pNX25ZWDNhIXp5N4A9RNnLTA6h2XBvgnO5-6qa-AD7CcQKGGQg7THXRhMFWp5IJe_Tyo-A7AkMqb3S5uhZXaCQVCG6mAYT9krM/s400/auckland_panorama_8.jpg" width="400" /></a></div><br />
<br />
<ul><li>Panorama @ 100% (<a href="https://picasaweb.google.com/lh/photo/Pt1u3QpYuf7NZZVL0D0U7A?feat=directlink">4.6MB 15010x2160</a>)*</li>
</ul>* To view the whole panorama at 100% you will need six 30" monitors.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-50562491922173679002005-08-15T21:16:00.000-07:002011-05-24T22:47:26.780-07:00My trip picturesI finally finished putting all the pictures from my trip to Prague, Berlin, Amsterdam, and New York into <a href="https://picasaweb.google.com/105186813571979305621/EuropeanVacation?feat=directlink">web galleries</a>. There are over a thousand pictures, unless you are extremely bored your best bet is to just look at <em>My Favorites</em>, if that is interesting enough check out the <em>Top 200</em>. I didn't delete any pictures, that means if I accidentally hit the shutter button and took a picture of the sidewalk, that picture is somewhere in the galleries. All of the pictures were taken with a Canon S70 at 3072x2304, mostly Raw, if for some reason you would like a high res version of a picture please let me know.<br />
<a href="https://picasaweb.google.com/105186813571979305621/EuropeanVacation?feat=directlink">Image Galleries</a>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-46627292527570505392005-03-10T02:48:00.000-08:002011-05-17T22:32:30.230-07:00Photoshop CS thumbnails are back!If you installed Photoshop CS from scratch, not the case with an upgrade, you probably noticed something very disturbing. PSD's don't have thumbnail previews in Windows, not even in Photoshop's Open dialog! It turns out Adobe left out a DLL called psicon.dll do to crashes on some peoples systems. Well I for one find it extremely annoying not to have thumbnails in Windows, fortunately the solution is simple. Download psicon.dll and place it in C:/Program Files/Common Files/Adobe/Shell. That's it, they are instantly back.<br />
Thanks to <a href="http://www.notestips.com/80256B3A007F2692/1/TAIO-68UEVH">notestips.com</a> and <a href="http://www.dlldump.com/download-dll-files.php/dllfiles/P/psicon.dll/download.html">dlldump.com</a>.<br />
Want thumbnails of Canon Raw files? Head <a href="http://www.suodenjoki.dk/us/productions/articles/raw_thumbnail.htm">here</a>.Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-42683690750206033522005-02-26T12:59:00.000-08:002011-05-24T23:06:30.760-07:00I'm in New York CityHere's a picture of a subway station at rush hour:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ks4x7g_4Uzjel7CqM7NssGhxtuhEwtvxLfdQ1Y1GIJ-Q_kikaawJvrzIxgE_LKMz8B4qkzSbJGP9y0-fkH-qFa9CFcmSTpD_mbvki05vwPkjZ178bn1h9y2Ss8tTc6d5Pah6xP5SuPU/s1600/CRW_0900_800x600.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0ks4x7g_4Uzjel7CqM7NssGhxtuhEwtvxLfdQ1Y1GIJ-Q_kikaawJvrzIxgE_LKMz8B4qkzSbJGP9y0-fkH-qFa9CFcmSTpD_mbvki05vwPkjZ178bn1h9y2Ss8tTc6d5Pah6xP5SuPU/s200/CRW_0900_800x600.jpg" width="200" /></a></div><br />
Here are pictures of the Gates in Central Park:<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI1ENN-izKHzFMtqzvrq9d_22ppPS53A5g9PNlwyuEqXRzv5Y6bPUkeP8qx3u0zuxf8mHdYI9-pTRTEIYbYNXkOn6KuRtyoRzLccRLEdzhqfe3rQZy9TewEmYAzzcCIcK_aj79Py8PdCM/s1600/CRW_0924_800x600.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI1ENN-izKHzFMtqzvrq9d_22ppPS53A5g9PNlwyuEqXRzv5Y6bPUkeP8qx3u0zuxf8mHdYI9-pTRTEIYbYNXkOn6KuRtyoRzLccRLEdzhqfe3rQZy9TewEmYAzzcCIcK_aj79Py8PdCM/s200/CRW_0924_800x600.jpg" width="200" /></a></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlfvJRgOag7Yo3GT9yAThi3QlR3Czwf6-oz88GLFB71Aqk2lxs0_9zIyMQeKUFPmT463ttufhG8boS3FBR28VxF4PNT6pyP3G4cbsITgy-5ZZNe5oW0Tz_PxpS6hkxCF9i3PWT2RsHR8/s1600/CRW_0902_800x600.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPlfvJRgOag7Yo3GT9yAThi3QlR3Czwf6-oz88GLFB71Aqk2lxs0_9zIyMQeKUFPmT463ttufhG8boS3FBR28VxF4PNT6pyP3G4cbsITgy-5ZZNe5oW0Tz_PxpS6hkxCF9i3PWT2RsHR8/s200/CRW_0902_800x600.jpg" width="200" /></a><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi69FfGl4Nc3EbeUdtOnYnzXX6g5RVmoicY00kWcSuuH-XBpp_GzjXbczAZ_Wbauf60MeUhlfHOeS7DoOi1SN74Ql1Ia1hnucgzUgv7bAuZkrSH_uFAT-mvWdiwoM6ec0pPR1mlFvCpiF0/s1600/CRW_0903_800x600.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi69FfGl4Nc3EbeUdtOnYnzXX6g5RVmoicY00kWcSuuH-XBpp_GzjXbczAZ_Wbauf60MeUhlfHOeS7DoOi1SN74Ql1Ia1hnucgzUgv7bAuZkrSH_uFAT-mvWdiwoM6ec0pPR1mlFvCpiF0/s200/CRW_0903_800x600.jpg" width="200" /></a></div> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVwFo782jLG0Hw_o_ogNJh9w4VGADAO2LdZX6F2CCkIpPC2tfc1NCUoSJ9HqCn2hNxxr1qb0ZCC3rXa9QedWnMLa_IaMqc4MA8oxKHIsnMW96SVvdh7Ls5p3AjD5Hc2iQjPicIXlENtcM/s1600/CRW_0906_600x800.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVwFo782jLG0Hw_o_ogNJh9w4VGADAO2LdZX6F2CCkIpPC2tfc1NCUoSJ9HqCn2hNxxr1qb0ZCC3rXa9QedWnMLa_IaMqc4MA8oxKHIsnMW96SVvdh7Ls5p3AjD5Hc2iQjPicIXlENtcM/s200/CRW_0906_600x800.jpg" width="150" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYbP02TkI3wZJx3dY7zG6zmfgWn7yPNqEkjPnbju8QVaFAOHnZrY_j5prlX0hdpUhEkMf-sF31IcLuLpJ-bt8rElFhr3ye0LWVbNMlX1uWXHp4bfSiP69YRsBPAdNugYAMDMlnzWb2Tys/s1600/CRW_0923_600x800.jpg" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYbP02TkI3wZJx3dY7zG6zmfgWn7yPNqEkjPnbju8QVaFAOHnZrY_j5prlX0hdpUhEkMf-sF31IcLuLpJ-bt8rElFhr3ye0LWVbNMlX1uWXHp4bfSiP69YRsBPAdNugYAMDMlnzWb2Tys/s200/CRW_0923_600x800.jpg" width="150" /></a>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-66058202858284143692005-02-14T17:59:00.000-08:002011-05-17T22:21:12.411-07:00European VacationI recently got back from about a month in Europe, I hit Prague, Berlin and Amsterdam. I took over 700 pictures, and I plan on posting some, along with a little trip writeup. So look for it in the future...Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.comtag:blogger.com,1999:blog-9002090230448942923.post-88679064589972207212004-12-01T03:10:00.000-08:002011-05-17T22:18:35.630-07:00Deathmatch coming to HL2 *UPDATED*<span class="Apple-style-span" style="font-family: inherit;">A <a href="http://www.steampowered.com/forums/showthread.php?s=&threadid=193559">post</a> by Valve's Adrian Finol, on the steampowered.com forums, indicates Valve will be adding DM to HL2 soon.</span><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqQQ9plXXKaXKdq3zcMaLDtwDA1jI7hbpG8_ANe5cT0InMMz3R4sCVOExfNDnPtjnU8NDRbq1JSlBoytllpS879lYAmcj74sIdk0l77O1WpMZtmATwQDzWEUuapTZSFZOOoG39YDs62Q8/s1600/hl2dm.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqQQ9plXXKaXKdq3zcMaLDtwDA1jI7hbpG8_ANe5cT0InMMz3R4sCVOExfNDnPtjnU8NDRbq1JSlBoytllpS879lYAmcj74sIdk0l77O1WpMZtmATwQDzWEUuapTZSFZOOoG39YDs62Q8/s320/hl2dm.jpg" width="320" /></a></div><br />
<span class="Apple-style-span" style="color: red;"><strong>Update: Half Life 2: Deathmatch in now available through Steam :)</strong></span>Anonymoushttp://www.blogger.com/profile/13712431749271646449noreply@blogger.com