lunedì 11 marzo 2013

Apache Threads models


questa settimana Debian rilascia apache 2.2

ecco quali pacchetti richiederà di aggiornare:

apache2 2.2.16-6
        apache2-mpm-prefork
        apache2-utils
        apache2.2-bin
        apache2.2-common

 apache2-mpm-prefork cattura la mia attenzione: cosa significa esattamente prefork? quali implicazioni ha? quali alternative esistono?
uno sguardo ad apt-cache/synaptic e una ricerca in rete ci dice che ci sono un certo numero di moduli mpm*, ma di gran lunga il più usato (almeno su piattaforme su linux) è prefork e ci sono tre principali alternative: prefork, worker, e event. In sostanza, essi rappresentano l'evoluzione del web server Apache, e diversi modi in cui il server è stato costruito per gestire le richieste HTTP ottimizzando le risorse disponibili per i bisogni del tempo, durante la sua lunga (in termini di software) storia, e con la upcoming 2.4 il team di sviluppo si ta concentrando sul enuove applicazioni client e gli ambienti server cloud prefork mpm_prefork è il modello storicamente più utilizzato, ha il vantaggio di essere compatibile con tutti i sistemi operativi e di essere molto sicuro/affidabile, per queste ragioni è il default. Questo modello prevede di avviare un certo numero di processi figli per servire le richieste e ciascuno dei processi figli servono solo una richiesta alla volta. Prevede un processo master che ha il compito di avviare un numero costante di processi a cui poi passare l'elaborazione vera e propria, secondo molte prove risulta più veloce rispetto alle MPM più moderne fintanto che si ha a che fare con una unica richiesta per volta e in genere con mod_php, tuttavia richiede più risorse di memoria, dato che i processi, che occupano memoria, sono fatti attendere in linea fino a quando un processo del server sia disponibile. Inoltre, nel tentativo di scalare l'applicazione aggiungendo processi figli, si potrebbero facilmente arrivare al limite di risorse della macchina. Probabilmente non sarà obbligatorio utilizzare prefork se non avete bisogno di un modulo che non sia thread-safe. Da usare se: Avete bisogno di moduli che non sono thread-safe, come mod_php. Anche in qul caso, si potrebbe considerare le alternative FastCGI e php-fpm. Non utilizzare se: avete forti constrain di memoria o applicazioni altamente parallele worker mpm_worker utilizza il threading - che è un importante aiuto per la concorrenza. worker avvia alcuni processi manager, che a sua volta avviano alcuni thread figlio, fin qui sembra simile a prefork, ma la differenza sta nella grandezza dei processi avviati, in pratica questi sono più piccoli e leggeri, mentre in prefork è come se l'intero server si moltiplicasse in memoria. questo approccio produce una concorrenza migliore perché una nuova richiesta entrante attende solo l'avvia di un nuovo thread invece che la duplicazione del server come in prefork. Da usare se: Sei su Apache 2.2, o 2.4 e puoi risparmiare un po' di ram facendo qualche test di carico in più sulla tua applicazione Non utilizzare se: applicazioni mission critical in cui non volete prendere il minimo rischio, applicazioni che volete far girare su più piattafome e volete escludere che possano verificarsi problemi connessi ai thread. Tuttavia, si noti che i thread sono collegati a connessioni e non "richieste" - il che significa che una connessione keep-alive mantiene sempre attivo un thread fino a quando viene chiusa (che potrebbe essere un lungo periodo di tempo, a seconda dell'applicazione). Ed è per questo che abbiamo ... event mpm_event è molto simile a worker concettualmente, ed è appena stato promosso da 'sperimentale' a 'stable' in Apache 2.4. La grande differenza è che utilizza un thread dedicato per affrontare connessioni keep-alive, e invia le richieste ai thread figlio solo quando una richiesta è stata effettivamente eseguita (permettendo a quei threads di liberare risorse subito dopo che la richiesta è stata gestita). Questo è molto importante per la concorrenza di clients che non sono necessariamente tutti attivi contemporaneamente, ma fanno brevi richieste occasionali, e quando i client potrebboro avere un timeout keep-alive lungo. L'eccezione è con connessioni SSL, in questo caso, si comporta esattamente come worker (assegna a una determinata connessione un determinato thread fino a quando la connessione si chiude). Da usare se: Sei su Apache 2.4 e vuoi i threads, ma non vuoi threads in attesa di connessioni inattive. tutti vogliono risparmiare risorse! Non utilizzare se: non sei su Apache 2.4 o hai bisogno di prefork per la compatibilità.

martedì 12 febbraio 2013

Codice sorgente in blogger

L'evidenziazione della sintassi dei linguaggi di programmazione in blogger non è automatica e occorre ricorrere a una libreria esterna per ottenerla, fortunatamente il procedimento è abbastanza ben documentato, eccolo:


1. fai una copia del template di default di blogger
2. nel template blogger template inserisci il css 
e i files javascirpt:


   1 <link rel="stylesheet" type="text/css" href="http://syntaxhighlighter.googlecode.com/svn/trunk/Styles/SyntaxHighlighter.css">
   2 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shCore.js" type="text/javascript"></script>
   3 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCpp.js" type="text/javascript"></script>
   4 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCSharp.js" type="text/javascript"></script>
   5 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushCss.js" type="text/javascript"></script>
   6 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushDelphi.js" type="text/javascript"></script>
   7 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJava.js" type="text/javascript"></script>
   8 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushJScript.js" type="text/javascript"></script>
   9 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPhp.js" type="text/javascript"></script>
  10 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushPython.js" type="text/javascript"></script>
  11 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushRuby.js" type="text/javascript"></script>
  12 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushSql.js" type="text/javascript"></script>
  13 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushVb.js" type="text/javascript"></script>
  14 <script src="http://syntaxhighlighter.googlecode.com/svn/trunk/Scripts/shBrushXml.js" type="text/javascript"></script>


3. salva il Template.
4. la sintassi dovrebbe essere attivata sui blocchi pre con attributo name=code e class=nome linguaggio


 name="code" class="PHP">
... some code here ...


5. i linguaggi supportati sono:
LanguageAliases
C++cppcc++
C#c#c-sharpcsharp
CSScss
Delphidelphipascal
Javajava
Java Scriptjsjscriptjavascript
PHPphp
Pythonpypython
Rubyrbrubyrailsror
Sqlsql
VBvbvb.net
XML/HTMLxmlhtmlxhtmlxslt

lunedì 11 febbraio 2013

Youtube: Musica a Volontà

Stanchi della solita playlist? vi descrivo i semplici passaggi con cui dotarsi di un sitema per scaricare da youtube tutti i video pubblici e sono molti, soprattutto di artisti meno noti. il sistema può essere adattato sulle principali piattafome perchè i programmi descritti funzionano su linux, osx e windows, tuttavia descriverò il mio setup su linux.
sudo apt-get install ffmpeg minitube
il primo program di interesse è minitube. una vera scoperta per quanto miriguarda, permette di cercare video con la API web di youtube e scaricare in locale il video per vederlo una volta ofline. velocissimo e sicuro.

il problema che si pone è che scarica video in formato .mp4, non comodi per l'archiviazione o essere ascoltati sullo smatphone. il passaggio successivo è quindi di convertirli in mp3 con il comando

ffmpeg -i a.mp4 -f mp3 -ab 192000 -vn b.mp3
i parmametri non ovvi sono: -f mp3, vogliamo in output un mp3. -ab 192000, ffmpeg codificherà l MP3 a 192Kbps. -vn significa "No video in output". su può automotizzare ulteriormente convertendo tutti files scaricati (di default nella cartella downloads) in un colpo solo, ecco il lo script di shell:
#!/bin/bash
for f in *.mp4; do
    ffmpeg -i "$f" -f mp3 -ab 192000 -vn "$f.mp3" &
done
una cosa che non tutti sanno è che è possibile riprodurre i files musicali senza ricorre a programmi con interfaccia grafica, ecco il comando:
mpg123 *.mp3
questo metodo ha il vantaggio di utilizzare risorse, RAM e CPU, quasi nulle sul vostro pc ed essere velocissimo da lanciare, non richiede nemmeno l'operazione di selezionare i files da riprodurre con l'interfaccia grafica e salvare la playlist. se una canzone non ci va in un determinato momento, basta inviare ctrl-C sulla console. semplice ed efficace. funziona anche da remoto. se preferite avere una playlist
find . -iname "*.mp3" > playlist.txt
mpg123 -Z -@  < playlist.txt
ovviamente è puro testo e va editata manualmente per ottenere il risltto desiderato. un paio di ulteriori spunti: il titolo dei video e dei files lascia abbastanza a desiderare, una ulteriore possibilitàè sfruttare i metadati presenti nel video per estrarne il titolo, un programma che fa questo è mp3renamer. a questo punto potrebbe essere interesante produrre un CD da ascoltare in qualche lettore o in auto. un modo molto veloce per ottenerlo è usare il comando mp3burn, che crea automaticamente un cd a aprtire da una cartella contenente i files mp3. a questo punto c'è tutto quanto il necessario per procurasi musica a volontà da caricare sui nostri lettori portatili e in tutta sicurezza, senza dover navigare siti poco garantiti, perdere tempo a cercare ad hoc in rete e far ricorso a programmi di pear to pear decisamente più lenti. inoltre con poche picolle utility possiamo ulteriormente automatizzare "for fun and profit"!

venerdì 18 gennaio 2013

PHP parallel job execution

per importare dati da un sistema informativo aziendale un design piuttosto comune consiste nel costruire programmi di importazione e validazione che girino automaticamente, appositamente schedulati, solitamente durante la notte quando un numero limitato di utenti non sarebbe disturbato da carichi anomali del sistema. tuttavia per rendere più veloci importazioni/validazioni/elaborazioni che si avvalgono di numerose routine, può essere vantaggioso spezzare i compiti in programmi specifici e far girare i job, quando logicamente possibile, in parallelo. PHP dispone sotto linux di una api per il controlo dei thread, pnctl_*(), tuttavia bash mette a disposizione una astrazione ancor più comoda:
exec("ls -la > ls.txt &"); exec("ls -la / > ls_.txt &");
questo manda in esecuzione parallela due istanze del comando ls. è un metodo semplice ma ha il vantaggio di permettere di strutturare i programmi come unità piccole facili da testare che verranno poi gestite da un unico script controller. tuttavia si presenta un problema, lo script principale o controller deve conoscere lo stato del job in esecuzione, cioè se è completato, per poter lanciare altri programmi che dipendano dall'output dei precedenti. esistono diversi metodi di Inter process communication, PHP ne implementa diversi, un meccanismo particolarmente semplice ed efficace per il caso specifico, che richiede lo scambio di pochi dati sulla stessa macchina: cioè quello dei Semafori UNIX.
if ($sem = sem_get("script_signal_123",1)) { // this "1" ensures that there is nothing parallel if (sem_acquire($sem)) { // questo controllo assicura che una sola istanza dello script sia in esecuzione // your logic here } sem_release($sem); } else { die("another job exists"); }
questo testo approfondisce l'argomento indagando i dettagli di altri metodi di scambio dati tra processi, non necessariamente residenti sulla stessa macchina, in grado di gestire quando necessario, grandi quantità di dati.

martedì 8 gennaio 2013

command line google translate

tradurre automaticamente da commandline usando google translate, sembra essere più semplice del previsto. Fai attenzione a procurarti una key delle API google e inseriscila. Ecco il codice (PHP per Linux, con piccoli adattamenti funziona anche su windows) della mia soluzione:


   1 #!/usr/bin/env php
   2 <?php
   3 /*
   4 traduce con google translate da CLI una parola o frase
   5 */
   6 
   7 $key = "";
   8 $res = file_get_contents("https://www.googleapis.com/language/translate/v2?key=".$key."&q=".urlencode($argv[3])."&source=".$argv[1]."&target=".$argv[2]);
   9 
  10 $a = json_decode($res, true);
  11 
  12  
  13  
  14  
  15 echo $a['data']['translations'][0]['translatedText'];
  16 echo "\n";
  17 

martedì 28 agosto 2012

BEST PRACTICES FOR DICTATORS


Parliamo di Social Media, ma da una prospettiva inedita.
A questo indrizzo un manuale inusuale, con cui confontarsi.

L'autore usa l'artificio retorico del "Avvocato del diavolo", propone a un ipotetico regime dittatoriale una analisi delle cause dei pericoli derivati dalla libertà di pensiero ed espressione e contromisure, anche tecniche, citando casi specifici nelle dittature contemporanee.

ma cosa è la "collective consciousness" di cui il dittatore ha così timore? è il processo di conoscere la realtà, economica e legale in primis, di formulare una roadmap che vada a correggere i problemi, di scegliere un rappresentante in grado di realizzare quella roadmap e valutare l'operato di questo rappresentante. tutto questo ha bisogno di informazione per essere efficiente. è un vero e proprio processo economico perché il cittadino deve in pratica scegliere il piano e l'esecuzione del piano che maggiormente gli conviene. internet è stato diffuso per migliorare l'economia, le sue implicazioni politiche sono side effects sgradevoli, ma che almeno al momento gli states sono ingrado di gestire(caso wikileaks).

E' fondamentale per qualsiasi cittadino capire quali sono i punti di forza del sistema di comunicazione che ci rende liberi e come i nostri governi, compreso quello italiano che non brilla per libertà d'espressione, possono limitare o aumentare la libertà individuale.

l'autore individua alcune "Essential conditions" da raggiungere
Freedom from political chaos: il dittatore non vuole rendere conto ad altri cittadini, cioè istituzioni che le rappresentano. deve pilotare le istituzioni per renderle innoque. il potere deve schermarsi dai cittadini che dovrebbe servire.
Freedom from decentralized telecommunication infrastructure: internet è pericoloso perché non ha un solo punto di emissione, come la tv, ma ne ha moltitudini, quindi è difficile da controllare
Freedom from democratically elected officials: il dittatore non vuole istituzioni con potere derivato dal fatto che i cittadino hanno scelto un loro rappresentante.

una strategia operativa viene delineata in "Creating optimal surveillance conditions"
Suppressing anonymity: l'anonimato permette libera espressione e la verità può emergere. se il potere agisse per servire la nazione non sarebbe un problema giustificare le proprie azioni, ma il potere spesso agisce contro la legge per mantenere il potere. se vi è libertà di parola la gente potrà sapere la realtà e potrà scegliere. la librtà di parola va soppressa e al suo posto occorre un massiccio uso di propaganda e di informazione leggera e/o patriottica.
Suppressing security: non permettere di usare canali crittografati.
Run your own tools and services: il regime non può esercitare un efficace controllo sugli gli strumenti(facebook, twitter,gmail) prodotti al estero. vanno sostituite le piattaforme straniere con strumenti propri e controllabili. anche se tecnicamente inferiori, il controllo ha maggiore priorità.

fondamentale la discussione in "Depoliticization means entertainment.", che è la declinazione con strumenti moderni del panem et circenses, un'idea ancora assolutamente valida e praticata in tutto il mondo.

queste sono le armi, concettuali prima che informatiche, nelle mani del nemico. il nemico è la dittatura di un paese in via di sviluppo ma è anche la Casta in un paese in declino, il management in una azienda o la leadership male intesa in una associazione. occorre opporsi al loro uso efficace. la libertà nasce con la libertà di pensiero e uso di pensiero critico, ha bisono di fonti informative corrette e cittadini determinati a conoscere e capire.







mercoledì 18 luglio 2012

risposta a: "Perché non ho neanche un amico negro?"

Emanuel Guarniero si chiede "Perché non ho neanche un amico negro?"

la domanda apparentermente provocatoria e banalizzante come è nel suo stile nasconde invece un interrogativo sincero a cui è difficile rispondere e la risposta comporta approfondire due concetti complicatissimi: cosa sia l'amicizia, cosa significa realmente l'appellativo Negro. Di seguito la mia risposta semiseria all'interrogativo

quando i neri saranno ricchi come i bianchi allora avrai amici neri veri. negro è un offesa e bianco no perché negro significa povero e schiavo. se tu fossi povero e schiavo ti faresti amici negri e i ricchi troverebbero un modo offensivi di chiamarti che significhi povero e schiavo, cioè inferiore. se non ci fosse l'inferiorità sociale non ci sarebbe gerarchia e i negri farebbero quel cazzo che gli pare invece di lavorare per i capricci dei ricchi. tutto questo funziona perché gli uomini sono ignoranti avidi e violenti. Gandhi ha capito che se togli la violenza la cultura si trasmette velocemente e gli schiavi si emancipano, se togli l'avidità di possedere i ricchi non hanno esche con cui comprarne il tempo e gli schiavi si emancipano, se togli l'ignoranza i ricchi non possono più imbrogliare e gli schiavi si emancipano. non puoi avere un amico negro perché non puoi avere un amico vero più povero di te, l'amicizia è reciprocità e la reciprocità non può esistere tra persone troppo distanti economicamente. tu non hai neanche amici miliardari: ti starebbe sul cazzo la ferrari, la festa in villa con piscina ogni 3 giorni, sono sempre in viaggio e non lavorano, nel senso che conosciamo io e te almeno, gli sprechi assurdi che non puoi eguagliare, ma soprattutto non sopporteresti che loro comandano e i poveri ubbidiscono. tra amici si è alla pari e le cose si fanno con l'accordo. negro serve ai ricchi per offendere il servo che si ribella, marchiarlo dell'infamia davanti ad altri ricchi che lo aiutino a sottometterlo. per questo è offensivo e non è un vero amico chi ti chiama negro o altro modo per poveraccio. inoltre è violenza verbale, e serve a creare paura della condivisione, che crea ignoranza, che crea inferiorità.
gradirei approfondire il discorso con il vostro contributo.

mercoledì 21 marzo 2012

Career Advice: How do you know when its time to move on


Da una conversazione con un vecchio amico, nasce lo spunto per riflettere su quanto a lungo sia opportuno fermarsi in una azienda prima di passare ad apprendere nuove competenze e crescere. Cito una recente discussione su Quora e una risposta in particolare che merita l'attenzione del professionista che non si accontenta della "stabulazione fissa".



A number of red flags should cause you to reconsider your position at your current company, including:


  • being compensated unfairly.
  • being mistreated, undervalued, or disrespected.
  • disagreeing with the fundamental strategy or practices of the company and not being in a position to change them.
  • failing to get along with your manager and your teammates.
  • failing to fit in with the company culture.

These types of reasons aren't too hard to identify and provide concrete justifications for trying something new.
It's also time to leave when your learning rate at your job tapers off and starts to plateau.  This is a much more subtle reason for leaving that's harder for people to recognize but likely affects a much larger group of people.  Transitioning to another team or company provides an opportunity to switch to a different learning curve and to accelerate your learning.
Paying attention to your learning rate is important in general but particularly important for young professionals.  Learning is an investment in yourself for the future.  It also compounds -- knowledge not only begets knowledge, but more knowledge gives you a foundation upon which to gain knowledge even faster.  This is why most people learn more in college than they did in high school and more in high school than they did in earlier years.  Ideally, out of college, you should set yourself up to learn even more than before.
Palantir co-founder Stephen Cohen captures the importance of the compounding effects of learning, in an argument for why college graduates ought to work at startups instead of established companies [1]:
If you graduate Stanford at 22 and Google recruits you, you’ll work a 9-to-5. It’s probably more like an 11-to-3 in terms of hard work. They’ll pay well. It’s relaxing. But what they are actually doing is paying you to accept a much lower intellectual growth rate. When you recognize that intelligence is compounding, the cost of that missing long-term compounding is enormous. They’re not giving you the best opportunity of your life. Then a scary thing can happen: You might realize one day that you’ve lost your competitive edge. You won’t be the best anymore. You won’t be able to fall in love with new stuff. Things are cushy where you are. You get complacent and stall.
Startups might not be for everyone, but the message about not shortchanging your intellectual growth rate still applies.
What about a passion for what you're working on?  A strong passion and excitement in your company mission or in what you're doing is critical to sustaining a steep learning curve.  Passion and meaningful work supply the motivation for long-term learning [2] and allow you to stay in a state of flow more often.  Mihayli Csikszentmihalyi, one of the world's leading researchers in positive psychology, developed the theory of "flow," a state where you enjoy what you're doing so much that you don't even notice the passage of time, and found that more flow generally leads to more happiness. [3]  It's hard to stay motivated to learn or to enter a state of flow in the long run unless you believe in and enjoy what you do, and it's also hard not to be getting better if you love what you're doing.
Assessing your learning rate first requires identifying the many different types of learning can happen on a job:

  • Technical learning specific to your job function.
  •   For a software engineering position, for example, this might include things like learning a new language, getting familiar with new tools, improving your ability to design new systems, etc.  Getting better at these skills makes you more proficient as an individual contributor.
  • Prioritization skills.
  •   Oftentimes, there are tens or hundreds of things that you could be working on that might generate value.  Figuring out the highest leverage activity that generates the most value for the least amount of work at any given point is hard, but it's probably the single most valuable lesson you can learn professionally. [4]
  • Execution.
  •   Learning how to or how not to build and deliver a great product or service and how to do it consistently and on time takes practice.
  • Mentorship / management skills.
  •   The faster an organization grows, the sooner you become a more senior member of the team.  Seniority provides opportunities to mentor or manage other teammates, to shape the company culture and values that develop, and to influence the direction of the team.
  • Team leadership skills.
  •   The skills needed to make a team function effectively differ from those needed to be productively as an individual.  How should milestones be organized?  How do you coordinate effectively and minimize communication overhead?  How do you make sure a team gels?

At various points in your career, you'll value these skills differently and should seek out opportunities that develop the skills you value.  All of these skills are mostly generalizable beyond your job at your current company.  You take those skills and experiences with you to your next job.
There's also a type of learning that's important for career success but that is less transferable to other companies.  And that's institutional learning on how to function well within the specific processes defined at the company: how to get the approval of key gatekeepers for decisions, how to get projects you believe in prioritized on the roadmap, how to negotiate for more resources for your team given the company's resource allocation process, etc.
 Some amount of this is necessary to do well, and some of the negotation and persuasion skills will help in the future, but to the extent that much of this learning deals with the particular bureacracy or process that you need to deal with, it's significantly less valuable than other types of learning.

When you first join a company, the learning curve usually starts really steep (hopefully, if you've made a good choice).  You're immersed in new technologies, in a new product, and on a new team, and there are opportunities to learn along multiple dimensions.  When I first joined Google right out of college, I learned a lot in my first six months there.  Google's done a great job with their GoogleEDU training materials.  I soaked in all the codelabs that discussed why core abstractions existed and how they worked.  I studied programming style guides to learn best industry practices.  I read design docs about search indexing and other scalable engineering systems being built internally.  I learned to build and ship something seen by tens to hundreds of millions of people per day on google.com.
Your learning rate might decrease due to organizational issues (maybe processes have become too bureaucratic and limit your ability to iterate and launch quickly) or due to maintenance issues where the team doesn't grow quickly enough to scale with the complexity of the product.  The second makes it hard for you to switch projects and work on new things.
Warning flags for me at Google started to appear when I realized that many projects either had no concrete launch paths or depended on non-transparent approval processes over which I had little visibility or control.  Being able to launch products was important to the extent that I wanted to learn how to build great products, and quick, iterative feedback is a necessary foundation for learning.  When I projected what I could accomplish and reasonably launch by staying an additional year, I didn't feel satisfied, so I left.  There was certainly more I could have learned by staying -- I could have dug into the internals of more major systems -- but my rate of learning no longer mirrored what I encountered when I first started.
I similarly left Ooyala when I felt that my own learning rate at the company began to plateau.  While I was there, I learned about building and selling an enterprise product, the intricacies of flash video and analytics, project estimation and team organization, and more.  I left when it became clear to me that I could learn much more on engineering and on building a product by joining a smaller and faster-growing team.  A contributing factor that I only discovered after working at Ooyala for a while was that I wasn't nearly as excited and motivated to work on an enterprise product as I was to work on a consumer product that I would actually use everyday.
Having worked at Quora for two years, I'm happy that I'm still continuously learning new things at a good rate [5, 6], and it certainly helps that the product itself is also so learning-focused.
When I interned at Microsoft the summer of my junior year in college, I received a good piece of advice secondhand from a friend's mentor: always re-examine and reflect on where you are in your career at least every two years.  Even if you're perfectly happy with your job, the exercise forces you to check that you are actually enjoying your work and learning on the job rather than just being comfortable.



source: quora.com

lunedì 12 settembre 2011

89 Business Cliches Of The Totally Useless Manager


1. It’s a paradigm shift = I don’t know what’s going on in our business. But we’re not making as much money as we used to.
 
2. We’re data-driven = We try not to make decisions by the seat of our pants. When possible, we try to base them in facts.
 
3. We need to wrap our heads around this = Gosh, I never thought of that. We need to discuss that….
 
4. It’s a win-win = Hey, we both get something out of this (even though I’m really trying to get the best from you)
 
5. ROI [used in any sentence] = Look at me, I’m very financially-minded, even if I never took any finance classes in school  
 
6. Let’s blue sky this/let’s ballpark this = Let’s shoot around a bunch of ideas since we have no clue what to do
 
7. I’m a bit of a visionary = I’m a bit of an egomaniac and narcissist
 
8. I’m a team player/we only hire team players = I hope everyone on the team thinks this is a meritocracy, even though I’m the dictator in charge
 
9. Let’s circle back to that/Let’s put that in the parking lot/let’s touch base on that later/let’s take this off-line = Shut up and let’s go back to what I was talking about
 
10. We think outside the box here/color outside the lines = We wouldn’t know about how to do something innovative if it came up to us and bit us in the behind
 
11. I/we/you don’t have the bandwidth = Since we cut 60% of our headcount, we’re all doing the job of 3 people, so we’re all burned out
 
12. This is where the rubber meets the road = Don’t screw up
 
13. Net net/the net of it is/when you net it out = I never studied finance or accounting but I sound like someone who  can make money if I keep talking about another word for profit
 
14. We’ll go back and sharpen our pencils = We’ll go back and offer you the same for 20% less in hopes you’ll buy it before the end of the quarter
 
15.  It’s like the book “Crossing the Chasm”/”Blue Ocean”/”Good To Great” / “Tipping Point” / “Outliers” = I’ve never read any of these books but I sound literate if I quote  from them. And, besides, you cretins probably never read them either to  call me out on it
 
16. Let’s right-size it = Let’s whack/fire a bunch of people
 
17. It’s next-gen/turn-key/plug-and-play = I want it to sound so technical that you’ll just buy it without asking me any questions
 
18. We need to manage the optics of this = How can we lie about this in a way people will believe?
 
19. This is creative destruction = I’ve  never read Joseph Schumpeter but our core business is getting killed so  it’s your responsibility to come up with a new product the market will  buy
 
20. We don’t have enough boots on the ground = I don’t want to be fired for this disastrous product/country launch,  so I’m going to sound tough referring to the military and say I don’t  have enough resources  
 
21. Deal with it = Tough cookies
 
22. By way of housekeeping = This makes the boring stuff I’m about to say sound more official
 
23. That’s the $64,000 question [sometimes, due to inflation, people will denominate this cliche in millions or billions of dollars] = I don’t know either
 
24. Let’s square the circle = I’m someone who can unify two team members’ views and sound important
 
25. It’s our cash cow/protect/milk the cash cow = If that business goes south, we’re all out of a job
 
26. It’s about synergies/1 + 1 = 3 = I don’t get the math either, but it sounds like more and more is better, right?
 
27. Who’s going to step up to the plate? = One of you is going to do this and it’s not going to be me
 
28. We’re eating our own dog food = It sounds gross but we seem like honest folks if we do this.
 
29. We need to monetize/strategize/analyze/incentivize = When in doubt, stick “-ize” on the end of a word and say we’ve got to  do this and 9 out of 10 times, it will sound action-oriented.
 
30. We did a Five Forces/SWOT analysis/Value Chain analysis = We didn’t really do any of that, but none of you probably even remember Michael Porter, so what the heck
 
31. It was a perfect storm = We really screwed up but we’re going to blame a bunch of factors that are out of our hands (especially weather)
 
32. At the end of the day…. = OK, enough talking back and forth, we’re going to do what I want to do
 
33. Who’s got the ‘R’? [i.e., responsibility to do what we just spent 20 minutes talking about aimlessly] = If I ask the question, it won’t be assigned to me
 
34. Let’s put lipstick on this pig = plug your nose
 
35. I’m putting a stake in the ground here… = I’m a leader, simply because I’m using this cliche
 
36. We’re customer-focused/proactive/results-oriented = That can’t be bad, right?  This is motherhood and apple pie stuff
 
37. Our visibility into the quarter is a little fuzzy = Sales just fell off a cliff
 
38. That’s not our core competency/we’re sticking to our knitting = We’re just glad we’re making money in one business, because we’d have no clue how to get into any other business
 
39. Well, we’re facing some headwinds there = You put your finger on the area we’re panicking over
 
40. It’s a one-off = Do whatever they want to close the sale  
 
41. Incent it = That’s not a verb but I just made it into one because I’m a man/woman of action
 
42. I’m an agent of change = This makes it sound like I know how to handle the chaos that our business is constantly going through
 
43. We’ve got to do a little more due diligence there = Don’t have a clue but does that legal term make me sound detail-oriented?
 
44. Don’t leave money on the table = Be as greedy with them as possible
 
45. We take a “ready, fire, aim” approach here = We totally operate on a seat-of-the-pants basis
 
46. Hope is not a strategy = I don’t have a strategy, but this makes it sound like I’m above people who also don’t have a strategy
 
47. We have to tear down the silos internally = Our organizational structure is such a mess that I’m going to be under-mined by other departments at every turn
 
48. I don’t think it will move the needle = This won’t get my boss excited
 
49. Good to put a face to the name = I’d really rather talk to that person behind you
 
50. Let’s take the 30,000 foot view… = I like to think I see the big picture
 
51. It’s the old 80-20 rule = I really have no idea what the rule was, but I just want to focus on the things that will make us successful
 
52. We need to manage expectations = Get ready to start sucking up to people
 
53. It’s not actionable enough/what’s the deliverable? = You guys do the work on refining the idea. I’m too tired.
 
54. My 2 cents is… = This opinion is worth a heck of a lot more than 2 cents
 
55. I’m going to sound like a broken record here… = I want to clearly point out to you idiots that I’ve made this point several times before
 
56. We’ve got too many chiefs and not enough Indians = I want to be the Chief
 
57. Going forward = Don’t screw up like this again
 
58. My people know I’ve got an open door policy = I’ve told my direct reports to come to me if they have a problem, so  why should I feel bad if they complain I’m too busy to talk to them?
 
59. It’s gone viral = Someone sent a tweet about this  
 
60. I know you’ve been burning the candle on both ends = Get ready to do some more
 
61. It’s scalable = We can sell a lot of it in theory
 
62. It’s best-of-breed = We hired a market research firm to say that
 
63. We’re all about value-add = Unlike our competitors who seek to add no value
 
64. What’s our go-to-market? = Has anyone planned this out, because I’ve been too busy?
 
65. I’m drinking from a fire hose right now = I want a little sympathy over here, because I’m tired of carrying this company on my back
 
66. We’re getting some push back = They’re not buying it
 
67. We need to do a level-set = I’ve never been inside a Home Depot, but this phrase makes me sound handy
 
68. It’s basic blocking and tackling = How could you screw this up? I also played high school football and those were the best days of my life.
 
69. Let’s put our game faces on = Get serious, guys
 
70. We’ve got it covered from soup to nuts = I have no idea what that means, but don’t you dare question my prep work on it
 
71. We don’t want to get thrown under the bus = So let’s throw someone else first
 
72. But to close the loop on this… = Always the more theoretical Business Development/Strategy guys who say this, so they can sound thorough
 
73. What are “next steps”? = Did anyone take notes during the last 90 minutes of this meeting?
 
74. This is low-hanging fruit = Get this done quickly
 
75. We need a few quick wins = We’ve got to trick people into thinking we know what we’re doing by some successes we can point to and claim as ours
 
76. It’s a [Insert Company Name] killer = Did I get your attention yet with the Freddy Kreuger imagery associated with the company who’s currently eating our lunch?
 
77. I want to address the elephant in the room = I know you think I’m trying to cover up/gloss over something, so I might as well talk about it
 
78. This is the next big thing/new thing = Some of our 20-somethings have told me this is really cool
 
79. This time it’s different because… = Don’t wait for the explanation… simply run for the hills.
 
80. What are the best practices on this? = How can I cover my behind that we’re just doing stuff the way other good people have supposedly done this?
 
81. This is our deliverable = I know this sounds like something that comes in a body bag, but it makes our PowerPoint sound tougher than it actually is
 
82. We’ll loop you in when we need to = You’re not that important to know about all the details on this
 
83. We want this to move up and to the right = I failed high school algebra but someone said this means we’ll be making a lot of money if this happens
 
84. We’re going through a re-org = No one knows what the heck is going on at the moment
 
85. We’ve got to increase our mind-share with the customer = I think I would have been happier as a doctor doing lobotomies than in marketing as a career path
 
86. I don’t think you’re comparing apples to apples = Let me tell you how you should really think about this issue
 
87. Let’s peel back the onion on this = I want to sound thorough so this is a better way of telling you that than simply clearing my throat
 
88. You phoned it in = I was too busy checking my email during your presentation that I didn’t listen
 
89. I want you to run with this = I just threw you into the deep end of the pool and you’re on your own to figure it out


source: forbes.com