Tuesday, February 25, 2014

Architectural Styles

Pipes and Filters
We defined this style as an example earlier in this chapter. The Pipes and Filters style is characterized by a single, simple element type (the filter) that processes a data stream, with instances of this type connected by simple connectors known as pipes.

Client/Server
This very widely used style defines a system structure comprised of two types of elements: a server that provides one or more services via a well-defined interface and a client that uses the services as part of its operation. The client and server are typically assumed to reside on different machines in a network (although this is not a requirement of the style—the client and server could be in the same operating system process).

Tiered Computing
A development of the Client/Server style, the Tiered Computing style is widely used in enterprise information systems. A tiered system is considered to contain a number of tiers of computation, which combine to offer a service to an ultimate consumer (e.g., a human user). Each tier acts as a server for its caller and as a client to the next tier in the architecture. A key architectural principle is that a tier can communicate in this way only with the tiers immediately on either side of it; a tier is not aware of the existence of other tiers in the system
apart from its neighbors.

Peer-to-Peer
Often referred to as P2P, this architectural style defines a single type of system element (the peer) and a single type of connector that is a network connection (an interpeer connection). The characteristics of the connector are not important to the style, and the style has been used with a number of types of network connections.

Layered Implementation
The Layered Implementation style identifies a single type of system element: the layer. The style organizes a system’s implementation into a stack of layers, with each layer providing a service to the layer above it and requesting services from the one below it. The layers are ordered by the level of abstraction they represent, with the most abstract (e.g., organization-specific operations) at the top of the stack and the least abstract (e.g., operating system–specific libraries) at the bottom. Depending on the implementation of the style, a layer may be able to communicate directly with any of the layers below it (relaxed layering) or only with the layer directly below it (strict layering).

Publisher/Subscriber
The Publisher/Subscriber style grew out of a realization that client/server interactions are not suitable for all types of distributed system problems. The style defines a single system element (the publisher) that creates information of interest to any number of system elements (the subscribers) that may wish to consume it. A single type of connector, a reliable network link, is used to link the publisher and the subscribers.

Asynchronous Data Replication
While Publisher/Subscriber is normally considered to be a style that allows functional elements to exchange information, a variant of it, Asynchronous Data Replication, is a style used where information in two data stores needs to be kept synchronized (e.g., where it is replicated for performance reasons). The style has three element types: the data source, the data replica, and the replicator. The data source is a data store that owns a particular type of information, while the data replica is a separate data store that wishes to maintain a synchronized copy of some subset of the information in the source. The replicator is the element responsible for recognizing changes or additions to information in the source and performing the synchronization of the replica data store.

Distribution Tree
Another architectural style that relates to data distribution is the Distribution Tree style. This style defines three types of system elements: publishers, distributors, and consumers. The elements of the system are arranged into a tree, connected by network link connectors. A single publisher forms the root of the tree, the distributors are connected to form the intermediate nodes, and the consumers form the leaves of the tree. The publishers publish new or changed information, which the distributors then cache and distribute to their immediate child nodes. If a child node is added or restarted, it can refresh its view of the information from its parent node’s cache. When the information reaches the leaf nodes of the tree, the consumer nodes consume it.

Integration Hub
The Integration Hub style is another data-oriented architectural style, extending Asynchronous Data Replication to situations where information needs to be synchronized between a number of different systems (rather than between replica data stores).

Tuple Space
The Tuple Space style is a type of repository that allows a number of pieces of a distributed system to collaborate to share information. The two types of system elements in the style are the clients (computational elements that create and consume information) and the tuple space itself (a storage area where clients can read and write typed information tuples or records). The clients and the tuple space are connected by a client/server network connection. Clients interact with the tuple space by writing new tuples to it or requesting tuples that match simple search criteria. Clients do not interact directly. Typically the tuple space can also call back to the clients when objects they are interested in change.

Software Patterns

Name: A pattern needs a memorable and meaningful name to allow us to clearly identify and discuss the pattern and, more importantly, to use its name as part of our design language when discussing possible solutions to design problems.

Context: This sets the stage for the pattern and describes the situations in which the pattern may apply.

Problem: Each pattern is a solution to a particular problem, so part of the pattern’s definition must be a clear statement of the problem that the pattern solves and any conditions that need to be met in order for the pattern to be effectively applied. A common way to describe the problem that a pattern solves is to describe the design forces it aims to resolve, each
force being a goal, requirement, or constraint that informs or influences the solution (such as a particular sort of flexibility needed or a particular type of interelement decoupling you want to achieve).

Solution: The core of the pattern is a description of the solution to the problem that the pattern addresses. This is usually some form of design model, explaining the elements of the design and how they work together to solve the problem.

Consequences: The definition of a software pattern should include a clear statement of the results and tradeoffs that will result from its application, to allow you to decide whether it is a suitable solution to the problem. Consequences may be positive (benefits) or negative (costs).

Viewpoint of Systems Architecture

Functional: Describes the system’s functional elements, their responsibilities, interfaces, and primary interactions. A Functional view is the cornerstone of most ADs and is often the first part of the description that stakeholders try to read. It drives the shape of other system structures such as the information structure, concurrency structure, deployment structure, and so on. It also has a significant impact on the system’s
quality properties such as its ability to change, its ability to be secured, and its runtime performance.

Information: Describes the way that the architecture stores, manipulates, manages, and distributes information. The ultimate purpose of virtually any computer system is to manipulate information in some form, and this viewpoint develops a complete but high-level view of static data structure and information flow. The objective of this analysis is to answer the big questions around content, structure, ownership, latency, references, and data migration.

Concurrency: Describes the concurrency structure of the system and maps functional elements to concurrency units to clearly identify the parts of the system that can execute concurrently and how this is coordinated and controlled. This entails the creation of models that show the process and thread structures that the system will use and the interprocess communication mechanisms used to coordinate their operation.

Development: Describes the architecture that supports the software development process. Development views communicate the aspects of the architecture of interest to those stakeholders involved in building, testing, maintaining, and enhancing the system.

Deployment: Describes the environment into which the system will be deployed, including capturing the dependencies the system has on its runtime environment. This view captures the hardware environment that your system needs (primarily the processing nodes, network interconnections, and disk storage facilities required), the technical environment requirements for each element, and the mapping of the software elements to the runtime environment that will execute them.

Operational: Describes how the system will be operated, administered, and supported when it is running in its production environment. For all but the simplest systems, installing, managing, and operating the system is a significant task that must be considered and planned at design time. The aim of the Operational viewpoint is to identify system-wide strategies for addressing the operational concerns of the system’s stakeholders
and to identify solutions that address these.

Saturday, February 22, 2014

Como as cooperativas podem melhorar a distribuição de renda

Por que há crime?

Veja, ou há uma revolta dentro da sociedade, ou uma revolução completa fora da sociedade. A revolução completa fora da sociedade é o que chamo de revolução religiosa. Qualquer revolução que não seja religiosa é dentro da sociedade e, portanto, não é absolutamente revolução, mas apenas uma continuação modificada do velho padrão. O que está acontecendo mundo afora, creio, é revolta dentro da sociedade, e esta revolta muitas vezes toma a forma do que é chamado crime. É certo que haverá este tipo de revolta enquanto nossa educação estiver preocupada apenas em treinar os jovens a se ajustarem na sociedade – ou seja, ter um emprego, ganhar dinheiro, ser ambicioso, ter mais, se adaptar. É isso que nossa chamada educação está fazendo em todo lugar: ensinando o jovem a se adaptar religiosamente, moralmente, economicamente; assim, naturalmente, a revolta deles não tem significado, exceto que deve ser suprimida, reformada, ou controlada. Tal revolta está ainda dentro do molde da sociedade e, portanto, não é absolutamente criativa. Mas através da educação correta poderíamos talvez produzir uma compreensão diferente ajudando a libertar a mente de todo condicionamento – ou seja, encorajando o jovem a estar cônscio das muitas influências que condicionam a mente e fazem-na se adaptar. - Krishnamurti, J. Krishnamurti, The Book of Life

Wednesday, February 19, 2014

Dream Theater - Take Away My Pain



Take away my pain
Leave the cold outside
Please don't let it rain
Don't stumble on my pride
Take away my pain
I'm not frightened anymore
Just stay with me tonight
I'm tired of this fight
Soon I'll be knocking at your door

Thursday, February 13, 2014

Objetivos, sim. Metas numéricas, não!

“Crescer o volume de vendas em 30% até Dezembro de 2007”; “Reduzir o custo de manufatura em 20% até o final do semestre”… Será que estabelecer metas numéricas é realmente indispensável? Minha opinião (e olha que W.E. Deming concorda comigo) é que, além de ser perfeitamente dispensável, na grande maioria dos casos o estabelecimento de metas numéricas é até prejudicial, tanto para a empresa como para as pessoas envolvidas no cumprimento da meta! É claro que é indispensável ter objetivos claramente definidos, e é fundamental avaliar o progresso com base em indicadores de desempenho. Mas não necessitamos de metas numéricas declaradas “a priori” para que as coisas aconteçam. Apresento os seguintes argumentos para sustentar esta afirmação ousada:

1) A premissa fundamental (tacitamente assumida) por detrás da prática de estabelecer (e cobrar) metas numéricas é que “as pessoas são acomodadas por natureza e portanto, sem a pressão do cumprimento de uma meta numérica, elas não se mobilizam”. Além de não ser compatível com a cultura de excelência necessária para ser competitivo hoje em dia (contando com pessoas proativas), tal premissa é simplesmente inválida. Por exemplo: numa partida de futebol com os amigos, não é preciso nenhuma meta numérica do tipo “vamos ganhar de 3×0” para que todos se dediquem com afinco ao jogo (é claro que há um objetivo – “vencer a partida” – mas não uma meta numérica). Como consultor, tenho liderado inúmeros projetos de melhoria exitosos, nos quais estabelecemos somente um objetivo inicial de melhoria do tipo “Reduzir o consumo de zinco no processo de galvanização”, sem definir de saída nenhuma meta numérica. E no final, frequentemente nos surpreendemos com resultados inesperadamente positivos.

2) É preciso entender que são as ações que levam aos números, e não o contrário. São as intervenções que realizamos nos processos de trabalho (após haver entendido profundamente os mesmos) que produzem os resultados finais desejados. A cobrança de metas numéricas pela gerência é um sintoma sinistro de um estilo de “gestão” que se impõe pelo medo, pois normalmente o não-cumprimento vem atrelado a algum tipo de punição. Além disso, é um tipo de “desobrigação” da verdadeira função da gerência, que é liderar as pessoas através do conhecimento e do exemplo. Estabelecer metas arbitrárias no início e depois de algum tempo aparecer para fazer a cobrança numa breve reunião de “status review” é um tipo de “gestão ignorante”, pois não requer da gerência nenhum conhecimento sobre a realidade do processo ou situação a ser melhorada.

3) Impor metas numéricas sobre um processo revela um profundo desconhecimento quanto à natureza da variação. Desde o ponto de vista estatístico, só existem duas possibilidades sobre o estado de um processo: ou ele está “sob controle” (isto é, somente sobre o efeito das causas intrínsecas ao mesmo) ou ele está “fora de controle” (sob o efeito de alguma causa especial, externa ao processo). Se o processo está sob controle, sua variação ocorrerá dentro de limites previsíveis, a menos que se realize uma mudança estrutural no mesmo. E é claro que neste caso a imposição de uma meta não contribui em nada para a mudança. Se porém o processo estiver “fora de controle”, seu comportamente se torna imprevisível, e o estabelecimento de uma meta sobre algo que não se pode controlar é um exercício de futilidade. Além disso, em ambos os casos, é grande o risco de trazer desorientação e frustração às pessoas envolvidas, por não poderem atingir metas desconectadas da realidade. Em outras palavras, os processos não têm ouvidos: ele simplesmente são “surdos” diante das declaração de metas impostas pela gerência.

4) A longo prazo, a prática de impor metas e cobrar seu cumprimento acaba decretando a mediocridade na organização. Se alguém é obrigado a especificar metas, e se sabe que seu bônus, sua promoção ou até seu emprego dependem do cumprimento das mesmas, é óbvio que vai definir algo conservador, que sabe que com pouco esforço pode ser atingido. Tenho vários exemplos em empresas nas quais implementamos projetos de melhoria, cuja cultura vigente praticamente obrigou a declaração de uma meta numérica no início do projeto, mas que no final, após o estudo das causas e ações sobre os processos, foram alcançados níveis de melhoria considerados “impossíveis”, superando em muito a meta inicial.
Conclusão: mobilizar as pessoas para a melhoria requer apenas que estabeleça um objetivo claro e relevante, composto de três elementos importantes: o sentido da melhoria, um indicador de desempenho e a definição de qual processo deve ser melhorado. Não sabemos e não podemos saber exatamente o quanto vamos melhorar. O resultado final só vai depender das ações de melhoria que se promovam. Metas numéricas são dispensáveis, e devem ser evitadas.

fonte: http://qualiplus.com.br/objetivos-sim-metas-numericas-nao/

Saturday, February 08, 2014

Fei Long


Americano lista motivos de ter odiado morar no Brasil

Um americano, casado com uma brasileira, morou em São Paulo por 3 anos. Depois dessa árdua experiência, ele voltou para sua terra natal e fez questão de criar uma lista de 20 motivos pelos quais odeia viver no Brasil. Um fórum gringo resolveu continuar essa lista e trouxe mais itens que os gringos odeiam no país. Confira:

1. Os brasileiros não têm consideração com as pessoas fora do seu círculo de amizades e muitas vezes são simplesmente rudes. Por exemplo, um vizinho que toca música alta durante toda a noite… E mesmo se você vá pedir-lhe educadamente para abaixar o volume, ele diz-lhe para você “ir se fud**”. E educação básica? Um simples “desculpe-me “, quando alguém esbarra com tudo em você na rua simplesmente não existe.

2. Os brasileiros são agressivos e oportunistas, e, geralmente, à custa de outras pessoas. É como um “instinto de sobrevivência” em alta velocidade, o tempo todo. O melhor exemplo é o transporte público. Se eles vêem uma maneira de passar por você e furar a fila, eles o farão, mesmo que isso signifique quase matá-lo, e mesmo se eles não estiverem com pressa. Então, por que eles fazem isso? É só porque eles podem, porque eles vêem a oportunidade, por que eles querem ganhar vantagem em tudo. Eles sentem que precisam sempre de tomar tudo o que podem, sempre que possível, independentemente de quem é prejudicado como resultado.

3. Os brasileiros não têm respeito por seu ambiente. Eles despejam grandes cargas de lixo em qualquer lugar e em todos os lugares, e o lixo é inacreditável. As ruas são muito sujas. Os recursos naturais abundantes, como são, estão sendo desperdiçados em uma velocidade surpreendente, com pouco ou nenhum recurso.

4. Brasileiros toleram uma quantidade incrível de corrupção nos negócios e governo. Enquanto todos os governos têm funcionários corruptos, é mais comum e desenfreado no Brasil do que na maioria dos outros países, e ainda assim a população continua a reeleger as mesmas pessoas.

5. As mulheres brasileiras são excessivamente obcecadas com seus corpos e são muito críticas (e competitivas com) as outras.

6. Os brasileiros, principalmente os homens, são altamente propensos a casos extraconjugais. A menos que o homem nunca saia de casa, as chances de que ele tenha uma amante são enormes.

7. Os brasileiros são muito expressivos de suas opiniões negativas a respeito de outras pessoas, com total desrespeito sobre a possibilidade de ferir os sentimentos de alguém.

8. Brasileiros, especialmente as pessoas que realizam serviços, são geralmente malandras, preguiçosas e quase sempre atrasadas.

9. Os brasileiros têm um sistema de classes muito proeminente. Os ricos têm um senso de direito que está além do imaginável. Eles acham que as regras não se aplicam a eles, que eles estão acima do sistema, e são muito arrogantes e insensíveis, especialmente com o próximo.

10. Brasileiros constantemente interrompem o outro para poder falar. Tentar ter uma conversa é como uma competição para ser ouvido, uma competição de gritos.

11. A polícia brasileira é essencialmente inexistente quando se trata de fazer cumprir as leis para proteger a população, como fazer cumprir as leis de trânsito, encontrar e prender os ladrões, etc. Existem Leis, mas ninguém as aplica, o sistema judicial é uma piada e não há normalmente nenhum recurso para o cidadão que é roubado, enganado ou prejudicado. As pessoas vivem com medo e constroem muros em torno de suas casas ou pagam taxas elevadas para viver em comunidades fechadas.

12. Os brasileiros fazem tudo inconveniente e difícil. Nada é simplificado ou concebido com a conveniência do cliente em mente, e os brasileiros têm uma alta tolerância para níveis surpreendentes de burocracia desnecessária e redundante. Brasileiros pagam impostos altos e taxas de importação que fazem tudo, especialmente produtos para o lar, eletrônicos e carros, incrivelmente caros. E para os empresários, seguindo as regras e pagando todos os seus impostos faz com que seja quase impossível de ser rentável. Como resultado, a corrupção e subornos em empresas e governo são comuns.

14. Está quente como o inferno durante nove meses do ano, e ar condicionado nas casas não existe aqui, porque as casas não são construídas para ser herméticamente isoladas ou incluir dutos de ar.

15. A comida pode ser mais fresca, menos processada e, geralmente, mais saudável do que o alimento americano ou europeu, mas é sem graça, repetitivo e muito inconveniente. Alimentos processados, congelados ou prontos no supermercado são poucos, caros e geralmente terríveis.

16. Os brasileiros são super sociais e raramente passam algum tempo sozinho, especialmente nas refeições e fins de semana. Isso não é necessariamente uma má qualidade, mas, pessoalmente, eu odeio isso porque eu gosto do meu espaço e privacidade, mas a expectativa cultural é que você vai assistir (ou pior, convidar amigos e família) para cada refeição e você é criticado por não se comportar “normalmente” se você optar por ficar sozinho.

17. Brasileiros ficam muito perto, emocionalmente e geograficamente, de suas famílias de origem durante toda a vida. Como no #16, isso não é necessariamente uma má qualidade, mas pessoalmente eu odeio porque me deixa desconfortável e afeta meu casamento. Adultos brasileiros nunca “cortam o cordão” emocional e sua família de origem (especialmente as mães) continuam a se envolvido em suas vidas diariamente, nos problemas, decisões, atividades, etc. Como você pode imaginar, este é um item difícil para o cônjuge de outra cultura onde geralmente vivemos em famílias nucleares e temos uma dinâmica diferente com as nossas famílias de origem.

18. Eletricidade e serviços de internet são absurdamente caros e ruins.

19. A qualidade da água é questionável. Os brasileiros bebem, mas não morrem, com certeza, mas com base na total falta de aplicação de leis e a abundância de corrupção, eu não confio no governo que diz que é totalmente seguro e não vai te fazer mal a longo prazo.

20. E, finalmente, os brasileiros só tem um tipo de cerveja (aguada) e realmente é uma porcaria, e claro, cervejas importadas são extremamente caras.

— Do Fórum —

21. A maioria dos motoristas de ônibus dirigem como se eles estivessem tentando quebrar o ônibus e todos dentro dele.

22. Calçadas no meu bairro são cobertos com mijo e coco de cães que latem dia e noite.

23. Engarrafamentos de Três horas e meia toda vez que chove .

24. Raramente as coisas são feitas corretamente da primeira vez. Você tem que voltar para o banco, consulado, escritório, mandar e-mail ou telefonar 2-10 vezes para as pessoas a fazerem o seu trabalho.

25. Qualidade do ar muito ruim. O ar muitas vezes cheira a plástico queimado.

26. Ir a Shoppings e restaurantes são as principais atividades. Não há nada pra fazer se você não gastar. Há um parque principal e está horrivelmente lotado.

27. O acabamento das casas é péssimo. Janelas, portas , dobradiças , tubos, energia elétrica, calçadas, são todos construídos com o menor esforço possível.

28. Árvores, postes, telefones, plantas e caixas de lixo são colocados no centro das calçadas, tornando-as intransitáveis.

29. Você paga o triplo para os produtos que vão quebrar dentro de 1-2 anos, talvez mais.

30. Os brasileiros amam estar bem no seu caminho. Eles não dão espaço para você passar.

31. A melhor maneira de inspirar ódio no Brasil? Educadamente recusar-se a comer alimentos oferecidos a você. Não importa o quão válida é a sua razão, este é considerado um pecado imperdoável aos olhos dos brasileiros e eles vão continuar agressivamente incomodando você para comê-lo.

32. As pessoas vão apertar e empurrar você sem pedir desculpas. No transporte público você vai tão apertado que você é incapaz de mover qualquer coisa, além da sua cabeça.

33 . O Brasil é um país de 3° mundo com preços ridiculamente inflacionados para itens de qualidade. Para se ter uma idéia, São Paulo é classificada como a 10ª cidade mais cara do mundo. (New York é a 32ª).

34. A infidelidade galopante. Este não é apenas um estereótipo, tanto quanto eu gostaria que fosse. Homens na sociedade brasileira são condicionados a acreditar que eles são mais ” virís ” por sairem com várias mulheres .

35. Zero respeito aos pedestres. Sim, eles não param para você passar. Na melhor das hipóteses, eles vão buzinar.

36. Quando calçadas estão em construção espera-se que você ande na rua. Alguns motoristas se recusam a fazer o menor desvio a sua presença, acelerando a poucos centímetros de você, mesmo quando a pista ao lado está livre.

37. Nem pense em dizer a alguém quando você estiver viajando para o EUA. Todo mundo vai pedir para você trazer iPods, X-Box, laptops, roupas, itens de mercearia, etc. em sua mala, porque eles são muito caros ou não disponíveis no Brasil.

38. A menos que você goste muito de futebol ou reality shows (ou seja, do Big Brother), não há nada muito o que conversar com os brasileiros em geral. Você pode aprender fluentemente Português, mas no final, a conversa fica muito limitada, muito rapidamente.

39. Tudo é construído para carros e motoristas, mesmo os carros sendo 3x o preço de qualquer outro país. Os ônibus intermunicipais de luxo são eficientes, mas o transporte público é inconveniente, caro e desconfortável para andar. Consequentemente, o tráfego em São Paulo e Rio é hoje considerado um dos piores da Terra (SP, possivelmente, o pior). Mesmo ao meio-dia podem ter engarrafamentos enormes que torna impossível você andar mesmo em um pequeno trajeto limitado, a menos que você tenha uma motocicleta.

40. Todas as cidades brasileiras (com exceção talvez do Rio e o antigo bairro do Pelourinho em Salvador), são feias, cheias de concreto, hiper-modernas e desprovidas de arquitetura, árvores ou charme. A maioria é monótona e completamente idênticas na aparência. Qualquer história colonial ou bela mansão antiga é rapidamente demolida para dar lugar a um estacionamento ou um shopping center.

Saturday, February 01, 2014

Info-gráfico do Processo de Testes

Fonte: http://www.galeote.com.br/blog/2014/01/infografico-gratis-absolutamente-tudo-o-que-voce-precisa-saber-sobre-o-processo-de-teste-de-software/

Footnote Caption Latex

\documentclass{article}

\begin{document}

\begin{table}
\begin{minipage}{\textwidth}                                                                                         
\begin{center}
\begin{tabular}{|l|l|l|}
\hline 
TPA & Components & Cost \\
\hline
 & Total & 56558.4 \\                                                                                             
\hline 
\end{tabular}
\caption[Hardware cost estimation]{Hardware cost estimation~\footnote{per router}}
\end{center}
\end{minipage}
\end{table}

\end{document}

Transformação sem motivação

"Como vou me transformar? Eu vejo a verdade – pelo menos, vejo alguma coisa nisto – que uma mudança, uma transformação, deve começar num nível que a mente, como consciente e inconsciente, não pode alcançar, porque minha consciência como um todo é condicionada. Então, o que faço? Espero que eu esteja sendo claro com o problema. Se me permitem mostrar de outra forma: Pode minha mente, a consciente assim como a inconsciente, ficar livre da sociedade? – sociedade sendo toda a educação, a cultura, a norma, os valores, os padrões. Porque se ela não está livre, então, qualquer mudança que tente produzir dentro desse estado condicionado é ainda limitada, e, consequentemente, não muda absolutamente. Então, posso olhar sem nenhum motivo? Pode minha mente existir sem qualquer incentivo, sem motivo para mudar ou não mudar? Porque qualquer motivo é o resultado da reação de uma cultura particular, nasce de uma base particular. Assim, pode minha mente ficar livre da cultura legada em que fui criado? Esta é realmente uma pergunta muito importante. Porque se a mente não está livre da cultura onde foi criada, alimentada, certamente o indivíduo não pode ter paz, não pode ter liberdade. Seus deuses e seus mitos, seus símbolos, e todos os seus esforços são limitados, pois estão ainda no campo da mente condicionada. Qualquer esforço que ele faça, ou não faça, dentro desse campo limitado, é realmente fútil no sentido mais profundo dessa palavra. Pode haver uma decoração melhor na prisão, mais luz – mais janelas, comida melhor – mas é ainda a prisão de uma cultura particular." - Krishnamurti, J. Krishnamurti, The Book of Life

Sunday, January 19, 2014

Uma mente morta, uma mente decidida

Penso que o esforço constante para ser alguma coisa, se tornar alguma coisa, é a verdadeira causa da destrutividade e envelhecimento da mente. Vejam como estamos envelhecendo rapidamente, não só as pessoas com mais de sessenta, mas também os jovens. Como eles já estão velhos, mentalmente! Muito poucos sustentam ou mantém a qualidade de uma mente que é jovem. Quero dizer com jovem não a mente que meramente quer se divertir, aproveitar o tempo, mas a mente não contaminada, que não está arranhada, amassada, distorcida pelos acidentes e incidentes da vida, uma mente não desgastada pela disputa, pela angústia, por lutas constantes. Certamente é necessário ter uma mente jovem, pois a mente velha está tão cheia de marcas de memórias que ela não pode viver, não pode ser enérgica; é uma mente morta, uma mente decidida. Uma mente que decidiu e vive segundo suas decisões está morta. Mas uma mente jovem está sempre decidindo de novo, e uma mente nova não se sobrecarrega com inumeráveis memórias. A mente que não carrega sombra de sofrimento, embora possa passar pelo vale do sofrimento, permanece sem marcas. Eu não acho que tal mente jovem é adquirida. Ela não é uma coisa que você pode comprar pelo empenho, pelo sacrifício. Não existe moeda para ela e não é uma coisa negociável, mas se você vê a importância dela, a necessidade dela, se vê sua verdade, então alguma outra coisa acontece. - Krishnamurti, J. Krishnamurti, The Book of Life

Friday, January 17, 2014

Nós estamos desgastando a mente, não a usando

"Por que a mente envelhece? Ela é velha - não é – no sentido de ficar decrépita, deteriorada, se repetindo, presa em hábitos – hábitos sexuais, hábitos de trabalho, ou vários hábitos de ambição. A mente está tão sobrecarregada com inumeráveis experiências e memórias, tão desfigurada e marcada com o sofrimento que não pode ver nada com frescor mas está sempre traduzindo o que vê em termos de suas próprias memórias, conclusões, fórmulas, sempre citando; ela é ligada à autoridade; é uma mente velha. Você pode ver por que isto acontece. Toda nossa educação é, meramente, o cultivo da memória; e existe essa comunicação de massas pelos jornais, rádio, televisão; há os professores que leem conferências e repetem a mesma coisa vezes e vezes até seu cérebro absorver o que eles repetiram, e você vomita isto num exame e tem seu diploma e continua com o processo – o emprego, a rotina, a incessante repetição. Não só essa, mas há também nosso próprio empenho da ambição com suas frustrações, a competição não só por emprego, mas por Deus, querendo estar junto a ele, pedindo o caminho rápido até ele. Assim, o que está acontecendo é que através de pressão, estresse, pelo esforço, nossas mentes estão abarrotadas, submersas na influência, por sofrimento, consciente ou inconscientemente. Nós estamos desgastando a mente, não a usando." -

Krishnamurti, J. Krishnamurti, The Book of Life

Wednesday, January 15, 2014

What should be chosen when space is limited?

The “knapsack problem” appears in many forms in economics, engineering, and business: any place where one must allocate a single scarce resource among multiple contenders for that resource. It has acquired the fanciful name “knapsack problem” because our common experience of packing luggage expresses something of the flavor of the problem: What should be chosen when space is limited?

Saturday, January 11, 2014

Principais Servidores


  • Apache - O Apache Webserver mudou a Internet e abriu os olhos de muita gente para o mundo do software livre. Graças a eles é possível ter um servidor web de alto desempenho e qualidade, a um custo mínimo. Sem ele, todos nós estaríamos pagando muito mais caro para hospedar nossos sites na Internet.
  • Internet Information Services - Também chamado de IIS, é o servidor Web da Microsoft. Começou como um queijo suíço, mas é verdade que vem melhorando. É a plataforma para quem quer trabalhar com a tecnologia ASP e .NET. Para mais informações, veja também o site americano do IIS.
  • Websphere - Servidor Web da IBM,voltado para aplicações Java e J2EE, é um dos principais servidores de alto desempenho e robustez do mercado. 
  • BEA WebLogic - Concorre com a IBM pelo mercado de servidores JAVA e J2EE de alto desempenho. 
  • Tomcat - Servidor Web gratuito para aplicações J2EE, pode rodar sozinho ou como uma extensão do Apache ou do IIS. Faz parte da Apache Fundation, responsáveis pelo Apache Webserver. 
  • Jboss - Muito bem conceituado,um dos lideres de mercado de servidores J2EE gratuitos.
  • Thttpd - tiny/turbo/throttling HTTP server - Esse servidor é extremamente simples. Segue o protologo HTTP 1.1 e pronto. Mas se você precisa de um servidor extremamente rápido, para servir grandes quantidades de páginas simples (imagens ou banners, por exemplo) nenhum vai conseguir ser mais rápido que ele nem suportar tanta carga sem perder o desempenho. Para todos os ‘sabores'de Unix (Linux, etc...).
  • Jrun - Servidor pago da Macromedia para aplicações J2EE.
  • Zeus Web Server - Um servidor pago, caro, e bastante poderoso. Usado por empresas como o E-bay, por exemplo. 

Iron Maiden - Rime of the Ancient Mariner [Flight 666 DVD]

Understanding Architecture

"Software architecture encompasses the significant decisions about the organization of a software system. The selection of the structural elements and their interfaces by which the system is composed together with their behavior as specified in the collaboration among those elements. The composition of the structural and behavioral elements into progressively larger subsystems, the architectural style that guides this organization, these elements, and their interfaces, their collaborations, and their composition. Software architecture is concerned not only with structure and behavior but also with usage, functionality, performance, resilience, reuse, comprehensibility, economic and technology constraints and trade-offs, and aesthetic issues."

Rational Unified Process

"Architecture is a set of structuring principles that enables a system to be comprised of a set of simpler systems each with its own local context that is independent of but not inconsistent with the context of the larger system as a whole."

SunTone Architecture Methodology



Saturday, January 04, 2014

Software Process Modeling

"All models are wrong, but some are useful."

George E. P. Box [Box 1979]


Um estado eterno

"Quando falamos sobre tempo, não queremos dizer tempo cronológico, tempo do relógio. Esse tempo existe, deve existir. Se você quer pegar um ônibus, tomar um trem ou cumprir um compromisso amanhã, deve usar o tempo cronológico. Mas existe um amanhã, psicologicamente, que é o tempo da mente? Existe amanhã psicologicamente? Ou o amanhã é criado pelo pensamento porque o pensamento vê a impossibilidade de mudar diretamente, imediatamente, e inventa este processo gradual? Vejo por mim mesmo, como ser humano, que é terrivelmente importante provocar uma revolução radical em meu modo de vida, pensar, sentir, e em minhas ações, e digo para mim mesmo: "Dedicarei tempo a isto; serei diferente amanhã, ou em alguns meses". É desse tempo que estamos falando a estrutura psicológica do tempo, do amanhã, ou do futuro, e nesse tempo nós vivemos. Tempo é o passado, o presente e o futuro, não pelo relógio. Eu era ontem; o ontem opera através do hoje e cria o futuro. Isso é uma coisa bem simples. Eu tive uma experiência um ano atrás que deixou um registro em minha mente, e o presente eu traduzo segundo essa experiência, conhecimento, tradição, condicionamento, e crio o amanhã. Estou preso neste círculo. É isto que chamamos viver; é isto que chamamos tempo. O pensamento, que é você, com todas as suas memórias, condicionamento, ideias, esperanças, desespero, a completa solidão da existência; tudo isso é este tempo. E para compreender um estado infinito, quando o tempo para, deve-se investigar se a mente pode se libertar completamente de toda experiência, que está no tempo." - Krishnamurti, J. Krishnamurti, The Book of Life

Tuesday, December 31, 2013

Etapas do Método de Pesquisa

1. Escolha do tema
2. Revisão de literatura
3. Justificativa
4. Formulação do problema
5. Determinação de objetivos
6. Metodologia
7. Coleta de dados
8. Tabulação de dados
9. Análise e discussão dos resultados
10. Conclusão da análise dos resultados
11. Redação e apresentação do trabalho científico
12. Divulgação

Projeto de Pesquisa - Uma Metáfora

No projeto, se combina, se equacionam, os diferentes fatores que influem na viagem (a pesquisa):

1) A motivação pela qual empreendemos a viagem (o problema)
2) O lugar de onde partimos (estado do conhecimento)
3) A escolha do caminho a seguir para não nos perdemos, para chegar onde queremos (o método)
4) A luz que iluminará o nosso caminho (a teoria)
5) As ferramentas que levaremos para abrir o caminho (a técnica)
6) A velocidade que avançaremos de acordo com os recursos disponíveis (aspectos operativos)
7) O lugar que queremos chegar (os objetivos e resultados)


Monday, December 23, 2013

Mário Sergio Cortella - Provocações Filosóficas


A mente presa

"Nós seguimos como máquinas nossa enfadonha rotina diária. Como a mente aceita avidamente um padrão de existência, e tenazmente se agarra a ele! Como por um prego encravado, a mente é mantida junta pela ideia, e em torno da ideia ela vive e tem seu ser. A mente nunca está livre, flexível, pois está sempre presa; ela se move dentro do raio, estreito ou amplo, de seu próprio centro. Desse centro ela não ousa sair; e quando o faz, fica perdida no medo. O medo não é do desconhecido, mas da perda do conhecido. O desconhecido não incita o medo, mas a dependência do conhecido o faz. O medo está sempre com o desejo, o desejo de mais ou de menos. A mente, com seu incessante tecer de padrões, é que faz o tempo; e com o tempo há medo, esperança e morte." - Krishnamurti, J. Krishnamurti, The Book of Life


Saturday, December 21, 2013

Implications for how we build software

From process to architecture
From centralized to decentralized 
From planning to experimentation
From long cycles to short cycles
From large teams to small teams
From internal to ecosystem
From CMM (I) to agile

Cândido, ou o otimismo

Até ser expulso de um lindo castelo na Westfália, o jovem Cândido convivia com sua amada, a bela Cunegunda, e tinha a felicidade de ouvir diariamente os ensinamentos de mestre Pangloss, para quem “todos os acontecimentos estão encadeados no melhor dos mundos possíveis”.
Apesar da crença absoluta na doutrina panglossiana, do primeiro ao último capítulo, Cândido sofre um sem-fim de desgraças: é expulso do castelo; perde seu amor; é torturado por búlgaros; sobrevive a um naufrágio para em seguida quase perecer em um terremoto; vê seu querido mestre ser enforcado em um auto da fé; é roubado e enganado sucessivas vezes.
Cândido só começa a desconfiar do otimismo exacerbado de seu mestre quando ele próprio e todos os que cruzam seu caminho dão provas concretas que o melhor dos mundos possíveis vai, na verdade, muito mal.
Cândido, ou o Otimismo é um retrato satírico de seu tempo. Escrito em 1758, situa o leitor entre fatos históricos como o terremoto que arrasou Lisboa em 1755 e a Guerra dos Sete Anos (1756-63), enquanto critica com bom-humor as regalias da nobreza, a intolerância religiosa e os absurdos da Santa Inquisição. Já o caricato mestre Pangloss é uma representação sarcástica da filosofia otimista do pensador alemão Gottfried Leibniz (1646-1716).
Antecipando o sucesso desbragado e a carreira de escândalo do livro, Voltaire, pseudônimo de François-Marie Arouet, assinou a obra com o enigmático Sr. Doutor Ralph.


Friday, December 20, 2013

Feynman, lectures on physics

“Imagine que o mundo seja algo como uma gigantesca partida de xadrez sendo disputada pelos deuses, e que nós fazemos parte da audiência. Não sabemos quais são as regras do jogo; podemos apenas observar seu desenrolar. Em princípio, se observarmos por tempo suficiente, iremos descobrir algumas das regras. As regras do jogo é o que chamamos de ciência.” - Feynman lectures on physics


Roll the Bones

Monday, December 09, 2013

Por que a pessoa é descuidada?

O pensador pensa seus pensamento através do hábito, da repetição, da cópia, o que gera ignorância e sofrimento. O hábito não é descuido? Vigilância cria ordem, mas não cria hábito. Tendências estabelecidas só geram descuido. Por que a pessoa é descuidada? Porque pensar é doloroso, cria perturbações, traz oposição, pode fazer as ações da pessoa irem contra o padrão estabelecido. Pensar-sentir amplamente, tornar-se vigilante sem escolha pode levar a profundezas desconhecidas, e a mente se rebela contra o desconhecido; assim ela vai do conhecido para o conhecido, do hábito para o hábito, de padrão para padrão. Tal mente nunca abandona o conhecido para descobrir o desconhecido. Percebendo a dor do pensamento, o pensador se torna descuidado através da cópia, do hábito; tendo medo de pensar, ele cria padrões de descuido. Como o pensador tem medo, suas ações nascem do medo, e ele considera suas ações e tenta mudá-las. O pensador tem medo de suas próprias criações; mas a ação é o autor, então o pensador tem medo de si mesmo. O pensador é o medo em si mesmo; o pensador é a causa da ignorância, do sofrimento. O pensador pode se dividir em muitas categorias de pensamento, mas o pensamento é ainda o pensador. O pensador e seus esforços para ser, para se tornar, são a própria causa do conflito e da confusão. - Krishnamurti, J. Krishnamurti, The Book of Life

Friday, December 06, 2013

Journey from a Mission and Vision to Performance Measures that Work


Mama Said

Mama, she has taught me well
Told me when I was young
"Son, your life's an open book
Don't close it 'fore its done"
"The brightest flame burns quickest"
That's what I heard her say
A son's heart's owned to mother
But I must find my way

Thursday, December 05, 2013

How to troubleshoot a slow running query in SQL Server

 “ I have a slow running query , what steps can I take to speed up the query and achieve an optimised execution plan?” .
Troubleshooting database server performance is an in-depth topic. A methodical  and repeatable approach solving the root cause is the perfect situation for any DBA.   There are different approaches to SQL Server Tuning. In reality , the root cause may not be a SQL query issue , it may be SAN  , SQL Server configuration issue or workload has suddenly increased.
But of course, you’re under pressure and the query is causing  delays for the end users.The steps below expand on earlier post :SQL Server Rapid Tuning, providing a very simple emergency approach.
The steps below are a straightforward approach to troubleshooting sub optimal SQL Execution Plans. Follow the steps and repeat as necessary.
Step 1)       Statistics – Is Auto Create and Update Statistics Enabled? If Auto Create statistics is disabled , this may indicate out of date statistics. If Disabled, than proceed to  Update Statistics – use sp_updatestats to update all statistics on the database. Run the query and check if any improvement.
Step 2)       If  Auto Create and Update Statistics is Enabled, Identify the longest running queriesor highest impact queries .( If the queries have high CPU usage go to step 6). Long duration and highest IO should be a priority.
Step 3)       Place every query in the SSMS and analyse the execution plan. First – check for tables or index scans.  If large table \ index scans are occurring – progress with Query Analysis.  The Query Analysis should ask questions such as : Are all JOINS valid ? Are the JOINS returning excessive data ? Search argument validity?   Functions in predicate? 
Step 4)       If no table or index scans exist and  the query is complex , for example a large transaction managing a booking process –  check for : excessive joins, temp tables, DDL changes,sub – queries , no set based approach to writing the queries. Review  the query ,  break it down into smaller parts or analyse the JOINS to invoke a new execution plan , ensuring a similar transaction integrity is retained
Step 5)       If the query is simple and no no index \table scans exists and executing in  SSMS responds with acceptable  performance - analyse the Application and how it processes the resultset.   Ask the right question a) are just relevant results returned?  Talk to the application developers.
Step  6)       If the query is no faster in SSMS , more complex query tuning is required,  research other methods or contact a performance tuning expert
Step 7)       If in Step  2 you identified queries  with high CPU usage , analyse in SSMS for Hash Joins, Sorts, Filters.  If any of these exists , progress with Query Analysis.
Step 8)       Repeat until the problem disappears.

Como apresentar seus dados em gráficos e tabelas

Tuesday, December 03, 2013

Types of Concurrency Control

When many people attempt to modify data in a database at the same time, a system of controls must be implemented so that modifications made by one person do not adversely affect those of another person. This is called concurrency control.
Concurrency control theory has two classifications for the methods of instituting concurrency control:
  • Pessimistic concurrency control
    A system of locks prevents users from modifying data in a way that affects other users. After a user performs an action that causes a lock to be applied, other users cannot perform actions that would conflict with the lock until the owner releases it. This is called pessimistic control because it is mainly used in environments where there is high contention for data, where the cost of protecting data with locks is less than the cost of rolling back transactions if concurrency conflicts occur.
  • Optimistic concurrency control
    In optimistic concurrency control, users do not lock data when they read it. When a user updates data, the system checks to see if another user changed the data after it was read. If another user updated the data, an error is raised. Typically, the user receiving the error rolls back the transaction and starts over. This is called optimistic because it is mainly used in environments where there is low contention for data, and where the cost of occasionally rolling back a transaction is lower than the cost of locking data when read.

Wednesday, November 27, 2013

Seven Characteristics of Key Performance Indicators

  1. Nonfinancial measures (not expressed in dollars, yen, pounds, euros, etc.)
  2. Measured frequently (e.g., daily or 24/7)
  3. Acted on by the CEO and senior management team
  4. Understanding of the measure and the corrective action required by all staff
  5. Ties responsibility to the individual or team
  6. Significant impact (e.g., affects most of the core critical success factors [CSFs] and more than one BSC perspective)
  7. Positive impact (e.g., affects all other performance measures in a positive way)

Friday, November 22, 2013

What does the architect do? How is an architect different from a senior developer?

These are some of the common questions that get asked over and over again in the industry. We will explain, from the exam developer’s point of view, these questions so you have that common understanding when taking the exam.

"The designer is concerned with what happens when a user presses a button, and the architect is concerned with what happens when ten thousand users press a button."

Saturday, November 16, 2013

Teoria dos Jogos: O que é Teoria dos Jogos

O que é Teoria dos Jogos e como ela pode melhorar as suas decisões estratégicas? Teoria dos Jogos é o estudo das tomadas de decisões entre indivíduos quando o resultado de cada um depende das decisões dos outros, numa interdependência similar a um jogo.

Mas primeiro é interessante explicar o que não é Teoria dos Jogos: decidir qual carro comprar, por exemplo. Escolher um automóvel é uma decisão complexa pela quantidade de variáveis a considerar. Além do preço, existem a aparência, estilo, tamanho, motor, conforto, acessórios, etc. Para complicar, sempre há um trade-off: nenhum carro possui exatamente todas as características que você gostou. Seria bom se o carro A, como aqueles acessórios, também tivesse a configuração do motor do carro B. Você pode criar um algoritmo (mental ou via computador) para colocar todas as variáveis e pesos de importância (suas utilidades) e criar um ranking. Entretanto, o exemplo do carro é uma decisão isolada - a decisão é só sua e não há interferência de outros no resultado.



Já a Teoria dos Jogos estuda cenários onde existem vários interessados em otimizar os próprios ganhos, as vezes em conflito entre si. Por exemplo, imagine que em sua empresa você tem dúvidas sobre qual ação tomar para aumentar o seu lucro: reduzir o preço, lançar outro produto ou fazer uma campanha de marketing?

No caso de reduzir o preço, conhecendo a curva de demanda, se abaixar o preço em 3%, sua receita sobe 7% pois vai ganhar market-share. Você calculou a relação de preço versus vendas e, conseqüentemente, a migração de consumidores do produto concorrente para o seu. Mas e se seu concorrente reagir e também abaixar o preço na mesma proporção? Como conseqüência da estratégia dele, o seu ganho, antes imaginado como aumento em 7%, muda para uma perda de 5% pois não aconteceu como você previu.



O resultado (ganho ou perda) de uma decisão depende obrigatoriamente da movimentação dos dois concorrentes, tornando a tomada de decisão muito mais complexa. Por isso, você precisa saber quais são os ganhos ou perdas de cada combinação e identificar quais são os incentivos mais atraentes para seu adversário, sabendo que ele está imaginando quais são os seus ganhos para também tomar uma decisão.

Com essas informações e deduções, reduzir o preço não é uma boa estratégia. Então você imagina fazer uma campanha de marketing. Começa outro ciclo de previsões: como ele vai reagir neste caso? Ao se antecipar as ações do seu competidor, você deve repensar antes de agir e visualizar todas as implicações de cada decisão, e ele fará o mesmo simultaneamente.

Por isso, a melhor recomendação é: antes de tomar uma decisão, coloque-se no lugar do concorrente e imagine qual seria a reação dele dadas as ações e incentivos existentes. Simultaneamente ele fará o mesmo - entender quais são suas motivações e ações para que ele tome a melhor decisão. Este é ciclo sem fim: você pensa que ele pensa que você pensa que ele pensa que....

Teoria dos Jogos é isso: entender que sua decisão não é independente e ambos os ganhos dependem da combinação de muitas ações em cadeia até chegar em um equilíbrio. Este equilíbrio é o chamado Equilíbrio de Nash, em homenagem a John Nash Jr, prêmio Nobel de 1994 e que foi personagem de Russell Crowe no filme Uma Mente Brilhante, ganhador do Oscar de 2002.

Outras analogias interessantes sobre decisões interdependentes são o Dilema da Ponte e o Dilema do Vagão de Trem.


Teoria dos Jogos: o intuitivo agora sistematizado

Pensar no concorrente e nas ações-reações antes agir parece ser muito intuitivo. Você já pensa assim, certo? Então, por que precisaria da Teoria dos Jogos para uma atitude tão óbvia? Resposta: porque a Teoria dos Jogos oferece metodologias que organizam o seu raciocínio nos jogos do cotidiano com seu concorrente, chefe, subordinado, colega de trabalho, cliente, fornecedor, vendedor, amigo, esposa/marido, governo, consumidor e outros.

Nesta caixa de ferramentas existem alguns conceitos estruturados que ajudam na comunicação e no entendimento de como as pessoas decidem. Exemplos:

- matriz de resultados ou esquema de incentivos
- jogos seqüenciais versus simultâneos
- cooperação versus competição
- dilema do prisioneiro e equilibrio ineficiente
- equilíbrio de Nash
- estratégia dominante e backward induction
- jogos repetitivos e estratégia mista
- informação incompleta

Assim como várias teorias de administração ajudam a estruturar o seu pensamento nas decisões competitivas, a Teoria dos Jogos possui modelos formais e exemplos que facilitam o entendimento nas decisões interdependentes, além de facilitar a comunicação e treinamento dos conceitos como qualquer teoria formal. A base da teoria é colocar-se na posição do outro e raciocinar o que você faria em cada situação, modelando todas as interações com benefícios/prejuízos de ambos e daí tomar a melhor ação estratégica.

A Teoria dos Jogos, como disciplina independente, não resolve todos os problemas, mas apresenta vários insights para melhorar seu pensamento estratégico como um elemento complementar das demais Teorias de Decisões. Para se aprofundar e para ser um bom estrategista, é importante unir os conceitos das disciplinas de Estratégia, da Economia Clássica (como preferências e utilidades, resultado esperado, risco e incerteza, free-rider, assimetria de informações) e da Teoria Comportamental (heurísticas e viéses cognitivos). Neste último caso, quanto mais você souber quais são os incentivos e reais motivações do seu concorrente ou parceiro, maiores as suas chances de ganhar o jogo. A união de todos os elementos é uma grande forma para melhorar suas decisões estratégicas.

Fonte: http://www.teoriadosjogos.net/teoriadosjogos/list-trechos.asp?id=24

Thursday, November 14, 2013

Night Terrors

Night terrors is a phenom that occurs in children between 3 and 6 years old.

symptoms:
- sleepwalking
- to scream while sleep
- scaring while sleep

causes:
- sadness
- greasy food
- lack of sleep routine

treatment:
- don't awake the children
- help them with the goods words
- follow a sleep routine

Night terrors doesn't leave memories and last for much time.


Thursday, November 07, 2013

Improving Performance

The two factors that determine the system performance are as follows:
  • Processing time—The processing time includes the time spent in computing, data marshaling and unmarshaling, buffering, and transporting over a network.
  • Blocked time—The processing of a request can be blocked due to the contention for resources, or a dependency on other processing. It can also be caused by certain resources not available; for example, an application might need to run an aggressive garbage collection to get more memory available for the processing.
The following practices are commonly used to increase the system performance:

  • Increase the system capacity by adding more raw processing power.
  • Increase the computation efficiency by using efficient algorithms and appropriate component models technologies.

Introduce cached copies of data to reduce the computation overhead, as follows:

  • Introduce concurrency to computations that can be executed in parallel.
  • Limit the number of concurrent requests to control the overall system utilization.
  • Introduce intermediate responses to improve the performance perceived by the user.

Monday, November 04, 2013

YAGNI


Logical layers are merely a way of organizing your code. Typical layers include Presentation, Business and Data – the same as the traditional 3-tier model. But when we’re talking about layers, we’re only talking about logical organization of code. In no way is it implied that these layers might run on different computers or in different processes on a single computer or even in a single process on a single computer. All we are doing is discussing a way of organizing a code into a set of layers defined by specific function.


Physical tiers however, are only about where the code runs. Specifically, tiers are places where layers are deployed and where layers run. In other words, tiers are the physical deployment of layers.


Sunday, November 03, 2013

Pink Floyd HD Pulse Live at Earls Court 1994

You'd Better Writer a Effective Code - Java Effective

Creating and Destroying Objects
Item 1: Consider static factory methods instead of constructors
Item 2: Consider a builder when faced with many constructor parameters
Item 3: Enforce the singleton property with a private constructor or an enum type
Item 4: Enforce noninstantiability with a private constructor
Item 5: Avoid creating unnecessary objects
Item 6: Eliminate obsolete object references
Item 7: Avoid finalizers

Methods Common to All Objects
Item 8: Obey the general contract when overriding equals
Item 9: Always override hashCode when you override equals
Item 10: Always override toString
Item 11: Override clone judiciously
Item 12: Consider implementing Comparable

Classes and Interfaces
Item 13: Minimize the accessibility of classes and members
Item 14: In public classes, use accessor methods, not public fields
Item 15: Minimize mutability
Item 16: Favor composition over inheritance
Item 17: Design and document for inheritance or else prohibit it
Item 18: Prefer interfaces to abstract classes
Item 19: Use interfaces only to define types
Item 20: Prefer class hierarchies to tagged classes
Item 21: Use function objects to represent strategies
Item 22: Favor static member classes over nonstatic

Generics
Item 23: Don’t use raw types in new code
Item 24: Eliminate unchecked warnings
Item 25: Prefer lists to arrays
Item 26: Favor generic types
Item 27: Favor generic methods
Item 28: Use bounded wildcards to increase API flexibility
Item 29: Consider typesafe heterogeneous containers

Enums and Annotations
Item 30: Use enums instead of int constants
Item 31: Use instance fields instead of ordinals
Item 32: Use EnumSet instead of bit fields
Item 33: Use EnumMap instead of ordinal indexing
Item 34: Emulate extensible enums with interfaces
Item 35: Prefer annotations to naming patterns
Item 36: Consistently use the Override annotation
Item 37: Use marker interfaces to define types

Methods
Item 38: Check parameters for validity
Item 39: Make defensive copies when needed
Item 40: Design method signatures carefully
Item 41: Use overloading judiciously
Item 42: Use varargs judiciously
Item 43: Return empty arrays or collections, not nulls
Item 44: Write doc comments for all exposed API elements

General Programming
Item 45: Minimize the scope of local variables
Item 46: Prefer for-each loops to traditional for loops
Item 47: Know and use the libraries
Item 48: Avoid float and double if exact answers are required
Item 49: Prefer primitive types to boxed primitives
Item 50: Avoid strings where other types are more appropriate
Item 51: Beware the performance of string concatenation
Item 52: Refer to objects by their interfaces
Item 53: Prefer interfaces to reflection
Item 54: Use native methods judiciously
Item 55: Optimize judiciously
Item 56: Adhere to generally accepted naming conventions

Exceptions
Item 57: Use exceptions only for exceptional conditions
Item 58: Use checked exceptions for recoverable conditions and runtime exceptions for programming errors
Item 59: Avoid unnecessary use of checked exceptions
Item 60: Favor the use of standard exceptions
Item 61: Throw exceptions appropriate to the abstraction
Item 62: Document all exceptions thrown by each method
Item 63: Include failure-capture information in detail messages
Item 64: Strive for failure atomicity
Item 65: Don’t ignore exceptions

Concurrency
Item 66: Synchronize access to shared mutable data
Item 67: Avoid excessive synchronization
Item 68: Prefer executors and tasks to threads
Item 69: Prefer concurrency utilities to wait and notify
Item 70: Document thread safety
Item 71: Use lazy initialization judiciously
Item 72: Don’t depend on the thread scheduler
Item 73: Avoid thread groups

Serialization
Item 74: Implement Serializable judiciously
Item 75: Consider using a custom serialized form
Item 76: Write readObject methods defensively
Item 77: For instance control, prefer enum types to readResolve
Item 78: Consider serialization proxies instead of serialized instances



Simulation in Bizagi - explained