SlideShare una empresa de Scribd logo
1 de 88
Descargar para leer sin conexión
Wzorce organicznej architektury
Pamiętnik szaleńca
Kim jestem
work://chief_architect@lumesse
owner://symentis.pl
twitter://j_palka
blog://geekyprimitives.wordpress.com
scm:bitbucket://kcrimson
scm:github://kcrimson
Co społeczeństwo myśli o mnie?
Co moja żona myśli o mojej pracy?
Co ja tak naprawdę robię?
~ 8 firm w przeciągu 16 lat
~ 26 projektów
… i tylko jeden projekt budowany od podstaw ...
Jak się z tym czuje?
I am feelingI am feeling
lucky!lucky!
Czego się dziś nie dowiem?
Która kombinacja wzorców, xDD, języków,
frameworków i paradygmatów gwarantuje
sukces
Dowiem się za to jak nie oszaleć...
Pracując z monolityczną, odziedziczoną, masą
kodu, który zbliża się do granic wytrzymałości,
by za chwilę zapaść się pod własnym ciężarem,
tworząc czarną dziurę, która pochłonie
wszystkich żywych programistów w okolicy
We are living in a ...
Big Ball of Mud
Autogenerated Stovepipe
Stovepipe Enterprise
Jumble
Stovepipe System
Cover Your Assets
Vendor Lock-In
Wolf Ticket
Architecture by Implication
Warm Bodies
Design by Committee
Swiss Army Knife
Reinvent the Wheel
The Grand Old Duke of York
Co łączy te wszystkie przypadki?
Złożoność
Dowód?
„I fucking love science”
Myślenie systemowe
System dynamics
Teorie złożoności
Strange Attractor
The Gap
Jak organizacje sobie z tym radzą?
Może by tak zatrudnić więcej studentów?
Przepiszmy to wszystko...
(najlepiej w technologi i na platformę o której nie mamy zielonego pojęcia)
Dlaczego?
Czas?
Kilka „extra feature” na które wszyscy czekali?
Nadmierna wiara w siłę sprawczą technologii?
Projekty często postrzegane jak czysto
techniczne?
Ignorancja?
Arogancja?
A może by tak?
The Gap
Wzorce organicznej architektury
Architektura to proces
który ma na celu
transformację twojego
systemu
Architektura to proces
który ma na celu
transformację twojego
systemu
Architektura to proces
który ma na celu
transformację twojego
systemu
Gap
↓
Context
↓
Constraints
You can't control what you can't measure
Tom DeMarco,
Controlling Software Projects,
You can't Reason about what you can't measure
Miara jakości architektury?
Complexity Resilience
Source code
the truth will
tell you
Listen to
the system
you must
SCM
Bug tracker
Continous integration
Static code analisys
Znajdźmy stabilne obszary systemu
# count complexity per each file
find. -inamejacoco.csv
|xargstail -q-n+2
|awk -F , '{gsub(".","/",$2);print($1"/src/main/java/"$2"/"$3".java"),$10+$11}'
|sort>coverage.txt
# count number of changes
echo 'changeset="{files}"' >files.style; echo'file="n{file}"' >>files.style
hglog--stylefiles.style
|sort
|uniq-c
|awk '{print$2,$1}' >changes.txt
# mergechanges
joincoverage.txtchanges.txt
Michael Feathers Quadrant
publicenumQuadrant{
/**
* low complexity, little changes - simple utilities.
* /
tools,
/**
* simple yet frequently touched area of your code. Core of it, yet done well
* and expanding. New features grow, new classes are extracted, complexity
* is kept at bay. Keep it that way!
* /
breedinggrounds,
/**
* Ugly files but stable - written once for specific purpose, which they
* fulfill well enough. High complexity makes them risky to touch, but is
* there any need to?
*
* Ugly Stables also because of Hercules and Augias's stables... ;-)
* /
uglystables,
/**
* Code fitting here is fraught with complexity and changed often. Meaning,
* you either didn't got the client's needs right and need to make lotsa
* changes now, or you mis-designed and now have to work around it.
* Or there's simply a number of bugs...
* /
designflaw
}
tools
uglystables designflaw
breedinggrounds
Znajdźmy kruche obszary systemu
#fetch all jobs
jobs_rsp=requests.get(
"https://primitive.ci.cloudbees.com/job/roadrunner/api/python")
#all buildsurls
build_urls=[x['url'] for x ineval(jobs_rsp.content)['builds']]
pairs=[]
for build_url inbuild_urls:
build=eval(requests.get("%sapi/python" %(build_url)).content)
result=build['result']
changeSetItems=build['changeSet']['items']
if changeSetItemsandnotresult=='SUCCESS':
affectedPaths=build['changeSet']['items'][0]['affectedPaths']
for i initertools.permutations(affectedPaths,2):
pairs.append(i)
counter =collections.Counter(pairs).most_common(5)
for pair incounter:
printpair
(('.../cli/CliConfigurationBuilderTest.java', '.../cli/RunTest.java'), 3)
(('.../cli/RunTest.java', '.../cli/CliConfigurationBuilderTest.java'), 3)
(('.../cli/CliConfigurationBuilderTest.java', '.../cli/BenchTest.java'), 3)
(('.../cli/BenchTest.java', '.../cli/RunTest.java'), 3)
(('.../cli/RunTest.java', '.../cli/BenchTest.java'), 3)
Czy ja to wszystko dobrze spakowałem?
Package principles
aka
Coś tu za chwilę wyleci w powietrze
(echo"<changes>" && hglog--template
"<changeset>
{files%'<file>{file}</file>n'}
</changeset>n"
&& echo"</changes>") >out.xml
+
Neo4j
neo4j-sh (?)$ MATCH (a)-[c:`changeset`]->(b) RETURN labels(a),c.times,labels(b) order by c.times desc limit
5;
+-----------------------------------------------------------------------------------------------------------+
| labels(a) | c.times | labels(b) |
+-----------------------------------------------------------------------------------------------------------+
| [".../listeners/SummaryScenarioListener.java"] | 13 | [".../listeners/LoggingScenarioListener.java"] |
| [".../listeners/LoggingScenarioListener.java"] | 13 | [".../listeners/SummaryScenarioListener.java"] |
| ["pom.xml"] | 12 | ["roadrunner-core/pom.xml] |
| [".../cli/BenchTest.java"] | 12 | [".../cli/RunTest.java"] |
| [".../cli/RunTest.java"] | 12 | [".../cli/BenchTest.java"] |
+-----------------------------------------------------------------------------------------------------------+
To gdzie te wzorce organicznej architektury?
Zasiej i pielęnguj
„aka” refactoring
kompulsywny „refactoring” to zło
unikaj „historyjek” typu „zrefaktoryzować X”
zanim zaczniesz, zastanów się czy warto
nie pytaj o pozwolenie, raczej proś o przebaczenie
nadaj „technical debt” znaczenie
„visual management”
wyznacz tylko kilka miar jakości
Tylko te które wspierają twoje cele
ponieważ
„You get what you measure”
Zasiej i zbierzZasiej i zbierz
„aka” modularyzacja
modularyzuj do stabilnych elementów systemów
zanim jednak zaczniesz ...
… zbuduj „framework” ...
Architektura to proces
który ma na celu
transformację twojego
systemu
… musisz mieć jasno określony cel …
… strategia dobrana do potrzeb i możliwości …
… daj sobie przestrzeń na zmianę zdania …
nie daj się znowu sparaliżować „big design (tm)”
… gdyż twój cel może się zmienić ...
co jeśli twój „big design (TM)”
wyglądałby tak...
procesy wsadowe (batch) odseparowane
moduły komunikują się ze sobą asynchronicznie
Użytkownicy widzą system jako jedność
i komunikują się synchronicznie
Jedyne co współdzielimy w systemie to mentalny
model
mvn clean install < 60 sekund
Każdy moduł musi dziedziczyć
kontekst i ograniczenia
Może też wprowadzać specyficzne, lokalne
ograniczenia w kontekście poszczególnych
modułów
Kompostowanie
Czasami mimo wysiłków, pracy...
i szczerych chęci
Którymi piekło jest wybrukowane
Complexity
Czy wiesz jak twoi użytkownicy korzystają z
systemu?
Czy wiesz że twój „kluczowy” klient nie korzysta
już z systemu od 5 lat?
Czy wiesz że „killer feature” nie zachwycił
rynku a ty ciągle utrzymujesz ten kod?
Skąd ja mam to wiedzieć?
/var/log/httpd/access.log
Zinstrumentuj kod?
Aspekty?
Byteman?
Bug tracker?
Ludzie z utrzymania?
Nie inwestuj w drogie narzędzia
Będziesz czekał miesiącami na „approval”
A potem narzędzie i tak zawiedzie twoje
oczekiwania :)
Zainwestuj w kreatywność
Tylko proszę bez „wykomentowania” kodu
Twój SCM będzie pamiętał
… po prostu wyrzuć to...
Czas podsumowań
Hierarchy
↓
Self-Organization
↓
Resilience
System's resilience is often sacrificed for purposes
of
short-term productivity and stability.
Productivity and stability are the
usual excuses for turning creative human beings
into mechanical adjuncts
to production processes.
Or for establishing bureaucracies and theories
of knowledge that
treat people as if they were only numbers.
Donella Meadows, thinking in systems a primer
Dziękuję!!!

Más contenido relacionado

La actualidad más candente

Tantangan dan kreativitas dunia kerja
Tantangan dan kreativitas dunia kerjaTantangan dan kreativitas dunia kerja
Tantangan dan kreativitas dunia kerjaSamuel Henry
 
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019Steven Mackenzie
 
Analisa Sistem Informasi PT.MAP COTTON ON
Analisa Sistem Informasi PT.MAP COTTON ONAnalisa Sistem Informasi PT.MAP COTTON ON
Analisa Sistem Informasi PT.MAP COTTON ONnaufals11
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵Javajigi Jaesung
 
Basic Salesmanship Program Jakarta Sales Academy
Basic Salesmanship Program Jakarta Sales AcademyBasic Salesmanship Program Jakarta Sales Academy
Basic Salesmanship Program Jakarta Sales AcademyDedy Budiman M.Pd, CMA
 
Leadership skill - Menjadi Pemimpin yang dicintai
Leadership skill - Menjadi Pemimpin yang dicintaiLeadership skill - Menjadi Pemimpin yang dicintai
Leadership skill - Menjadi Pemimpin yang dicintaiMade Sumiarta
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Taehyun Kim
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기재원 최
 
Bekerjasama dalam satu team
Bekerjasama dalam satu teamBekerjasama dalam satu team
Bekerjasama dalam satu teamFerdhy Prabowo
 
MSF (Microsoft Solution Framework)
MSF (Microsoft Solution Framework)MSF (Microsoft Solution Framework)
MSF (Microsoft Solution Framework)Deniz Kılınç
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다Taehyun Kim
 
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...Docker, Inc.
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception상현 조
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with SpringKeesun Baik
 
Accelerate Development with NX Build System
Accelerate Development with NX Build SystemAccelerate Development with NX Build System
Accelerate Development with NX Build SystemThien Ly
 
더 나은 개발자 되기
더 나은 개발자 되기더 나은 개발자 되기
더 나은 개발자 되기JeongHun Byeon
 

La actualidad más candente (20)

Kuda dan Orang Sales
Kuda dan Orang SalesKuda dan Orang Sales
Kuda dan Orang Sales
 
Tantangan dan kreativitas dunia kerja
Tantangan dan kreativitas dunia kerjaTantangan dan kreativitas dunia kerja
Tantangan dan kreativitas dunia kerja
 
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019
Find Your Why For Groups - The Agile South Coast Tribe Why, Feb 2019
 
Analisa Sistem Informasi PT.MAP COTTON ON
Analisa Sistem Informasi PT.MAP COTTON ONAnalisa Sistem Informasi PT.MAP COTTON ON
Analisa Sistem Informasi PT.MAP COTTON ON
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
 
Basic Salesmanship Program Jakarta Sales Academy
Basic Salesmanship Program Jakarta Sales AcademyBasic Salesmanship Program Jakarta Sales Academy
Basic Salesmanship Program Jakarta Sales Academy
 
Leadership skill - Menjadi Pemimpin yang dicintai
Leadership skill - Menjadi Pemimpin yang dicintaiLeadership skill - Menjadi Pemimpin yang dicintai
Leadership skill - Menjadi Pemimpin yang dicintai
 
"Sad Mad Glad" Retrospective Yöntemi
"Sad Mad Glad" Retrospective Yöntemi "Sad Mad Glad" Retrospective Yöntemi
"Sad Mad Glad" Retrospective Yöntemi
 
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년Ndc17 DevOps? DevOps개발자? 북미에서의 6년
Ndc17 DevOps? DevOps개발자? 북미에서의 6년
 
Teknik Meningkatkan Penjualan Anda
Teknik Meningkatkan Penjualan AndaTeknik Meningkatkan Penjualan Anda
Teknik Meningkatkan Penjualan Anda
 
학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기학생 개발자, 인턴십으로 성장하기
학생 개발자, 인턴십으로 성장하기
 
Bekerjasama dalam satu team
Bekerjasama dalam satu teamBekerjasama dalam satu team
Bekerjasama dalam satu team
 
MSF (Microsoft Solution Framework)
MSF (Microsoft Solution Framework)MSF (Microsoft Solution Framework)
MSF (Microsoft Solution Framework)
 
Kejar Target
Kejar TargetKejar Target
Kejar Target
 
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
NDC 2016 김태현 - 글로벌 동시 퀵 서버패치 이렇게 구축 했다
 
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...
Escape From Your VMs with Image2Docker Jeff Nickoloff, All in Geek Consulting...
 
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with ExceptionGCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
GCGC- CGCII 서버 엔진에 적용된 기술 (5) - Executor with Exception
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 
Accelerate Development with NX Build System
Accelerate Development with NX Build SystemAccelerate Development with NX Build System
Accelerate Development with NX Build System
 
더 나은 개발자 되기
더 나은 개발자 되기더 나은 개발자 되기
더 나은 개발자 되기
 

Similar a Patterns for organic architecture

Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlSebastian Marek
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychWydawnictwo Helion
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówWydawnictwo Helion
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychWydawnictwo Helion
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyWydawnictwo Helion
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyWydawnictwo Helion
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyWydawnictwo Helion
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIWydawnictwo Helion
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanieWydawnictwo Helion
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaWydawnictwo Helion
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Droptica
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaWydawnictwo Helion
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówWydawnictwo Helion
 
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...Bartłomiej Miś
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaWydawnictwo Helion
 

Similar a Patterns for organic architecture (20)

Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Delphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danychDelphi 2007 dla WIN32 i bazy danych
Delphi 2007 dla WIN32 i bazy danych
 
Język C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistówJęzyk C++. Gotowe rozwiązania dla programistów
Język C++. Gotowe rozwiązania dla programistów
 
C++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznychC++. Wykorzystaj potęgę aplikacji graficznych
C++. Wykorzystaj potęgę aplikacji graficznych
 
C++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. PodstawyC++Builder i Turbo C++. Podstawy
C++Builder i Turbo C++. Podstawy
 
ABC Delphi 2006
ABC Delphi 2006ABC Delphi 2006
ABC Delphi 2006
 
Aplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. PrzykładyAplikacje w Visual C++ 2005. Przykłady
Aplikacje w Visual C++ 2005. Przykłady
 
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalistyMySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
MySQL. Budowanie interfejsów użytkownika. Vademecum profesjonalisty
 
Aplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie IIAplikacje w Delphi. Przykłady. Wydanie II
Aplikacje w Delphi. Przykłady. Wydanie II
 
.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie.NET Framework 2.0. Zaawansowane programowanie
.NET Framework 2.0. Zaawansowane programowanie
 
Delphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązaniaDelphi 2005. 303 gotowe rozwiązania
Delphi 2005. 303 gotowe rozwiązania
 
Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]Drupal jako modularny i rozszerzalny CMS [PL]
Drupal jako modularny i rozszerzalny CMS [PL]
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programówC++. 50 efektywnych sposobów na udoskonalenie Twoich programów
C++. 50 efektywnych sposobów na udoskonalenie Twoich programów
 
SolidWorks 2006 w praktyce
SolidWorks 2006 w praktyceSolidWorks 2006 w praktyce
SolidWorks 2006 w praktyce
 
C++BuilderX. Ćwiczenia
C++BuilderX. ĆwiczeniaC++BuilderX. Ćwiczenia
C++BuilderX. Ćwiczenia
 
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...
4Developers 2023: frontendowe optymalizacje wydajności / Bartek Miś / Web Dev...
 
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
User Experience – wpływ internetu na aplikacje enterprise - Netcamp #14
 
Visual Basic .NET. Księga eksperta
Visual Basic .NET. Księga ekspertaVisual Basic .NET. Księga eksperta
Visual Basic .NET. Księga eksperta
 

Más de Jaroslaw Palka

We are crowd, we are anonymous
We are crowd, we are anonymousWe are crowd, we are anonymous
We are crowd, we are anonymousJaroslaw Palka
 
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodziCzterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodziJaroslaw Palka
 
Systematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuSystematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuJaroslaw Palka
 
Patterns for JVM languages JokerConf
Patterns for JVM languages JokerConfPatterns for JVM languages JokerConf
Patterns for JVM languages JokerConfJaroslaw Palka
 
Systematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuSystematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuJaroslaw Palka
 
Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Jaroslaw Palka
 
I ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cacheI ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cacheJaroslaw Palka
 
Programming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degreeProgramming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degreeJaroslaw Palka
 

Más de Jaroslaw Palka (8)

We are crowd, we are anonymous
We are crowd, we are anonymousWe are crowd, we are anonymous
We are crowd, we are anonymous
 
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodziCzterej jeźdźcy apokalipsy  gdy Armagedon w JVM nadchodzi
Czterej jeźdźcy apokalipsy gdy Armagedon w JVM nadchodzi
 
Systematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuSystematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniu
 
Patterns for JVM languages JokerConf
Patterns for JVM languages JokerConfPatterns for JVM languages JokerConf
Patterns for JVM languages JokerConf
 
Systematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuSystematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniu
 
Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014
 
I ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cacheI ty też możesz mieć swoje dane w cache
I ty też możesz mieć swoje dane w cache
 
Programming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degreeProgramming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degree
 

Patterns for organic architecture