RSS feed [root] /weblog /design




login:

password:

title search:




 


Thu Apr 06 06:32:51 GMT 2023

design



(google search) (amazon search)
second
download zip of files only

Tue Jan 04 04:32:08 GMT 2022 From /weblog/design/examples

messaging


ZeroMQ: The Design of Messaging Middleware - http://www.drdobbs.com[..]&siteSectionName=architecture-and-design

When NOT to use a message queue - http://techblog.bozho.net/?p=1455

现代IM系统中的消息系统架构 - 架构篇 - https://yq.aliyun.com/articles/698301

(google search) (amazon search)



Sat Jan 01 12:44:21 GMT 2022 From /weblog/design

date


Date handling look simple but easy to fail in trap. Even worst is this is easy to have bad data which hard to fix. Here is an example - http://blogs.msdn.com/jensenh/archive/2005/11/23/496246.aspx

One tip for testing application with time dependence, treat it as random - http://googletesting.blogspot.com[..]pot.com/2008/04/tott-time-is-random.html

Explanation of issues of Joda-time, basically it still haven't map the human view of time close enough than machine view of time - http://www.jroller.com/scolebourne/entry/why_jsr_310_isn_t

Screencast of how to driven a fluent Date API - http://tedyoung.blogsome.com[..]-apis-in-java-episode-1-comparing-dates/

解读数据架构的 2021:大数据 1.0 体系基本建成,但头上仍有几朵乌云 - https://www.infoq.cn/article/gHTPkmo0vZhE7vwFAGij

(google search) (amazon search)



Sun Nov 28 12:45:20 GMT 2021 From /weblog/design/examples

netflix


https://medium.com[..]ens-every-time-you-hit-play-3a40c9be254b

Life of a Netflix Partner Engineer — The case of the extra 40 ms - https://netflixtechblog.com[..]eer-the-case-of-extra-40-ms-b4c2dd278513

A look under the hood of the most successful streaming service on the planet - https://www.theverge.com/22787426/netflix-cdn-open-connect https://www.infoq.cn/article/12qoAI5BTTDraSwpb7L0

(google search) (amazon search)


Thu Nov 25 23:26:25 GMT 2021 From /weblog/design

Architecture


Top Ten Software Architecture Mistakes - http://www.infoq.com/news/2007/10/top-ten-architecture-mistakes

Discussion about the balance of upfront design - http://blog.objectmentor.com[..]4/25/the-scatology-of-agile-architecture

There is no conflict in agile and architecture - http://www.andrejkoelewijn.com[..]s-no-conflict-in-agile-and-architecture/

http://c2.com/cgi/wiki?HexagonalArchitecture

Experience of build instead of buy - http://arstechnica.com[..]uy-one-companys-decision-to-go-it-alone/

Problem of too many layer - http://johannesbrodwall.com[..]/10/the-madness-of-layered-architecture/

http://edmundkirwan.com/general/simple.html

http://blog.schauderhaft.de[..]are-architect-here-is-your-reading-list/

Sometime it is worth to build to throw - http://martinfowler.com/bliki/SacrificialArchitecture.html

Business Transactions
External Dependencies
Caching Strategy
Garbage Collection
Application Topology
http://blog.appdynamics.com[..]s-to-capture-in-enterprise-applications/

invent a solution the majority of whose components depend on no others with those few components whose task it is to compose those other components being left largely to coordination roles. - http://edmundkirwan.com/general/simple.html

http://blog.cloudera.com[..]ting-started-with-big-data-architecture/

Twitter - http://www.infoq.com/cn/articles/twitter-architecture-evolution http://highscalability.com[..]tter-handles-3000-images-per-second.html

Suning, more on HTTP - http://www.infoq.com[..]oduct-details-system-architecture-design

Decision - https://javax0.wordpress.com/2016/05/04/architects-dont-decide/

Some suggestion of making system simple, well, but the suggestion itself it is that simple - https://www.infoq.com/articles/driving-architectural-simplicity

https://medium.com[..]ural-patterns-in-a-nutshell-a0b47a1e9013

https://www.in28minutes.com/introduction-to-software-architecture

Explaining common different architecture patterns - https://levelup.gitconnected.com[..]l-patterns-you-need-to-know-a1f5ea7e4e3d

Software Architecture Patterns - https://orkhanscience.medium.com[..]ecture-patterns-5-mins-read-e9e3c8eb47d2

(google search) (amazon search)


Sun Nov 21 13:07:33 GMT 2021 From /weblog/design/examples

db


Crashproofing the Original NoSQL Key-Value Store - https://queue.acm.org/detail.cfm?ref=rss&id=3487353

The history of Berkeley DB - https://queue.acm.org/detail.cfm?ref=rss&id=3501713

(google search) (amazon search)


Mon Aug 23 14:12:35 GMT 2021 From /weblog/design/examples

jOOQ


10 Things You Didn’t Know About jOOQ - https://blog.jooq.org/10-things-you-didnt-know-about-jooq/

(google search) (amazon search)


Sat Jul 24 14:13:07 GMT 2021 From /weblog/design/pattern

saga



Saga Orchestration for Microservices Using the Outbox Pattern - https://www.infoq.com/articles/saga-orchestration-outbox/ https://www.infoq.cn/article/TuhloSAI0MpB2Nj4XkFK

(google search) (amazon search)


Fri Jun 18 01:04:27 GMT 2021 From /weblog/design/interview

Linus Torvalds


https://www.brynmawr.edu/cs/resources/beauty-of-programming

(google search) (amazon search)


Sat Feb 20 13:09:12 GMT 2021 From /weblog/design/examples

travel


建在大数据上的郑州地铁 - https://www.infoq.cn/article/KcR9iISdAV7FsgWLyqV0

(google search) (amazon search)


Sun Jan 31 13:17:02 GMT 2021 From /weblog/design

framework


Best Practice: Application Frameworks - https://queue.acm.org/detail.cfm?ref=rss&id=3447806

(google search) (amazon search)


Sun Jan 31 11:07:40 GMT 2021 From /weblog/design

queue


Fast synchronization between a single producer and single consumer - http://www.bluebytesoftware.com[..]eenASingleProducerAndSingleConsumer.aspx

Lock free queue idea. - http://groups.google.com[..]read/thread/82066179448783da?hl=en&pli=1

Use of Disruptor - http://www.infoq.com/presentations/Disruptor

Use of Queue - http://highscalability.com[..]ble-presents-queue-er-message-queue.html

Discuss about the "Railway approach" of producer consumer queue - http://www.infoq.com[..]ormance-Java-Inter-Thread-Communications http://bad-concurrency.blogspot.com.au[..]alternative-multi-producer-approach.html

Probably worth to consider replacing queue by actor - http://www.nurkiewicz.com[..]implifying-trading-system-with-akka.html

AbstractQueueSynchroniz - https://xie.infoq.cn/article/be615e3eeaf5badc900cb3c01

(google search) (amazon search)




Sun Jan 24 12:25:17 GMT 2021 From /weblog/design/distribute

cloud


1. Use Cloud for Scaling
2. Use Cloud for Multi-tenancy
3. Use Cloud for Batch processing
4. Use Cloud for Storage
5. Use Cloud for Communication

http://horicky.blogspot.com/2009/11/cloud-computing-patterns.html

http://horicky.blogspot.com/2009/11/nosql-patterns.html

Database in cloud - http://drdobbs.com[..]int?articleId=218900502&siteSectionName=

An overview of the Hadoop/MapReduce/HBase framework and its current applications in bioinformatics - http://www.biomedcentral.com/1471-2105/11/S12/S1

The architecture that survived when amazon outage - http://www.infoq.com/news/2011/04/twilio-cloud-architecture

Introduction of few tools for cloud development - http://blog.codecentric.de[..]/01/best-development-tools-in-the-cloud/ http://www.javacodegeeks.com[..]/07/developing-and-testing-in-cloud.html

Google Finds: Centralized Control, Distributed Data Architectures Work Better than Fully Decentralized Architectures - http://highscalability.com[..]control-distributed-data-architectu.html

https://www.thoughtworks.com[..]ticles/understanding-clouds-significance

Failover - https://www.forelse.io[..]rchitectures-for-mitigating-aws-outages/

(google search) (amazon search)


Sat Jan 16 13:46:09 GMT 2021 From /weblog/design

retry


如何优雅地重试 - https://mp.weixin.qq.com/s/6IkTnUbBlHjM3GM_bT35tA https://www.infoq.cn/article/5fBoevKaL0GVGvgeac4Z

(google search) (amazon search)


Wed Dec 02 13:09:08 GMT 2020 From /weblog/design

logging


http://www.codemonkeyism.com[..]08/12/16/7-good-rules-to-log-exceptions/ - look obvious but a lot of program still make those mistakes.

Do you prefer log more or log smarter? It is good to log smart but if you log more, even if you not smart enough, you still have the data. - http://www.codinghorror.com/blog/archives/001192.html

Basic log techniques - http://www.ddj.com/cpp/212902973?cid=RSSfeed_DDJ_All

Advances and Challenges in Log Analysis - http://queue.acm.org/detail.cfm?id=2082137&ref=fullrss

Filtering only useful stacktrace - http://www.javacodegeeks.com[..]ter-irrelevant-stack-trace-lines-in.html

Some suggestion about logging - http://www.javacodegeeks.com[..]/10-tips-proper-application-logging.html and http://googletesting.blogspot.com.au/2013/06/optimal-logging.html

9 Logging Sins in Your Java Applications, the "Logging Plain User Input" is a good one - https://dzone.com[..]9-logging-sins-in-your-java-applications

Java Logging Best Practices: 10+ Tips You Should Know to Get the Most Out of Your Logs - https://sematext.com/blog/java-logging-best-practices/

https://snyk.io[..]ogging-what-should-you-log-and-what-not/

(google search) (amazon search)


Sun Oct 11 13:31:07 GMT 2020 From /weblog/design

DataStructure


"Bad programmers worry about the code. Good programmers worry about data structures and their relationships." - http://programmers.stackexchange.com[..]uote-about-good-programmer/163187#163187

Compare between schema and schema=less ( like key value mapping ) data - http://martinfowler.com/articles/schemaless/

Simple AVL tree - https://www.baeldung.com/java-avl-trees

逼着面试官问了我 ArrayList 和 LinkedList 的区别,他对我彻底服了 - https://xie.infoq.cn/article/34fa38d821b065e26662e6598

(google search) (amazon search)


Sun Oct 11 11:44:53 GMT 2020 From /weblog/design

messaging


Why should you combine Reliable Messaging with Distributed Caching - http://www.theserverside.com[..]MessagingDistributedCaching/article.html

Read from cache, write the message system - http://radio.weblogs.com/0112098/2003/01/15.html#a319

All You Need to Know About ActiveMQ - https://itnext.io/all-you-need-to-know-about-activemq-76edb977e6a

(google search) (amazon search)


Sun Sep 20 14:10:28 GMT 2020 From /weblog/design

cache


5 Hints You're Using A Map When You Should Be Using a Cache? - http://dsoguy.blogspot.com[..]ints-your-using-map-when-you-should.html

How hibernate design the cache - http://www.javalobby.org/java/forums/t48846.html

Consider to do more careful update, not just update DB and dirty cache, but update DB and cache in a same time - http://dormando.livejournal.com/495593.html

Caching can be architectural smell, some hint and some alternative - http://www.codingthearchitecture.com[..]2/is_caching_an_architectural_smell.html

General caching discussion - http://tutorials.jenkov.com[..]are-architecture/caching-techniques.html http://www.infoq.com/cn/news/2017/01/Program-design-how-cache

http://highscalability.com[..]10-program-busting-caching-mistakes.html http://www.codeproject.com[..]B/web-cache/cachingmistakes.aspx?azid=74

缓存穿透?击穿?雪崩? - https://xie.infoq.cn/article/39495c2d568aca1d6db5c9c50?y=qun0918

(google search) (amazon search)


Fri Aug 21 13:54:46 GMT 2020 From /weblog/design

API design guideline


This is a message from a management blog, but I think the arguement is also apply API design. In fact, I think most critical difference of good and bad API is knowing which small detail is important and which is not - http://www.goodproductmanager.com[..]er.com/2007/11/08/sweat-the-small-stuff/

Design tips:
http://www.artima.com/weblogs/viewpost.jsp?thread=142428
http://openide.netbeans.org/tutorial/api-design.html
http://www.cincomsmalltalk.com[..]gView?showComments=true&entry=3258158706
http://today.java.net[..]its-of-highly-profitable-developers.html
http://www.infoq.com/news/2007/08/why-api-design-matters
http://www.infoq.com/presentations/effective-api-design
http://neuroning.com/2006/11/19/on-api-design-guidelines

About Compatibility issues
http://wiki.eclipse.org/Evolving_Java-based_APIs

A blog of using interfaces-vs-abstract-classes
http://hoskinator.blogspot.com[..]6/04/interfaces-vs-abstract-classes.html

XOM design overview - http://www.xom.nu/designprinciples.xhtml#d0e309

You need to identify the business value but not pick any tools/design just because it is cool - http://myarch.com/what-is-good-soa

A lot of links here - http://kasparov.skife.org/blog-live/src/api-design-refs.writeback http://discuss.joelonsoftware.com/default.asp?design.4.527465

An introduction of good OSS project to study their source - http://techkriti.wordpress.com[..]com/2007/06/28/learning-from-the-source/

CCCCDPIPE - http://blog.objectmentor.com/articles/2007/08/02/which-came-first

Discussion of why getting feedback quick is important - http://blog.objectmentor.com[..]u-dont-know-until-you-take-the-next-step

Someone saying that routines is the greatest invention in CS, I agree - http://www.codinghorror.com/blog/archives/001129.html

New way of modeling system then layering, The Onion Architecture - http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

SOLID - http://www.lostechies.com[..]of-the-month-march-solid-principles.aspx http://dotnet.dzone.com/news/solid-software-works <-- very good picture! http://www.blackwasp.co.uk/SOLIDPrinciples.aspx https://www.freecodecamp.org[..]d-principles-explained-in-plain-english/

Idempotent, Orthogonality, Immutability - http://www.codinghorror.com/blog/archives/001244.html

Some example of how to driven good API - http://jdegoes.squarespace.com[..]al/2009/5/11/good-api-design-part-3.html

It's not enough to write tests for an API you develop, you have to write unit tests for code that uses your API. When you do, you learn first-hand the hurdles that your users will have to overcome when they try to test their code independently. http://butunclebob.com[..]MichaelFeathers.TheGoldenRuleOfApiDesign

Active interface vs. Passive interface, for me this is another way to under "Tell, don't ask" - http://code-o-matic.blogspot.com[..]-on-api-design-call-stack-as-source.html

The Principles of Good Programming - http://www.artima.com/weblogs/viewpost.jsp?thread=331531

http://net.tutsplus.com[..]software-principles-you-must-understand/

Difference choice of how API evolute with change - http://blog.jooq.org[..]sive-api-evolution-with-java-interfaces/

JUnit's evolving structure. - http://edmundkirwan.com/general/junit.html

API performance contract - http://queue.acm.org/detail.cfm?ref=rss&id=2576968

Consistent naming conventions
Standard terminology
Uniform error responses
Attention to detail (that’s the love part for APIs)
REST APIs that work with only 2 resources and use 4 HTTP verbs (oh, there is so much more to talk about here…)
Avoid API design by way of method-driven approach – that leads you down a slippery slope
- See more at: http://blogs.ancestry.com[..]are-like-parenting/#sthash.Ux1LHMNU.dpuf

http://blog.jooq.org[..]ake-this-mistake-when-developing-an-spi/

Guideline for webapi - https://cloud.google.com/apis/design/

Good naming is part of design. It sets expectations and communicates a model, showing how something should be understood and used. If you mean to tell the reader getMillisSince1970, don’t say getTime. Specific names inspire you to consider alternatives, to question whether you’re capturing the right abstraction in the right way. It’s not just labeling and it’s not just java.util.Date: This is about the code you write and the code you use. - https://medium.com/97-things/name-the-date-c82bafdc4c44

(google search) (amazon search)


Fri Jul 24 13:50:06 GMT 2020 From /weblog/design/examples

mailinator


https://manybrain.github.io/m8r_blog/blog/mailinator-evolution/

(google search) (amazon search)


Sat May 23 04:22:23 GMT 2020 From /weblog/design

refactoring


http://c2.com/cgi/wiki?RefactoringLanguage

Refactoring to Patterns Catalog - http://www.industriallogic.com/xp/refactoring/catalog.html

Article talk about the book: http://www.oreillynet.com/ruby/blog/2006/03/transformation.html

Catagories smell into "smell in class" and "smell between class" - http://www.codinghorror.com/blog/archives/000589.html

Known but good to remind http://www.thecodejunkie.com[..]10/01/6-steps-to-master-refactoring.html

An experience sharing - http://www.javacodegeeks.com[..]m/2011/05/refactor-hudson-god-class.html http://www.peterprovost.org[..]treme-Refactoring-with-Brian-Button.aspx

Refactoring should not introduce bug... - http://jchyip.blogspot.com[..]01/so-why-are-you-refactoring-again.html

A way to have formal refactoring, through Feature Clustering, Rapid Scratch Refactoring and Twisting Classes - http://www.thekua.com[..]rom-michael-feathers-brutal-refactoring/

Not all code change is refactoring - http://parlezuml.com/blog/?postid=850 , and

Some common issues about refactoring code in a team - http://www.rickylui.com[..]/2008/01/28/dont-be-a-refactoring-bigot/ http://blog.joepoon.com[..]01/dangers-of-premature-refactoring.html , beware taking the balance - http://www.makinggoodsoftware.com[..]ith-beautiful-code-the-refactor-syndrome

Refactory if needed - http://dreamhead.blogbus.com/logs/24874404.html

Refactoring, when start, when stop? - http://martinfowler.com/bliki/OpportunisticRefactoring.html

Refactoring metric - http://www.grahambrooks.com[..]rics-based-refactoring-for-cleaner-code/

Getting rid of util class
1) If the family of methods uses different parameters, depending on optional input or representations of the same input, then consider transforming the Helper via a fluent interface using the Builder pattern: from a collection of static methods like Helper.calculate(x), calculate(x, y), calculate(x, z), calculate(y, z) we could easily get to something like newBuilder().with(x).with(y).calculate(). The helper class would then offer behaviours, reduce its list of business methods and provide more flexibility for future extensions. Callers would then use it as internal field for reuse or instantiate it where needed. The helper class (as we knew it) disappeared.
2) If the helper class provides methods which are actually actions for different inputs (but, at this point, for the same domain), consider applying the Command pattern: the caller will actually create the required command (which will handle the necessary input and offer a behaviour) and an invoker will execute it within a certain context. You may get a command implementation for each static method and your code would move from an Helper.calculate(x, y), calculate(z) to something like invoker.calculate(new Action(x, y)). Bye bye helper class.
3) If the helper class provides methods for the same input but different logics, consider applying the Strategy pattern: each static method may easily become a strategy implementation, vanishing the need of its original helper class (replaced by a context component then).
4) If the given set of static methods concerns a certain class hierarchy or a defined collection of components, then consider applying the Visitor pattern: you may get several visitor implementations providing different visit methods which would probably replace partially or entirely the previously existing static methods.
5) If none of the above cases met your criteria, then apply the three most important indicators: your experience, your competences in the given project and common sense.

http://www.refactoringideas.com[..]-to-get-rid-of-helper-and-utils-classes/

Converting forloop to streaming - http://martinfowler.com/articles/refactoring-pipelines.html

Refactoring JavaScript from Sync to Async in Safe Baby-Steps - http://www.natpryce.com/articles/000812.html

code-refactoring-dos-donts - https://jaxenter.com/code-refactoring-dos-donts-135960.html

Let clean code guide you. Then let it go. - https://overreacted.io/goodbye-clean-code/ https://www.infoq.cn/article/dNO484YEeumvC6b6ZNWL

https://martinfowler.com/articles/class-too-large.html

(google search) (amazon search)


Sat May 16 17:10:13 GMT 2020 From /weblog/design/examples

zoom


http://highscalability.com[..]2020/5/14/a-short-on-how-zoom-works.html

(google search) (amazon search)