A new version of App::cpanoutdated was released yesterday which ads a new -l and -L option to the bundled binary,cpan-outdated. These flags work the same as -l and -L in cpanminus, pointing to a local::lib controlled directory.
--compare-changes shows the difff to the changes file between releases. That's awesome.
This code will update all of the out of date modules in /apps/perl5 which is a local::lib controlled directory on my system:
cpan-outdated -l /apps/perl5 | xargs cpanm -l /apps/perl5
--compare-changes example
cpan-outdated --compare-changes| head -20
S/SA/SARTAK/Any-Moose-0.13.tar.gz
0a1,23
> 0.13 Wed 19 May 2010
> * Add load_first_existing_class (gfx)
>
> 0.12 Fri 02 Apr 2010
> * t/000-version.t for better diagnostics (tokuhirom)
> * Slight performance improvements for is_class_loaded,
> lazily loading Carp, etc (Sartak)
> * Start some real documentation (Sartak)
> * Document $ENV{ANY_MOOSE} (Sartak)
> - fixes [rt.cpan.org #52339]
> * Test that Moose is loaded, not CMOP (Sartak)
> - fixes [rt.cpan.org #56093]
> * Alias class_of and more functions (Sartak)
> - requested by [rt.cpan.org #52275]
We had two speakers, Troy Will and Guy Shaw. This was Troy's first visit to LA.pm. Thank you both for presenting. Guy was a last minute fill to cover when Aran took ill.
Troy talked about his weight tracking project Getfit, written in perl. He also talked about GNU Stow, a perl system for packaging.
Guy is talking about pe-cpp, a partial c-pre-processor evaluator for making simplified header files. pe-cpp produces "sliced" cpp header files and does partial evaluation of arithmetic expressions. It does not simplifiy data structures. This is a source-to-source transformation for c header files to create simpler c header files that have been compressed by collapsing the known options. Yacc/Bison style!
After a thorough analysis of the available projects in this space, he found he needed to write his own to work around the limitations of the other. Originally written to assist C+asm integration and uses Sun's CTF for definitions of offsets and the like. "It's less scary than looking into h2ph," says Guy.
A good question: what happened to preprocessors? They seem to have fallen out of fashion, one camp views preprocessors as needed "only to cover up bad language design." Perhaps with Common Lisp and pure functional languages getting a resurgence of interest we will see more use of source-to-source transforms of code like this.
Convert::Binary::C may be useful to a similar audience, if one wants to use C data structure definitions within perl.
Verison 0.101881 of my Hadoop::Streaming module is released on CPAN.
This is a bug fix release -- fixing bugs in my test suite! I had problems with errors from the smoke testers, even though it all "worked for me." To fix this I wrote my tests in a sane manner, so they weren't held together by "gravity and good luck." See Bug #59164 for the gory details.
I'm happy and proud to report that version 0.101881 has 81 PASS and 0 FAIL results from cpants!
Now all I need is a well written tutorial on how to use it.
links
Bug #59164 for Hadoop-Streaming: Test failures on a variety of platforms
"App::Cmd - write command line apps with less suffering"
Simplify writing command line apps by breaking functionality into module(s) with a minimal runner script. Makes extending command line apps easy by adding additional sub-modules.
Have you ever asked "why do I have to document my command line options twice? once in the usage command and once in the Getopt statement?" I know I was asking just last week at the Thousand Oaks Perl Mongers meeting. If you don't ask, is it because you consider your Getopt command documentation? We discussed and compared various Getopt alternatives: Getopt::Long, Getopt::Euclid, Getop::Clade, etc.
One interesting solution is Getopt::Euclid. Euclid parses specially formatted pod commands to create the Getopt configuration. This is an awesome idea, but leaves me with two problems: 1) There is an extra step to create this parsing setup, and that means I can't test the exact code that my user will see. 2) it employs a source filter which freaks me out. Perhaps the source filter has been upgraded to use one of the PPI parsing modules instead, that would be less scary than the black magic happening in source filters.
GetOpt::Long::Descriptive (GLD) is built on Getopt::Long and takes a more verbose/descriptive input format. It outputs a usage command and an object containing options and values. Unlike Euclid, it doesn't read or create perldoc/POD.
I think adding a podweaver+Getopt::Long::Descriptive plugin would be interesting. Creating a nicely documented POD section during the dzil build step of my Dist::Zilla based modules would be a big win. I just browsed the code for Getopt::Long::Descriptive::Usage, and it looks like adding a weaver transform would be possible, if I could figure out how to extract the usage code from the module during the build step. This may be easier to visualize once I start investigating App::Cmd.
Example
From the SYNOPSIS section:
use Getopt::Long::Descriptive;
my ($opt, $usage) = describe_options(
'my-program %o ',
[ 'server|s=s', "the server to connect to" ],
[ 'port|p=i', "the port to connect to", { default => 79 } ],
[],
[ 'verbose|v', "print extra stuff" ],
[ 'help', "print usage message and exit" ],
);
print($usage->text), exit if $opt->help;
Client->connect( $opt->server, $opt->port );
print "Connected!\n" if $opt->verbose;
...and running my-program --help will produce:
my-program [-psv] [long options...]
-s --server the server to connect to
-p --port the port to connect to
-v --verbose print extra stuff
--help print usage message and exit
I'm quite fond of how s|server became -s --server, showing both the long and short form of the arguments.
Go play with these modules and let me know if you start using them. Many thanks to their Authors for sharing their work on CPAN. You guys rock. I'm going to start using these modules and will report back when I have a better feel for them. This will likely become a future topic for the Los Angeles Perl Mongers (LAPM).
At the July Thousand Oaks Perl Mongers [1] open-discussion meeting, we discussed
both CPAN::Mini [2],[3]
and App::cpanminus [4],[5]. They both work well individually, but can they be combined?
I did an example install of CPAN::Mini[2] for the meeting. This was a learning experience for me, as I'd only briefly heard of it before and this was my first install.
CPAN::Mini makes a minimal private mirror of CPAN[6], of all the current release versions of all the CPAN modules!
The idea is you keep this mirror up-to-date and anytime you need to install a module, you have it available. To keep the repository more manageable only the current version of each module is mirrored. Installation was super simple, the hardest being polling the room for a preferred CPAN mirror. We settled on ASK's develooper.com.
% cpan CPAN::Mini
% mkdir -p $HOME/mirrors/cpan
% minicpan -L $HOME/mirrors/cpan -R http://cpan.develooper.com/
Tommy then discussed his four favorite modules-of-the-moment for perl5 development and usage, one of which was App::cpanminus[4]. I'd heard of this previously, but hadn't gotten around to testing it. It installs a binary, cpanm[5], that is used to install modules. It tries to just do-the-right-thing, and install modules and keep the output to a minimum. I especially liked the flag to install to a local::lib maintained directory, which is useful in a sudo case where environment variables are annoying to pass.
I then tried to merge the two. First I installed App::cpanminus from my local CPAN::Mini mirror using cpan with the network unplugged. Success!
Then I tried to install a module with cpanm, and found that it was going to the network even though my repo was at a file:// url. Bummer!
I haven't gotten back to testing this, and a brief search found one comment from a user who reverts to cpan to use his CPAN::Mini mirror when he's away from the network. Does anyone have this working? Is it just part of the cpanminus magic that it looks online for the CPAN meta data?
My only reason to teach cpan.pm after that is to support CPAN::Mini and a local CPAN mirror. Thats the only reason I still use CPAN, I'm usually offline.
-- Pedro [7],[8]
I miss my smiling ironman badge. It is a beautiful thing.
I know it's been months, but I still miss it. Am I the only one? It was so good at reminding me to write. And not just self referential ironman related posts.
mmm skyscraper I love you.
mmm skyscraper I love you.
mmm skyscraper I love you.
mmm skyscraper I love you.
thirty thousand feet above the earth. it's a beautiful thing.
and you're a beautiful thing.
thirty thousand feet above the earth. it's a beautiful thing.
everybody's a beautiful thing.
---- Underworld, Skyscraper, I love you
Lot's of exciting happenings of late. I have two la.pm mongers write-ups that are in the todo list. Last week I hit two events. Wednesday was thousand-oaks.pm last week for an open rap session. Last Tuesday was a great talk at The Hammer museum at UCLA on the question of what is current internet use doing to our brains, which left me rejuvenated and ready to spend some quality time focusing rather than skimming back and forth.
Install DavMail
On my ubuntu system, I downloaded the deb from sourceforge and installed it manually with dpkg. I ran into a problem where I didn't have the proper swing libaries installed and the partially installed dpkg blocked the install of the swing libraries. In reality it was as simple as answering "Y" to "delete DavMail" and letting the swing install go through.
#manually download deb from http://sourceforge.net/projects/davmail/files/
The install integrated into the menu system, providing a menu entry to launch the app:
Applications->Internet->DavMail.
Upgrade/Install Thunderbird 3.1
3.1 is currently required for lightning. I installed via the ubuntuzilla repository. Caveat: only 32 bit builds are available. I installed via the ubuntu repository, as per the Instructions.
Create a new sources file /etc/apt/sources.d/ubuntuzilla.list containing:
deb http://downloads.sourceforge.net/project/ubuntuzilla/mozilla/apt all main
Install Lightning into Thunderbird.
This is most easily done directly through Thunderbird:
Tools->Add-ons menu item.
[Get Add-ons] button
Type Lightning in the search box and press enter to search.
push [Add to Thunderbird] button on the Lightning item.
confirm install
Restart Thunderbird
Configuration
The devil is in the details. Getting the correct configuration from our hosted exchange server took quite a bit of trial and error. The email system predates the current company, so I have at least three logins:
My primary email address
username @ rubiconproject.com
This is the address used to send and receive mail.
Same account at a different domain (the founder's vanity domain).
username @ addante.com
This is the address used to authenticate with the pop/imap servers and to access Outlook WebMail.
my username with internally assigned id number attached. No domain.
username_12345
Used internally. Will be used in our ldap setup.
Launch and Configure DavMail
Launch from menus Applications->Internet->DavMail, which launches to a gnome icone in by the clock.
Open settings right-click DavMail icon->Settings...
Set the OWA (Exchange) URL : https://exg3.exghost.com/Exchange
Make note of the ports for CalDav (1080) and LDAP (1389), change if desired.
Configuration settings. Base DN and Bind DN were tricky.
Name: proxy ldap
Hostname: localhost
BaseDN: ou=people
Port: 1389
Bind DN: username_12345
[OK]
Test the connection:
select proxy ldap and press Enter
[Offline] tab
[Download Now].
enter username@addante.com as username and correct password in the authentication box.
if the download completes and "Replication Succeeded" appears, all is working.
And there you have it, working exchange integration through open standards. Yay! It'll only take 15 minutes or so total to install now (after my hour putzing it around and 3 hours writing it up.)
I now have ldap lookup and caldav alerts functioning. I haven't delved that far into the system, but it's a big step up from my previous interaction lightning. I'll see what happens when I get my next meeting invite and attempt to reply via thunderbird.
Do you have CPAN::Reporter installed? Did you maybe not know what it is, what it does, and why it's the easiest way to help the perl+cpan community? CPAN::Reporter sends back test results every time you download a module from CPAN. This gives module authors something tangible to know that people are using their modules and to automatically report errors.
Now anyone with an up-to-date CPAN.pm can contribute to CPAN Testers -- no smoke server needed.
...
Becoming a CPAN Tester with CPAN::Reporter is easy. From the CPAN shell prompt:
cpan> install CPAN::Reporter
cpan> reload cpan
cpan> o conf init test_report
cpan> o conf commit
My Hadoop::Streaming module has all sorts of crazy errors on esoteric platforms. I only know this because of automated smoke tests run by CPANTesters. It would be nice to have some reports from actual users mingled in with the automated runs.
In the latest release I pushed out over Independence Day weekend, I added monitoring on STDERR from my sub-command tests. Now I have some test results that capture error messages from external apps I try to run from my tests. At least now I have a chance of figuring them out... not sure I understand these error messages yet. Maybe they'll make more sense tomorrow. I'd like to make it so all my users see this output from cpan:
All tests successful.
Files=5, Tests=12, 2 wallclock secs ( 0.05 usr 0.00 sys + 2.04 cusr 0.20 csys = 2.29 CPU)
Result: PASS
(/usr/bin/make test exited with 0)
CPAN::Reporter: Test result is 'pass', All tests successful.
CPAN::Reporter: preparing a CPAN Testers report for Hadoop-Streaming-0.100270
CPAN::Reporter: sending test report with 'pass' to cpan-testers@perl.org
Hiya Mongers! See ya tomorrow, Wednesday June 30th for our next perl mongers meeting. All the details are at the la.pm.org website. Presentations are still "to be determined."
Please let me know if you are coming and if you'd like to present!
Tentative presentation ideas:
CPAN author tools: care and maintenance of your cpan module, the rt queue, cpants.
Scenario: "my module works great for me but fails install tests on 90% of hosts, how to fix that." I wish that was completely hypothetical.
Perl hadoop streaming examples follow-up. I didn't get to show much code for Hadoop::Streaming::Mapper last time around. I'd like to show snippets of the code I'm working on now for $work (cleansed appropriately)
mega extreme prorgramming to the max. "Pairing" with a room full of coders (instead of just a pair) trying to code onto the main display. Expanding App::PM::Announce to our nefarious purposes
Does anyone out there know the status of the "IronMan Status Images"? They disappeared when the code rewrite went out. I miss seeing mine, but I miss seeing them on random blogs even more.
I don't have the tuits to rewrite that part of the system, but maybe if I knew where the blog meta info was kept, or even if the old csv list is being updated with each blog's posts listed by date( unsorted ). Maybe I will be writing it afterall.
I listened to the Manager Tools podcast on keeping a "Delta File" this morning [Career Tools]. A Delta File is where you list stuff that annoys you about your job and/or your manager that you promise that "I won't do that when I'm a manager. I'll fix it!" When you do become a manager, you can look back and get feedback from your previous self, lest you find yourself doing a scene-for-scene remake of your previous manager's actions.
Waiting for me on gale chat was a conversation on hideous remakes and sequels. Beautiful Synchronicity! The pillaging of my childhood memories continues, thanks to the soulless profiteering freaks in Hollywood, to paraphrase Jason and provides plenty of fodder for my 'Hollywood Executive Delta File' to remind myself what not to do when I become a hollywood executive. Remind me not to read slashfilm, lest I learn about these things sooner than I need to.
I do plan to go see A-Team soon, it looks pretty sweet. I mean, it's the friggin' A-Team!
The A-Team and The Karate Kid?
No, seriously, W - T - F? I mean... I just... why?
--jason
Just wait until Peter Berg's "Battleship" [1], Sony's "Risk" [2], Gore
Verbinski's "Clue" [3], Steve Oedekirk's "Stretch Armstrong" [4], Etan Cohen
and Kevin Lima's "Candyland", and even Ridley Scott's "Monopoly" [6]
g33k d1nner (Los Angeles Geek Dinner) is back for one last performance: tonight only. Come out to Cantor's deli in Midtown around 7:30 to meet and greet. Leave your sales pitches at home.
The personal .cpan directory for perl 5.10.1 under ubuntu 10.4 has moved from $HOME/.cpan to $HOME/.local/share/.cpan. I was very confused to get messages about not being able to write to /root/.cpan/build when I knew I had that overridden in my personal configuration file.
Once I found this new location, I was able to delete the new .cpan directory and replace it with a symlink to my old ~/.cpan. Now I can get back to building modules as a non-privileged user into a local::lib based configuration.
Delete empty new .cpan directory and replace with a symlink to my old .cpan: rm -rf $HOME/.local/share/.cpan && ln -s $HOME/.cpan $HOME/.local/share/
The exception core for Thunderbird is separate from the one for Mozilla / Firefox, so if you've already added an exception there you'll need to repeat it for Thunderbird. I needed to do this because I get legitimate emails from a site that come to me from the internal company domain using our external company SSL certificate. Having to click through 3 pop-ups each time I saw a bamboo build status message is a non-starter.
I wonder if there is a simpler perl interface to directly manipulate these configuration options? Perhaps using Mozilla::Prefs::Simple?
I've updated my laptop to Ubuntu 10.4. The upgrade went very smoothly, and I'm pretty happy with it. I needed to upgrade to thunderbird3 as thunderbird2 was having trouble sending mail to my work email server -- 50 seconds of single thread blocking doing the AUTH calculation on each send had made it impossible to work with.
The metacity window manager configuration has been changed considerably: the minimize, maximize, close buttons have been moved from the right to the left, and reordered. Rather than adjust to these new settings, I modified the configuration to put them back where they were before. This is a good reminder that I should go back to my own window manager and config. I'm not sure what will be best for the laptop, I am very happy with ion, at least with the ideas behind it, it's kind of a pain to configure. I still haven't duplicated my ion1 settings in ion3. Now that the developer gave up on it and switched to windows (sigh), I'm not sure if I should move on.
How to change the metacity button layout: Edit the gnome config for apps/metacity/general/button_layout, which is a string describing the button locations. I have changed mine to menu:maximize,minimize,close. Using the gconf-editor tool, navigate to apps/metacity/general, then find the button_layout option. Changes are immediate. Invalid button names are silently ignored, to future proof against updated button names in later configurations.
Thanks to lifehacker and how to geek for tips. Check out the howtogeek article if you need a walk through for gconf-editor.
An easy way to get back into biking/walking and save your soul (and our planet). Pick a one (1) mile trip, once a week, and bike or walk it instead of driving. Your car is least efficient on those short routes and you need the exercise anyways. win-win! What a great idea. As you get into the hang of it, you can add more trips via bike and extend to a few miles.
nearly half of all trips in the United States are three miles or less; more than a quarter are less than a mile.
Also, if you do the exercise and realize you have no destinations within 1 mile of home, why do you live there? move. seriously.
What if there was something you could do to improve your health and fitness, save money, reduce our dependence on foreign oil, improve air quality, and reduce your carbon footprint, all at the same time—would you do it?
Maybe that’s a bit of preaching to the choir here, but that’s the idea behind The 1-Mile Solution. As Andy Cline explains,
The idea is simple: Find your home on a map…Draw a circle with a 1-mile radius around your home. Try to replace one car trip per week within that circle by riding a bicycle or walking. At an easy riding pace you can travel one mile on a bicycle in about seven minutes. Walking takes about 20 minutes at an easy pace.
Another DB company from database guy Mike Stonebreaker (Postgres, Ingres, etc). Sounds fast and encourages the use of stored procedures and lets you write them in Java. Crazy. Anyone heard of this? tested it? using it?
Under the leadership of Postgres and Ingres co-founder, Mike Stonebraker, VoltDB has been developed as a next-generation, open-source DBMS that has been shown to process millions of transactions per second on inexpensive clusters of off-the-shelf servers. It has outperformed traditional OLTP database systems by a factor of 45 on a single server, and unlike NoSQL key-value stores, VoltDB can be accessed using SQL and ensures transactional data integrity (ACID). VoltDB is ideal for developers of ad serving, gaming, software as a service (SaaS), financial trading, on-line businesses and other systems with large, fast-growing transaction volumes because VoltDB scales out easily on low-cost servers while providing automatic high availability for 24x7 operation.
We had a lovely talk last month at LA Perl Mongers on Cassandra, a highly distributed, eventually correct key-value store with just a touch of metadata. This is just one of the current crop of key-value stores discussed as "NOSQL" (what a terrible moniker, but interesting ideas in the distributed key-value space).
I'm exciting to see an ACID compliant fast db. I do wonder what has been skipped to make it speedy. Can it persist to disk? snapshot to disk? Or do I just have to maintain enough of my live servers to keep the data up?
What project can I test this out with?
Postgres and Ingres father Michael Stonebraker is answering NoSQL with a variant of his relational baby for web-scale data — and it breaks some of the rules he helped pioneer.
On Tuesday, Stonebraker’s VoltDB company is due to release its eponymous open-source OLTP in-memory database. It ditches just enough DBMS staples to be faster than NoSQL while staying on the right side of the critical ACID database compliance benchmark for atomicity, consistency, isolation and durability of data.
Another question: how do I interact with the DB? I don't see a DBD::Volt namespace yet, and the db *really* wants to be called via stored procedures. From the FAQ:
3.4. Why doesn't VoltDB support ODBC/JDBC?
The primary interaction with a VoltDB database is through stored procedures, and the stored procedure interface (callProcedure) is easy to understand and interpret for those who are familiar with procedure calls through ODBC.
More importantly, although it is possible to perform occasional ad hoc queries on a live VoltDB database, you cannot modify the schema or perform other arbitrary actions through interactive SQL statements. Therefore a generic database connector is not useful when dealing with VoltDB.
Some comparisons also from the FAQ:
2.2. How does VoltDB differ from MySQL used with memcached?
Memcached is a distributed in-memory cache. It provides none of the reliability or consistency of an ACID-compliant SQL database. Memcached is often used as a cache in front of MySQL to improve performance of frequent transactions. But this requires the client application to manage the hash algorithms for both memcached and MySQL, as well as all of the transactional consistency and reliability between the two systems and across the cluster.
VoltDB automates all of these functions with none of the penalties, while providing similar or better performance. In addition, caching can help improve read performance for products such as MySQL, but does not help scale write performance. VoltDB scales linearly for both read and write performance.
2.3. How does VoltDB differ from a Key-Value Store (such as Cassandra)?
Key-Value stores are a mechanism for storing arbitrary data (i.e. values) based on individual keys. Distributing Key-Value stores is simple, since there is only one key. However, there is no structure within the data store and no transactional reliability provided by the system.
VoltDB provides the ability to store either structured or unstructured data, while at the same time providing full transactional consistency, reliability, and standard data access syntax through ANSI SQL. VoltDB can even define a transaction that includes reads and writes across multiple keys. Finally, VoltDB provides comparable or better performance in terms of throughput.
The Perl Survey 2010 is now live. Its purpose is to better understand
the demographics and opinions of the Perl community. You can complete
the survey at http://survey.perlfoundation.org - it should take about
10 to 15 minutes.
Once you've done that, please let your relevant friends and colleagues know about the survey so they can complete it as well. My aim is to get a response of over 1000 individuals, and to run the survey (lightly adapted) every two or three years so we can see how the community changes over time. The official announcement of
the survey is here:
Odds are, you didn't read about the 5.12 release outside of Ryan Paul's overview on Ars Technica. You see, Perl not being dead and just continuing business as usual doesn't make for compelling news. Also, let's admit, the Perl community has a great deal of competence in producing software, but couldn't market its way out of a soaking wet paper bag.
Interesting read over at ostatic.com, a guest piece by Jeff Hobbs. This topic is a proverbial discussion point in the perl community and has heated up quite a bit over the past year or two, "how to better market the awesomeness of perl?" It's hard to evangelize when we're busy getting stuff done. This article provides a nice collection of the arguments why 'perl is still relevant.'
Disclosure: ActiveState produces a professionally packaged perl for windows, so they are of course a bit biased into the pro-perl camp. (And they may be feeling some pressure from Vanilla perl now shipping a "normal" perl for windows).
Charlie Munger spoke for three hours at the Wesco financial meeting yesterday. Charlie is a wise old man. I played hooky from work yesterday to attend my third yearly meeting. The 1500 of us in the room don't get much in the way of money investment advice but instead lots of advice on time and wisdom investment. He is a big fan of mental models (of behavior) and checklists.
He speaks in frequent double-negatives. I believe this is a consequence of his mental patterns. Instead of "I do X," he'll say, "I avoid doing not-X." This is not insignificant. He has checklists in his head of behaviors to watch out for. These are his mental Unit Tests, he ticks through them to make ensure he's avoiding these (self-)destructive traps.
These checklists are based on years of watching people succeed and make mistakes. Mistakes are easier to notice and analyze and turn into rules of things to avoid, but only if looked at full on without sugar coating. These are the edges of the human veil of rationality, places where we still think we are rational but we are not. This is where damage and failure happen.
He watches for systemic failure of incentives: incentives that are misaligned with behavior that is good for society; systemic failures of the human rationality. Examples include selection bias, "I'm doing it so it's right", "I did well so I must have done the right thing", "it's tied to what I do for work, so it is ok."
You can see a great example of this in his interview this week with CNN Money and last week with CNBC about Lehman Brothers. When asked about why Lehman's Fuld was defective, he runs down a list of reasons. It's like he's reading off of a testing report. His first answer is so obvious to him, that he doesn't expand on it here. If your system is set to bring out the worst in people, you will get the worst in people, 100% of the time.
The system was all wrong. It wasn't that the people were so bad. The systems were all wrong. The systems brought out the worst in people instead of the best.
Q: What characteristic is it in Dick Fuld [...] that is defective?
A: Hard to name a defect he didn't have. [...] Yeah really.
Dick Fuld would not be, for me, an exemplar of the best that can exist in investment banking.
[...]
Q: Worse than Bear Stearns?
A: Yes.
Q: Why?
A: Meglomania.
Envy Driven.
Poor Cognition.
Isolation.
And of course, its an interesting example of corporate governance. 'Cause You didn't have to be very wise to see that the place had the wrong leaders and they had a board that did exactly nothing to fix their problem.
Looking at this interview with an adware author (Thanks for the forward, J^K), I see that interviewee has learned one of these models, the power of gradualism. He inadvertently shows that he is unaware of another, the tendency to dehumanize the other end of a business transaction to make it easier emotionally to take advantage of them. It doesn't sound like he's aware that he's marginalizing his target: first they're less-savvy, then they're apathetic or ignorant. This first model is helpful to him to feel better about his reprehensible actions while the second helped him to take those actions. Which model and associated tests will be more effective in your mental toolbox?
It was funny. It really showed me the power of gradualism. It’s hard to get people to do something bad all in one big jump, but if you can cut it up into small enough pieces, you can get people to do almost anything.
Most adware targets Internet Explorer (IE) users because obviously they’re the biggest share of the market. In addition, they tend to be the less-savvy chunk of the market. If you’re using IE, then either you don’t care or you don’t know about all the vulnerabilities that IE has.
You'll hear echos of these sentiments from all of the bankers being interviewed on Capital Hill. They are too close to the problem to be aware of their model deficiencies. The brief period where our anger can trigger change is slipping away. How shall we find the root problems and re-engineer the incentive system to keep them from reoccurring?