In a survey conducted by Microsoft among 38,000 workers in 200 countries, people spend 5.6 hours each week in meetings and 69% of survey participants considered meetings as not productive.

Yes, yes! the daily meetings from SCRUM methodology are 15 minutes long and doesn’t sum to 5.6 hours per week. But you have to consider management long meetings and mediate them with 1.25h per week SCRUM sessions. After we correlate that with 69% participants that considered meetings to be not productive will find a large bunch of SCRUM practitioners that consider those 15 minutes as wasted time.

Of course, if they do SCRUM at Microsoft.

G

M-a întrebat zilele trecute un junior de ce ar lucra într-un small business și nu ar alege un job corporatist mult mai bine plătit.

Răspunsul l-am sintetizat în tabelul următor:

Small Business Medium Business Corporate
Salariu mic așa-ș-așa mare
Ce înveți meserie scaling (aka cum să dai vina pe alții) nimic (aka best practices)
Rol de toate generalist roboțel
Influență ți se cere părerea planing primești direct planul de bătaie
Acces informații accesibile și-și ține-ți gura
Echipa îți poți alege echipa ai cît de cît o alegere ești pus unde trebuie
Autonomie just do-it indicații generale supra-control

Deși se vede clar că nu îmi place mediul corporatist, nu vreau să descurajez un job într-o firmă mare. Doar încerc să punctez compromisurile pe care trebuie să le faci pentru un salariu mare.

G.

See Design Patterns, part one; Introduction to get the definitions and the laws of design patterns.

Structural Patterns define the way objects are connected with other objects so changes in the system do not affect these connections. Again, the low coupling law is the base for the app designs.

There are eight patterns:

  • Adapter – converts the interface of a class into another interface clients expect;
  • Bridge – separates an object’s interface from its implementation;
  • Façade – provides a more comfortable way to deal with a library or bundle of resources;
  • Decorator – adds objects responsibilities dynamically;
  • Flyweight – reducing the number of objects;
  • Proxy – an object representing other object;
  • Composite – to compose objects into tree structures to represent part-whole hierarchies;
  • Private Class Data – restricts accessor/ mutator access.

 

Adapter

Adapter converts the interface of a class into another interface clients expect, as any cable adapter you may encountered. Usually you want to reuse an old component that offers compelling functionality, but its “view of the world” is not compatible with the architecture of the system currently being developed.

Reuse has always been painful and elusive, against everything that theorists said – OOP is about reuse, reuse and reuse. There is always something not quite right between the old and the new. It may be physical dimensions or misalignment. It may be timing or synchronization. It may be unfortunate assumptions or competing standards.

Adapter functions as a wrapper or modifier of an existing class. It provides a different or translated view of that class. Adapter provides a different interface to its subject, Proxy provides the same interface. Adapter makes things work after they’re designed, Bridge makes them work before they are.

Proxy

Proxy speaks for other object. It is used to support distributed, controlled or intelligent access.

You can think about Proxy when

  • you need to delay the creation of a costly object until it is needed;
  • you have to control communication with remote objects;
  • you want to control access to objects;
  • you may want smart reference to an object – caching, locking etc.

Façade

Façade wraps a complicated subsystem with a simpler interface. An Operating System is a Façade for hardware. An eCommerce site is a Façade for ordering, billing and shipping the goods.

The Façade design captures the complexity and collaborations of the component and delegates to the appropriate methods. The client uses (is coupled to) Façade only.

Adapter and Façade are both wrappers. Façade defines a new interface, whereas Adapter uses an old interface. Adapter wraps a single object, while Façade routinely wraps multiple objects. Façade could front-end a single complex object and Adapter could wrap several legacy objects.

Bridge

The goal of Bridge is to allow you to structure your code so that you can easily add new kinds of front-end objects which are implemented with functionality in new kinds of back-end objects. Therefore, both handle and body can vary independently of each other.

Bridge is really a code-organization tool that allows you to add in any number of new front-end services that implement their operations by delegating to any number of back-end options. Using Bridge, you can accomplish this without the normal combinatorial explosion of possibilities that would otherwise occur.

Flyweight

Some programs require a huge number of objects that have some shared state among them. Each flyweight object can be divided into two pieces: the state-dependent (extrinsic) part and the state-independent (intrinsic) part. Then put them to share that intrinsic part to save memory. The key here is the HUGE number of objects. The simplicity law ask us to get it only if the memory is a pain.

Decorator

Too many classes! Decorators provide a flexible alternative to subclassing for extending functionality. Instead to create all combination at design time, you will add dynamically behavior or state to individual objects at run-time.

Note that this pattern allows responsibilities to be added to an object, not methods to an object’s interface. The interface presented to the client must remain constant as functionalities are specified.

There are some tradeoffs: coding is more complicated when using Decorators. So, try compromise – there will always be certain combinations that you will describe regularly, which would often work exactly as they are, but if you wanted to decorate them then you would use decorators to make the modifications. This will keep your code readable and maintainable.

Private Class Data

  • Encapsulate class data initialization!
  • Control write access to class attributes!
  • Separate data from methods that use it!

Yes, these are the first lessons in coding. And yes, it is about a design pattern, if you check the definition of Design Patterns.

Composite

The common objects relationship in computing – Containers that contain Containees, each of which could be a Container.

Divide your domain concepts into container classes and containee classes. Create a lowest common denominator interface that makes your containers and containees interchangeable. It should specify the behavior that needs to be exercised uniformly across all containee and container objects.

In a larger Composite problems could arise as recursion is always expensive.

G.

 

  • On average, each employee uses 17 cloud apps, but many organizations don’t know what is in use, or whether these apps meet security, privacy and compliance requirements
  • In 91% of organizations, employees grant their personal accounts access to the organization’s cloud storage
  • 70% of the organizations allow cloud admin activity from non-corporate, unsecured networks
  • 75% of privileged cloud accounts are not in use. These accounts might be eating up the cost of a license, or worse, increasing the attack surface of the organization
  • On average, an organization shares 13% of its files externally, of which 25% are shared publicly

Vremuri bune să te-apuci de furat secrete comerciale!

G.

Ce mai citește nea Georgică pe un blog tehnic.

iar spre surprinderea programatorilor, va include sistemul de linii de comandă Bash specific platformei Linux, disponibil până la această oră pe Windows doar prin intermediul unei mașini virtuale.

Du-te, mă, la vaci!
G.

PS.
MS face o mișcare îndrăzneață – pune o interfață grafică user friendly (nicio interfață în *nix world nu e cît de cît utilizabilă, exceptînd MacOS, dar MAC e în sine un world) peste toate uneltele Linux care s-au impus overthetime. Nu pariez pe ea, dar îi dau ceva șanse la succes. Va avea cu adevărat succes dacă aplicațiile Linux vor avea de cîștigat din acest joint (da! în ambele sensuri ale acestui cuvînt). Windows are cîteva puncte tari care lipsesc pe Linux – WMI, suport real pentru copy/paste, management console, registry (cam controversat acum, dar la vremea lor o chestie tare), UI și UX unitare. Dacă vor prinde! Dar mă îndoiesc pentru că singurul fapt certificabil pe Linux comunitar este că programatorii sunt leneși și superiori (nu-i de mine să fac o interfață intuitivă și utilizabilă, ia de-aici șapte mii de opțiuni și bate-ți capul cu ele).

Am citit pe blogul lui Steve Blank  „De ce avocații nu sînt buni antreprenori”. Plus „de ce întreprinzătorii urăsc avocații”.

Cică

  1. Nu vorbesc clar și concis, doar avocățeasca;
  2. Nu te țin la curent cu mersul lucrurilor;
  3. Te supra-încarcă cu toate *ăcaturile avocățești;
  4. Nu sînt capabili să te asculte și să-ți înțeleagă problema;
  5. Întotdeauna novicii vor face toată treaba, deși tu ai angajat o firmă mare;
  6. Se leagă te toate amănuntele pierzînd din vedere problemele importante;
  7. Nu le pasă de problema clienților;
  8. Costurile lor te cocoșează;
  9. Sînt de negăsit atunci cînd ai nevoie de ei;
  10. Pentru că sînt „deal-killers”.

G.

Am aflat că în sistemul sanitar american nu există scuze pentru doctori sau ceilalți din sistem dacă se întîmplă una din situațiile de mai jos:

  • înseminarea artificială de la un donor greșit (fie că e spermatozoidul greșit, fie că e ovulul greeșit)
  • uitarea/lăsarea/introducerea în pacient a unor obiecte care nu fac obiectul procedurii (chirurgicale sau de altă natură)
  • cît timp ești în spital sînt răspunzători pentru ce ți se-ntîmplă
    • medicație eronată (au greșit medicamentul, au greșit pacientul, au greșit administrarea, au greșit cantitatea șamd)
    • transfuzie eronată (au greșit grupa de sînge sau HLA sau te-au infectat cu HIV)
    • embolie (astuparea unui vas sanguin cu o bulă de aer)
    • moartea sau rănirea gravă în urma unui șoc electric (exitsă o procedură în care inimii i se aplică un șoc pentru reglarea ritmului)
    • arsuri
    • alte ulcerații de gradul 3 sau 4 (răni grave legate de chimicale, temperatură, frecare șamd)
    • moartea sau rănirea gravă în urma unei căderi (cam birocratică acestă idee)
    • sinuciderea pacientului (cam stupidă)
    • agresiune fizică sau sexuală
    • dispariția sau răpirea pacientului
  • greșeli chirurcicale
    • au greșit pacientul!
    • au greșit operația (fie au greșit piciorul, fie au făcut altă operație, fie nu au respectat protocolul)
    • moartea intraoperatorie sau post operatorie după o operație simplă (avem un caz cu unul care s-a dus cu mîna ruptă și n-a mai ieșit viu din spital)
  • moartea sau rănirea gravă în urma contaminării din spital, legată de unelte, medicamente sau oricealtceva
  • folosirea uneltelor în alt scop decît au fost create
  • ți-au dat alt copil sau l-au dat p-al tău altuia
  • moartea mamei la o naștere low-risk
  • moartea sau rănirea gravă asociată hipoglicemiei (măcar o perfuzie cu glucoză pot să-ți facă!)
  • moartea sau rănirea gravă a fătului legate de hyperbilirubinemia (ceva legat de icter la copii)
  • moarte sau rănirea gravă în urma spinal manipulative therapy
  • îți bagă pe gît alt gaz decît cel prescris (la anestezie încurcă gazul)
  • moartea sau rănirea gravă a pacientului legat de pat
  • orice incident legat de un fals doctor (sau orice alt rol din sistem)

Par de bun simț, de ce nu avem și noi astfel de reguli în sistemul sanitar? Sau măcar să fie considerate de bun simț la judacată?

G.

These days I’m in process for selecting a framework for an application. An easy task several years ago when only Windows and Visual Studio were giving the pace. Now, on anything on web days, you have more than plenty good frameworks (and far to many shitsJS) to choose from. Here are some points you must keep eyes on:

  • YOUR APPLICATION

    I have encountered people that chosen a framework because everybody else used it and also must they. Your app will give you the most important criteria to weight a system.

  • What is framework capable of?

    Do not lay your ear on internet hearsay. There are more vaporware than facts. Test it.

  • Who support the framework

    One is Microsoft, Tweeter, Facebook and other ACME ltd who wants to get framework tested for free. Do not put your money on Google. They have made history on laying down projects (and not carrying about clients).

  • Is the framework mature? Can you see it on production?

    My experience says “use only framework versioned 3.x or about to be 3.x”. They change a lot on v1 through v2 to be stable on v3.

  • Does the framework have a comprehensive set of documentation?

    This is the most important criteria to eliminate a framework. Run away from a framework (or anything in computer area) with bad support. If the producer disconsider this part their only meaning is to get free testing.

  • your application

    I cannot emphasize enough how important is the application in the process of selecting the framework to be built on. Do not chose flexibility on flexibility only, do not chose performance on performance only, do not chose web-like on anything is on web only, do not chose scale for scale only, do not chose the popular on popularity only.

G.

I found a PM position advertised as this:

To apply, please send us a link to your linkedIn profile and a 200 word email (in English). You can write anything you wish in that email, provided that it shows us:
1) How you’d handle a situation where the client is angry because someone made an error
2) How you’d handle a situation where the client thinks they know more than you do, but they’re obviously wrong
3) How you’d share negative and positive feedback with your team

You cannot get better text for this job. Compare it with this corporate language:
– Strong written and verbal communication skills
– Strong ability to proactively identify and resolve issues
– Strong analytical skills
– Good time management skills

How can you get from any CV that he has good communication skills? Wth Strong analytical skills are? If you waste the time to apply to this job will still they consider that you have Good time management skills?

G.

ps. as it is a blog to remember me several ideas, here are the answers for the three questions

  1. The client is angry not on error, but on impact of the error on his business. There are two categories of clients – those who can manage themselves the negative impact and who will fire you and the ones that have their asses wet. For the last you can bring help. First thing to say is to assure them that you will work with them to control the facts. Second is to roll up the sleeves to find out where the problem is. Third (only after you know the problem), start to work on the problem AND mitigate the impact on the business. DO NOT begin working with the material impact until you clarify the facts.
  2. This is a tricked question. The client ALWAYS knows better than you everything about HIS business. Obviously wrong from your point of view is a very very narrow point of view and you must trust your client knows better what’s good for him. First thing to do is to try to understand his point of view. Then you can work together to bring it to live. If you still are in uncertainty you can ask him for guidance and close assistance. Or you can resign (this is the best thing to do if you still feel the client thinks they know more than you do…).
  3. There are not positive or negative attributes of feedback. The feedback is always valuable and must be transmitted as is. The most important thing about feedback is not the manner you share it, but how you use it. First you must keep it impersonal and focus on the facts. Second, USE IT, there is not better information than feedback. Even if you use it as lesson learned it is always an added value to your enterprise.