Wilson's bookshelf: read en-US Tue, 09 Jul 2024 12:04:44 -0700 60 Wilson's bookshelf: read 144 41 /images/layout/goodreads_logo_144.jpg <![CDATA[Web Scalability for Startup Engineers]]> 23615147 416 Artur Ejsmont 0071843655 Wilson 5 Review:

High level overview of how to design highly scalable systems, each component is described in detail and broken down into potential use cases so it's easy to understand how it fits in the architecture: benefits, caveats, challenges, tradeoffs. Feels like a great combination of breadth and depth that also includes a vast reference list of books, white papers, talks and links to expand on each topic.

Notes:

#1: Core Concepts
- Avoid full re-writes, they always cost and take more than expected and you end up with similar issues.
- Single-server configuration means having everything running off one machine, good option for small applications and can be scaled vertically.
- Vertical scaling gets more expensive in time and has a fixed ceiling.
- Isolation of services means running different components off different servers like DNS, cache, data storage, static assets, etc., which can then be vertically scaled independently.
- CDNs bring things like geoDNS for your static assets so requests will be routed to the geographically closest servers.
- SOA is an architecture centred around loosely coupled and autonomous services that solve specific business needs.
- Layered architectures divide functionality into layers where the lower layers provide an API for and don't know about the upper ones.
- Hexagonal architecture asumes the business logic is in the center and all interactions with other components, like data stores or users, are equal, everything outside the business logic requires a strict contract.
- Event-driven architecture is a different way of thinking about actions, is about reacting to events that already happened while traditional architectures are about responding to requests.


#2: Principles of Good Software Design
- Simplicity.
- Hide complexity behind abstractions.
- Avoid overengineering.
- Try TDD, use SOLID.
- Promote loose coupling, drawing diagrams helps spot coupling.
- DRY and don't waste time by following inefficient processes or reinventing the wheel.
- Functional Partitioning: dividing the system based on functionality where each subsystem has everything it needs to operate like data store, cache, message queue, queue workers; eg.: profile web service, scheduling web service.
- Design for self healing.


#3: Building the FE Layer
- You can have your frontend be a traditional multipage web application, SPA, or a hybrid.
- Web servers can be stateless (handle requests from every user indistinctly) or stateful (handle every request of some users).
- Prefer stateless servers where session is not kept within the servers but pushed to another layer like a shared session storage which makes for better horizontal scalability since you can add/remove clones without affecting users bound sessions.
- HTTP is stateless but cookies make it stateful.
- On the first HTTP request the server can send a Set-Cookie:SID=XYZ... response header, after that, every consecutive request needs to contain the cookie Cookie:SID=XYZ...
- Session data can be stored in cookies: which means every request (css, images, etc) contains the full body of session data, when state changes, the server needs to re-send a Set-Cookie:SDATA=ABCDE... which increases request payload so only use if session state is small. As an advantage you don't have to store any session data in the server.
- Keep session state in shared data store: like Memcached, Redis, Cassandra; then you only append the session id to every request while the full session data is kept in the shared store which can be distributed and partitioned by session id.
- Or use a load balancer that supports sticky sessions: this is not flexible as it makes the load balancer know about every user, scaling is hard since you can't restart or decommission web servers without breaking users sessions.
- Components of scalable frontends: DNS, CDN, Load Balancer, FE web server cluster.
- DNS is the first component hit by users, use a third-party hosted service in almost all cases. There are geoDNS and latency based DNS services like Amazon Rout 53 which can be better than the former cause they take into consideration realtime network congestion and outages in order to route traffic.
- Load Balancers help with horizontal scaling since users don't hit web servers directly.
* can provide SSL offloading (or SSL termination) where the LB encrypts and decrypts HTTPS connections and then your web servers talk HTTP among them internally.
* there are providers like Amazon ELB, software-based LB like Nginx and HAProxy and hardware based that can be more expensive but more easily to vertically scale.
* apart from an external LB routing traffic to FE web servers, you can have an internal LB to distribute from FE to web services instances and gain all the benefits of an LB internally.
* some LB route the TCP connections themselves allowing the use of other protocols apart from HTTP.


#4: Web Services
- The monolithic approach: where you can have a single mvc web app containing all the web application controllers, mobile services controllers, third-party integration service controllers and shared business logic.
* Here every time you need to integrate a new parter, you'd need to build that into the same mvc app as a set of controllers and views since there's not concept of separate web services layer.
- The API-first approach: all clients talk to the web application using the same API which is a set of shared web services containing all the business logic.
- Function-centric web services: is the concept of calling functions or objects in remote machines without the need to know how they're implemented like SOAP, CORBA, XML-RPC, DCOM.
* SOAP dominates this space, it uses WSDL files for describing methods and endpoints available and provide service discovery and an XSD files for describing data structure.
* Your client code doesn't need to know that is calling a remote web service, it only needs to know the objects generated on web services contract (WSDL + XSD files).
* dozens of additional specifications were created for SOAP (referred to as ws-* like ws-security) for features like transactions, multiphase commits, authentication, encryption, etc., but this caused reduced interoperability, it made it difficult to integrate between development stacks as different providers had different levels of support for the ws-* specifications, specially in dynamic languages like PHP, Ruby, Perl, Python; this led to the alternative and easier to implement JSON + REST.
* You couldn't either cache HTTP calls on URL alone since it was the same every time due to request params and method names being part of the XML document itself.
* Some of the ws-* specifications introduced state, preventing you from treating web service machines as stateless clones.
* Having a strict contract and the ability to discover functions and data types, provides a lot of value.
- Resource-centric web services treat every resource as a type of object, you can model them as you like but the operations you can perform on them are standard (POST, GET, PUT, DELETE), different from SOAP where you have arbitrary functions which take and produce arbitrary values.
* REST is predictable, you know the operations will be always the same, while on SOAP each service had its conventions, standards and ws-* specifications.
* Uses JSON rather than XML which is lighter and easier to read.
* REST frameworks or containers is pretty much just a simple HTTP server that maps URLs to your code.
* It doesn't provide discoverability and auto-generation of client code that SOAP has with WSDL and XSD but by being more flexible it allows for nonbreaking changes to be released in the server without the need to redeploy client code.


#5: Data Layer
- Replication scales reads not writes.
* On MySQL you can have a master and slave topology, there's a limit on the slave count but you can then have multilayer slaves to increase the limit.
* All writes go to master while replicas are read-only.
* Replication happens asynchronously.
* Each slave has a binlog file with the list of statements from master to be executed and a relay log with the already executed ones.
* Promoting a slave to master is a manual process.
* You can have a master-master topology for a faster/easier failover process but still not automatic in MySQL. In this topology, you write to either one and the other replicates from its binlog.
* The more masters you have, the longer the replication lag, hence worst write times.
- Active Data Set: amount of data accessed within a time window (an hour, day, week). Its the live data that's more frequently read/written.
* A large active data set size is a common scalability issue.
* Replication can help increasing concurrent reads but not if you want to increase the active data size since an entire copy of the dataset needs to be kept in each slave.
- When sharding, you want to keep together sets of data that will be accessed together and spread the load evenly among servers.
- You can apply sharding to object caches, message queues, file systems, etc.
* Cross-shard queries are a big challenge and should prob be avoided.
* Cross-shard transactions are not ACID.
- Try to avoid distributed transactions.
- NoSQL databases make compromises in order to support their priority features.
- The famous "pick two" phrase related to the CAP theorem is not entirely true.
* If you're system is still operational after a number of failures, you still have partition tolerance.
* Quorum consistency provides consistency while still having availability at the price of latency.
- Quorum consistency means the majority of the nodes agree on the result (reads and/or writes), you can implement this for some of your queries which means you're trading latency for consistency on eventually consistent systems, meaning you can still enforce read-after-write semantics.
- Eventual Consistency: property of a system where nodes may have different versions of the data until it eventually propagates.
* These systems favor availability, they give no guarantees that the data you're getting is the freshest.
* Amazon Dynamo (designed to support the checkout process) works this way, it saves all conflicts and sends them to the client where the reconciliation happens which results on both shopping cart versions being merged. They prefer showing previously removed item in a shopping cart than loosing data.
- Cassandra topology: all nodes are the same, they all accept reads and writes, when designing your cluster you decide how many nodes you want the data to be replicated to which happens automatically, all nodes know which has what data.
* It's a mix of Google's BigTable and Amazon's Dynamo, it has huge tables that most of the times are not related, rows can be partitioned by the row key among nodes and you can add columns on the fly, not all rows need to have all the columns.
* When a client connects to a node, this one acts as the session coordinator, it finds which nodes have the requested data and delegates to them.
* It implements a self-healing technique where 10% of all transactions trigger an async background check against all replicas and sends updates to the ones with stale data.


#6: Caching
- Cache hit ratio is the most important metric of caching which is affected by 3 factors.
* data set size: the most unique your cache keys, the less chance of reusing them. If you wanted to cache based on user's IP address, you have up to 4 billion keys, different from caching based on country.
* space: how big are the data objects.
* TTL (time to live).
- HTTP caches are read-through caches.
* For these you can use request/response headers or HTML metatags, try to avoid the latter to prevent confusion.
* Favor "Expires: A-DATE" over "Cache-Control: max-age=TTL", the latter is inconsistent and less backwards compatible.
* Browser cache: exists in most browsers.
* Caching Proxies: usually a local server in your office or ISP to reduce internet traffic, less used nowadays cause of cheaper internet prices.
* HTTPS prevents caching on intermediary proxies.
* Reverse Proxy: reduces the load on your web servers and can be installed in the same machine as the load balancer like Nginx or Varnish.
* CDNs can act as caches.
* Most caching systems use Least Recently Used (LRU) algorithm to reclaim memory space.
- Object Caches are cache-aside caches.
* Client side like the web storage specification, up to 5 and 25MB.
* Distributed Object Caches: ease the load on data stores, you app will check them before making a request to the db, you can decide if updating the cache on read or write.
* Caching invalidation is hard: if you were caching each search result on an e-commerce site, then updated one product, there's no easy way of invalidating the cache without running each of the search queries and see if the product is included.
* The best approach often is to set a short TTL.


#7: Asynchronous Processing
- Messages are fire-and-forget requests.
- Message queue: can be as simple as a database table.
- Message Broker | Event Service Bus (ESB) | Message-Oriented Middleware (MOM): app that handles message queuing, routing and delivery, often optimised for concurrency and throughput.
- Message producers are clients issuing requests (messages).
- Message Consumers are your servers which process messages.
* Can be cron-like (pull model): connects periodically to the queue to check its status, common among scripting languages without a persistent running application container: PHP, Ruby, Perl.
* Daemon-like (push-model): consumers run in an infinite loop usually with a permanent connection to the broker, common with languages with persistent application containers: C#, Java, Node.js.
- Messaging protocols.
* AMQP is recommended, standardised (equally implemented among providers) well-defined contract for publishing, consuming and transferring messages, provides delivery guarantees, transactions, etc.
* STOMP, simple and text based like HTTP, adds little overhead but advanced features require the use of extensions via custom headers which are non-standard like prefetch-count.
* JMS is only for JVM languages.
- Benefits of message queues:
* Async processing.
* Evening out Traffic Spikes: if you get more requests, the queue just gets longer and messages take longer to get picked up but consumers will still process the same amount of messages and eventually even out the queue.
*Isolate failures, self-healing and decoupling.
- Challenges.
* No message ordering, group Ids can help, some providers will guarantee ordered delivery of messages of same group, watch out for consumer idle time.
* Race conditions.
* Message re-queuing: strive for idempotent consumers.
* Don't couple producers with consumers.
- Event sourcing: technique where every change to the application state is persisted in the form of an event, usually tracked in a log file, so at any point in time you can replay back the events and get to an specific state, MySQL replication with binary log files is an example.


#8: Searching for Data
- High cardinality fields (many unique values) are good index candidates cause they narrow down searches.
- Distribution factor also affects the index.
- You can have compound indexes to combine a high cardinality field and low distributed one.
- Inverted index: allows search of phrases or words in full-text-search.
* These break down words into tokens and store next to them the document ids that contain them.
* When making a search you get the posting lists of each word, merge them and then find the intersections.

#9: Other Dimensions of Scalability
- Automate testing, builds, releases, monitoring.
- Scale yourself
* Overtime is not scaling
* Recovering from burnout can take months
- Project management levers: Scope, Time, Cost
* When modifying one, the others should recalibrate.
* Influencing scope can be the easiest way to balance workload.
- "Without data you're just another person with an opinion".
- Stay pragmatic using the 80/20 heuristic rule.]]>
4.49 2015 Web Scalability for Startup Engineers
author: Artur Ejsmont
name: Wilson
average rating: 4.49
book published: 2015
rating: 5
read at: 2018/02/24
date added: 2024/07/09
shelves: web-development, software-architecture, favourites
review:
Review:

High level overview of how to design highly scalable systems, each component is described in detail and broken down into potential use cases so it's easy to understand how it fits in the architecture: benefits, caveats, challenges, tradeoffs. Feels like a great combination of breadth and depth that also includes a vast reference list of books, white papers, talks and links to expand on each topic.

Notes:

#1: Core Concepts
- Avoid full re-writes, they always cost and take more than expected and you end up with similar issues.
- Single-server configuration means having everything running off one machine, good option for small applications and can be scaled vertically.
- Vertical scaling gets more expensive in time and has a fixed ceiling.
- Isolation of services means running different components off different servers like DNS, cache, data storage, static assets, etc., which can then be vertically scaled independently.
- CDNs bring things like geoDNS for your static assets so requests will be routed to the geographically closest servers.
- SOA is an architecture centred around loosely coupled and autonomous services that solve specific business needs.
- Layered architectures divide functionality into layers where the lower layers provide an API for and don't know about the upper ones.
- Hexagonal architecture asumes the business logic is in the center and all interactions with other components, like data stores or users, are equal, everything outside the business logic requires a strict contract.
- Event-driven architecture is a different way of thinking about actions, is about reacting to events that already happened while traditional architectures are about responding to requests.


#2: Principles of Good Software Design
- Simplicity.
- Hide complexity behind abstractions.
- Avoid overengineering.
- Try TDD, use SOLID.
- Promote loose coupling, drawing diagrams helps spot coupling.
- DRY and don't waste time by following inefficient processes or reinventing the wheel.
- Functional Partitioning: dividing the system based on functionality where each subsystem has everything it needs to operate like data store, cache, message queue, queue workers; eg.: profile web service, scheduling web service.
- Design for self healing.


#3: Building the FE Layer
- You can have your frontend be a traditional multipage web application, SPA, or a hybrid.
- Web servers can be stateless (handle requests from every user indistinctly) or stateful (handle every request of some users).
- Prefer stateless servers where session is not kept within the servers but pushed to another layer like a shared session storage which makes for better horizontal scalability since you can add/remove clones without affecting users bound sessions.
- HTTP is stateless but cookies make it stateful.
- On the first HTTP request the server can send a Set-Cookie:SID=XYZ... response header, after that, every consecutive request needs to contain the cookie Cookie:SID=XYZ...
- Session data can be stored in cookies: which means every request (css, images, etc) contains the full body of session data, when state changes, the server needs to re-send a Set-Cookie:SDATA=ABCDE... which increases request payload so only use if session state is small. As an advantage you don't have to store any session data in the server.
- Keep session state in shared data store: like Memcached, Redis, Cassandra; then you only append the session id to every request while the full session data is kept in the shared store which can be distributed and partitioned by session id.
- Or use a load balancer that supports sticky sessions: this is not flexible as it makes the load balancer know about every user, scaling is hard since you can't restart or decommission web servers without breaking users sessions.
- Components of scalable frontends: DNS, CDN, Load Balancer, FE web server cluster.
- DNS is the first component hit by users, use a third-party hosted service in almost all cases. There are geoDNS and latency based DNS services like Amazon Rout 53 which can be better than the former cause they take into consideration realtime network congestion and outages in order to route traffic.
- Load Balancers help with horizontal scaling since users don't hit web servers directly.
* can provide SSL offloading (or SSL termination) where the LB encrypts and decrypts HTTPS connections and then your web servers talk HTTP among them internally.
* there are providers like Amazon ELB, software-based LB like Nginx and HAProxy and hardware based that can be more expensive but more easily to vertically scale.
* apart from an external LB routing traffic to FE web servers, you can have an internal LB to distribute from FE to web services instances and gain all the benefits of an LB internally.
* some LB route the TCP connections themselves allowing the use of other protocols apart from HTTP.


#4: Web Services
- The monolithic approach: where you can have a single mvc web app containing all the web application controllers, mobile services controllers, third-party integration service controllers and shared business logic.
* Here every time you need to integrate a new parter, you'd need to build that into the same mvc app as a set of controllers and views since there's not concept of separate web services layer.
- The API-first approach: all clients talk to the web application using the same API which is a set of shared web services containing all the business logic.
- Function-centric web services: is the concept of calling functions or objects in remote machines without the need to know how they're implemented like SOAP, CORBA, XML-RPC, DCOM.
* SOAP dominates this space, it uses WSDL files for describing methods and endpoints available and provide service discovery and an XSD files for describing data structure.
* Your client code doesn't need to know that is calling a remote web service, it only needs to know the objects generated on web services contract (WSDL + XSD files).
* dozens of additional specifications were created for SOAP (referred to as ws-* like ws-security) for features like transactions, multiphase commits, authentication, encryption, etc., but this caused reduced interoperability, it made it difficult to integrate between development stacks as different providers had different levels of support for the ws-* specifications, specially in dynamic languages like PHP, Ruby, Perl, Python; this led to the alternative and easier to implement JSON + REST.
* You couldn't either cache HTTP calls on URL alone since it was the same every time due to request params and method names being part of the XML document itself.
* Some of the ws-* specifications introduced state, preventing you from treating web service machines as stateless clones.
* Having a strict contract and the ability to discover functions and data types, provides a lot of value.
- Resource-centric web services treat every resource as a type of object, you can model them as you like but the operations you can perform on them are standard (POST, GET, PUT, DELETE), different from SOAP where you have arbitrary functions which take and produce arbitrary values.
* REST is predictable, you know the operations will be always the same, while on SOAP each service had its conventions, standards and ws-* specifications.
* Uses JSON rather than XML which is lighter and easier to read.
* REST frameworks or containers is pretty much just a simple HTTP server that maps URLs to your code.
* It doesn't provide discoverability and auto-generation of client code that SOAP has with WSDL and XSD but by being more flexible it allows for nonbreaking changes to be released in the server without the need to redeploy client code.


#5: Data Layer
- Replication scales reads not writes.
* On MySQL you can have a master and slave topology, there's a limit on the slave count but you can then have multilayer slaves to increase the limit.
* All writes go to master while replicas are read-only.
* Replication happens asynchronously.
* Each slave has a binlog file with the list of statements from master to be executed and a relay log with the already executed ones.
* Promoting a slave to master is a manual process.
* You can have a master-master topology for a faster/easier failover process but still not automatic in MySQL. In this topology, you write to either one and the other replicates from its binlog.
* The more masters you have, the longer the replication lag, hence worst write times.
- Active Data Set: amount of data accessed within a time window (an hour, day, week). Its the live data that's more frequently read/written.
* A large active data set size is a common scalability issue.
* Replication can help increasing concurrent reads but not if you want to increase the active data size since an entire copy of the dataset needs to be kept in each slave.
- When sharding, you want to keep together sets of data that will be accessed together and spread the load evenly among servers.
- You can apply sharding to object caches, message queues, file systems, etc.
* Cross-shard queries are a big challenge and should prob be avoided.
* Cross-shard transactions are not ACID.
- Try to avoid distributed transactions.
- NoSQL databases make compromises in order to support their priority features.
- The famous "pick two" phrase related to the CAP theorem is not entirely true.
* If you're system is still operational after a number of failures, you still have partition tolerance.
* Quorum consistency provides consistency while still having availability at the price of latency.
- Quorum consistency means the majority of the nodes agree on the result (reads and/or writes), you can implement this for some of your queries which means you're trading latency for consistency on eventually consistent systems, meaning you can still enforce read-after-write semantics.
- Eventual Consistency: property of a system where nodes may have different versions of the data until it eventually propagates.
* These systems favor availability, they give no guarantees that the data you're getting is the freshest.
* Amazon Dynamo (designed to support the checkout process) works this way, it saves all conflicts and sends them to the client where the reconciliation happens which results on both shopping cart versions being merged. They prefer showing previously removed item in a shopping cart than loosing data.
- Cassandra topology: all nodes are the same, they all accept reads and writes, when designing your cluster you decide how many nodes you want the data to be replicated to which happens automatically, all nodes know which has what data.
* It's a mix of Google's BigTable and Amazon's Dynamo, it has huge tables that most of the times are not related, rows can be partitioned by the row key among nodes and you can add columns on the fly, not all rows need to have all the columns.
* When a client connects to a node, this one acts as the session coordinator, it finds which nodes have the requested data and delegates to them.
* It implements a self-healing technique where 10% of all transactions trigger an async background check against all replicas and sends updates to the ones with stale data.


#6: Caching
- Cache hit ratio is the most important metric of caching which is affected by 3 factors.
* data set size: the most unique your cache keys, the less chance of reusing them. If you wanted to cache based on user's IP address, you have up to 4 billion keys, different from caching based on country.
* space: how big are the data objects.
* TTL (time to live).
- HTTP caches are read-through caches.
* For these you can use request/response headers or HTML metatags, try to avoid the latter to prevent confusion.
* Favor "Expires: A-DATE" over "Cache-Control: max-age=TTL", the latter is inconsistent and less backwards compatible.
* Browser cache: exists in most browsers.
* Caching Proxies: usually a local server in your office or ISP to reduce internet traffic, less used nowadays cause of cheaper internet prices.
* HTTPS prevents caching on intermediary proxies.
* Reverse Proxy: reduces the load on your web servers and can be installed in the same machine as the load balancer like Nginx or Varnish.
* CDNs can act as caches.
* Most caching systems use Least Recently Used (LRU) algorithm to reclaim memory space.
- Object Caches are cache-aside caches.
* Client side like the web storage specification, up to 5 and 25MB.
* Distributed Object Caches: ease the load on data stores, you app will check them before making a request to the db, you can decide if updating the cache on read or write.
* Caching invalidation is hard: if you were caching each search result on an e-commerce site, then updated one product, there's no easy way of invalidating the cache without running each of the search queries and see if the product is included.
* The best approach often is to set a short TTL.


#7: Asynchronous Processing
- Messages are fire-and-forget requests.
- Message queue: can be as simple as a database table.
- Message Broker | Event Service Bus (ESB) | Message-Oriented Middleware (MOM): app that handles message queuing, routing and delivery, often optimised for concurrency and throughput.
- Message producers are clients issuing requests (messages).
- Message Consumers are your servers which process messages.
* Can be cron-like (pull model): connects periodically to the queue to check its status, common among scripting languages without a persistent running application container: PHP, Ruby, Perl.
* Daemon-like (push-model): consumers run in an infinite loop usually with a permanent connection to the broker, common with languages with persistent application containers: C#, Java, Node.js.
- Messaging protocols.
* AMQP is recommended, standardised (equally implemented among providers) well-defined contract for publishing, consuming and transferring messages, provides delivery guarantees, transactions, etc.
* STOMP, simple and text based like HTTP, adds little overhead but advanced features require the use of extensions via custom headers which are non-standard like prefetch-count.
* JMS is only for JVM languages.
- Benefits of message queues:
* Async processing.
* Evening out Traffic Spikes: if you get more requests, the queue just gets longer and messages take longer to get picked up but consumers will still process the same amount of messages and eventually even out the queue.
*Isolate failures, self-healing and decoupling.
- Challenges.
* No message ordering, group Ids can help, some providers will guarantee ordered delivery of messages of same group, watch out for consumer idle time.
* Race conditions.
* Message re-queuing: strive for idempotent consumers.
* Don't couple producers with consumers.
- Event sourcing: technique where every change to the application state is persisted in the form of an event, usually tracked in a log file, so at any point in time you can replay back the events and get to an specific state, MySQL replication with binary log files is an example.


#8: Searching for Data
- High cardinality fields (many unique values) are good index candidates cause they narrow down searches.
- Distribution factor also affects the index.
- You can have compound indexes to combine a high cardinality field and low distributed one.
- Inverted index: allows search of phrases or words in full-text-search.
* These break down words into tokens and store next to them the document ids that contain them.
* When making a search you get the posting lists of each word, merge them and then find the intersections.

#9: Other Dimensions of Scalability
- Automate testing, builds, releases, monitoring.
- Scale yourself
* Overtime is not scaling
* Recovering from burnout can take months
- Project management levers: Scope, Time, Cost
* When modifying one, the others should recalibrate.
* Influencing scope can be the easiest way to balance workload.
- "Without data you're just another person with an opinion".
- Stay pragmatic using the 80/20 heuristic rule.
]]>
<![CDATA[Interactive Data Visualization for the Web: An Introduction to Designing with D3]]> 16087610 270 Scott Murray 1449339735 Wilson 5 web-development 4.09 2013 Interactive Data Visualization for the Web: An Introduction to Designing with D3
author: Scott Murray
name: Wilson
average rating: 4.09
book published: 2013
rating: 5
read at: 2017/12/04
date added: 2024/05/22
shelves: web-development
review:

]]>
<![CDATA[Coding as a Playground: Programming and Computational Thinking in the Early Childhood Classroom]]> 31397059 Coding as a Playground is the first book to focus on how young children (ages 7 and under) can engage in computational thinking and be taught to become computer programmers, a process that can increase both their cognitive and social-emotional skills. Readers will learn how coding can engage children as producers¡ªand not merely consumers¡ªof technology in a playful way. You will come away from this groundbreaking work with an understanding of how coding promotes developmentally appropriate experiences such as problem solving, imagination, cognitive challenges, social interactions, motor skills development, emotional exploration, and making different choices. You will also learn how to integrate coding into different curricular areas to promote literacy, math, science, engineering, and the arts through a project-based approach.

]]>
196 Marina Umaschi Bers 1138225622 Wilson 0 4.56 Coding as a Playground: Programming and Computational Thinking in the Early Childhood Classroom
author: Marina Umaschi Bers
name: Wilson
average rating: 4.56
book published:
rating: 0
read at:
date added: 2022/11/12
shelves: to-read, nonfiction, parenting, web-development, science
review:

]]>
<![CDATA[Fundamentals of Futures and Options Markets]]> 62632653 John C. Hull¡¯s Financial Risk Management text is the only text to take risk management theory and explain it in a ¡°this is how you do it¡± manner for practical application in today¡¯s real world.

We found that most professors are looking for a book that contains up to date information, and is written for application in the real work environment. Hull¡¯s text offers students the ability to gain knowledge that will stay with them beyond college and be useful in the real world.

Based on one of the most popular MBA courses at University of Toronto entitled ¡°Financial Risk Management¡±, this text focuses on the ways banks and other financial institutions measure market, credit and operational risk. John C. Hull, author of the book ¡°Options, Futures, and Other Derivatives¡± which became the standard reference text for traders, wrote ¡°Risk Management and Financial Institutions¡± for use in instruction as well as trade. The practical nature of the book lends itself to a ¡°this is how you do it¡± presentation style that includes excellent account of the new Basel II regulatory requirements for banks effective in 2007.

]]>
624 John C. Hull 1292422114 Wilson 0 5.00 2001 Fundamentals of Futures and Options Markets
author: John C. Hull
name: Wilson
average rating: 5.00
book published: 2001
rating: 0
read at:
date added: 2022/09/18
shelves: nonfiction, economics, finance, currently-reading
review:

]]>
<![CDATA[Sapiens: A Brief History of Humankind]]> 23692271 512 Yuval Noah Harari Wilson 0 4.33 2011 Sapiens: A Brief History of Humankind
author: Yuval Noah Harari
name: Wilson
average rating: 4.33
book published: 2011
rating: 0
read at:
date added: 2022/09/18
shelves: science, philosophy, nonfiction, history, psycology, dropped, to-read
review:

]]>
<![CDATA[FX Derivatives Trader School (Wiley Trading)]]> 25670403 An essential guide to real-world derivatives trading

FX Derivatives Trader School is the definitive guide to the technical and practical knowledge required for successful foreign exchange derivatives trading. Accessible in style and comprehensive in coverage, the book guides the reader through both basic and advanced derivative pricing and risk management topics.

The basics of financial markets and trading are covered, plus practical derivatives mathematics is introduced with reference to real-world trading and risk management. Derivative contracts are covered in detail from a trader's perspective using risk profiles and pricing under different derivative models. Analysis is approached generically to enable new products to be understood by breaking the risk into fundamental building blocks. To assist with learning, the book also contains Excel practicals which will deepen understanding and help build useful skills.

The book covers of a wide variety of topics,

Derivative exposures within risk management Volatility surface construction Implied volatility and correlation risk Practical tips for students on trading internships and junior traders Market analysis techniques FX derivatives trading requires mathematical aptitude, risk management skill, and the ability to work quickly and accurately under pressure. There is a tremendous gap between option pricing formulas and the knowledge required to be a successful derivatives trader. FX Derivatives Trader School is unique in bridging that gap.]]>
583 Giles Peter Jewitt Wilson 0 4.64 2015 FX Derivatives Trader School (Wiley Trading)
author: Giles Peter Jewitt
name: Wilson
average rating: 4.64
book published: 2015
rating: 0
read at:
date added: 2022/09/18
shelves: to-read, economics, finance, nonfiction
review:

]]>
<![CDATA[Volatility: Practical Options Theory (Wiley Finance)]]> 37488055 208 Adam S Iqbal 111950161X Wilson 0 4.22 Volatility: Practical Options Theory (Wiley Finance)
author: Adam S Iqbal
name: Wilson
average rating: 4.22
book published:
rating: 0
read at:
date added: 2022/09/18
shelves: to-read, economics, finance, nonfiction
review:

]]>
<![CDATA[Come Into My Trading Room: A Complete Guide to Trading]]> 188194 313 Alexander Elder 0471225347 Wilson 0 4.08 2002 Come Into My Trading Room: A Complete Guide to Trading
author: Alexander Elder
name: Wilson
average rating: 4.08
book published: 2002
rating: 0
read at:
date added: 2022/09/18
shelves: to-read, business, economics, nonfiction, finance
review:

]]>
<![CDATA[Design Systems: A practical guide to creating design languages for digital products]]> 35857970
Throughout this book, Alla Kholmatova, previously a lead designer at FutureLearn, will share an approach and the key qualities of effective, enduring design systems. It¡¯s based on Alla¡¯s experiences, case-studies from AirBnB, Atlassian, Eurostar, TED, and Sipgate, plus 18 months of research and interviews ¡ª all attempting to figure out what works and what doesn¡¯t work in real-life products. It may not answer every question, but it will help you figure out just the right strategy for establishing and evolving a design system in your organization.]]>
288 Alla Kholmatova Wilson 3 web-design Review

Good insight on an interesting topic, a bit redundant but still good content. If you've some experience in the industry, some concepts will be somewhat clear by now like the importance of getting buy-in or the intricacies of coordinating work and communication between product teams within a company.

There are many references to great articles through out the book that I'd like to read next, would've liked to have them as an aggregated list at the end like a bibliography.

Notes

Vignette levels:
- 1st
* 2nd
^ 3rd

Design Systems

- Functional patterns generally have an HTML basis while perceptual ones a CSS basis.
- An effective design language bridges the gap between the system image and the assumed user model.
- Design systems are a combination of patterns and practices.

Design Principles

- Vague: "make it clear"
* Practical: only one number one priority, what do you want your users to do first?
- Vague: "make it simple"
* Practical: make it unbreakable, make sure it's designed for exploration and impossible to mis-tap.
- Vague: "make it useful"
* Practical: start with the needs, do research, analyse data, don't make assumptions.

Functional Patterns

- Can be seen as the nouns and verbs of a sentence.
- When creating a component, each part has to have a purpose, i.e.: in a card component, we may want the title to tell what the card is about, the image to have a quick preview and draw attention, the description to allow easy card scanning.
- Patterns change/evolve, behaviours stay.
- Don't try to design the most impressive header forgetting what the header component is for and how it affects the user journey.
* Don't loose the connection between user behaviours and the patterns to encourage those.
- UI Inventory by Brad Frost: great way to modularise interfaces, you end you with a collection of parts grouped in categories.
* Run inventory every few months.
- When defining a pattern, start with it's purpose, not what it is.
* To broaden potential its use cases, try calling it with a verb, not a noun.
* If you have a promotional module, if you call it Image Header or Course Promoter, you may be restricting its use to a particular context.
^ Better to name it after an action (behaviour) like Promote/Discover a Course, Encourage people to join, etc.
- Tweaking a module (like reducing font size) to allow a use case where we want the content to be smaller or not push another element out of view, might be the wrong call.
* Maybe we're using the wrong patterns which aren't robust enough for the content behaviours.

Perceptual Patterns

- Use personas to come up with a list of them.
* You can use ambience if personas are hard to come up with, i.e., what ambience suits you branding traits more?
- Come up with a 5-7 list of branding traits.
* Like fun but not childish, informal but not sloppy, powerful but simple, etc.
* These traits are brought to life in the UI through tone of voice, visuals, interactions, sounds.
- Techniques to assess patterns.
* Mood boards: loose way of grouping related style elements together like on Pinterest.
* Style tiles and element collage are more high fidelity options.
* Don't force consistency every time, it can lead to a generic and rigid branding, there's a difference between consistency and uniformity.
- If you introduce a new element or pattern in one place, it may not feel as part of the brand or disconnected until you add it to other parts of the site.
- Some patterns should be used sparingly in order to keep the brand focus.
* Like using too much of a colour or a triangle shapes when the brand uses squares.

Shared Language

- Patterns should connect through a shared language.
- Name things based on purpose not based on what they look.
* Or how users call them, which forces engineers to get a user perspective.
- Try keeping a glossary as well.

Parameters of your System

- Strict <-> Loose
- Modular <-> Integrated
- Centralised <-> Distributed
- Strict pattern libraries may benefit bigger teams or companies that would like to provide precise, predictable and consistent outputs.
* Loose libraries are more flexible by encouraging more exploration, design acumen and sensitivity to context; and may not have the need to thoroughly document every pattern.
^ Even though, clear, comprehensive and compelling documentation is fundamental for this type of systems in order to keep a solid foundation.
- Pattern library sketches and naming convention should always be in sync with its code counterpart.
- Modular systems can create more overhead while making parts reusable; are suited for designs that need to scale and evolve, repeated elements, teams working concurrently.
- Integrated systems are suited for one-offs like ad campaigns and fewer repeating parts.
- Don't sacrifice UX or potential impact for the sake of reusability.
- Design system organisation can be centralised (owned by a team) or distributed.

Planning and Practicalities

- Time and money is saved on reusing, you're not rebuilding the same button component every time.
- Easier site wide changes.
- Faster product launch: prototyping a new page out of a pattern library is usually a matter of days, a new design can take weeks.
- Brand unity at scale: you don't end up with different parts of the site not looking like part of the brand.

Systemising Functional Patterns

- Look at the main screens of the site, try to break them down into behaviours, group elements by purpose, draw patterns.
- Put stuff on a specificity scale, the more specific the less reusable it can be.
- Think about potential changes, if I change module A, do I want the change in other places?
* Some modules might look similar but we may decide to treat them differently.

Systemising Perceptual Patterns

- Voice and tone.
* Direct, positive, encouraging.
* Friendly but reserved; "well done!", rather than "wohoo, you're a superstar!"
* Elements of humour; "we're hatching something new"
- Colour.
* Primarily white colour palette with pink accents.
* Pink to blue gradient (celebration).
- Shapes.
* Mostly square and occasionally circular.
* 1 px border, square icons.
- Typography.
* Mostly large type face with focus on readability.
* High contrast, large headings in relation to body.
- Animations
* Small to no movement.
* Pink to blue subtly hover, opacity, gradual colour change.]]>
4.14 Design Systems: A practical guide to creating design languages for digital products
author: Alla Kholmatova
name: Wilson
average rating: 4.14
book published:
rating: 3
read at: 2018/04/12
date added: 2022/01/04
shelves: web-design
review:
Review

Good insight on an interesting topic, a bit redundant but still good content. If you've some experience in the industry, some concepts will be somewhat clear by now like the importance of getting buy-in or the intricacies of coordinating work and communication between product teams within a company.

There are many references to great articles through out the book that I'd like to read next, would've liked to have them as an aggregated list at the end like a bibliography.

Notes

Vignette levels:
- 1st
* 2nd
^ 3rd

Design Systems

- Functional patterns generally have an HTML basis while perceptual ones a CSS basis.
- An effective design language bridges the gap between the system image and the assumed user model.
- Design systems are a combination of patterns and practices.

Design Principles

- Vague: "make it clear"
* Practical: only one number one priority, what do you want your users to do first?
- Vague: "make it simple"
* Practical: make it unbreakable, make sure it's designed for exploration and impossible to mis-tap.
- Vague: "make it useful"
* Practical: start with the needs, do research, analyse data, don't make assumptions.

Functional Patterns

- Can be seen as the nouns and verbs of a sentence.
- When creating a component, each part has to have a purpose, i.e.: in a card component, we may want the title to tell what the card is about, the image to have a quick preview and draw attention, the description to allow easy card scanning.
- Patterns change/evolve, behaviours stay.
- Don't try to design the most impressive header forgetting what the header component is for and how it affects the user journey.
* Don't loose the connection between user behaviours and the patterns to encourage those.
- UI Inventory by Brad Frost: great way to modularise interfaces, you end you with a collection of parts grouped in categories.
* Run inventory every few months.
- When defining a pattern, start with it's purpose, not what it is.
* To broaden potential its use cases, try calling it with a verb, not a noun.
* If you have a promotional module, if you call it Image Header or Course Promoter, you may be restricting its use to a particular context.
^ Better to name it after an action (behaviour) like Promote/Discover a Course, Encourage people to join, etc.
- Tweaking a module (like reducing font size) to allow a use case where we want the content to be smaller or not push another element out of view, might be the wrong call.
* Maybe we're using the wrong patterns which aren't robust enough for the content behaviours.

Perceptual Patterns

- Use personas to come up with a list of them.
* You can use ambience if personas are hard to come up with, i.e., what ambience suits you branding traits more?
- Come up with a 5-7 list of branding traits.
* Like fun but not childish, informal but not sloppy, powerful but simple, etc.
* These traits are brought to life in the UI through tone of voice, visuals, interactions, sounds.
- Techniques to assess patterns.
* Mood boards: loose way of grouping related style elements together like on Pinterest.
* Style tiles and element collage are more high fidelity options.
* Don't force consistency every time, it can lead to a generic and rigid branding, there's a difference between consistency and uniformity.
- If you introduce a new element or pattern in one place, it may not feel as part of the brand or disconnected until you add it to other parts of the site.
- Some patterns should be used sparingly in order to keep the brand focus.
* Like using too much of a colour or a triangle shapes when the brand uses squares.

Shared Language

- Patterns should connect through a shared language.
- Name things based on purpose not based on what they look.
* Or how users call them, which forces engineers to get a user perspective.
- Try keeping a glossary as well.

Parameters of your System

- Strict <-> Loose
- Modular <-> Integrated
- Centralised <-> Distributed
- Strict pattern libraries may benefit bigger teams or companies that would like to provide precise, predictable and consistent outputs.
* Loose libraries are more flexible by encouraging more exploration, design acumen and sensitivity to context; and may not have the need to thoroughly document every pattern.
^ Even though, clear, comprehensive and compelling documentation is fundamental for this type of systems in order to keep a solid foundation.
- Pattern library sketches and naming convention should always be in sync with its code counterpart.
- Modular systems can create more overhead while making parts reusable; are suited for designs that need to scale and evolve, repeated elements, teams working concurrently.
- Integrated systems are suited for one-offs like ad campaigns and fewer repeating parts.
- Don't sacrifice UX or potential impact for the sake of reusability.
- Design system organisation can be centralised (owned by a team) or distributed.

Planning and Practicalities

- Time and money is saved on reusing, you're not rebuilding the same button component every time.
- Easier site wide changes.
- Faster product launch: prototyping a new page out of a pattern library is usually a matter of days, a new design can take weeks.
- Brand unity at scale: you don't end up with different parts of the site not looking like part of the brand.

Systemising Functional Patterns

- Look at the main screens of the site, try to break them down into behaviours, group elements by purpose, draw patterns.
- Put stuff on a specificity scale, the more specific the less reusable it can be.
- Think about potential changes, if I change module A, do I want the change in other places?
* Some modules might look similar but we may decide to treat them differently.

Systemising Perceptual Patterns

- Voice and tone.
* Direct, positive, encouraging.
* Friendly but reserved; "well done!", rather than "wohoo, you're a superstar!"
* Elements of humour; "we're hatching something new"
- Colour.
* Primarily white colour palette with pink accents.
* Pink to blue gradient (celebration).
- Shapes.
* Mostly square and occasionally circular.
* 1 px border, square icons.
- Typography.
* Mostly large type face with focus on readability.
* High contrast, large headings in relation to body.
- Animations
* Small to no movement.
* Pink to blue subtly hover, opacity, gradual colour change.
]]>
<![CDATA[Minecraft Herobrine Stories: Vol 1: The Thrilling Minecraft Short Stories for Children]]> 54627334 Zack Steve Wilson 0 to-read 4.33 Minecraft Herobrine Stories: Vol 1: The Thrilling Minecraft Short Stories for Children
author: Zack Steve
name: Wilson
average rating: 4.33
book published:
rating: 0
read at:
date added: 2022/01/04
shelves: to-read
review:

]]>
<![CDATA[Ruined by Design: How Designers Destroyed the World, and What We Can Do to Fix It]]> 44432844
The combustion engine which is destroying our planet¡¯s atmosphere and rapidly making it inhospitable is working exactly as we designed it. Guns, which lead to so much death, work exactly as they¡¯re designed to work. And every time we ¡°improve¡± their design, they get better at killing. Facebook¡¯s privacy settings, which have outed gay teens to their conservative parents, are working exactly as designed. Their ¡°real names¡± iniative, which makes it easier for stalkers to re-find their victims, is working exactly as designed. Twitter¡¯s toxicity and lack of civil discourse is working exactly as it¡¯s designed to work.

The world is working exactly as designed. And it¡¯s not working very well. Which means we need to do a better job of designing it. Design is a craft with an amazing amount of power. The power to choose. The power to influence. As designers, we need to see ourselves as gatekeepers of what we are bringing into the world, and what we choose not to bring into the world. Design is a craft with responsibility. The responsibility to help create a better world for all.

Design is also a craft with a lot of blood on its hands. Every cigarette ad is on us. Every gun is on us. Every ballot that a voter cannot understand is on us. Every time social network¡¯s interface allows a stalker to find their victim, that¡¯s on us. The monsters we unleash into the world will carry your name.

This book will make you see that design is a political act. What we choose to design is a political act. Who we choose to work for is a political act. Who we choose to work with is a political act. And, most importantly, the people we¡¯ve excluded from these decisions is the biggest (and stupidest) political act we¡¯ve made as a society.

If you¡¯re a designer, this book might make you angry. It should make you angry. But it will also give you the tools you need to make better decisions. You will learn how to evaluate the potential benefits and harm of what you¡¯re working on. You¡¯ll learn how to present your concerns. You¡¯ll learn the importance of building and working with diverse teams who can approach problems from multiple points-of-view. You¡¯ll learn how to make a case using data and good storytelling. You¡¯ll learn to say NO in a way that¡¯ll make people listen. But mostly, this book will fill you with the confidence to do the job the way you always wanted to be able to do it. This book will help you understand your responsibilities.]]>
251 Mike Monteiro Wilson 0 4.11 Ruined by Design: How Designers Destroyed the World, and What We Can Do to Fix It
author: Mike Monteiro
name: Wilson
average rating: 4.11
book published:
rating: 0
read at:
date added: 2021/05/13
shelves: to-read, nonfiction, web-design, software-projects, business
review:

]]>
<![CDATA[No Rules Rules: Netflix and the Culture of Reinvention]]> 49099937 Shortlisted for the 2020 Financial Times & McKinsey Business Book of the Year

Netflix cofounder Reed Hastings reveals for the first time the unorthodox culture behind one of the world's most innovative, imaginative, and successful companies

There has never before been a company like Netflix. It has led nothing short of a revolution in the entertainment industries, generating billions of dollars in annual revenue while capturing the imaginations of hundreds of millions of people in over 190 countries. But to reach these great heights, Netflix, which launched in 1998 as an online DVD rental service, has had to reinvent itself over and over again. This type of unprecedented flexibility would have been impossible without the counterintuitive and radical management principles that cofounder Reed Hastings established from the very beginning. Hastings rejected the conventional wisdom under which other companies operate and defied tradition to instead build a culture focused on freedom and responsibility, one that has allowed Netflix to adapt and innovate as the needs of its members and the world have simultaneously transformed.

Hastings set new standards, valuing people over process, emphasizing innovation over efficiency, and giving employees context, not controls. At Netflix, there are no vacation or expense policies. At Netflix, adequate performance gets a generous severance, and hard work is irrel-evant. At Netflix, you don't try to please your boss, you give candid feedback instead. At Netflix, employees don't need approval, and the company pays top of market. When Hastings and his team first devised these unorthodox principles, the implications were unknown and untested. But in just a short period, their methods led to unparalleled speed and boldness, as Netflix quickly became one of the most loved brands in the world.

Here for the first time, Hastings and Erin Meyer, bestselling author of The Culture Map and one of the world's most influential business thinkers, dive deep into the controversial ideologies at the heart of the Netflix psyche, which have generated results that are the envy of the business world. Drawing on hundreds of interviews with current and past Netflix employees from around the globe and never-before-told stories of trial and error from Hastings's own career, No Rules Rules is the fascinating and untold account of the philosophy behind one of the world's most innovative, imaginative, and successful companies.]]>
464 Reed Hastings 0593152387 Wilson 0 4.25 2020 No Rules Rules: Netflix and the Culture of Reinvention
author: Reed Hastings
name: Wilson
average rating: 4.25
book published: 2020
rating: 0
read at:
date added: 2021/03/16
shelves: to-read, business, nonfiction, science, productivity
review:

]]>
This Is Going to Hurt 43562724 This is Going to Hurt provides a no-holds-barred account of his time on the NHS front line. Hilarious, horrifying and heartbreaking, this diary is everything you wanted to know - and more than a few things you didn't - about life on and off the hospital ward.

This edition includes extra diary entries and a new afterword by the author.]]>
280 Adam Kay Wilson 4 nonfiction 4.50 2017 This Is Going to Hurt
author: Adam Kay
name: Wilson
average rating: 4.50
book published: 2017
rating: 4
read at: 2019/08/01
date added: 2020/11/25
shelves: nonfiction
review:

]]>
<![CDATA[Handbook on the Psychology of Pricing: 100+ effects on persuasion and influence every entrepreneur, marketer, and pricing manager needs to know]]> 42079017 NEW EFFECTS FOR DOWNLOAD IN EXCLUSIVE READERS AREA

¡ï 2023 update out now. Please find instant access on the website ¡ï¡ï Almost 200 psychological pricing effects in total ¡ï¡ï Go => Readers Area ¡ï

"Favorite 5 Books on Pricing"¨DJournal "Consumer Neuroscience in Business", issue June 2019, p. 21

How to Make Your Prices (Almost) Irresistible?Discover the Power of Psychological Pricing.

Customers pay prices. Customers are the same human beings who process their world with predictable psychological mechanisms and mental shortcuts.Many companies still focus only on internal costs (markup pricing), external competitors (competition-based pricing), or assume that people can objectively assess the products' or services' benefits they pay for (value-based pricing).The Handbook on the Psychology of Pricing sheds light on what happens in your customers' minds. This book presents the most comprehensive collection of psychological pricing strategies and tactics currently available. It introduces you to intriguing, hard-to-believe insights into consumer psychology, subconscious persuasion, and people's perception of prices.More specifically, you will

Discover how to make your pricing more attractive and, thereby, lift sales and margins for your business.Learn how to increase customers' willingness to pay for your products and services.Find how to reduce the attention to prices in buying decisions.Expand your pricing skill set and learn about more than one hundred effects unearthed from solid academic research.This book is required reading for entrepreneurs, general and category managers, marketers, product and brand managers, pricing strategists, management consultants, and business students who are interested in adding an invaluable pricing edge to their business practice and personal pricing quiver.]]>
197 Markus Husemann-Kopetzky 3947897014 Wilson 3 4.16 Handbook on the Psychology of Pricing: 100+ effects on persuasion and influence every entrepreneur, marketer, and pricing manager needs to know
author: Markus Husemann-Kopetzky
name: Wilson
average rating: 4.16
book published:
rating: 3
read at: 2020/09/14
date added: 2020/09/15
shelves: business, economics, psycology, nonfiction
review:

]]>
<![CDATA[The Choice Factory: 25 behavioural biases that influence what we buy]]> 38487327 The Choice Factory, Richard Shotton sets out to help you learn.

By observing a typical day of decision-making, from trivial food choices to significant work-place moves, he investigates how our behaviour is shaped by psychological shortcuts. With a clear focus on the marketing potential of knowing what makes us tick, Shotton has drawn on evidence from academia, real-life ad campaigns and his own original research.

The Choice Factory is written in an entertaining and highly-accessible format, with 25 short chapters, each addressing a cognitive bias and outlining simple ways to apply it to your own marketing challenges. Supporting his discussion, Shotton adds insights from new interviews with some of the smartest thinkers in advertising, including Rory Sutherland, Lucy Jameson and Mark Earls.

From priming to the pratfall effect, charm pricing to the curse of knowledge, the science of behavioural economics has never been easier to apply to marketing.

The Choice Factory is the new advertising essential.]]>
221 Richard Shotton 0857196103 Wilson 4 4.24 2018 The Choice Factory: 25 behavioural biases that influence what we buy
author: Richard Shotton
name: Wilson
average rating: 4.24
book published: 2018
rating: 4
read at: 2020/09/12
date added: 2020/09/13
shelves: business, nonfiction, psycology, economics
review:

]]>
<![CDATA[This is Marketing: You Can't Be Seen Until You Learn To See]]> 40549476 #1 WALL STREET JOURNAL BESTSELLER & INSTANT NEW YORK TIMES BESTSELLERA game-changing approach to marketing, sales, and advertising.For the first time Seth Godin offers the core of his marketing wisdom in one compact, accessible, timeless package. This is Marketing shows you how to do work you're proud of, whether you're a tech startup founder, a small business owner, or part of a large corporation.No matter what your product or service, this book will help you reframe how it's presented to the world, in order to meaningfully connect with people who want it. Seth employs his signature blend of insight, observation, and memorable examples to teach How to build trust and permission with your target market.* The art of positioning--deciding not only who it's for, but who it's not for.* Why the best way to achieve your goals is to help others become who they want to be.* Why the old approaches to advertising and branding no longer work.* The surprising role of tension in any decision to buy (or not).* How marketing is at its core about the stories we tell ourselves about our social status.You can do work that matters for people who care. This book shows you the way.'A very accessible way into Godin's thinking . . . Godin writes in pacy, jargon-free prose and this book is interesting and useful for anyone who wants an insight into how, and why, we buy things or change our habits in any way ' The Financial TimesIf you enjoyed reading this, check out Seth Godin's Purple Cow, a true business classic.]]> 271 Seth Godin Wilson 3 business, nonfiction 3.90 2018 This is Marketing: You Can't Be Seen Until You Learn To See
author: Seth Godin
name: Wilson
average rating: 3.90
book published: 2018
rating: 3
read at: 2020/09/10
date added: 2020/09/10
shelves: business, nonfiction
review:

]]>
The Dip 977846 85 Seth Godin 0749928301 Wilson 3 3.70 2007 The Dip
author: Seth Godin
name: Wilson
average rating: 3.70
book published: 2007
rating: 3
read at: 2020/09/07
date added: 2020/09/07
shelves: business, nonfiction, psycology, productivity
review:

]]>
<![CDATA[Decoded: The Science Behind Why We Buy]]> 16489970 280 Phil P. Barden 1118345576 Wilson 3 4.21 2013 Decoded: The Science Behind Why We Buy
author: Phil P. Barden
name: Wilson
average rating: 4.21
book published: 2013
rating: 3
read at: 2020/08/21
date added: 2020/08/21
shelves:
review:

]]>
CSS: The Definitive Guide 37644847 CSS is a constantly evolving language for describing the presentation of web content on screen, printers, speech synthesizers, screen readers, and chat windows. It is used by all browsers on all screen sizes on all types of IoT devices, including phones, computers, video games, televisions, watches, kiosks, and auto consoles. Authors Eric Meyer and Estelle Weyl show you how to improve user experience, speed development, avoid potential bugs, and add life and depth to your applications through layout, transitions and animations, borders, backgrounds, text properties, and many other tools and techniques.

This guide covers:
Selectors, specificity, and the cascade
Values, units, fonts, and text properties
Padding, borders, outlines, and margins
Colors, backgrounds, and gradients
Floats and positioning tricks
Flexible box layout
The new Grid layout system
2D and 3D transforms, transitions, and animation
Filters, blending, clipping, and masking
Media and feature queries]]>
1123 Eric A. Meyer Wilson 0 web-development Review

Notes

#2 Selectors

- Running ¡°document.createElement('main')¡± will allow IE8 (which doesn't support it) to understand that element exist so we can style it.
- [class|="btn"] class starts with "btn-" or is exactly "btn".
- [class^="btn"] starts with "btn".
- [title="foo"] matches foo in a space separated list of words.
- Attribute selectors tend to be case sensitive if the underlying document language is.
* HTML attribute key terms, which is not: input[type="CHECKBox"].
- CSS4 introduces a case-insensitivity identifier: img[src$=".pdf" i].
* Only works for values, may not work on attributes, be aware of: input[TYPE='tel'].
^ XHTML enforces case sensitivity, HTML5 does not.
- "li + li" selects all but the first.
- "div * span" selects span grandchildren.
- "h2 + ol" adjacent sibling.
* "h2 ~ ol" following sibling.
- "a:lang(de)" target german links.
- "p:empty" pseudo-class treats whitespace as not-empty.
* Be aware of some elements which are always empty, "img" equals "img:empty".
* Is the only selector that considers text nodes.
- ":only-child", ":only-of-type".
- Changing element size on :active or :hover could cause reflow by triggering layout on the browser.
- Empty inputs might match ":valid".
- ":not()" takes a single selector, no descendants, nesting or grouping.
- Pseudo-elements styles are limited to font properties.

#3 Specificity and the Cascade

- 0,0,0,0
* Inline styles get the first digit.
* ID.
* Class, attributes, pseudo-class.
* Elements, pseudo-elements.
- Style links in the order: :link, :visited, :focus, :hover, :active, since they have the same specificity.

#4 Values and Units

- Every property accepts: inherit, initial, unset.
* Initial: set back to starting value.
* Inherit: set back to initial or inherit, whichever was previously set.
* URLs in stylesheets are relative to themselves, not the document.
- Viewport units.
* 1vmin: lesser from n/100 viewport width or height.
*1vmax: greater from n/100 viewport width or height.
- "currentColor": value of the computed 'color' property.
* when 'color' is not set on the element, this holds the inherited 'color' value.
- "turn": is a unit handy for animations.

#5 Fonts

- Never quote generic font family names like serif, it makes the browser think it refers to a font-family: font-family: Arial, 'serif'.
- When using @font-face.
* Appending "format('woff')" to the "src" prevents downloading a font the browser won't understand.
* Add "local('my-font')" first so the browser doesn't download fonts it already has.
- unicode-range can allow using a font face for a single or group of characters.
- "font-weight: bolder;" resolves to a value bolder than the parent's element.

#6 Text Properties

- line-height: use without units to make it work as a multiplier of the font-size, cause values like 1.5em get calculated and inherited as an actual value by children elements.
- vertical-align only works on inline elements and table-cells (not all values apply for table-cells).
* Accepts keywords and values.
* "bottom" value aligns elements to the bottom edge of the line, which most times is below the baseline of the text.
- "word-break: break-all" don't show hyphens even if the "hyphen" property is set.

#7 Basic Visual Formatting

- The values of margin, border, padding and content must add up to the width of the element's containing block.
* Only margin and width can be set to "auto".
^ When "auto", the remaining width of the container is distributed among those auto values.
^ If none of them is set to "auto" and the total is less than the container's width, then, margin-right is set to auto by the user agent in order to make the element's box (including margin) match the container width.
- box-decoration-break: clone. Causes each fragment of multiline inline elements to be drawn as a standalone box. So padding left|right is applied on every line rather than only at start and end.

#8 Padding, Borders, Outlines, and Margins

- background-clip prevents background from extending into the padding and/or border outside edge.
- Percentage values on padding and margin are computed from the parent's width (except on most positioned elements, flex and grid, where they are calculated with respect to the
height of their formatting context).
* can be used for fluid fluid pages, where the padding on elements enlarges or reduces to match the actual size of the parent element.
- Border takes the foreground color if no border-color is defined.
- "border-radius: h / v" sets the horizontal and vertical rounding individually.
- border-image for using an image as a border, it needs border-style and width to be set.
- Outlines do not take up space and may be non-rectangular.
* Cannot have different styles for each side.
* Run along the margin, just outside the border.
- Negative margins can create a Mondrian effect.
- Margin collapse: when vertical margins meet, the smallest one is reset to zero according to the specification.
* For parent-child, adding padding to the parent prevents collapsing.
* Doesn't happen on floated elements.

#9 Colors, Backgrounds, and Gradients

- "background-clip: text" fills the text with the background color or image (will need "color: transparent" or with opacity "color: rgba()").
- background-position: can be set in pairs like: 'top left. Except for the keyword 'center', percentages or length values.
* '0% 0%' is top left, '100% 100%' is top right., '50% 50%' is center.
* Using lengths aligns the top left of the image to the specified value: '20px 50px'.
* Can use negatives.
- Can use 4 values too in order to change the edges from which offsets are calculated.
* "background-position: left 33% top 30px" from the left edge, have a horizontal offset of 33%;
from the top edge, have an offset of 30px.
* "background-position: right 33% bottom 30px" from the right edge, have a horizontal offset of
33%; from the bottom edge, have an offset of 30px.
- When 'background-origin: center;' and background-repeat is set, the bg will be placed in the middle and then repeated, rather than starting from top left as default, making a consisten look around the edges.
- "background-repeat: space;" creates a grid pattern.
* It may override 'background-position: center' if the image is too big, like if only two repetitions can fit, it'll draw them on the horizontal edges.
- "background-repeat: round;" tries to fit as many images in the space provided: if the element is 850 px and the image 300px, the browser will scale down the image to 283 to fit 3 of them changing the aspect ratio if needed.
* To make sure images are not cut and fit completely, the origin has to be set in a corner and not the centre.
- 'background-attachment' immunes the effects of scrolling.
- 'background-size: % %' percentages refer to the area defined by 'background-origin' and not 'background-clip'.
- Setting auto triggers a 3-step fallback process:
* "background-size: auto 100px"
* On a 300px by 200px image.
^ The image has a 3:1 aspect ratio so it'll be preserved, resulting in a size of 150px by 100px.
^ If that fails but the image has an intrinsic aspect ratio (like most raster formats JPEG, PNG, GIF and some SVG), that ration will be used, resulting in 300px by 100px.
^ If that fails (which can happen on SVG or CSS gradients), like the image doesn't have intrinsic ratio, the horizontal size of the positioning area will be used (background-origin).
- Nearly every background property can be comma-listed, allowing for multiple backgrounds.
* Even the shorthand 'background: ..., ..., ...;'
^ background-color can only be added to the last layer, otherwise the declarations are made invalid.
- Gradients are images just like raster or vector.
* And can be used in any context an imager can, e.g. 'list-style-image'.
* They've no intrinsic aspect ratio.
- Setting the same color stop for two colours causes a hard colour switch effect.
- Color-hints declare the midpoint colour of the gradient transition.

#10 Floating and Shapes

- Margin on floated elements do not collapse.
- If no width is specified, the width collapses to zero.
- Floated elements do not overlap, if two floats are wider than the container, the 2nd one will drop to the next row.
- Floats only move horizontally, elements won't float to the top or bottom of the container.
* And are aligned top.
- When other elements overlap with a float:
* Inline: Borders, big and content render on top of the float.
* Block: borders and bg behind, content on top.
- ¡®shape-outside¡¯: floats around a defined shape.
* For images, they should have an alpha channel, or the shape will be rectangular.
* Can use inset, circle, ellipse, polygon.
- ¡®shape-image-threshold¡¯: opacity of float shape.
- 'shape-margin': margin around shape.

#11 Positioning

- Containing block
* For relative and static: the parent's content edge.
* For absolute: content edge if inline parent, padding edge if block parent.
- You can absolute position elements inside absolutely positioned elements.
- When absolute, setting 'auto' for offset prop 'top' makes the top touch the upper edge line up with the place the element would've been if not positioned at all (static position).
* left and right also but not bottom.
- 'static' position is basically the place in the normal flow of the document.
- left + margin + width + right = containing block width.
* If they sum is less than the containing block width, margin-right takes the remaining space (reset to auto).
* On positioned elements with all values set (left, width, margin, right), 'right' is reset to auto.
* If any of the props is set to 'auto', that one takes the remaining space.
- 'position: absolute; height: 5em; top: 0; bottom: 0; margin: auto;': centres vertically.
- Replaced elements have an intrinsic width and height.
- The specification keeps children from being drawn behind their parents when using z-index.
* Each parent with z-index, establishes a stacking context for its children.

#12 Flexible Box Layout

- Flexbox was designed for single dimensional layouts, works best at arranging information along one axis, not grids.
* 'justify-content' won't necessarily apply the same spacing between elements on multiple cross-axis blocks if the element count or size on each block is different.
- When 'writing-mode: vertical-lr;', flex direction row means top to bottom.
* Similar for 'direction: rtl'.
- 'flex-wrap', controls the cross-axis direction.
- 'flex-flow', shorthand for flex-direction and flex-wrap.
- flex items won't shrink to smaller than their border, padding, margin combined.
- justify-content aligns items across the main axis.
* space-around gives each item the same margin, making the space between the ones in the middle being double of that at the start and end (no margin collapse).
* space-evenly splits white space evenly everywhere.
- 'align-items' aligns items across the cross axis.
* stretch: will make elements take 100% height unless margin, [min-|max-]height are set.
* baseline: aligns all items' baselines starting with the one having the biggest font-size.
- 'align-self' is applied to flex items to override 'align-items'.
- 'align-content': controls the space between items spanning multiple columns in the cross-axis.
* Like justify-content does for the main-axis.
* As opposed to align-items, who aligns vertically per row.
- On flex items: margin do not collapse, 'float' and 'clear' are ignored.
- Empty text nodes (including whitespace) are ignored.
* Non-whitespace ones are wrapped in anonymous flex items and become part of the layout.
- flex-basis takes precedence over width/height.
- 'flex: 3' = 'flex: 3 0 0' (flex-basis will grow at a factor of 3 from 0px).
- 'flex: none' = 'flex: 0 0 auto'.

#13 Grid Layout

- Grids will not slide behind floated elements.
- Column props, float, clear have not effect on grid containers.
- vertical-align has no effect on grid items.
- If an inline-grid container is floated or absolutely pos, changes to display:grid.
- Grid area: one or more cells.
- Grid line can have multiple names, cols and rows and share names.
- minmax(a, b): not shorter than a, not larger than b.
- Mixing fr with other cols of fixed width, gives the fr col the remaining space.
- min-content and max-content can by used for col/row size.]]>
4.25 2000 CSS: The Definitive Guide
author: Eric A. Meyer
name: Wilson
average rating: 4.25
book published: 2000
rating: 0
read at: 2020/08/16
date added: 2020/08/16
shelves: web-development
review:
Review

Notes

#2 Selectors

- Running ¡°document.createElement('main')¡± will allow IE8 (which doesn't support it) to understand that element exist so we can style it.
- [class|="btn"] class starts with "btn-" or is exactly "btn".
- [class^="btn"] starts with "btn".
- [title="foo"] matches foo in a space separated list of words.
- Attribute selectors tend to be case sensitive if the underlying document language is.
* HTML attribute key terms, which is not: input[type="CHECKBox"].
- CSS4 introduces a case-insensitivity identifier: img[src$=".pdf" i].
* Only works for values, may not work on attributes, be aware of: input[TYPE='tel'].
^ XHTML enforces case sensitivity, HTML5 does not.
- "li + li" selects all but the first.
- "div * span" selects span grandchildren.
- "h2 + ol" adjacent sibling.
* "h2 ~ ol" following sibling.
- "a:lang(de)" target german links.
- "p:empty" pseudo-class treats whitespace as not-empty.
* Be aware of some elements which are always empty, "img" equals "img:empty".
* Is the only selector that considers text nodes.
- ":only-child", ":only-of-type".
- Changing element size on :active or :hover could cause reflow by triggering layout on the browser.
- Empty inputs might match ":valid".
- ":not()" takes a single selector, no descendants, nesting or grouping.
- Pseudo-elements styles are limited to font properties.

#3 Specificity and the Cascade

- 0,0,0,0
* Inline styles get the first digit.
* ID.
* Class, attributes, pseudo-class.
* Elements, pseudo-elements.
- Style links in the order: :link, :visited, :focus, :hover, :active, since they have the same specificity.

#4 Values and Units

- Every property accepts: inherit, initial, unset.
* Initial: set back to starting value.
* Inherit: set back to initial or inherit, whichever was previously set.
* URLs in stylesheets are relative to themselves, not the document.
- Viewport units.
* 1vmin: lesser from n/100 viewport width or height.
*1vmax: greater from n/100 viewport width or height.
- "currentColor": value of the computed 'color' property.
* when 'color' is not set on the element, this holds the inherited 'color' value.
- "turn": is a unit handy for animations.

#5 Fonts

- Never quote generic font family names like serif, it makes the browser think it refers to a font-family: font-family: Arial, 'serif'.
- When using @font-face.
* Appending "format('woff')" to the "src" prevents downloading a font the browser won't understand.
* Add "local('my-font')" first so the browser doesn't download fonts it already has.
- unicode-range can allow using a font face for a single or group of characters.
- "font-weight: bolder;" resolves to a value bolder than the parent's element.

#6 Text Properties

- line-height: use without units to make it work as a multiplier of the font-size, cause values like 1.5em get calculated and inherited as an actual value by children elements.
- vertical-align only works on inline elements and table-cells (not all values apply for table-cells).
* Accepts keywords and values.
* "bottom" value aligns elements to the bottom edge of the line, which most times is below the baseline of the text.
- "word-break: break-all" don't show hyphens even if the "hyphen" property is set.

#7 Basic Visual Formatting

- The values of margin, border, padding and content must add up to the width of the element's containing block.
* Only margin and width can be set to "auto".
^ When "auto", the remaining width of the container is distributed among those auto values.
^ If none of them is set to "auto" and the total is less than the container's width, then, margin-right is set to auto by the user agent in order to make the element's box (including margin) match the container width.
- box-decoration-break: clone. Causes each fragment of multiline inline elements to be drawn as a standalone box. So padding left|right is applied on every line rather than only at start and end.

#8 Padding, Borders, Outlines, and Margins

- background-clip prevents background from extending into the padding and/or border outside edge.
- Percentage values on padding and margin are computed from the parent's width (except on most positioned elements, flex and grid, where they are calculated with respect to the
height of their formatting context).
* can be used for fluid fluid pages, where the padding on elements enlarges or reduces to match the actual size of the parent element.
- Border takes the foreground color if no border-color is defined.
- "border-radius: h / v" sets the horizontal and vertical rounding individually.
- border-image for using an image as a border, it needs border-style and width to be set.
- Outlines do not take up space and may be non-rectangular.
* Cannot have different styles for each side.
* Run along the margin, just outside the border.
- Negative margins can create a Mondrian effect.
- Margin collapse: when vertical margins meet, the smallest one is reset to zero according to the specification.
* For parent-child, adding padding to the parent prevents collapsing.
* Doesn't happen on floated elements.

#9 Colors, Backgrounds, and Gradients

- "background-clip: text" fills the text with the background color or image (will need "color: transparent" or with opacity "color: rgba()").
- background-position: can be set in pairs like: 'top left. Except for the keyword 'center', percentages or length values.
* '0% 0%' is top left, '100% 100%' is top right., '50% 50%' is center.
* Using lengths aligns the top left of the image to the specified value: '20px 50px'.
* Can use negatives.
- Can use 4 values too in order to change the edges from which offsets are calculated.
* "background-position: left 33% top 30px" from the left edge, have a horizontal offset of 33%;
from the top edge, have an offset of 30px.
* "background-position: right 33% bottom 30px" from the right edge, have a horizontal offset of
33%; from the bottom edge, have an offset of 30px.
- When 'background-origin: center;' and background-repeat is set, the bg will be placed in the middle and then repeated, rather than starting from top left as default, making a consisten look around the edges.
- "background-repeat: space;" creates a grid pattern.
* It may override 'background-position: center' if the image is too big, like if only two repetitions can fit, it'll draw them on the horizontal edges.
- "background-repeat: round;" tries to fit as many images in the space provided: if the element is 850 px and the image 300px, the browser will scale down the image to 283 to fit 3 of them changing the aspect ratio if needed.
* To make sure images are not cut and fit completely, the origin has to be set in a corner and not the centre.
- 'background-attachment' immunes the effects of scrolling.
- 'background-size: % %' percentages refer to the area defined by 'background-origin' and not 'background-clip'.
- Setting auto triggers a 3-step fallback process:
* "background-size: auto 100px"
* On a 300px by 200px image.
^ The image has a 3:1 aspect ratio so it'll be preserved, resulting in a size of 150px by 100px.
^ If that fails but the image has an intrinsic aspect ratio (like most raster formats JPEG, PNG, GIF and some SVG), that ration will be used, resulting in 300px by 100px.
^ If that fails (which can happen on SVG or CSS gradients), like the image doesn't have intrinsic ratio, the horizontal size of the positioning area will be used (background-origin).
- Nearly every background property can be comma-listed, allowing for multiple backgrounds.
* Even the shorthand 'background: ..., ..., ...;'
^ background-color can only be added to the last layer, otherwise the declarations are made invalid.
- Gradients are images just like raster or vector.
* And can be used in any context an imager can, e.g. 'list-style-image'.
* They've no intrinsic aspect ratio.
- Setting the same color stop for two colours causes a hard colour switch effect.
- Color-hints declare the midpoint colour of the gradient transition.

#10 Floating and Shapes

- Margin on floated elements do not collapse.
- If no width is specified, the width collapses to zero.
- Floated elements do not overlap, if two floats are wider than the container, the 2nd one will drop to the next row.
- Floats only move horizontally, elements won't float to the top or bottom of the container.
* And are aligned top.
- When other elements overlap with a float:
* Inline: Borders, big and content render on top of the float.
* Block: borders and bg behind, content on top.
- ¡®shape-outside¡¯: floats around a defined shape.
* For images, they should have an alpha channel, or the shape will be rectangular.
* Can use inset, circle, ellipse, polygon.
- ¡®shape-image-threshold¡¯: opacity of float shape.
- 'shape-margin': margin around shape.

#11 Positioning

- Containing block
* For relative and static: the parent's content edge.
* For absolute: content edge if inline parent, padding edge if block parent.
- You can absolute position elements inside absolutely positioned elements.
- When absolute, setting 'auto' for offset prop 'top' makes the top touch the upper edge line up with the place the element would've been if not positioned at all (static position).
* left and right also but not bottom.
- 'static' position is basically the place in the normal flow of the document.
- left + margin + width + right = containing block width.
* If they sum is less than the containing block width, margin-right takes the remaining space (reset to auto).
* On positioned elements with all values set (left, width, margin, right), 'right' is reset to auto.
* If any of the props is set to 'auto', that one takes the remaining space.
- 'position: absolute; height: 5em; top: 0; bottom: 0; margin: auto;': centres vertically.
- Replaced elements have an intrinsic width and height.
- The specification keeps children from being drawn behind their parents when using z-index.
* Each parent with z-index, establishes a stacking context for its children.

#12 Flexible Box Layout

- Flexbox was designed for single dimensional layouts, works best at arranging information along one axis, not grids.
* 'justify-content' won't necessarily apply the same spacing between elements on multiple cross-axis blocks if the element count or size on each block is different.
- When 'writing-mode: vertical-lr;', flex direction row means top to bottom.
* Similar for 'direction: rtl'.
- 'flex-wrap', controls the cross-axis direction.
- 'flex-flow', shorthand for flex-direction and flex-wrap.
- flex items won't shrink to smaller than their border, padding, margin combined.
- justify-content aligns items across the main axis.
* space-around gives each item the same margin, making the space between the ones in the middle being double of that at the start and end (no margin collapse).
* space-evenly splits white space evenly everywhere.
- 'align-items' aligns items across the cross axis.
* stretch: will make elements take 100% height unless margin, [min-|max-]height are set.
* baseline: aligns all items' baselines starting with the one having the biggest font-size.
- 'align-self' is applied to flex items to override 'align-items'.
- 'align-content': controls the space between items spanning multiple columns in the cross-axis.
* Like justify-content does for the main-axis.
* As opposed to align-items, who aligns vertically per row.
- On flex items: margin do not collapse, 'float' and 'clear' are ignored.
- Empty text nodes (including whitespace) are ignored.
* Non-whitespace ones are wrapped in anonymous flex items and become part of the layout.
- flex-basis takes precedence over width/height.
- 'flex: 3' = 'flex: 3 0 0' (flex-basis will grow at a factor of 3 from 0px).
- 'flex: none' = 'flex: 0 0 auto'.

#13 Grid Layout

- Grids will not slide behind floated elements.
- Column props, float, clear have not effect on grid containers.
- vertical-align has no effect on grid items.
- If an inline-grid container is floated or absolutely pos, changes to display:grid.
- Grid area: one or more cells.
- Grid line can have multiple names, cols and rows and share names.
- minmax(a, b): not shorter than a, not larger than b.
- Mixing fr with other cols of fixed width, gives the fr col the remaining space.
- min-content and max-content can by used for col/row size.
]]>
Zero To One 23346490
The next Bill Gates will not build an operating system. The next Larry Page or Sergey Brin won¡¯t make a search engine. If you are copying these guys, you aren¡¯t learning from them. It¡¯s easier to copy a model than to make something new: doing what we already know how to do takes the world from 1 to n, adding more of something familiar. Every new creation goes from 0 to 1. This book is about how to get there.

¡®Peter Thiel has built multiple breakthrough companies, and Zero to One shows how.¡¯
ELON MUSK, CEO of SpaceX and Tesla

¡®This book delivers completely new and refreshing ideas on how to create value in the world.¡¯
MARK ZUCKERBERG, CEO of Facebook

¡®When a risk taker writes a book, read it. In the case of Peter Thiel, read it twice. Or, to be safe, three times. This is a classic.¡¯
NASSIM NICHOLAS TALEB, author of The Black Swan]]>
210 Peter Thiel 0753555204 Wilson 5 4.12 2014 Zero To One
author: Peter Thiel
name: Wilson
average rating: 4.12
book published: 2014
rating: 5
read at: 2020/08/14
date added: 2020/08/16
shelves: business, economics, nonfiction
review:

]]>
<![CDATA[The new rules of coffee: a modern guide for everyone]]> 37822474 There has never been a better time to enjoy coffee.

Pourover, cold brew, flat white, single origin¡ªwhile coffee has become more complicated, it¡¯s also more delicious. Written by the founders and editors of Sprudge, the premier online outlet for coffee content, this collection of digestible rules¨Csuch as darker roast is not always stronger; you reserve the right to cream and sugar; and drinking coffee is one of the most global things you do every day¨Cand whimsical illustrations is the only guide you need to navigate the brave new coffee world. Whether you¡¯re looking for help digesting the ever-expanding menu at your local cafe, curious about the next generation of coffee growers, or seeking the low-down on how often you really need to clean your French press, ¡°The New Rules of Coffee¡± makes it easy.]]>
160 Jordan Michelman 0399581626 Wilson 5 nonfiction 3.99 2018 The new rules of coffee: a modern guide for everyone
author: Jordan Michelman
name: Wilson
average rating: 3.99
book published: 2018
rating: 5
read at: 2020/08/04
date added: 2020/08/04
shelves: nonfiction
review:

]]>
How to Lie With Statistics 2017339
Introduces the reader to the niceties of samples (random or stratified random), averages (mean, median or modal), errors (probable, standard or unintentional), graphs, indexes, and other tools of democratic persuasion.]]>
124 Darrell Huff 0140136290 Wilson 4 3.80 1954 How to Lie With Statistics
author: Darrell Huff
name: Wilson
average rating: 3.80
book published: 1954
rating: 4
read at: 2020/07/23
date added: 2020/07/23
shelves: nonfiction, business, economics, science
review:

]]>
The E-myth Revisited 81948 Small business coaching. 269 Michael E. Gerber 0887307280 Wilson 4 4.06 1985 The E-myth Revisited
author: Michael E. Gerber
name: Wilson
average rating: 4.06
book published: 1985
rating: 4
read at: 2020/07/21
date added: 2020/07/21
shelves: business, nonfiction, economics
review:

]]>
1984 40961427 Nineteen Eighty-Four is a rare work that grows more haunting as its futuristic purgatory becomes more real. Published in 1949, the book offers political satirist George Orwell's nightmarish vision of a totalitarian, bureaucratic world and one poor stiff's attempt to find individuality. The brilliance of the novel is Orwell's prescience of modern life¡ªthe ubiquity of television, the distortion of the language¡ªand his ability to construct such a thorough version of hell. Required reading for students since it was published, it ranks among the most terrifying novels ever written.]]> 298 George Orwell Wilson 0 fiction, novels, to-read 4.24 1949 1984
author: George Orwell
name: Wilson
average rating: 4.24
book published: 1949
rating: 0
read at:
date added: 2019/11/18
shelves: fiction, novels, to-read
review:

]]>
<![CDATA[Just Enough Software Architecture: A Risk-Driven Approach]]> 9005772 376 George H. Fairbanks 0984618104 Wilson 3 Review

I feel like I had misaligned expectations of this book, but I'm not sure if it's because I didn't know enough about the topic to understand what to expect or I just went to the theater to watch a thriller but got a romantic comedy instead, where the title and movie trailer guided me to make the wrong assumptions. In any case, this review might feel harsher than it actually is since there were parts I did actually enjoyed. Following are the bad parts, for the ones I found good are in the notes section.

Too much detail on high level concepts like port and connectors types between components.

Some diagrams feel too technical and unnecessarily detailed, like several relationship types between components, i.e. if two components are connected, I'm not sure it makes sense in many occasions to highlight the fact that the connection is sync or async, directly to the local file system or to a remote location, client or server port; by having a different dotted line to represent each one.

Most of the book feels somewhat academic and not matching the type of language you'd typically encounter in meeting rooms at work.

Very brief focus on the code model, not meaning I would've liked to see actual code, but, for instance, more concrete examples of how to apply the different strategies of dominant decomposition (folder structure). Same goes for the architectural styles.

The same concepts are repeated over and over again on most chapters from slightly different perspectives: quality attributes, module viewtype, runtime viewtype, components, ports, connectors. It feels like every chapter has a piece of the puzzle of each topic, rather than being covered in full in a continuous segment. Which innevitably leads to repetition.

Notes

Legend, vignette levels:

- 1st
* 2nd
^ 3rd

2)

- Risk-driven: design as much architecture to mitigate the biggest risks.
* If you need to process data in under 50ms, add that into the architecture.
- Apart from the features you're working on, always know what risk failures are you solving.
- There are problems to find and problems to prove.
* "Is there a number that when squared equals 4?", is a problem to find since you can test a solution pretty easy.
* "Is the sequence of all prime numbers infinite?", is a problem to prove.
* Finding is easier than proving since you need to demonstrate something is true for all posible cases.

4)

- Design intent will always be lost between design and code.
* We debated design decisions, discovered tradeoffs, imposed constraints; yet none of these is expressed in code.
- Code makes a good job communicating the code model, poor job communicating the runtime and allocation models (where and how is it deployed).
* Runtime model: what components and connectors exist at runtime.
^ How to represent it: Components and Responsibilities table, component assembly diagram, functionality scenario.
- Functionality scenario includes: Name, Initial state, Participants (components), Steps.
- Quality Attributes: describe here the tradeoffs, architecture drivers and design decisions.
- When integrating third-party components, make a list of failure risks.
* Make a diagram and write a functionality scenario of the risks mitigation strategies.
- After laying out a domain model, test it with a concrete example to detect potential problems.
* i.e. if you write a relationships model for Artist -> Song -> Album, the generic model might not highlight the potential shortcoming of handling bands or ex-band members going solo or artists changing names.
- Make rational architecture choices: when 2 ideas seem as good, figure out which quality attribute they help achieve, e.g. usability and testability, then pick the one you value higher.

7)

- Models help you solve problems and mitigate risks, but some problems are better solved directly, not through models.
- Every project should document its architecture: false.
* You should plan before going on a road trip, but you don't plan your commute every morning.
- "Your point of view is worth 80 IQ points", Alan Kay.
- Domain model: expresses enduring truths about the world relevant to the system, if something is 'just true', belongs in the domain.
- Design model: the system to be built makes appearance here, set of boundaries and commitments.

8)

- Domain models express details of the domain not related to the system's implementation.
- Stop domain modelling when it provides less value than other activity, such as prototyping.
- The most valuable part of this model is a list of types and definitions.
- Invariants: things in the model that must always be true.
- Functionality scenarios here include actors (real people or real world objects) not computer records or hardware as in the design model versions.

9)

- Module viewtype: things that exist only at compile time.
* Modules, layers, dependencies, db schemas, interfaces, classes, component types.
* Source code itself (code model) is this viewtype.
- Runtime viewtype: object and component instances, functionality scenarios, component assemblies.
* Hard to envision by reading the source code since you have to mentally animate the runtime instances.

11)

- Create levels of abstraction by hierarchically nesting elements, limit the number at any level, maintain encapsulation by not revealing unnecessary detail.
* Create a story at many levels.
- Dominant decomposition: the problem is that a single organisation system must be chosen.
* Like books in a library organised by size, helps finding the largest books, not so much finding by author.
* Decomposing the system into modules and components imposes an organisation on it.
- Encapsulation: rather than just grouping together related code, hide details likely to change inside the module.
* If you're unsure about design alternatives A and B, have the module's public interface support both, in case you need to swap.

14)

- Pipe-and-filter style: continually and incrementally processing data, (e.g. Node).
- Batch-sequential: complete all processing before moving to the next state.
- Client-server: is asymmetric, only clients can request the server to do work.
- Peer-to-peer: any node can be client or server, no hierarchy.]]>
3.46 2010 Just Enough Software Architecture: A Risk-Driven Approach
author: George H. Fairbanks
name: Wilson
average rating: 3.46
book published: 2010
rating: 3
read at: 2019/10/01
date added: 2019/10/02
shelves: software-architecture, software-projects
review:
Review

I feel like I had misaligned expectations of this book, but I'm not sure if it's because I didn't know enough about the topic to understand what to expect or I just went to the theater to watch a thriller but got a romantic comedy instead, where the title and movie trailer guided me to make the wrong assumptions. In any case, this review might feel harsher than it actually is since there were parts I did actually enjoyed. Following are the bad parts, for the ones I found good are in the notes section.

Too much detail on high level concepts like port and connectors types between components.

Some diagrams feel too technical and unnecessarily detailed, like several relationship types between components, i.e. if two components are connected, I'm not sure it makes sense in many occasions to highlight the fact that the connection is sync or async, directly to the local file system or to a remote location, client or server port; by having a different dotted line to represent each one.

Most of the book feels somewhat academic and not matching the type of language you'd typically encounter in meeting rooms at work.

Very brief focus on the code model, not meaning I would've liked to see actual code, but, for instance, more concrete examples of how to apply the different strategies of dominant decomposition (folder structure). Same goes for the architectural styles.

The same concepts are repeated over and over again on most chapters from slightly different perspectives: quality attributes, module viewtype, runtime viewtype, components, ports, connectors. It feels like every chapter has a piece of the puzzle of each topic, rather than being covered in full in a continuous segment. Which innevitably leads to repetition.

Notes

Legend, vignette levels:

- 1st
* 2nd
^ 3rd

2)

- Risk-driven: design as much architecture to mitigate the biggest risks.
* If you need to process data in under 50ms, add that into the architecture.
- Apart from the features you're working on, always know what risk failures are you solving.
- There are problems to find and problems to prove.
* "Is there a number that when squared equals 4?", is a problem to find since you can test a solution pretty easy.
* "Is the sequence of all prime numbers infinite?", is a problem to prove.
* Finding is easier than proving since you need to demonstrate something is true for all posible cases.

4)

- Design intent will always be lost between design and code.
* We debated design decisions, discovered tradeoffs, imposed constraints; yet none of these is expressed in code.
- Code makes a good job communicating the code model, poor job communicating the runtime and allocation models (where and how is it deployed).
* Runtime model: what components and connectors exist at runtime.
^ How to represent it: Components and Responsibilities table, component assembly diagram, functionality scenario.
- Functionality scenario includes: Name, Initial state, Participants (components), Steps.
- Quality Attributes: describe here the tradeoffs, architecture drivers and design decisions.
- When integrating third-party components, make a list of failure risks.
* Make a diagram and write a functionality scenario of the risks mitigation strategies.
- After laying out a domain model, test it with a concrete example to detect potential problems.
* i.e. if you write a relationships model for Artist -> Song -> Album, the generic model might not highlight the potential shortcoming of handling bands or ex-band members going solo or artists changing names.
- Make rational architecture choices: when 2 ideas seem as good, figure out which quality attribute they help achieve, e.g. usability and testability, then pick the one you value higher.

7)

- Models help you solve problems and mitigate risks, but some problems are better solved directly, not through models.
- Every project should document its architecture: false.
* You should plan before going on a road trip, but you don't plan your commute every morning.
- "Your point of view is worth 80 IQ points", Alan Kay.
- Domain model: expresses enduring truths about the world relevant to the system, if something is 'just true', belongs in the domain.
- Design model: the system to be built makes appearance here, set of boundaries and commitments.

8)

- Domain models express details of the domain not related to the system's implementation.
- Stop domain modelling when it provides less value than other activity, such as prototyping.
- The most valuable part of this model is a list of types and definitions.
- Invariants: things in the model that must always be true.
- Functionality scenarios here include actors (real people or real world objects) not computer records or hardware as in the design model versions.

9)

- Module viewtype: things that exist only at compile time.
* Modules, layers, dependencies, db schemas, interfaces, classes, component types.
* Source code itself (code model) is this viewtype.
- Runtime viewtype: object and component instances, functionality scenarios, component assemblies.
* Hard to envision by reading the source code since you have to mentally animate the runtime instances.

11)

- Create levels of abstraction by hierarchically nesting elements, limit the number at any level, maintain encapsulation by not revealing unnecessary detail.
* Create a story at many levels.
- Dominant decomposition: the problem is that a single organisation system must be chosen.
* Like books in a library organised by size, helps finding the largest books, not so much finding by author.
* Decomposing the system into modules and components imposes an organisation on it.
- Encapsulation: rather than just grouping together related code, hide details likely to change inside the module.
* If you're unsure about design alternatives A and B, have the module's public interface support both, in case you need to swap.

14)

- Pipe-and-filter style: continually and incrementally processing data, (e.g. Node).
- Batch-sequential: complete all processing before moving to the next state.
- Client-server: is asymmetric, only clients can request the server to do work.
- Peer-to-peer: any node can be client or server, no hierarchy.
]]>
The Design of Everyday Things 22285809 In this entertaining and insightful analysis, cognitive scientist Donald A. Norman hails excellence of design as the most important key to regaining the competitive edge in influencing consumer behavior. Now fully expanded and updated, with a new introduction by the author, The Design of Everyday Things is a powerful primer on how--and why--some products satisfy customers while others only frustrate them.
]]>
369 Donald A. Norman 1306432774 Wilson 4 web-design, psycology
Notes

...

Legend:

Vignette levels:

- 1st
* 2nd
^ 3rd

1) The Psychology of Everyday Things

- Good design is based in discoverability and understanding.
- 5 principles of interaction:
* Affordances: relationship between the system/device and the user, system capabilities regarding a specific user.
* Signifiers: signals, cues, hints; for when affordances aren't clear.
* Constraints.
* Mappings: usually between signifiers and affordances.
* Feedback.
^ Affordances sometimes are also signifiers.
* Conceptual model: the combination of the above principles in action, the user journey that creates the narrative of how the system should be used, e.g.: icons in a computer desktop create the conceptual model of organisation by files and folders, even though it's all stored as 1s and 0s.
* Bad design lead users to construct the wrong conceptual model.

2) The Psychology of Everyday Actions

- Once something is mastered, is performed almost in autopilot, only specially difficult or unexpected situations need conscious attention.
- Human thought is mostly subconscious, since we're only aware of a small subset, we fool ourselves into thinking most of them are conscious.
* Which means we often don't know what we'll say do, say, think, until we've done it.
- Thought and emotion cannot be separated.
- Cognition provides understanding: emotion value judgments. A human without a working emotional system has difficulty making choices. A human without a cognitive system is dysfunctional.
- Positive emotional state: good for creativity, too much and it prevents focus not getting things done due to too many random thoughts.
- Negative emotional state: good for focusing on one task, too much and it creates a narrow point of view.
- Three levels of processing:
* Visceral: fight or flight, startle reflex for novel, unexpected events, fast responses completely subconscious.
^ This is where style matters, by triggering mellow, pleasant sensations, and has noting to do with how usable the system is.
* Behavioural: learned skills, triggered by situations matching known patterns.
* Reflective: home of conscious cognition. The others are subconscious and fast, this one is not. Develops deep understanding.
- Eliminate the term 'human error', instead, talk about communication and interaction.
- When people understand what has happened, what state the system is in, what actions are available, they can perform their activities more efficiently.
- Systems should provide feedback and feedforward (what can I do next?).

3) Knowledge in the Head and in the World

- Precise behaviour can be derived from imprecise knowledge because: many times great precision is not required and there's natural constraints in objects, as the finite ways a device can be assembled, or lifted.
* Hence, behaviour can be guided by a combination of knowledge in the head and in the world.
- People can even organise their environment to support behaviour.
* Non-readers who can still perform jobs where reading is needed.
* Or when we perform well on novel, confusion or unexpected situations.
^ It's one reason why people can function well in their environment but still be unable to describe what they do.
- Once we learn to distinguish similar items by certain qualities, it's hard to distinguish new items with similar qualities as the old ones.
* It's why people in the US struggled when a $1 coin with similar size as the quarter was introduced
* In contrast, they don't struggle to distinguish the same size bills, since they've always been the same size, people have learned to not use size as a differentiator.
- The apparent large number of decisions is largely reduced once constraints are applied.
- To maximise the efficiency of working memory, it's best to present critical information in different sensory modalities as they seldom interfere with each other when getting distracted: sight, sound, haptic (touch, vibration), hearing, spacial location, gestures.
- Procedural memory: how we do things, learned skills.
* Hard to explain to others.
- Declarative memory: factual information.
- Sometimes precise information, even if technically correct, is not better than a good enough approximation, i.e. calculating the exact temperature with the F to C formula might be irrelevant if I just need to know if wearing a jacket or not.
- When given a set of instructions about a system, and making mistakes related to, say, misremembering one step, users tend to not report them as system problems, blaming it instead to their own stupidity. Even if in poorly designed systems.

4) Knowing What to Do: Constraints, Discoverability, and Feedback

- Standards should reflect the psychological conceptual models, not the physical mechanics.
- One way to overcome the fear of the new is to make it look like the old.

5) Human Error? No, Bad Design

- Physical limitations are well understood by designers, mental limitations are not.
- Interruptions are a common reason for errors.
* Time stress as well.
- Stating 'human error' as the cause of a problem is shallow thinking.
* Use the 'Five Whys' to uncover the real cause.
- Two types of errors:
* Slips: when a person intends to do one action but end up doing another one.
^ e.g. unbuckling your watch instead of the seatbelt when getting out of a car.
* Mistakes: when the wrong goal is stablished or the wrong plan is formed.
^ i.e. You appropriately diagnosed the situation but decide upon the erroneous course of action.
^ Or you misdiagnose the situation because of erroneous or incomplete knowledge.
- Avoid procedures that have identical opening steps but then diverge.
* Users might fall prey of capture slips, specially the experienced ones.
* Design sequences different from the start.
- Checklists a great for preventing errors in complex multistep situations with many interruptions.
* They work better when two people work on them as a team, one reading the items, another executing them.
* If instead, one person executes, and later a second one reviews the items, may cause the first one to rush things thinking any errors would be caught, but the same biases affect the reviewer.
- One paradox of groups: adding more people to check a task makes it less likely to be done right.
- In hindsight, events seem logical and predictable, foresight is difficult.
- Multitasking accounts for a severe degradation of performance, increased errors and lack of both quality and efficiency.
- Design the system as to precent errors on one level to leak to other levels.
- Provide 'undo' to common errors.
- Don't allow irreversible changes to be made too easy.
- Organisations should implement resilience engineering, and treat safety as a core value.

6) Design Thinking

- Don't start looking for solutions until you determine what's the real problem.
* Take the original problem stated to you as a suggestion, not a final statement.
- Design research is about what people need and how they'll used the product.
- Market research is about what people will buy and how they make purchasing decisions.
- Activity centred design can be thought as an enhancement to HCD, like a camera or a car which is designed for a specific activity rather that a specific set of users, requiring everyone to learn a set of skills in order to use it.
- People will tolerate complexity and learning something new as long as it feels appropriate.
- Complexity is good, it is confusion that is bad.

7) Design in the World of Business

- Avoid adding new features to an already well designed product due to:
* Some users asking for more functionality.
* Sales dropping.
* Competitors adding more features.
- It is this attempt to match the competition that causes products to to be the same.
- Don't compare features to the competition to determine where you are weak, compare them to see where you are strong and continue to grow that set of features stronger.]]>
4.19 1988 The Design of Everyday Things
author: Donald A. Norman
name: Wilson
average rating: 4.19
book published: 1988
rating: 4
read at: 2019/09/22
date added: 2019/09/23
shelves: web-design, psycology
review:
-----

Notes

...

Legend:

Vignette levels:

- 1st
* 2nd
^ 3rd

1) The Psychology of Everyday Things

- Good design is based in discoverability and understanding.
- 5 principles of interaction:
* Affordances: relationship between the system/device and the user, system capabilities regarding a specific user.
* Signifiers: signals, cues, hints; for when affordances aren't clear.
* Constraints.
* Mappings: usually between signifiers and affordances.
* Feedback.
^ Affordances sometimes are also signifiers.
* Conceptual model: the combination of the above principles in action, the user journey that creates the narrative of how the system should be used, e.g.: icons in a computer desktop create the conceptual model of organisation by files and folders, even though it's all stored as 1s and 0s.
* Bad design lead users to construct the wrong conceptual model.

2) The Psychology of Everyday Actions

- Once something is mastered, is performed almost in autopilot, only specially difficult or unexpected situations need conscious attention.
- Human thought is mostly subconscious, since we're only aware of a small subset, we fool ourselves into thinking most of them are conscious.
* Which means we often don't know what we'll say do, say, think, until we've done it.
- Thought and emotion cannot be separated.
- Cognition provides understanding: emotion value judgments. A human without a working emotional system has difficulty making choices. A human without a cognitive system is dysfunctional.
- Positive emotional state: good for creativity, too much and it prevents focus not getting things done due to too many random thoughts.
- Negative emotional state: good for focusing on one task, too much and it creates a narrow point of view.
- Three levels of processing:
* Visceral: fight or flight, startle reflex for novel, unexpected events, fast responses completely subconscious.
^ This is where style matters, by triggering mellow, pleasant sensations, and has noting to do with how usable the system is.
* Behavioural: learned skills, triggered by situations matching known patterns.
* Reflective: home of conscious cognition. The others are subconscious and fast, this one is not. Develops deep understanding.
- Eliminate the term 'human error', instead, talk about communication and interaction.
- When people understand what has happened, what state the system is in, what actions are available, they can perform their activities more efficiently.
- Systems should provide feedback and feedforward (what can I do next?).

3) Knowledge in the Head and in the World

- Precise behaviour can be derived from imprecise knowledge because: many times great precision is not required and there's natural constraints in objects, as the finite ways a device can be assembled, or lifted.
* Hence, behaviour can be guided by a combination of knowledge in the head and in the world.
- People can even organise their environment to support behaviour.
* Non-readers who can still perform jobs where reading is needed.
* Or when we perform well on novel, confusion or unexpected situations.
^ It's one reason why people can function well in their environment but still be unable to describe what they do.
- Once we learn to distinguish similar items by certain qualities, it's hard to distinguish new items with similar qualities as the old ones.
* It's why people in the US struggled when a $1 coin with similar size as the quarter was introduced
* In contrast, they don't struggle to distinguish the same size bills, since they've always been the same size, people have learned to not use size as a differentiator.
- The apparent large number of decisions is largely reduced once constraints are applied.
- To maximise the efficiency of working memory, it's best to present critical information in different sensory modalities as they seldom interfere with each other when getting distracted: sight, sound, haptic (touch, vibration), hearing, spacial location, gestures.
- Procedural memory: how we do things, learned skills.
* Hard to explain to others.
- Declarative memory: factual information.
- Sometimes precise information, even if technically correct, is not better than a good enough approximation, i.e. calculating the exact temperature with the F to C formula might be irrelevant if I just need to know if wearing a jacket or not.
- When given a set of instructions about a system, and making mistakes related to, say, misremembering one step, users tend to not report them as system problems, blaming it instead to their own stupidity. Even if in poorly designed systems.

4) Knowing What to Do: Constraints, Discoverability, and Feedback

- Standards should reflect the psychological conceptual models, not the physical mechanics.
- One way to overcome the fear of the new is to make it look like the old.

5) Human Error? No, Bad Design

- Physical limitations are well understood by designers, mental limitations are not.
- Interruptions are a common reason for errors.
* Time stress as well.
- Stating 'human error' as the cause of a problem is shallow thinking.
* Use the 'Five Whys' to uncover the real cause.
- Two types of errors:
* Slips: when a person intends to do one action but end up doing another one.
^ e.g. unbuckling your watch instead of the seatbelt when getting out of a car.
* Mistakes: when the wrong goal is stablished or the wrong plan is formed.
^ i.e. You appropriately diagnosed the situation but decide upon the erroneous course of action.
^ Or you misdiagnose the situation because of erroneous or incomplete knowledge.
- Avoid procedures that have identical opening steps but then diverge.
* Users might fall prey of capture slips, specially the experienced ones.
* Design sequences different from the start.
- Checklists a great for preventing errors in complex multistep situations with many interruptions.
* They work better when two people work on them as a team, one reading the items, another executing them.
* If instead, one person executes, and later a second one reviews the items, may cause the first one to rush things thinking any errors would be caught, but the same biases affect the reviewer.
- One paradox of groups: adding more people to check a task makes it less likely to be done right.
- In hindsight, events seem logical and predictable, foresight is difficult.
- Multitasking accounts for a severe degradation of performance, increased errors and lack of both quality and efficiency.
- Design the system as to precent errors on one level to leak to other levels.
- Provide 'undo' to common errors.
- Don't allow irreversible changes to be made too easy.
- Organisations should implement resilience engineering, and treat safety as a core value.

6) Design Thinking

- Don't start looking for solutions until you determine what's the real problem.
* Take the original problem stated to you as a suggestion, not a final statement.
- Design research is about what people need and how they'll used the product.
- Market research is about what people will buy and how they make purchasing decisions.
- Activity centred design can be thought as an enhancement to HCD, like a camera or a car which is designed for a specific activity rather that a specific set of users, requiring everyone to learn a set of skills in order to use it.
- People will tolerate complexity and learning something new as long as it feels appropriate.
- Complexity is good, it is confusion that is bad.

7) Design in the World of Business

- Avoid adding new features to an already well designed product due to:
* Some users asking for more functionality.
* Sales dropping.
* Competitors adding more features.
- It is this attempt to match the competition that causes products to to be the same.
- Don't compare features to the competition to determine where you are weak, compare them to see where you are strong and continue to grow that set of features stronger.
]]>
<![CDATA[Lifespan: Why We Age¨Dand Why We Don't Have To]]> 43723901
In this groundbreaking book, Dr. David Sinclair, leading world authority on genetics and longevity, reveals a bold new theory for why we age. As he writes: ¡°Aging is a disease, and that disease is treatable.¡±

This book takes us to the frontlines of research many from Dr. David Sinclair¡¯s own lab at Harvard¡ªthat demonstrate how we can slow down, or even reverse, aging. The key is activating newly discovered vitality genes, the descendants of an ancient genetic survival circuit that is both the cause of aging and the key to reversing it.]]>
432 David A. Sinclair 1501191977 Wilson 0 4.11 2019 Lifespan: Why We Age¨Dand Why We Don't Have To
author: David A. Sinclair
name: Wilson
average rating: 4.11
book published: 2019
rating: 0
read at:
date added: 2019/09/22
shelves: psycology, science, to-read, nonfiction
review:

]]>
<![CDATA[Nonviolent Communication: A Language of Life]]> 71730
In this internationally acclaimed text, Marshall Rosenberg offers insightful stories, anecdotes, practical exercises and role-plays that will dramatically change your approach to communication for the better. Discover how the language you use can strengthen your relationships, build trust, prevent conflicts and heal pain. Revolutionary, yet simple, Nonviolent Communication offers you the most effective tools to reduce violence and create peace in your life¡ªone interaction at a time.]]>
220 Marshall B. Rosenberg 1892005034 Wilson 0 4.32 1999 Nonviolent Communication: A Language of Life
author: Marshall B. Rosenberg
name: Wilson
average rating: 4.32
book published: 1999
rating: 0
read at:
date added: 2019/09/22
shelves: to-read, nonfiction, psycology
review:

]]>
<![CDATA[Design It!: From Programmer to Software Architect (The Pragmatic Programmers)]]> 31670678
With dozens of design methods, examples, and practical know-how, Design It! shows you how to become a software architect. Walk through the core concepts every architect must know, discover how to apply them, and learn a variety of skills that will make you a better programmer, leader, and designer.

Uncover the big ideas behind software architecture and gain confidence working on projects big and small. Plan, design, implement, and evaluate software architectures and collaborate with your team, stakeholders, and other architects. Identify the right stakeholders and understand their needs, dig for architecturally significant requirements, write amazing quality attribute scenarios, and make confident decisions. Choose technologies based on their architectural impact, facilitate architecture-centric design workshops, and evaluate architectures using lightweight, effective methods. Write lean architecture descriptions people love to read. Run an architecture design studio, implement the architecture you've designed, and grow your team's architectural knowledge. Good design requires good communication. Talk about your software architecture with stakeholders using whiteboards, documents, and code, and apply architecture-focused design methods in your day-to-day practice.

Hands-on exercises, real-world scenarios, and practical team-based decision-making tools will get everyone on board and give you the experience you need to become a confident software architect.]]>
360 Michael Keeling 1680502093 Wilson 0 3.65 Design It!: From Programmer to Software Architect (The Pragmatic Programmers)
author: Michael Keeling
name: Wilson
average rating: 3.65
book published:
rating: 0
read at:
date added: 2019/09/10
shelves: to-read, software-architecture, software-projects
review:

]]>
<![CDATA[How To Be Right in a World Gone Wrong]]> 41577606
In the bestselling How To Be Right, James provides a hilarious and invigorating guide to talking to people with unchallenged opinions. With chapters on every lightning-rod issue, James shows how people have been fooled into thinking the way they do, and in each case outlines the key questions to ask to reveal fallacies, inconsistencies and double standards.

If you ever get cornered by ardent Brexiteers, Daily Mail disciples or corporate cronies, this book is your conversation survival guide.]]>
232 James O'Brien 0753553120 Wilson 3 nonfiction 4.05 2018 How To Be Right in a World Gone Wrong
author: James O'Brien
name: Wilson
average rating: 4.05
book published: 2018
rating: 3
read at: 2019/09/04
date added: 2019/09/04
shelves: nonfiction
review:

]]>
<![CDATA[Concepts, Techniques, and Models of Computer Programming]]> 772585
After an introduction to programming concepts, the book presents both well-known and lesser-known computation models ("programming paradigms"). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, message-passing concurrency, explicit state, object-oriented programming, shared-state concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language¡ªa simple core language that consists of a small number of programmer- significant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment.]]>
936 Peter Van Roy 0262220695 Wilson 0 4.11 2004 Concepts, Techniques, and Models of Computer Programming
author: Peter Van Roy
name: Wilson
average rating: 4.11
book published: 2004
rating: 0
read at:
date added: 2019/08/30
shelves: to-read, software-architecture, science
review:

]]>
<![CDATA[Why We Sleep: The New Science of Sleep and Dreams]]> 36303871
Until very recently, science had no answer to the question of why we sleep, or what good it served, or why its absence is so damaging to our health. Compared to the other basic drives in life - eating, drinking, and reproducing - the purpose of sleep remained elusive.

Now, in this book, the first of its kind written by a scientific expert, Professor Matthew Walker explores twenty years of cutting-edge research to solve the mystery of why sleep matters. Looking at creatures from across the animal kingdom as well as major human studies, Why We Sleep delves in to everything from what really happens during REM sleep to how caffeine and alcohol affect sleep and why our sleep patterns change across a lifetime, transforming our appreciation of the extraordinary phenomenon that safeguards our existence.]]>
360 Matthew Walker 0141983760 Wilson 4 4.40 2017 Why We Sleep: The New Science of Sleep and Dreams
author: Matthew Walker
name: Wilson
average rating: 4.40
book published: 2017
rating: 4
read at: 2019/08/26
date added: 2019/08/26
shelves: nonfiction, psycology, science
review:

]]>
<![CDATA[The Book You Wish Your Parents Had Read [and Your Children Will Be Glad That You Did]]]> 42348818 This book is about how we have relationships with our children, what gets in the way of a good connection and what can enhance it


The most influential relationships are between parents and children. Yet for so many families, these relationships go can wrong and it may be difficult to get back on track.

In The Book You Wish Your Parents Had Read (and Your Children Will Be Glad that You Did), renowned psychotherapist Philippa Perry shows how strong and loving bonds are made with your children and how such attachments give a better chance of good mental health, in childhood and beyond.

She'll help you to:
- Understand how your own upbringing may be impacting upon your parenting style
- Contain, express, accept and validate your own and your child's feelings
- Understand that all behaviour is communication
- Break negative cycles and patterns
- Accept that you will make mistakes and what to do about them

Almost every parent loves their children, but by following the refreshing, sage and sane advice and steps in this book you will also find yourselves liking one another too.

]]>
240 Philippa Perry Wilson 0 4.10 2019 The Book You Wish Your Parents Had Read [and Your Children Will Be Glad That You Did]
author: Philippa Perry
name: Wilson
average rating: 4.10
book published: 2019
rating: 0
read at:
date added: 2019/08/12
shelves: to-read, nonfiction, parenting, psycology
review:

]]>
<![CDATA[Flatland: A Romance of Many Dimensions]]> 433567 [sic ¨C ed.], a mathematician and resident of the two-dimensional Flatland, where women-thin, straight lines-are the lowliest of shapes, and where men may have any number of sides, depending on their social status.
Through strange occurrences that bring him into contact with a host of geometric forms, Square has adventures in Spaceland (three dimensions), Lineland (one dimension) and Pointland (no dimensions) and ultimately entertains thoughts of visiting a land of four dimensions¡ªa revolutionary idea for which he is returned to his two-dimensional world. Charmingly illustrated by the author, Flatland is not only fascinating reading, it is still a first-rate fictional introduction to the concept of the multiple dimensions of space. "Instructive, entertaining, and stimulating to the imagination." ¡ª Mathematics Teacher.]]>
96 Edwin A. Abbott 048627263X Wilson 0 fiction, to-read, novels 3.82 1884 Flatland: A Romance of Many Dimensions
author: Edwin A. Abbott
name: Wilson
average rating: 3.82
book published: 1884
rating: 0
read at:
date added: 2019/08/06
shelves: fiction, to-read, novels
review:

]]>
<![CDATA[Pragmatic Thinking and Learning: Refactor Your Wetware]]> 3063393 251 Andy Hunt 1934356050 Wilson 0 4.12 2008 Pragmatic Thinking and Learning: Refactor Your Wetware
author: Andy Hunt
name: Wilson
average rating: 4.12
book published: 2008
rating: 0
read at:
date added: 2019/08/06
shelves: to-read, nonfiction, science, psycology
review:

]]>
<![CDATA[Property Investment For Beginners]]> 37831867 How to pick an investment strategy that matches your skills and goals
The only three calculations you need to know to size up any deal
An overview of every major investment approach, from the most boring to the probably-not-a-good-idea-but-here-you-go-anyway
How to (safely and sustainably) stretch a limited pot of cash to build whatever size portfolio you want
...although you will need to endure some pretty shocking jokes along the way. Sorry about that.]]>
166 Rob Dix Wilson 4 economics 4.18 2013 Property Investment For Beginners
author: Rob Dix
name: Wilson
average rating: 4.18
book published: 2013
rating: 4
read at: 2018/05/27
date added: 2019/08/06
shelves: economics
review:

]]>
Turtles All the Way Down 35504431
Aza Holmes never intended to pursue the disappearance of fugitive billionaire Russell Pickett, but there¡¯s a hundred-thousand-dollar reward at stake and her Best and Most Fearless Friend, Daisy, is eager to investigate. So together, they navigate the short distance and broad divides that separate them from Pickett¡¯s son Davis.

Aza is trying. She is trying to be a good daughter, a good friend, a good student, and maybe even a good detective, while also living within the ever-tightening spiral of her own thoughts.]]>
290 John Green 0525555366 Wilson 0 to-read, fiction, novels 3.87 2017 Turtles All the Way Down
author: John Green
name: Wilson
average rating: 3.87
book published: 2017
rating: 0
read at:
date added: 2019/08/06
shelves: to-read, fiction, novels
review:

]]>
<![CDATA[Code: The Hidden Language of Computer Hardware and Software]]> 44882
Using everyday objects and familiar language systems such as Braille and Morse code, author Charles Petzold weaves an illuminating narrative for anyone who¡¯s ever wondered about the secret inner life of computers and other smart machines.

It¡¯s a cleverly illustrated and eminently comprehensible story¡ªand along the way, you¡¯ll discover you¡¯ve gained a real context for understanding today¡¯s world of PCs, digital media, and the Internet. No matter what your level of technical savvy, CODE will charm you¡ªand perhaps even awaken the technophile within.]]>
396 Charles Petzold 0735611319 Wilson 0 4.40 1999 Code: The Hidden Language of Computer Hardware and Software
author: Charles Petzold
name: Wilson
average rating: 4.40
book published: 1999
rating: 0
read at:
date added: 2019/08/06
shelves: to-read, software-architecture, science
review:

]]>
The Elements of Style 33514 105 William Strunk Jr. Wilson 4 4.15 1918 The Elements of Style
author: William Strunk Jr.
name: Wilson
average rating: 4.15
book published: 1918
rating: 4
read at: 2018/12/29
date added: 2019/08/06
shelves: business, nonfiction, productivity
review:

]]>
<![CDATA[Designing and Engineering Time: The Psychology of Time Perception in Software]]> 3436995 224 Steven C. Seow 0321509188 Wilson 0 3.43 2008 Designing and Engineering Time: The Psychology of Time Perception in Software
author: Steven C. Seow
name: Wilson
average rating: 3.43
book published: 2008
rating: 0
read at:
date added: 2019/08/06
shelves: web-design, to-read, psycology
review:

]]>
<![CDATA[Team Geek: A Software Developer's Guide to Working Well with Others]]> 14514115
In this highly entertaining book, Brian Fitzpatrick and Ben Collins-Sussman cover basic patterns and anti-patterns for working with other people, teams, and users while trying to develop software. It's valuable information from two respected software engineers whose popular video series, "Working with Poisonous People," has attracted hundreds of thousands of viewers.

You'll learn how to deal with imperfect people--those irrational and unpredictable beings--in the course of your work. And you'll discover why playing well with others is at least as important as having great technical skills. By internalizing the techniques in this book, you'll get more software written, be more influential, be happier in your career.]]>
191 Brian W. Fitzpatrick 1449302440 Wilson 4 software-projects, business 3.96 2012 Team Geek: A Software Developer's Guide to Working Well with Others
author: Brian W. Fitzpatrick
name: Wilson
average rating: 3.96
book published: 2012
rating: 4
read at: 2019/03/04
date added: 2019/08/06
shelves: software-projects, business
review:

]]>
<![CDATA[The Nature of Software Development: Keep It Simple, Make It Valuable, Build It Piece by Piece]]> 23333088 180 Ron Jeffries 1941222374 Wilson 5 Review

Concise and easy to read book on how to tackle the complexity of building working software into a simple process.

Notes

- We can build a walking path among the lava floor of software development, in order to keep focused, simplify the intention even if the implementation is complex and be able to get back to a known state if we ever get lost.
- Sometimes delivering something small makes sense, and then pivoting if it didn¡¯t deliver value or iterating if it did.
- We must see and understand all the pieces in order to not deliver non-value features and delivering the ones we should.
- Feature value is the height and cost if the width, we strive for the right ratio.
- Don¡¯t always discard a high cost feature for several low cost ones, sometimes a 5 carat diamonds is not worth the same as five one carat ones.
- Value is the main goal, if switching products is more valuable than continue adding to the existing, assess how a product switch impacts the people involved, or if we can add to a portfolio instead of a complete new product.

¡ª

- Handoffs require scheduling and cause delays.
- ¡°Plans are useless, but planning is indispensable¡±.
- A too detailed plan wastes time and create confusion, still, planning is important.
- Software people are bad at estimating cause humans are bad at estimating.
- Time and budget for the first features cause we often deliver the bulk of the work (which is the most important part) ahead of schedule.
- Yesterday¡¯s weather: when planning, expect to do In the next iteration as much as your did in the last one (Martin Fowler and Kent Beck).
- The goal is not to get good estimates but to do good work at a consistent pace.
- Break down stories as small as possible, even down to a single test, then, estimating can be a matter of looking at things done.
- Planning with ¡°stretch goals¡± is destructive, cause the team will unconsciously hurry up and try to squeeze in that extra feature by half-baking the previous one, it¡¯s devastatingly destructive.
- Maybe instead of trying to estimate better, try to get better at breaking down stories into smaller ones.
- Estimation tends to focus on cost, not value.

¡ª

- There's a difference between apparent progress and real progress, features are done when they're really done, not cause some report apparently shows progress.
- Eliminate test-fix finish: the end of each feature cannot be a case of testing and fixing bug after bug until we get it right, features must be nearly bug free.
- A good design foundation means less defects, techniques to improve the design are easy to learn, also easy to forget as we move along.
- Build foundation and features in parallel.
- Building a complete design first reduces the shippable features by the deadline, we don't know how fast we'll move, reduces management guidance ability since you cannot guide until you've working features.
- Building each feature to its full design first also means fewer deliveries.
- Strive for MVF (minimum viable features) and refine in multiple iterations.
- Small, incremental and refining iterations mean we're always making the product a bit better and always have the best possible product at any given time, so if we wanted, could even go to market before due date.

¡ª

- We cannot work effectively in a world of defects, they reduce the line of apparent progress.
- Takes longer to find a problem and fix it than to prevent it, it's why TDD is so effective.
- Testing and refactoring (improving the design) work together to deliver features.
- Value is what you want.
- More often than not, what you value is not measurable, if it is, and you don't agree with the numbers, throw out the numbers and prioritise features you feel create more value.
- For almost every product, we don't really know the numbers beforehand.

¡ª

- Our job isn't to follow a plan but to steer the course for the best result.
- Autonomous teams that manage themselves, priorities being set by Product Owners, team and stakeholder; doesn't mean that managers will go out of a job, means more work for them cause they can create other teams.
- Management still handles staffing, budget decisions, vision. Kind of like a coach on a sports team.
* Providing general organisation, allocating people and money to work, selecting the PO and possibly some team members.
* Ideally, the PO selects the core team members, and the whole team selects the rest.
- Hiring decisions come from management, suggestions and who to hire come from the team.
- Rather than asking teams to increase velocity, check what's slowing the team down and could be improved.
- We usually stop refactoring when there's too much pressure.

¡ª

- If we have one team delivering features at Agile speed, often times we don't need to scale Agile into more teams since customers may not be able to concurrently absorb more features than that.
- Agile teams communicate by writing automated tests, it helps preventing getting in each other's way.
- Try to divide large efforts into feature teams.]]>
4.08 2015 The Nature of Software Development: Keep It Simple, Make It Valuable, Build It Piece by Piece
author: Ron Jeffries
name: Wilson
average rating: 4.08
book published: 2015
rating: 5
read at: 2018/03/29
date added: 2019/08/06
shelves: software-projects, favourites, business
review:
Review

Concise and easy to read book on how to tackle the complexity of building working software into a simple process.

Notes

- We can build a walking path among the lava floor of software development, in order to keep focused, simplify the intention even if the implementation is complex and be able to get back to a known state if we ever get lost.
- Sometimes delivering something small makes sense, and then pivoting if it didn¡¯t deliver value or iterating if it did.
- We must see and understand all the pieces in order to not deliver non-value features and delivering the ones we should.
- Feature value is the height and cost if the width, we strive for the right ratio.
- Don¡¯t always discard a high cost feature for several low cost ones, sometimes a 5 carat diamonds is not worth the same as five one carat ones.
- Value is the main goal, if switching products is more valuable than continue adding to the existing, assess how a product switch impacts the people involved, or if we can add to a portfolio instead of a complete new product.

¡ª

- Handoffs require scheduling and cause delays.
- ¡°Plans are useless, but planning is indispensable¡±.
- A too detailed plan wastes time and create confusion, still, planning is important.
- Software people are bad at estimating cause humans are bad at estimating.
- Time and budget for the first features cause we often deliver the bulk of the work (which is the most important part) ahead of schedule.
- Yesterday¡¯s weather: when planning, expect to do In the next iteration as much as your did in the last one (Martin Fowler and Kent Beck).
- The goal is not to get good estimates but to do good work at a consistent pace.
- Break down stories as small as possible, even down to a single test, then, estimating can be a matter of looking at things done.
- Planning with ¡°stretch goals¡± is destructive, cause the team will unconsciously hurry up and try to squeeze in that extra feature by half-baking the previous one, it¡¯s devastatingly destructive.
- Maybe instead of trying to estimate better, try to get better at breaking down stories into smaller ones.
- Estimation tends to focus on cost, not value.

¡ª

- There's a difference between apparent progress and real progress, features are done when they're really done, not cause some report apparently shows progress.
- Eliminate test-fix finish: the end of each feature cannot be a case of testing and fixing bug after bug until we get it right, features must be nearly bug free.
- A good design foundation means less defects, techniques to improve the design are easy to learn, also easy to forget as we move along.
- Build foundation and features in parallel.
- Building a complete design first reduces the shippable features by the deadline, we don't know how fast we'll move, reduces management guidance ability since you cannot guide until you've working features.
- Building each feature to its full design first also means fewer deliveries.
- Strive for MVF (minimum viable features) and refine in multiple iterations.
- Small, incremental and refining iterations mean we're always making the product a bit better and always have the best possible product at any given time, so if we wanted, could even go to market before due date.

¡ª

- We cannot work effectively in a world of defects, they reduce the line of apparent progress.
- Takes longer to find a problem and fix it than to prevent it, it's why TDD is so effective.
- Testing and refactoring (improving the design) work together to deliver features.
- Value is what you want.
- More often than not, what you value is not measurable, if it is, and you don't agree with the numbers, throw out the numbers and prioritise features you feel create more value.
- For almost every product, we don't really know the numbers beforehand.

¡ª

- Our job isn't to follow a plan but to steer the course for the best result.
- Autonomous teams that manage themselves, priorities being set by Product Owners, team and stakeholder; doesn't mean that managers will go out of a job, means more work for them cause they can create other teams.
- Management still handles staffing, budget decisions, vision. Kind of like a coach on a sports team.
* Providing general organisation, allocating people and money to work, selecting the PO and possibly some team members.
* Ideally, the PO selects the core team members, and the whole team selects the rest.
- Hiring decisions come from management, suggestions and who to hire come from the team.
- Rather than asking teams to increase velocity, check what's slowing the team down and could be improved.
- We usually stop refactoring when there's too much pressure.

¡ª

- If we have one team delivering features at Agile speed, often times we don't need to scale Agile into more teams since customers may not be able to concurrently absorb more features than that.
- Agile teams communicate by writing automated tests, it helps preventing getting in each other's way.
- Try to divide large efforts into feature teams.
]]>
<![CDATA[The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win]]> 17255186
The company's new IT initiative, code named Phoenix Project, is critical to the future of Parts Unlimited, but the project is massively over budget and very late. The CEO wants Bill to report directly to him and fix the mess in ninety days or else Bill's entire department will be outsourced.

With the help of a prospective board member and his mysterious philosophy of The Three Ways, Bill starts to see that IT work has more in common with manufacturing plant work than he ever imagined. With the clock ticking, Bill must organize work flow streamline interdepartmental communications, and effectively serve the other business functions at Parts Unlimited.

In a fast-paced and entertaining style, three luminaries of the DevOps movement deliver a story that anyone who works in IT will recognize. Readers will not only learn how to improve their own IT organizations, they'll never view IT the same way again.]]>
345 Gene Kim 0988262592 Wilson 4 4.23 2013 The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
author: Gene Kim
name: Wilson
average rating: 4.23
book published: 2013
rating: 4
read at: 2019/07/12
date added: 2019/08/06
shelves: software-projects, fiction, novels
review:

]]>
<![CDATA[Raising Your Spirited Child: A Guide for Parents Whose Child Is More Intense, Sensitive, Perceptive, Persistent, and Energetic]]> 24039434 -- James Cameron, Ph.D., executive director, The Preventive Ounce, Berkeley, CaliforniaThe essential companion workbook to the national bestseller "Raising Your Spirited Child, " In this companion workbook, Mary Sheedy Kurcinka brings readers into her world-famous workshops, where she offers parents and educators insights, emotional support and proven strategies for dealing with spirited children. The key word that distinguishes spirited children from other children is "more" -- more intense, more persistent, more sensitive and more uncomfortable with change. Through exercises, observations and dialogue from actual groups, Kurcinka helps readers learn to identify the triggers that lead to tantrums and challenging behaviors. Included are clues to help you identify the little things that can make or break a day, tips for profiling your child's temperament and your own, cues that indicate intensity is rising, successful strategies for reducing and eliminating power struggles.

By combining the intuition and compassion gained from parenting a spirited child with the wisdom of an expert who has worked with thousands of families, Mary Sheedy Kurcinka helps parents and educators view their unique challenge with perseverance, flexibility, sensitivity, and, most of all, enjoyment.]]>
528 Mary Sheedy Kurcinka 0062403060 Wilson 0 parenting, to-read, psycology 4.36 1991 Raising Your Spirited Child: A Guide for Parents Whose Child Is More Intense, Sensitive, Perceptive, Persistent, and Energetic
author: Mary Sheedy Kurcinka
name: Wilson
average rating: 4.36
book published: 1991
rating: 0
read at:
date added: 2019/08/06
shelves: parenting, to-read, psycology
review:

]]>
<![CDATA[1-2-3 Magic: Gentle 3-Step Child & Toddler Discipline for Calm, Effective, and Happy Parenting (Positive Parenting Guide for Raising Happy Kids)]]> 28697917 ? Sibling rivalry
? Reluctance to do chores or pick up
? Refusing to to bed or getting up in the middle of the night Parents all over the world have rebooted their families and their lives with 1-2-3 Magic . Learn the effective way to be a better, more loving, and more consistent parent, and start enjoying your child again¡ªtoday!]]>
358 Thomas W. Phelan 1492629898 Wilson 4 parenting, psycology
As someone mentioned to us: "our kids cannot know we've no idea what we're doing", and we've been applying a no-spanking policy but in order to keep pragmatic, we need all the help we can get. As the author states it, spanking is a parent tantrum, a side effect of our own frustration.

Having said that, I like the idea of 1-2-3 counting but not for every situation, cause of course, I wouldn't like to tell my 5 year old daughter multiple times to stop misbehaving, sometimes I'd like to speak only once, or not at all, which is why I implement other tactics as well.

The book does feel a bit bloated but I think this is the case for many parenting books since I think they try to shoot for a wider audience and include use-cases that may not apply to you, or include several anecdotes in order to present real-world scenarios, in my opinion, I'd rather keep the book lean and exclude those. I'm giving it 4 stars, nevertheless, cause even though I'm not 100% onboard with the concept, it's a good piece of advice.]]>
4.06 1995 1-2-3 Magic: Gentle 3-Step Child & Toddler Discipline for Calm, Effective, and Happy Parenting (Positive Parenting Guide for Raising Happy Kids)
author: Thomas W. Phelan
name: Wilson
average rating: 4.06
book published: 1995
rating: 4
read at: 2018/03/29
date added: 2019/08/06
shelves: parenting, psycology
review:
My wife and I have been picking up parenting books describing different approaches to sort of have more tricks in our tool belt. I don't think there's a silver bullet approach to raise kids so it helps having different options to pull out on different situations.

As someone mentioned to us: "our kids cannot know we've no idea what we're doing", and we've been applying a no-spanking policy but in order to keep pragmatic, we need all the help we can get. As the author states it, spanking is a parent tantrum, a side effect of our own frustration.

Having said that, I like the idea of 1-2-3 counting but not for every situation, cause of course, I wouldn't like to tell my 5 year old daughter multiple times to stop misbehaving, sometimes I'd like to speak only once, or not at all, which is why I implement other tactics as well.

The book does feel a bit bloated but I think this is the case for many parenting books since I think they try to shoot for a wider audience and include use-cases that may not apply to you, or include several anecdotes in order to present real-world scenarios, in my opinion, I'd rather keep the book lean and exclude those. I'm giving it 4 stars, nevertheless, cause even though I'm not 100% onboard with the concept, it's a good piece of advice.
]]>
<![CDATA[The Mythical Man-Month: Essays on Software Engineering]]> 13629 The added chapters contain (1) a crisp condensation of all the propositions asserted in the original book, including Brooks' central argument in The Mythical Man-Month: that large programming projects suffer management problems different from small ones due to the division of labor; that the conceptual integrity of the product is therefore critical; and that it is difficult but possible to achieve this unity; (2) Brooks' view of these propositions a generation later; (3) a reprint of his classic 1986 paper "No Silver Bullet"; and (4) today's thoughts on the 1986 assertion, "There will be no silver bullet within ten years."

]]>
322 Frederick P. Brooks Jr. 0201835959 Wilson 4 4.00 1975 The Mythical Man-Month: Essays on Software Engineering
author: Frederick P. Brooks Jr.
name: Wilson
average rating: 4.00
book published: 1975
rating: 4
read at: 2017/07/10
date added: 2019/08/06
shelves: software-projects, business, nonfiction
review:
Great book, some of the concepts feel dated but even though, most of the books topics can still be applied to today's software development projects, like adding personnel to an already late project won't speed it up and can actually make it later and the main take away in my opinion: men and months are not interchangeable when it comes to any type of work where communication is key.
]]>
<![CDATA[Peopleware: Productive Projects and Teams]]> 18895165 Peopleware asserts that most software development projects fail because of failures within the team running them. This strikingly clear, direct book is written for software development-team leaders and managers, but it's filled with enough commonsense wisdom to appeal to anyone working in technology. Authors Tom DeMarco and Timothy Lister include plenty of illustrative, often amusing anecdotes; their writing is light, conversational, and filled with equal portions of humor and wisdom, and there is a refreshing absence of "new age" terms and multistep programs. The advice is presented straightforwardly and ranges from simple issues of prioritization to complex ways of engendering harmony and productivity in your team. Peopleware is a short read that delivers more than many books on the subject twice its size.]]> 354 DeMarco Tom Wilson 4 4.28 1987 Peopleware: Productive Projects and Teams
author: DeMarco Tom
name: Wilson
average rating: 4.28
book published: 1987
rating: 4
read at: 2017/09/05
date added: 2019/08/06
shelves: software-projects, business, nonfiction
review:

]]>
<![CDATA[No-Drama Discipline: The Whole-Brain Way to Calm the Chaos and Nurture Your Child's Developing Mind]]> 24393771
A breakfast bowl gets thrown across the kitchen, splattering milk and cereal all over the wall. Or one of your kids threatens a younger sibling. Or you get a call from the headteacher¡¯s office for the third time this month. What do you do?

No-Drama Discipline provides an effective, compassionate road map for dealing with such tantrums, tensions, and tears ¨C without causing a scene. Based on recent discoveries about the brain that give us deep insights into the children we care for, what they need, and how to discipline them in ways that foster optimal development, this book offers a ¡®relational¡¯ approach that builds on children¡¯s innate desire to please their parents and get along well with others.

Complete with candid stories and playful illustrations that bring the authors¡¯ suggestions to life, No-Drama Discipline presents clear messages in a practical and inviting format. Using these techniques, you can discipline your children in a way that¡¯s high on relationship-building, high on respect, and low on drama and conflict. As a result, your life as a parent will be easier, and your parenting will become more effective. And more importantly, you¡¯ll create connections in your children¡¯s brains to build emotional and social skills that will serve them now and throughout their entire life ¨C all while strengthening your relationship with them.]]>
288 Daniel J. Siegel 1922247561 Wilson 3 parenting, psycology
Its suggestions are good but I find two caveats with this piece:

1) It's incredibly over-sized, it feels like the same message is repeated over an over again several times.
2) The idea of "connecting and redirecting" is a great discipline approach but I don't see it working for me in many situations since I've tried a similar approach over the years with my child which has often lead to no so great results.

Following are my takeaways from the book:

- Discipline in this context doesn't mean to punish but to teach.
- Misbehaviour mostly happens cause a child isn't able to regulate her big feelings which leads to her making not so good decisions.
- Redirect, don't try to discipline while your child is on an emotional state, engage the upstairs brain which you can reason with, and not the downstairs brain which is more aggressive.
- Neurons that fire together, wire together. We want our kids to know that bad decisions lead to bad feelings like guilt since we naturally avoid bad sensations.
- Connect with your child when disciplining her, comfort her and feel her, try to kneel and calmly talk below her eye level. Connection moves a child from reactivity to receptivity.
- Address misbehaviours right away, otherwise they won't know why they're being disciplined.
- Be realistic, don't take your child with you grocery shopping or something for hours and expect her to just seat there quietly. Kids get frustrated, bored and tired as also grown ups do.
- Make sure they know what you expect from them, they should be aware of the consequences of their actions. Be consistent but not rigid.
- Avoid fear-based parenting which only arguable helps you on the short term, you want your children to follow the rules even when you're not there.]]>
4.05 2014 No-Drama Discipline: The Whole-Brain Way to Calm the Chaos and Nurture Your Child's Developing Mind
author: Daniel J. Siegel
name: Wilson
average rating: 4.05
book published: 2014
rating: 3
read at: 2017/09/17
date added: 2019/08/06
shelves: parenting, psycology
review:
Nice book about parenting with an emphasis on understanding your child brain in order to address bad behaviours.

Its suggestions are good but I find two caveats with this piece:

1) It's incredibly over-sized, it feels like the same message is repeated over an over again several times.
2) The idea of "connecting and redirecting" is a great discipline approach but I don't see it working for me in many situations since I've tried a similar approach over the years with my child which has often lead to no so great results.

Following are my takeaways from the book:

- Discipline in this context doesn't mean to punish but to teach.
- Misbehaviour mostly happens cause a child isn't able to regulate her big feelings which leads to her making not so good decisions.
- Redirect, don't try to discipline while your child is on an emotional state, engage the upstairs brain which you can reason with, and not the downstairs brain which is more aggressive.
- Neurons that fire together, wire together. We want our kids to know that bad decisions lead to bad feelings like guilt since we naturally avoid bad sensations.
- Connect with your child when disciplining her, comfort her and feel her, try to kneel and calmly talk below her eye level. Connection moves a child from reactivity to receptivity.
- Address misbehaviours right away, otherwise they won't know why they're being disciplined.
- Be realistic, don't take your child with you grocery shopping or something for hours and expect her to just seat there quietly. Kids get frustrated, bored and tired as also grown ups do.
- Make sure they know what you expect from them, they should be aware of the consequences of their actions. Be consistent but not rigid.
- Avoid fear-based parenting which only arguable helps you on the short term, you want your children to follow the rules even when you're not there.
]]>
<![CDATA[Factfulness: Ten Reasons We're Wrong About the World ¨C and Why Things Are Better Than You Think]]> 34890015 Factfulness: The stress-reducing habit of only carrying opinions for which you have strong supporting facts.

When asked simple questions about global trends¡ªwhat percentage of the world¡¯s population live in poverty; why the world¡¯s population is increasing; how many girls finish school¡ªwe systematically get the answers wrong. So wrong that a chimpanzee choosing answers at random will consistently outguess teachers, journalists, Nobel laureates, and investment bankers.

In Factfulness, Professor of International Health and global TED phenomenon Hans Rosling, together with his two long-time collaborators, Anna and Ola, offers a radical new explanation of why this happens. They reveal the ten instincts that distort our perspective¡ªfrom our tendency to divide the world into two camps (usually some version of us and them) to the way we consume media (where fear rules) to how we perceive progress (believing that most things are getting worse).

Our problem is that we don¡¯t know what we don¡¯t know, and even our guesses are informed by unconscious and predictable biases.

It turns out that the world, for all its imperfections, is in a much better state than we might think. That doesn¡¯t mean there aren¡¯t real concerns. But when we worry about everything all the time instead of embracing a worldview based on facts, we can lose our ability to focus on the things that threaten us most.

Inspiring and revelatory, filled with lively anecdotes and moving stories, Factfulness is an urgent and essential book that will change the way you see the world and empower you to respond to the crises and opportunities of the future. ]]>
342 Hans Rosling 1473637465 Wilson 0 4.34 2018 Factfulness: Ten Reasons We're Wrong About the World ¨C and Why Things Are Better Than You Think
author: Hans Rosling
name: Wilson
average rating: 4.34
book published: 2018
rating: 0
read at:
date added: 2019/08/05
shelves: to-read, nonfiction, psycology, science, economics, history
review:

]]>
<![CDATA[How to Change Your Mind: The New Science of Psychedelics]]> 41728446 'Reminds us that the mind is the greatest mystery in the universe' Yuval Noah Harari, Guardian, Books of the Year

Could psychedelic drugs change our worldview? Join Michael Pollan on a journey to the frontiers of the human mind.

Diving deep into an extraordinary world - from shamans and magic mushroom hunts to the pioneering labs mapping our brains - and putting himself forward as a guinea-pig, Michael Pollan has written a remarkable history of psychedelics and a compelling portrait of the new generation of scientists fascinated by the implications of these drugs. How to Change Your Mind is a report from what could very well be the future of consciousness.

'A sweeping and often thrilling chronicle of the history of psychedelics, all interwoven with Pollan's adventures as a psychedelic novice. This is a serious work of history and science, but also one in which the author, under the influence of toad venom, becomes convinced he's giving birth to himself' Oliver Burkeman, Guardian

'A mind-altering book ... full of transformations' Richard Godwin, Evening Standard

'An irresistible blend of history, research and personal experience. In terms of the psychedelic wave, the book is the big kahuna, the Big Bang moment for a movement that is gathering force' John McKenna, Irish Times

'Entertaining and engrossing' Paul Laity, Financial Times

'Deeply absorbing, wise and beautifully written' Mick Brown, Literary Review

'An astounding book' Andrew Sullivan, New York Magazine]]>
480 Michael Pollan 0141985135 Wilson 0 4.40 2018 How to Change Your Mind: The New Science of Psychedelics
author: Michael Pollan
name: Wilson
average rating: 4.40
book published: 2018
rating: 0
read at:
date added: 2019/08/05
shelves: to-read, nonfiction, psycology, science, philosophy
review:

]]>
BAD SAMARITANS 3673899
"Lucid, deeply informed, and enlivened with striking illustrations, this penetrating study could be entitled 'Economics in the Real World.' Chang reveals the yawning gap between standard doctrines concerning economic development and what really has taken place from the origins of the industrial revolution until today. His incisive analysis shows how, and why, prescriptions based on reigning doctrines have caused severe harm, particularly to the most vulnerable and defenseless, and are likely to continue to do so."--Noam Chomsky]]>
276 Ha-Joon Chang 1905211376 Wilson 0 4.25 2007 BAD SAMARITANS
author: Ha-Joon Chang
name: Wilson
average rating: 4.25
book published: 2007
rating: 0
read at:
date added: 2019/08/05
shelves: to-read, business, economics, history, nonfiction
review:

]]>
<![CDATA[23 Things They Don't Tell You about Capitalism]]> 10733801 Ha-Joon Chang's 23 Things They Don't Tell You About Capitalism turns received economic wisdom on its head to show you how the world really works.

In this revelatory book, Ha-Joon Chang destroys the biggest myths of our times and shows us an alternative view of the world, including:
There's no such thing as a 'free' market
Globalization isn't making the world richer
We don't live in a digital world - the washing machine has changed lives more than the internet
Poor countries are more entrepreneurial than rich ones
Higher paid managers don't produce better results
We don't have to accept things as they are any longer. Ha-Joon Chang is here to show us there's a better way.

'Lively, accessible and provocative ... read this book'
??Sunday Times

'A witty and timely debunking of some of the biggest myths surrounding the global economy'
??Observer

'The new kid on the economics block ... Chang's iconoclastic attitude has won him fans'
??Independent on Sunday

'Lucid ... audacious ... increasingly influential ... will provoke physical symptoms of revulsion if you are in any way involved in high finance'

Guardian

'Important ... persuasive ... an engaging case for a more caring era of globalization'
??Financial Times

'A must-read ... incisive and entertaining'
??New Statesman Books of the Year

Ha-Joon Chang is a Reader in the Political Economy of Development at the University of Cambridge. He is author of Kicking Away the Ladder: Development Strategy in Historical Perspective, which won the 2003 Gunnar Myrdal Prize, and Bad Samaritans: Rich Nations, Poor Policies and the Threat to the Developing World. Since the beginning of the 2008 economic crisis, he has been a regular contributor to the Guardian, and a vocal critic of the failures of our economic system.]]>
286 Ha-Joon Chang 0141047976 Wilson 0 3.92 2010 23 Things They Don't Tell You about Capitalism
author: Ha-Joon Chang
name: Wilson
average rating: 3.92
book published: 2010
rating: 0
read at:
date added: 2019/08/05
shelves: to-read, business, economics, nonfiction, history
review:

]]>
<![CDATA[Economics: The User's Guide (Pelican Books)]]> 20702125 23 Things They Don't Tell You About Capitalism, Cambridge economist Ha-Joon Chang brilliantly debunked many of the predominant myths of neoclassical economics. Now, in an entertaining and accessible primer, he explains how the global economy actually works¡ªin real-world terms. Writing with irreverent wit, a deep knowledge of history, and a disregard for conventional economic pieties, Chang offers insights that will never be found in the textbooks.

Unlike many economists, who present only one view of their discipline,?Chang introduces a wide range of economic theories, from classical to Keynesian, revealing how each has its strengths and weaknesses, and why? there is no one way to explain economic behavior. Instead, by ignoring the received wisdom and exposing the myriad forces that shape our financial world, Chang gives us the tools we need to understand our increasingly global and interconnected world often driven by economics. From the future of the Euro, inequality in China, or the condition of the American manufacturing industry here in the United States¡ªEconomics: The User¡¯s Guide is a concise and expertly crafted guide to economic fundamentals that offers a clear and accurate picture of the global economy and how and why it affects our daily lives.]]>
503 Ha-Joon Chang 0718197038 Wilson 0 4.20 2014 Economics: The User's Guide (Pelican Books)
author: Ha-Joon Chang
name: Wilson
average rating: 4.20
book published: 2014
rating: 0
read at:
date added: 2019/08/05
shelves: to-read, business, nonfiction, history, economics
review:

]]>
<![CDATA[It Doesn't Have to Be Crazy at Work]]> 41019110 Jason Fried and David Heinemeier Hansson, the authors of the New York Times bestseller Rework, are back with a manifesto to combat all your modern workplace worries and fears.

It Doesn¡¯t Have to Be Crazy at Work is a direct successor to Rework, the instant bestseller that showed readers a new path to working effectively. Now Fried and Heinemeier Hansson have returned with a new strategy for the ideal company culture ¨C what they call ¡°the calm company¡±. It is a direct attack on the chaos, anxiety and stress that plagues millions of workplaces and billions of people working their day jobs.

Working to breaking point with long hours, excessive workload, and a lack of sleep have become a badge of honour for many people these days, when it should be a mark of stupidity. This isn¡¯t just a problem for large organisations; individuals, contractors and solopreneurs are burning themselves out in the very same way. As the authors reveal, the answer isn¡¯t more hours. Rather, it¡¯s less waste and fewer things that induce distraction, always-on anxiety and stress.

It is time to stop celebrating crazy and start celebrating calm.

Fried and Hansson have the proof to back up their argument. "Calm" has been the cornerstone of their company¡¯s culture since Basecamp began twenty years ago. Destined to become the management guide for the next generation, It Doesn't Have to Be Crazy at Work is a practical and inspiring distillation of their insights and experiences. It isn¡¯t a book telling you what to do. It¡¯s a book showing you what they¡¯ve done¡ªand how any manager or executive no matter the industry or size of the company, can do it too.

]]>
245 Jason Fried 0008323453 Wilson 0 business, nonfiction, to-read 4.26 2018 It Doesn't Have to Be Crazy at Work
author: Jason Fried
name: Wilson
average rating: 4.26
book published: 2018
rating: 0
read at:
date added: 2019/08/01
shelves: business, nonfiction, to-read
review:

]]>
<![CDATA[A Philosophy of Software Design]]> 39996759 190 John Ousterhout 1732102201 Wilson 0 4.18 2018 A Philosophy of Software Design
author: John Ousterhout
name: Wilson
average rating: 4.18
book published: 2018
rating: 0
read at:
date added: 2019/07/17
shelves: to-read, software-architecture, software-projects, nonfiction
review:

]]>
<![CDATA[Cooked: A Natural History of Transformation]]> 17368465 Cooked, Michael Pollan explores the previously uncharted territory of his own kitchen. Here, he discovers the enduring power of the four classical elements - fire, water, air, and earth - to transform the stuff of nature into delicious things to eat and drink. Apprenticing himself to a succession of culinary masters, Pollan learns how to grill with fire, cook with liquid, bake bread, and ferment everything from cheese to beer. In the course of his journey, he discovers that the cook occupies a special place in the world, standing squarely between nature and culture. Both realms are transformed by cooking, and so, in the process, is the cook.

Each section of Cooked tracks Pollan's effort to master a single classic recipe using one of the four elements. A North Carolina barbecue pit master tutors him in the primal magic of fire; a Chez Panisse-trained cook schools him in the art of braising; a celebrated baker teaches him how air transforms grain and water into a fragrant loaf of bread; and finally, several mad-genius "fermentos" (a tribe that includes brewers, cheese makers, and all kinds of picklers) reveal how fungi and bacteria can perform the most amazing alchemies of all. The listener learns alongside Pollan, but the lessons move beyond the practical to become an investigation of how cooking involves us in a web of social and ecological relationships: with plants and animals, the soil, farmers, our history and culture, and, of course, the people our cooking nourishes and delights. Cooking, above all, connects us.

The effects of not cooking are similarly far reaching. Relying upon corporations to process our food means we consume huge quantities of fat, sugar, and salt; disrupt an essential link to the natural world; and weaken our relationships with family and friends. In fact, Cooked argues, taking back control of cooking may be the single most important step anyone can take to help make the American food system healthier and more sustainable. Reclaiming cooking as an act of enjoyment and self-reliance, learning to perform the magic of these everyday transformations, opens the door to a more nourishing life.]]>
480 Michael Pollan 1101605464 Wilson 0 4.27 2013 Cooked: A Natural History of Transformation
author: Michael Pollan
name: Wilson
average rating: 4.27
book published: 2013
rating: 0
read at:
date added: 2019/07/17
shelves: to-read, nonfiction, science, history
review:

]]>
<![CDATA[Flow: The Psychology of Optimal Experience]]> 66354 303 Mih¨¢ly Cs¨ªkszentmih¨¢lyi 0060920432 Wilson 5 4.11 1990 Flow: The Psychology of Optimal Experience
author: Mih¨¢ly Cs¨ªkszentmih¨¢lyi
name: Wilson
average rating: 4.11
book published: 1990
rating: 5
read at: 2019/07/02
date added: 2019/07/02
shelves: nonfiction, psycology, productivity, business, dom-rep-easter-2019, favourites
review:

]]>
<![CDATA[Behave: The Biology of Humans at Our Best and Worst]]> 31170723 Why do we do the things we do?

More than a decade in the making, this game-changing book is Robert Sapolsky's genre-shattering attempt to answer that question as fully as perhaps only he could, looking at it from every angle. Sapolsky's storytelling concept is delightful but it also has a powerful intrinsic logic: he starts by looking at the factors that bear on a person's reaction in the precise moment a behavior occurs, and then hops back in time from there, in stages, ultimately ending up at the deep history of our species and its evolutionary legacy.

And so the first category of explanation is the neurobiological one. A behavior occurs¡ªwhether an example of humans at our best, worst, or somewhere in between. What went on in a person's brain a second before the behavior happened? Then Sapolsky pulls out to a slightly larger field of vision, a little earlier in time: What sight, sound, or smell caused the nervous system to produce that behavior? And then, what hormones acted hours to days earlier to change how responsive that individual is to the stimuli that triggered the nervous system? By now he has increased our field of vision so that we are thinking about neurobiology and the sensory world of our environment and endocrinology in trying to explain what happened.

Sapolsky keeps going: How was that behavior influenced by structural changes in the nervous system over the preceding months, by that person's adolescence, childhood, fetal life, and then back to his or her genetic makeup? Finally, he expands the view to encompass factors larger than one individual. How did culture shape that individual's group, what ecological factors millennia old formed that culture? And on and on, back to evolutionary factors millions of years old.

The result is one of the most dazzling tours d'horizon of the science of human behavior ever attempted, a majestic synthesis that harvests cutting-edge research across a range of disciplines to provide a subtle and nuanced perspective on why we ultimately do the things we do ... for good and for ill. Sapolsky builds on this understanding to wrestle with some of our deepest and thorniest questions relating to tribalism and xenophobia, hierarchy and competition, morality and free will, and war and peace. Wise, humane, often very funny, Behave is a towering achievement, powerfully humanizing, and downright heroic in its own right.]]>
790 Robert M. Sapolsky 1594205078 Wilson 0 4.39 2017 Behave: The Biology of Humans at Our Best and Worst
author: Robert M. Sapolsky
name: Wilson
average rating: 4.39
book published: 2017
rating: 0
read at:
date added: 2019/06/13
shelves: to-read, nonfiction, psycology, science
review:

]]>
<![CDATA[A Guide to the Good Life: The Ancient Art of Stoic Joy]]> 5617966 A Guide to the Good Life, William B. Irvine plumbs the wisdom of Stoic philosophy, one of the most popular and successful schools of thought in ancient Rome, and shows how its insight and advice are still remarkably applicable to modern lives.
In A Guide to the Good Life, Irvine offers a refreshing presentation of Stoicism, showing how this ancient philosophy can still direct us toward a better life. Using the psychological insights and the practical techniques of the Stoics, Irvine offers a roadmap for anyone seeking to avoid the feelings of chronic dissatisfaction that plague so many of us. Irvine looks at various Stoic techniques for attaining tranquility and shows how to put these techniques to work in our own life. As he does so, he describes his own experiences practicing Stoicism and offers valuable first-hand advice for anyone wishing to live better by following in the footsteps of these ancient philosophers. Readers learn how to minimize worry, how to let go of the past and focus our efforts on the things we can control, and how to deal with insults, grief, old age, and the distracting temptations of fame and fortune. We learn from Marcus Aurelius the importance of prizing only things of true value, and from Epictetus we learn how to be more content with what we have.
Finally, A Guide to the Good Life shows readers how to become thoughtful observers of their own life. If we watch ourselves as we go about our daily business and later reflect on what we saw, we can better identify the sources of distress and eventually avoid that pain in our life. By doing this, the Stoics thought, we can hope to attain a truly joyful life.]]>
326 William B. Irvine 0195374614 Wilson 5 4.18 2008 A Guide to the Good Life: The Ancient Art of Stoic Joy
author: William B. Irvine
name: Wilson
average rating: 4.18
book published: 2008
rating: 5
read at: 2019/05/27
date added: 2019/05/30
shelves: philosophy, psycology, nonfiction, dom-rep-easter-2019, favourites
review:

]]>
<![CDATA[A Short History of Drunkenness]]> 35074090
A Short History of Drunkenness traces humankind's love affair with booze from our primate ancestors through to Prohibition, answering every possible question along the way: What did people drink? How much? Who did the drinking? Of the many possible reasons, why? On the way, learn about the Neolithic Shamans, who drank to communicate with the spirit world (no pun intended), marvel at how Greeks got giddy and Romans got rat-arsed, and find out how bars in the Wild West were never quite like in the movies.

This is a history of the world at its inebriated best.]]>
248 Mark Forsyth 0241297680 Wilson 3 3.98 2017 A Short History of Drunkenness
author: Mark Forsyth
name: Wilson
average rating: 3.98
book published: 2017
rating: 3
read at: 2019/03/31
date added: 2019/03/31
shelves: history, nonfiction, dom-rep-easter-2019
review:

]]>
Mastery 13589182 318 Robert Greene 0670024961 Wilson 4 nonfiction, psycology 4.26 2012 Mastery
author: Robert Greene
name: Wilson
average rating: 4.26
book published: 2012
rating: 4
read at: 2019/03/29
date added: 2019/03/29
shelves: nonfiction, psycology
review:

]]>
<![CDATA[A Brief History of Thought: A Philosophical Guide to Living]]> 12082644
From the timeless wisdom of the ancient Greeks to Christianity, the Enlightenment, existentialism, and postmodernism, Luc Ferry¡¯s instant classic brilliantly and accessibly explains the enduring teachings of philosophy¡ªincluding its profound relevance to modern daily life and its essential role in achieving happiness and living a meaningful life. This lively journey through the great thinkers will enlighten every reader, young and old.]]>
304 Luc Ferry 0062074245 Wilson 0 3.92 1996 A Brief History of Thought: A Philosophical Guide to Living
author: Luc Ferry
name: Wilson
average rating: 3.92
book published: 1996
rating: 0
read at:
date added: 2019/03/28
shelves: to-read, philosophy, nonfiction, history, dom-rep-easter-2019
review:

]]>
<![CDATA[The First 90 Days: Critical Success Strategies for New Leaders at All Levels]]> 15824358 The First 90 Days has become the bestselling globally acknowledged bible of leadership and career transitions. In this updated and expanded 10th anniversary edition, internationally known leadership transition expert Michael D. Watkins gives you the keys to successfully negotiating your next move¡ªwhether you¡¯re onboarding into a new company, being promoted internally, or embarking on an international assignment.

In The First 90 Days, Watkins outlines proven strategies that will dramatically shorten the time it takes to reach what he calls the "breakeven point" when your organization needs you as much as you need the job. This new edition includes a substantial new preface by the author on the new definition of a career as a series of transitions; and notes the growing need for effective and repeatable skills for moving through these changes. As well, updated statistics and new tools make this book more reader-friendly and useful than ever.

As hundreds of thousands of readers already know, The First 90 Days is a road map for taking charge quickly and effectively during critical career transition periods¡ªwhether you are a first-time manager, a mid-career professional on your way up, or a newly minted CEO.]]>
304 Michael D. Watkins 1422188612 Wilson 0 to-read, business, nonfiction 3.84 2003 The First 90 Days: Critical Success Strategies for New Leaders at All Levels
author: Michael D. Watkins
name: Wilson
average rating: 3.84
book published: 2003
rating: 0
read at:
date added: 2019/03/09
shelves: to-read, business, nonfiction
review:

]]>
The Little Book of Talent 14480667 The Little Book of Talent is a manual for building a faster brain and a better you. It is an easy-to-use handbook of scientifically proven, field-tested methods to improve skills¡ªyour skills, your kids¡¯ skills, your organization¡¯s skills¡ªin sports, music, art, math, and business. The product of five years of reporting from the world¡¯s greatest talent hotbeds and interviews with successful master coaches, it distills the daunting complexity of skill development into 52 clear, concise directives. Whether you¡¯re age 10 or 100, whether you¡¯re on the sports field or the stage, in the classroom or the corner office, this is an essential guide for anyone who ever asked, ¡°How do I get better?¡±]]> 192 Daniel Coyle 1847946798 Wilson 4 4.26 2012 The Little Book of Talent
author: Daniel Coyle
name: Wilson
average rating: 4.26
book published: 2012
rating: 4
read at: 2019/03/09
date added: 2019/03/09
shelves: psycology, business, nonfiction, productivity
review:

]]>
<![CDATA[Moonwalking with Einstein: The Art and Science of Remembering Everything]]> 6346975 The blockbuster phenomenon that charts an amazing journey of the mind while revolutionizing our concept of memory

An instant bestseller that is poised to become a classic, Moonwalking with Einstein recounts Joshua Foer's yearlong quest to improve his memory under the tutelage of top "mental athletes." He draws on cutting-edge research, a surprising cultural history of remembering, and venerable tricks of the mentalist's trade to transform our understanding of human memory. From the United States Memory Championship to deep within the author's own mind, this is an electrifying work of journalism that reminds us that, in every way that matters, we are the sum of our memories.]]>
307 Joshua Foer 159420229X Wilson 4 3.86 2011 Moonwalking with Einstein: The Art and Science of Remembering Everything
author: Joshua Foer
name: Wilson
average rating: 3.86
book published: 2011
rating: 4
read at: 2019/02/26
date added: 2019/02/26
shelves: science, nonfiction, psycology, productivity
review:

]]>
<![CDATA[The Tangled Web: A Guide to Securing Modern Web Applications]]> 11553604
¡ªTavis Ormandy, Google Inc.

Modern web applications are built on a tangle of technologies that have been developed over time and then haphazardly pieced together. Every piece of the web application stack, from HTTP requests to browser-side scripts, comes with important yet subtle security consequences. To keep users safe, it is essential for developers to confidently navigate this landscape.

In The Tangled Web, Michal Zalewski, one of the world's top browser security experts, offers a compelling narrative that explains exactly how browsers work and why they're fundamentally insecure. Rather than dispense simplistic advice on vulnerabilities, Zalewski examines the entire browser security model, revealing weak points and providing crucial information for shoring up web application security. You'll learn how to:


Perform common but surprisingly complex tasks such as URL parsing and HTML sanitization Use modern security features like Strict Transport Security, Content Security Policy, and Cross-Origin Resource Sharing Leverage many variants of the same-origin policy to safely compartmentalize complex web applications and protect user credentials in case of XSS bugs Build mashups and embed gadgets without getting stung by the tricky frame navigation policy Embed or host user-supplied content without running into the trap of content sniffing For quick reference, "Security Engineering Cheat Sheets" at the end of each chapter offer ready solutions to problems you're most likely to encounter. With coverage extending as far as planned HTML5 features, The Tangled Web will help you create secure web applications that stand the test of time.]]>
320 Michal Zalewski 1593273886 Wilson 4 web-development Review

A bit dated as any 7 year old web related book, I picked it up to get a good grasp of the definition and impact of things like XSS, XSRF, Header splitting, etc.

Most of the book is still relevant but some stuff should be revalidated since they may be deprecated like XDomainRequest.

What I like about these older books concerning the web is that they're an easy read, that is, by having a bit of knowledge of some of the concepts, getting a deeper understanding is straight forward.

Notes

It Starts with a URL

- scheme://login.pwd@address:port/path ?search#fragment
- The protocol and // signal an absolute url.
- Pseudo protocols:
* view-source:http://...
* data:text/plain,somePage,inlineDocument
- Transfer-Encoding: chunked (for transmitting steam data without specifying content-length).

HTTP

- HttpOnly: cookie attribute to prevent reading from document.cookie.
- secure: only send cookie over HTTPS.
* If not, even if sets a cookie, an attacker can just wait for you to go to , inject a frame, point it to , intercept the TCP handshake and grab the cookie.
- HTTP request:
* First line: method - path - version
* Headers split into one per line, ending with a CR/LF
* Request body starts after the empty line.
- HTTP response:
* First line: version - response code - response keyword
* Headers and payload same as request structure.

HTML

- &, <, >, ', " should be escaped.
- Named entities: &gt equals > and &amp equals ampersand (for encoding/obfuscating characters including attributes).
- Documents not loaded through HTTP lack headers, causing browsers to improvise things like MIME type and charset.
* Something like this might help sometimes .
* But some may never work cause it's tot late in the rendering process like changing the document type .
- Hyperlinks target view might get access denied and open in a new window (same-origin maybe?).
* Possible values: _top, _parent, _blank, [a name].
- Forms with no action param get submitted to the document location.
* Forms with GET method are submitted with named fields as query string, plus signs are encoded like ¡°%2B¡±, and spaces are replaced by plus sign: /action?field=name+lastname&four=two%2Btwo.
* For POST the default is to include params as the request payload or body ( application/x-www-form-urlencoded).

CSS

- @charset sets the css file charset.

Content Isolation Logic

- Same-origin is based on DNS not IP.
* Susceptible to DNS rebinding: intentionally pointing DNS to a new IP.
* Browsers try to mitigate by caching DNS lookups.
- Remove subdomain from document.domain to relax same-origin.
* document.domain doesn't work for XHR.
- Content-length: payload length header which is always set by the browser.
* Could be overwritten by XHR, causing a second request to be smuggled through on keep-alive sessions as part of the 1st request body.
* So most browsers prevent modifying some headers: Content-length, Referer, User-Agent, Cookie, Origin.
- TRACE HTTP verb is banned almost everywhere, used fore debugging, allows you to trace requests hops.
- Servers still support HTTP 0.9, one-liner protocol easy to exploit.
* GET\thttp://evil.com/evil.js\n\n
* or also: GET\thttp://evil.com/evil.js\tHTTP/1.0\n\n
- Cookies are set for the domain param (and any subdomain starting from there) and the path.
- At some point you could access HttpOnly cookies through XHR: req.getResponseHeader('Set-Cookie'), may still be possible.
- Cookies can be overwritten from non HTTPS, non HttpOnly or non secure parts of your site.
- Cookies don't include protocol.

Outside of Same-Origin

- X-Frame-Options (deny or same-origin): prevent page form being framed, so it cannot be tampered with, like click hijacking or phishing.
- To mitigate keystroke redirection, browsers prevent focus switch while on keypress.
* It doesn't work completely cause attackers can roughly predict what keys will pressed next and at when based on English language, thus, making the focus switch at the right time.

Other Browser Boundaries

- 3 types of URL schemes.
* UnrestrictedL HTTP, HTTPS, FTP.
* Partly restricted: file:, data:, javascript:.
* Restricted: about:, res:, chrome: (cannot be navigated to under any circumstance).
- Third-party Cookies are used by ad sites to tag users.

Content Recognition

- Content sniffing: if Content-Type is missing, browsers will try to guess the resource type based on heuristics like the extension or payload inspection.
* HTTP specification permits sniffing only in the absence of the header.
* For malformed MYME types, browsers may still use sniffing.
- X-Content-Type-Options: nosniff.
- Content-Disposition: attachment (may trigger a download dialog box).

New Features

- CORS only allows GET, POST and HEAD.
* Response headers must include Access-Control-Allow-origin (can use wildcard "*").
* This origin must be the same as the origin header of the request headers.
* For non simple requests, browsers may do a handshake first by sending an OPTIONS preflight request to see if the user is allowed.
^ This can be cached.
- Content Security Policy (CSP): for controlling what can be loaded with the src attribute.
* X-Content-Security-Policy
* X-Content-Security-Policy-Report-Only: warning only without failing HTTP requests.
- Sandboxed frames: allow you to policy control content displayed and loaded by embedded frames.
* allow-scripts, allow-forms, etc.
- HSTS or STS: http strict transport security, to prevent browsers from navigating to the non-https version of a site at first and then immediately redirecting to https, allowing for the first request to go unencrypted.
* Strict-Transport-Security: max-age=30000; includeSubDomains

Common Vulnerabilities

- Cross-site request forgery (XSRF / CSRF)
* making requests to the server impersonating the user client.
- Cross-site script inclusion (XSSI)
* load JSON-like responses through script tags.
- Cross-site scripting (XSS)
* non-escaped inputs allowing attackers to plant html or scripts on your site.
- Header injection or response splitting.
- HTTP downgrade
- Cache poisoning
- Cookie injection
- Network fenceposts: with the help of DNS rebinding, an attacker may be able to see responses to all server requests.
- Vulnerabilities on the server:
* Buffer overflow
* Command injection like SQL
* Directory traversal
* File inclusion
* Format-string: allow attackers to plant a string into a templating function like printf().
* Integer overflow
* Pointer management]]>
4.07 2011 The Tangled Web: A Guide to Securing Modern Web Applications
author: Michal Zalewski
name: Wilson
average rating: 4.07
book published: 2011
rating: 4
read at: 2018/03/27
date added: 2019/01/29
shelves: web-development
review:
Review

A bit dated as any 7 year old web related book, I picked it up to get a good grasp of the definition and impact of things like XSS, XSRF, Header splitting, etc.

Most of the book is still relevant but some stuff should be revalidated since they may be deprecated like XDomainRequest.

What I like about these older books concerning the web is that they're an easy read, that is, by having a bit of knowledge of some of the concepts, getting a deeper understanding is straight forward.

Notes

It Starts with a URL

- scheme://login.pwd@address:port/path ?search#fragment
- The protocol and // signal an absolute url.
- Pseudo protocols:
* view-source:http://...
* data:text/plain,somePage,inlineDocument
- Transfer-Encoding: chunked (for transmitting steam data without specifying content-length).

HTTP

- HttpOnly: cookie attribute to prevent reading from document.cookie.
- secure: only send cookie over HTTPS.
* If not, even if sets a cookie, an attacker can just wait for you to go to , inject a frame, point it to , intercept the TCP handshake and grab the cookie.
- HTTP request:
* First line: method - path - version
* Headers split into one per line, ending with a CR/LF
* Request body starts after the empty line.
- HTTP response:
* First line: version - response code - response keyword
* Headers and payload same as request structure.

HTML

- &, <, >, ', " should be escaped.
- Named entities: &gt equals > and &amp equals ampersand (for encoding/obfuscating characters including attributes).
- Documents not loaded through HTTP lack headers, causing browsers to improvise things like MIME type and charset.
* Something like this might help sometimes .
* But some may never work cause it's tot late in the rendering process like changing the document type .
- Hyperlinks target view might get access denied and open in a new window (same-origin maybe?).
* Possible values: _top, _parent, _blank, [a name].
- Forms with no action param get submitted to the document location.
* Forms with GET method are submitted with named fields as query string, plus signs are encoded like ¡°%2B¡±, and spaces are replaced by plus sign: /action?field=name+lastname&four=two%2Btwo.
* For POST the default is to include params as the request payload or body ( application/x-www-form-urlencoded).

CSS

- @charset sets the css file charset.

Content Isolation Logic

- Same-origin is based on DNS not IP.
* Susceptible to DNS rebinding: intentionally pointing DNS to a new IP.
* Browsers try to mitigate by caching DNS lookups.
- Remove subdomain from document.domain to relax same-origin.
* document.domain doesn't work for XHR.
- Content-length: payload length header which is always set by the browser.
* Could be overwritten by XHR, causing a second request to be smuggled through on keep-alive sessions as part of the 1st request body.
* So most browsers prevent modifying some headers: Content-length, Referer, User-Agent, Cookie, Origin.
- TRACE HTTP verb is banned almost everywhere, used fore debugging, allows you to trace requests hops.
- Servers still support HTTP 0.9, one-liner protocol easy to exploit.
* GET\thttp://evil.com/evil.js\n\n
* or also: GET\thttp://evil.com/evil.js\tHTTP/1.0\n\n
- Cookies are set for the domain param (and any subdomain starting from there) and the path.
- At some point you could access HttpOnly cookies through XHR: req.getResponseHeader('Set-Cookie'), may still be possible.
- Cookies can be overwritten from non HTTPS, non HttpOnly or non secure parts of your site.
- Cookies don't include protocol.

Outside of Same-Origin

- X-Frame-Options (deny or same-origin): prevent page form being framed, so it cannot be tampered with, like click hijacking or phishing.
- To mitigate keystroke redirection, browsers prevent focus switch while on keypress.
* It doesn't work completely cause attackers can roughly predict what keys will pressed next and at when based on English language, thus, making the focus switch at the right time.

Other Browser Boundaries

- 3 types of URL schemes.
* UnrestrictedL HTTP, HTTPS, FTP.
* Partly restricted: file:, data:, javascript:.
* Restricted: about:, res:, chrome: (cannot be navigated to under any circumstance).
- Third-party Cookies are used by ad sites to tag users.

Content Recognition

- Content sniffing: if Content-Type is missing, browsers will try to guess the resource type based on heuristics like the extension or payload inspection.
* HTTP specification permits sniffing only in the absence of the header.
* For malformed MYME types, browsers may still use sniffing.
- X-Content-Type-Options: nosniff.
- Content-Disposition: attachment (may trigger a download dialog box).

New Features

- CORS only allows GET, POST and HEAD.
* Response headers must include Access-Control-Allow-origin (can use wildcard "*").
* This origin must be the same as the origin header of the request headers.
* For non simple requests, browsers may do a handshake first by sending an OPTIONS preflight request to see if the user is allowed.
^ This can be cached.
- Content Security Policy (CSP): for controlling what can be loaded with the src attribute.
* X-Content-Security-Policy
* X-Content-Security-Policy-Report-Only: warning only without failing HTTP requests.
- Sandboxed frames: allow you to policy control content displayed and loaded by embedded frames.
* allow-scripts, allow-forms, etc.
- HSTS or STS: http strict transport security, to prevent browsers from navigating to the non-https version of a site at first and then immediately redirecting to https, allowing for the first request to go unencrypted.
* Strict-Transport-Security: max-age=30000; includeSubDomains

Common Vulnerabilities

- Cross-site request forgery (XSRF / CSRF)
* making requests to the server impersonating the user client.
- Cross-site script inclusion (XSSI)
* load JSON-like responses through script tags.
- Cross-site scripting (XSS)
* non-escaped inputs allowing attackers to plant html or scripts on your site.
- Header injection or response splitting.
- HTTP downgrade
- Cache poisoning
- Cookie injection
- Network fenceposts: with the help of DNS rebinding, an attacker may be able to see responses to all server requests.
- Vulnerabilities on the server:
* Buffer overflow
* Command injection like SQL
* Directory traversal
* File inclusion
* Format-string: allow attackers to plant a string into a templating function like printf().
* Integer overflow
* Pointer management
]]>
<![CDATA[Kanban: Successful Evolutionary Change for Your Technology Business]]> 8086552 Book by David J. Anderson 262 David J. Anderson 0984521402 Wilson 3 software-projects 3.99 2010 Kanban: Successful Evolutionary Change for Your Technology Business
author: David J. Anderson
name: Wilson
average rating: 3.99
book published: 2010
rating: 3
read at: 2019/01/05
date added: 2019/01/05
shelves: software-projects
review:

]]>
<![CDATA[Death by Meeting: A Leadership Fable¡­ about Solving the Most Painful Problem in Business]]> 49040
""How could my life have unraveled so quickly?" he wondered."

In his latest page-turning work of business fiction, best-selling author Patrick Lencioni provides readers with another powerful and thought-provoking book, this one centered around a cure for the most painful yet underestimated problem of modern business: bad meetings. And what he suggests is both simple and revolutionary.

Casey McDaniel, the founder and CEO of Yip Software, is in the midst of a problem he created, but one he doesn't know how to solve. And he doesn't know where or who to turn to for advice. His staff can't help him; they're as dumbfounded as he is by their tortuous meetings.

Then an unlikely advisor, Will Peterson, enters Casey's world. When he proposes an unconventional, even radical, approach to solving the meeting problem, Casey is just desperate enough to listen.

As in his other books, Lencioni provides a framework for his groundbreaking model, and makes it applicable to the real world. "Death by Meeting" is nothing short of a blueprint for leaders who want to eliminate waste and frustration among their teams, and create environments of engagement and passion.]]>
260 Patrick Lencioni 0787968056 Wilson 3 business, nonfiction 4.01 2004 Death by Meeting: A Leadership Fable¡­ about Solving the Most Painful Problem in Business
author: Patrick Lencioni
name: Wilson
average rating: 4.01
book published: 2004
rating: 3
read at: 2019/01/02
date added: 2019/01/02
shelves: business, nonfiction
review:

]]>
<![CDATA[The Five Dysfunctions of a Team]]> 21343 The Five Dysfunctions of a Team Patrick Lencioni once again offers a leadership fable that is as enthralling and instructive as his first two best-selling books, The Five Temptations of a CEO and The Four Obsessions of an Extraordinary Executive. This time, he turns his keen intellect and storytelling power to the fascinating, complex world of teams.

Kathryn Petersen, Decision Tech's CEO, faces the ultimate leadership crisis: Uniting a team in such disarray that it threatens to bring down the entire company. Will she succeed? Will she be fired? Will the company fail? Lencioni's utterly gripping tale serves as a timeless reminder that leadership requires as much courage as it does insight.

Throughout the story, Lencioni reveals the five dysfunctions which go to the very heart of why teams even the best ones-often struggle. He outlines a powerful model and actionable steps that can be used to overcome these common hurdles and build a cohesive, effective team. Just as with his other books, Lencioni has written a compelling fable with a powerful yet deceptively simple message for all those who strive to be exceptional team leaders.]]>
228 Patrick Lencioni 0787960756 Wilson 4 business, nonfiction 4.09 2002 The Five Dysfunctions of a Team
author: Patrick Lencioni
name: Wilson
average rating: 4.09
book published: 2002
rating: 4
read at: 2018/12/10
date added: 2018/12/12
shelves: business, nonfiction
review:

]]>
The Death of Mrs. Westaway 36373481
Soon, Hal finds herself at the funeral of the deceased¡­where it dawns on her that there is something very, very wrong about this strange situation and the inheritance at the centre of it.]]>
368 Ruth Ware 1501156217 Wilson 0 to-read 3.79 2018 The Death of Mrs. Westaway
author: Ruth Ware
name: Wilson
average rating: 3.79
book published: 2018
rating: 0
read at:
date added: 2018/11/13
shelves: to-read
review:

]]>
Animation at Work 35852738 75 Rachel Nabors 1937557596 Wilson 5 web-development, web-design Review

One of the best books I've read, a structured, extensive and elaborate explanation of why web animations are important, how to get buy-in and easily include them in your development process.

There isn't a single trace of programming code here, what you'll find is a breakdown of the different types of animation, how to test their impact, the effects on the user cognitive flow, how cartoonists influenced UI design and web animation, how to keep pragmatic, design for accessibility and how to combine knowledge of the human vision, perception and reaction time to create animations that add context and delight.

Notes

Intro

- We use "web app" to refer to sites that are more than just plain HTML.
* For sites that look, feel, serve and perform as well as an app, animation is an essential tool.
- Animation is not just something decorative to be included at the end of the project if there's some budget left over.
* It creates experiences that go beyond mere linked documents.
* Immerses users in the illusion of life.
* Generates user confidence and trust with as much strength as a professional logo.

Human Perception and Animation

- Human vision:
* The "where system": detects motion.
* The "what system": detects form (morph) and colour.
- Avoid cut-based animation, which works on cinematography but not on the web.
* Animation should add context to seemingly disconnected elements and events.
^ And offload this context to the visual cortex, reducing cognitive load, increasing perceived speed.
- Animation makes elements relationships clear, so users don't spend time thinking what just happened but thinking what to do next.
- Tweens: in-between animation states.
* Cuts in the UI make the brain do the in-betweening.
- Sudden changes could distract users from the task at hand.
- Cone of vision: human eye is more sensitive to colour changes in the centre (things users are directly looking at), and to movement in the edges.
* Edges pick up almost no colour changes and just trigger an eye move signal.
- Change blindness: when you don't notice a change when looking at a familiar thing or returning to a familiar room.

Patterns and Purpose

- 5 types of animation:
* Transitions
* Supplements: bring stuff on or off the page without changing location or user's task.
* Feedback
* Demonstrations: show, don't tell, can explain stuff to users, rather than having them read through a manual.
* Decorative: purely aesthetics, do not convey new information, separate ordinary from extraordinary.
- Don't fall in the trap of only implementing delighters that just reinforce branding and don't improve cognitive flow.
- Wordy descriptions can indicate something being told, demonstration could be better.

Anatomy of a Web Animation

- Easing:
* Acceleration: good for system initiated animation, to not startle users.
* Deceleration: good for user initiated, makes UI feel responsive and snappy.
* Speeding up - slowing down: interaction models, when moving an element toward another.
* Linear: good for fades or colour change.
* Bouncing.
- Humans take 200-300ms to react to visual changes like clicking on a just enabled button.
- It takes 70-700ms for the human eye to move.
* Shorter animations near the centre of the cone of vision are better, 70-200ms.
^ While longer toward the edges, 300-700ms.
- Changing colour on hover might be too slow over 100ms and moving something across the page below 300ms might be too fast, test to see what feels right.
- When working on an animation for long, it may feel faster than it really is.
- Tokenise animation durations and timing functions in style-guides in order to standardise animations across the site.

Communicating Animation

- Storyboards can help quantify element animations, by describing what, how and why things animate.
- Animatics: videos of storyboards with audio tracks of actors reading their lines and the soundtracks.
* Try Adobe After Effects or PrincipleForMac.
- Try Framer for UI prototyping.
- Generate buy-in:
* Add animations to the style-guide.
* Show side-by-side prototypes to stakeholders showing the site with and without them.

Best Practices and other Educated Guesses

- The fact that people notice and praise your animations, might be a red flag, they're spending cognitive power on them, the opposite of what you want.
* You want animation to provide context, and only be noticed when you want to attract users attention, like demonstrative animation.
- Keep consistency, if an element entrance is animated, the exit should be as well.
- Avoid FOULS: flashes of unloaded/ing states.
* Use Facebook Shimmer or spinners in place of loading images.
- Adding motion blur (smear of motion) can help fast movements register better at low frame rates, makes the retina see smoother motion.
* Try fading the object in the middle of its trajectory and back again at the end to give the impression that it moved so fast as to not register.
- The Web Animations API would help you provide users with a way of speed up or slow down site-wide animations.
- Be aware of time warps: time passing faster or slower for some people.
- Animation can cause seizures.
* Trigger vestibular disorders: problems regarding human vision and balance.]]>
4.32 Animation at Work
author: Rachel Nabors
name: Wilson
average rating: 4.32
book published:
rating: 5
read at: 2018/04/07
date added: 2018/09/09
shelves: web-development, web-design
review:
Review

One of the best books I've read, a structured, extensive and elaborate explanation of why web animations are important, how to get buy-in and easily include them in your development process.

There isn't a single trace of programming code here, what you'll find is a breakdown of the different types of animation, how to test their impact, the effects on the user cognitive flow, how cartoonists influenced UI design and web animation, how to keep pragmatic, design for accessibility and how to combine knowledge of the human vision, perception and reaction time to create animations that add context and delight.

Notes

Intro

- We use "web app" to refer to sites that are more than just plain HTML.
* For sites that look, feel, serve and perform as well as an app, animation is an essential tool.
- Animation is not just something decorative to be included at the end of the project if there's some budget left over.
* It creates experiences that go beyond mere linked documents.
* Immerses users in the illusion of life.
* Generates user confidence and trust with as much strength as a professional logo.

Human Perception and Animation

- Human vision:
* The "where system": detects motion.
* The "what system": detects form (morph) and colour.
- Avoid cut-based animation, which works on cinematography but not on the web.
* Animation should add context to seemingly disconnected elements and events.
^ And offload this context to the visual cortex, reducing cognitive load, increasing perceived speed.
- Animation makes elements relationships clear, so users don't spend time thinking what just happened but thinking what to do next.
- Tweens: in-between animation states.
* Cuts in the UI make the brain do the in-betweening.
- Sudden changes could distract users from the task at hand.
- Cone of vision: human eye is more sensitive to colour changes in the centre (things users are directly looking at), and to movement in the edges.
* Edges pick up almost no colour changes and just trigger an eye move signal.
- Change blindness: when you don't notice a change when looking at a familiar thing or returning to a familiar room.

Patterns and Purpose

- 5 types of animation:
* Transitions
* Supplements: bring stuff on or off the page without changing location or user's task.
* Feedback
* Demonstrations: show, don't tell, can explain stuff to users, rather than having them read through a manual.
* Decorative: purely aesthetics, do not convey new information, separate ordinary from extraordinary.
- Don't fall in the trap of only implementing delighters that just reinforce branding and don't improve cognitive flow.
- Wordy descriptions can indicate something being told, demonstration could be better.

Anatomy of a Web Animation

- Easing:
* Acceleration: good for system initiated animation, to not startle users.
* Deceleration: good for user initiated, makes UI feel responsive and snappy.
* Speeding up - slowing down: interaction models, when moving an element toward another.
* Linear: good for fades or colour change.
* Bouncing.
- Humans take 200-300ms to react to visual changes like clicking on a just enabled button.
- It takes 70-700ms for the human eye to move.
* Shorter animations near the centre of the cone of vision are better, 70-200ms.
^ While longer toward the edges, 300-700ms.
- Changing colour on hover might be too slow over 100ms and moving something across the page below 300ms might be too fast, test to see what feels right.
- When working on an animation for long, it may feel faster than it really is.
- Tokenise animation durations and timing functions in style-guides in order to standardise animations across the site.

Communicating Animation

- Storyboards can help quantify element animations, by describing what, how and why things animate.
- Animatics: videos of storyboards with audio tracks of actors reading their lines and the soundtracks.
* Try Adobe After Effects or PrincipleForMac.
- Try Framer for UI prototyping.
- Generate buy-in:
* Add animations to the style-guide.
* Show side-by-side prototypes to stakeholders showing the site with and without them.

Best Practices and other Educated Guesses

- The fact that people notice and praise your animations, might be a red flag, they're spending cognitive power on them, the opposite of what you want.
* You want animation to provide context, and only be noticed when you want to attract users attention, like demonstrative animation.
- Keep consistency, if an element entrance is animated, the exit should be as well.
- Avoid FOULS: flashes of unloaded/ing states.
* Use Facebook Shimmer or spinners in place of loading images.
- Adding motion blur (smear of motion) can help fast movements register better at low frame rates, makes the retina see smoother motion.
* Try fading the object in the middle of its trajectory and back again at the end to give the impression that it moved so fast as to not register.
- The Web Animations API would help you provide users with a way of speed up or slow down site-wide animations.
- Be aware of time warps: time passing faster or slower for some people.
- Animation can cause seizures.
* Trigger vestibular disorders: problems regarding human vision and balance.
]]>
<![CDATA[The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements]]> 7247854
The periodic table is a crowning scientific achievement, but it's also a treasure trove of adventure, betrayal, and obsession. These fascinating tales follow every element on the table as they play out their parts in human history, finance, mythology, conflict, the arts, medicine, and in the lives of the (frequently) mad scientists who discovered them. "The Disappearing Spoon" masterfully fuses science with the classic lore of invention, investigation, discovery, and alchemy, from the big bang through the end of time.


* Though solid at room temperature, gallium is a moldable metal that melts at 84 degrees Fahrenheit. A classic science prank is to mold gallium spoons, serve them with tea, and watch guests recoil as their utensils disappear.]]>
394 Sam Kean 0316051640 Wilson 0 3.92 2010 The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements
author: Sam Kean
name: Wilson
average rating: 3.92
book published: 2010
rating: 0
read at:
date added: 2018/06/21
shelves: to-read, nonfiction, science, history
review:

]]>
<![CDATA[The Happiness Equation: Want Nothing + Do Anything = Have Everything]]> 22571656 ?
What is the formula for a happy life? Neil?Pasricha?is a Harvard MBA, a? New York Times ¨Cbestselling author, a?Walmart?executive, a father, a husband. After selling more than a million copies of the ?Book of Awesome ?series, wherein he observed the everyday things he thought were awesome, he now shifts his focus to the practicalities of living an awesome life.

In his new book? The Happiness Equation ,?Pasricha?illustrates how to want nothing and do anything in order to have everything. If that sounds like a contradiction in terms, you simply have yet to unlock the 9 Secrets to Happiness. Each secret takes a piece out of the core of common sense, turns it on its head to present it in a completely new light, and then provides practical and specific guidelines for how to apply this new outlook to lead a fulfilling life.

Once you've unlocked Pasricha¡¯s 9 Secrets, you will understand?counter intuitive?concepts such as: Success Does Not Lead to Happiness, Never Take Advice, and Retirement Is a Broken Theory. You will learn and then master three brand-new fundamental life tests: the Saturday Morning Test, The Bench Test, and the Five People Test. You will know the difference between external goals and internal goals and how to make more money than a Harvard MBA (hint: it has nothing to do with your annual salary). You will discover that true wealth has nothing to do with money, multitasking is a myth, and the elimination of options leads to more choice.

The Happiness Equation? is a book that will change how you think about pretty much everything¡ªyour time, your career, your relationships, your family, and, ultimately, of course, your happiness.]]>
320 Neil Pasricha 0399169474 Wilson 0 3.82 2015 The Happiness Equation: Want Nothing + Do Anything = Have Everything
author: Neil Pasricha
name: Wilson
average rating: 3.82
book published: 2015
rating: 0
read at:
date added: 2018/06/21
shelves: to-read, nonfiction, psycology
review:

]]>
<![CDATA[The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact]]> 25238425
They've internalized a mindset that took me years of trial and error to figure out. I'm going to share that mindset with you ¡ª along with hundreds of actionable techniques and proven habits ¡ª so you can shortcut those years.

Introducing The Effective Engineer ¡ª the only book designed specifically for today's software engineers, based on extensive interviews with engineering leaders at top tech companies, and packed with hundreds of techniques to accelerate your career.

For two years, I embarked on a quest seeking an answer to one question:

How do the most effective engineers make their efforts, their teams, and their careers more successful?

I interviewed and collected stories from engineering VPs, directors, managers, and other leaders at today's top software companies: established, household names like Google, Facebook, Twitter, and LinkedIn; rapidly growing mid-sized companies like Dropbox, Square, Box, Airbnb, and Etsy; and startups like Reddit, Stripe, Instagram, and Lyft.

These leaders shared stories about the most valuable insights they've learned and the most common and costly mistakes that they've seen engineers ¡ª sometimes themselves ¡ª make.

This is just a small sampling of the hard questions I posed to them:

- What engineering qualities correlate with future success?
- What have you done that has paid off the highest returns?
- What separates the most effective engineers you've worked with from everyone else?
- What's the most valuable lesson your team has learned in the past year?
- What advice do you give to new engineers on your team?

Everyone's story is different, but many of the lessons share common themes.

You'll get to hear stories like:

- How did Instagram's team of 5 engineers build and support a service that grew to over 40 million users by the time the company was acquired?
- How and why did Quora deploy code to production 40 to 50 times per day?
- How did the team behind Google Docs become the fastest acquisition to rewrite its software to run on Google's infrastructure?
- How does Etsy use continuous experimentation to design features that are guaranteed to increase revenue at launch?
- How did Facebook's small infrastructure team effectively operate thousands of database servers?
- How did Dropbox go from barely hiring any new engineers to nearly tripling its team size year-over-year?

What's more, I've distilled their stories into actionable habits and lessons that you can follow step-by-step to make your career and your team more successful.

The skills used by effective engineers are all learnable.

And I'll teach them to you. With The Effective Engineer, I'll teach you a unifying framework called leverage ¡ª the value produced per unit of time invested ¡ª that you can use to identify the activities that produce disproportionate results.

Here's a sneak peek at some of the lessons you'll learn. You'll learn how to:

- Prioritize the right projects and tasks to increase your impact.
- Earn more leeway from your peers and managers on your projects.
- Spend less time maintaining and fixing software and more time building and shipping new features.
- Produce more accurate software estimates.
- Validate your ideas cheaply to reduce wasted work.
- Navigate organizational and people-related bottlenecks.
- Find the appropriate level of code reviews, testing, abstraction, and technical debt to balance speed and quality.
- Shorten your debugging workflow to increase your iteration speed.]]>
260 Edmond Lau 0996128107 Wilson 4 software-projects 4.25 2015 The Effective Engineer: How to Leverage Your Efforts In Software Engineering to Make a Disproportionate and Meaningful Impact
author: Edmond Lau
name: Wilson
average rating: 4.25
book published: 2015
rating: 4
read at: 2018/06/17
date added: 2018/06/21
shelves: software-projects
review:

]]>
<![CDATA[Why We Do What We Do: Understanding Self-Motivation]]> 683539 against performance. The best way to motivate people¡ªat school, at work, or at home¡ªis to support their sense of autonomy. Explaining the reasons why a task is important and then allowing as much personal freedom as possible in carrying out the task will stimulate interest and commitment, and is a much more effective approach than the standard system of reward and punishment. We are all inherently interested in the world, argues Deci, so why not nurture that interest in each other? Instead of asking, "How can I motivate people?" we should be asking, "How can I create the conditions within which people will motivate themselves?""An insightful and provocative meditation on how people can become more genuinely engaged and succesful in pursuing their goals." ¡ªPublisher's Weekly]]> 240 Edward L. Deci 0140255265 Wilson 0 3.97 1995 Why We Do What We Do: Understanding Self-Motivation
author: Edward L. Deci
name: Wilson
average rating: 3.97
book published: 1995
rating: 0
read at:
date added: 2018/06/07
shelves: psycology, nonfiction, to-read
review:

]]>
<![CDATA[Growing Object-Oriented Software, Guided by Tests]]> 4268826 345 Steve Freeman 0321503627 Wilson 4 software-architecture
In my case I just read:

- Refactoring [Martin Fowler]
- Designing Object-Oriented Software [Rebecca Wirfs-Brock]

It's also recommended to read a few of the books from "The Addison-Wesley Signature Series". Apart from having a similar structure, it feels like each one builds on top of the others which makes them easier to follow along after you've gone through a few of them.

From the book: we spend much more time reading code than writing, so we should optimise for that, writing tests it's a great way of having a coherent up-to-date documentation of the system.

Unit testing doesn't impact much of the external quality of the code (from the user's perspective), it impacts the internal quality (from the developer's perspective), which in terms determines how easy it is for the code to be extended and bugs to be fixed.

Use the builder pattern to not burry tests intentions in setup calls and improve readability.

Don't strive for testing individual functions but rather your expected behaviour, start each feature by writing an acceptance test, then write unit tests while you incrementally implement the feature, usually the acceptance test will be the last to pass, this can be an end-to-end test if possible but it can also be less than that, any type of test that you think satisfies the definition of done.]]>
4.19 2009 Growing Object-Oriented Software, Guided by Tests
author: Steve Freeman
name: Wilson
average rating: 4.19
book published: 2009
rating: 4
read at: 2018/01/02
date added: 2018/05/21
shelves: software-architecture
review:
Even if the book describes some OO concepts, in order to get the most out of it I suggest reading a couple of OO related books beforehand and get a good grasp of things like encapsulation, polymorphism and specially objects collaboration. As the authors state it: one of their main focus when constructing OO software is to think about how objects will send messages to each other rather than their roles, in other words, drive the design from how the moving pieces would collaborate with each other.

In my case I just read:

- Refactoring [Martin Fowler]
- Designing Object-Oriented Software [Rebecca Wirfs-Brock]

It's also recommended to read a few of the books from "The Addison-Wesley Signature Series". Apart from having a similar structure, it feels like each one builds on top of the others which makes them easier to follow along after you've gone through a few of them.

From the book: we spend much more time reading code than writing, so we should optimise for that, writing tests it's a great way of having a coherent up-to-date documentation of the system.

Unit testing doesn't impact much of the external quality of the code (from the user's perspective), it impacts the internal quality (from the developer's perspective), which in terms determines how easy it is for the code to be extended and bugs to be fixed.

Use the builder pattern to not burry tests intentions in setup calls and improve readability.

Don't strive for testing individual functions but rather your expected behaviour, start each feature by writing an acceptance test, then write unit tests while you incrementally implement the feature, usually the acceptance test will be the last to pass, this can be an end-to-end test if possible but it can also be less than that, any type of test that you think satisfies the definition of done.
]]>
<![CDATA[The Modern Web: Multi-Device Web Development with HTML5, CSS3, and JavaScript]]> 16129007
Today's web technologies are evolving at near-light speed, bringing the promise of a seamless Internet ever closer to reality. When users can browse the Web on a three-inch phone screen as easily as on a fifty-inch HDTV, what's a developer to do? Peter Gasston's The Modern Web will guide you through the latest and most important tools of device-agnostic web development, including HTML5, CSS3, and JavaScript. His plain-English explanations and practical examples emphasize the techniques, principles, and practices that you'll need to easily transcend individual browser quirks and stay relevant as these technologies are updated. Learn how to: Turn outdated websites into flexible, user-friendly ones that take full advantage of the unique capabilities of any device or browser. With the help of The Modern Web , you'll be ready to navigate the front lines of device-independent development.]]>
266 Peter Gasston 1593274874 Wilson 3 web-development Review

Introductory book to shiny new features coming into HTML, CSS and JS as of 2013, at this point it feels pretty dated and some mentioned features ended up being implemented in different ways, e.g., the navigator.connection object. It's still a quick, easy and refreshing read, it took me like two days to go through it and I feel like it still provided some value.

I picked it up cause wanted a light read, had my expectations clear to prevent feeling disappointed.

This book touches on the things you probably stopped using: jQuery, PhoneGap, Appcelerator Titanium, Modernizr, Mustache; the things that became mainstream long ago: HTML input types, media queries, addEventListener(); and the ones you probably never used: HTML semantic tags like article, aside, hgroup. I mean; nav, header and footer are kinda useful but.. what's the difference between article and section anyways?

However, it touches on interesting topics like RDFa, landmark roles, SVG and canvas.

Notes

- Use aria attributes for accessibility, like aria-haspopup="true".
- Landmark roles help with backwards compatibility and accessibility for HTML5 tags like role="main".
- RDFa is an extension that provides a predefined schema for describing content, eg.: < p property=" p>
- Microdata aids with semantics (has a DOM api too), eg.: < p itemscope>I live in < span itemprop='city'>London span>< /p>
- You can set the viewport metatag through CSS and modify it for different breakpoints.
- Try combining aspect-ratio, DPPX, device-orientation for more custom media queries.
- Use the media query DOM api for listening to more custom window resizing events.
- Play with img tags object-fill and object-position.
- Never set the overall font to a fixed value like 10px, use percentage units so it doesn't override the user's browser setting.
- Properties to divide content into columns: columns, column-[count|width|span|rule|gap], break-[before|after|inside]: column.
- Flexbox is useful but don't use it for laying out an entire page, use grid layouts instead.
- The repeat() function helps defining grid columns.
- fr is a new unit that means fraction, i.e., a fraction of the remaining space.
- Download script tags without pausing the HTML parser by using:
* defer: executes script after HTML is loaded.
* async: executes scripts as soon as it's downloaded.
- A shim (or shiv) is a piece of code that intercepts a call and provides a layer of abstraction (sounds like a facade).
* A polyfill is a specific type of shim that adds support for experimental features to browsers that don't support them.
- DOMContentLoaded event triggers when DOM is ready, meaning that the in-memory representation of the HTML is built but resources may still be downloading.
- window load event fires when all resources (img, css, js, etc) have finished downloading.
- Device APIs:
* navigator.geoLocation.getCurrentPosition().
* navigator.geoLocation.watchPosition: returns an id that can be canceled with navigator.geoLocation.clearWatch.
* window.addEventListener('deviceorientation', fn) for accelerometer events.
* window.navigator.vibrate().
* window.navigator.getBattery().
* navigator.connection.
* navigator.getUserMedia() to ask for use of the mic and camera.
* element.requestFullScreen().
- SVG are made of geometrical shapes formed with a coordinate system, i.e., images are formed of a bunch of points plotted on a grid and lines drawn between those points.
* They're good for illustrations like icons and logos, but not for photographs.
- Bitmap graphics are a series of coloured pixels laid out on a grid.
* The reason they don't scale well is cause when resizing, the computer applies a resizing algorithm to increase or decrease the sizes of the pixels, adding and removing where necessary, algorithms are usually better at removing than adding.
- Linked SVGs (through an img tag src attribute) can't be accessed through CSS or JS.
* Can use the embed tag for that.
- Can use SVG for sprites by using icons with id or fragments.
- Drawing on canvas is bitmap based so not as scalable as SVG.
- autofocus attribute, when present multiple times, the first DOM element gets it.
- spellcheck and lang attr for spell checking (of course).
- You can have form fields outside of the form itself by adding form="form-id" to the fields.
- Datalist tag gives suggestions on input fields.
- There's a progress tag.
- And a meter tag, for like charts maybe.
- And an output tag for showing results of stuff like calculations.
- Form validation with: required, pattern, novalidate, formnovalidate.
- Can access validation through a DOM api: input.willValidate, input.checkValidity(), the invalid event.
- Can target validation pseudo classes with CSS (required, optional, valid, invalid, etc).]]>
3.96 2013 The Modern Web: Multi-Device Web Development with HTML5, CSS3, and JavaScript
author: Peter Gasston
name: Wilson
average rating: 3.96
book published: 2013
rating: 3
read at: 2018/02/27
date added: 2018/05/21
shelves: web-development
review:
Review

Introductory book to shiny new features coming into HTML, CSS and JS as of 2013, at this point it feels pretty dated and some mentioned features ended up being implemented in different ways, e.g., the navigator.connection object. It's still a quick, easy and refreshing read, it took me like two days to go through it and I feel like it still provided some value.

I picked it up cause wanted a light read, had my expectations clear to prevent feeling disappointed.

This book touches on the things you probably stopped using: jQuery, PhoneGap, Appcelerator Titanium, Modernizr, Mustache; the things that became mainstream long ago: HTML input types, media queries, addEventListener(); and the ones you probably never used: HTML semantic tags like article, aside, hgroup. I mean; nav, header and footer are kinda useful but.. what's the difference between article and section anyways?

However, it touches on interesting topics like RDFa, landmark roles, SVG and canvas.

Notes

- Use aria attributes for accessibility, like aria-haspopup="true".
- Landmark roles help with backwards compatibility and accessibility for HTML5 tags like role="main".
- RDFa is an extension that provides a predefined schema for describing content, eg.: < p property=" p>
- Microdata aids with semantics (has a DOM api too), eg.: < p itemscope>I live in < span itemprop='city'>London span>< /p>
- You can set the viewport metatag through CSS and modify it for different breakpoints.
- Try combining aspect-ratio, DPPX, device-orientation for more custom media queries.
- Use the media query DOM api for listening to more custom window resizing events.
- Play with img tags object-fill and object-position.
- Never set the overall font to a fixed value like 10px, use percentage units so it doesn't override the user's browser setting.
- Properties to divide content into columns: columns, column-[count|width|span|rule|gap], break-[before|after|inside]: column.
- Flexbox is useful but don't use it for laying out an entire page, use grid layouts instead.
- The repeat() function helps defining grid columns.
- fr is a new unit that means fraction, i.e., a fraction of the remaining space.
- Download script tags without pausing the HTML parser by using:
* defer: executes script after HTML is loaded.
* async: executes scripts as soon as it's downloaded.
- A shim (or shiv) is a piece of code that intercepts a call and provides a layer of abstraction (sounds like a facade).
* A polyfill is a specific type of shim that adds support for experimental features to browsers that don't support them.
- DOMContentLoaded event triggers when DOM is ready, meaning that the in-memory representation of the HTML is built but resources may still be downloading.
- window load event fires when all resources (img, css, js, etc) have finished downloading.
- Device APIs:
* navigator.geoLocation.getCurrentPosition().
* navigator.geoLocation.watchPosition: returns an id that can be canceled with navigator.geoLocation.clearWatch.
* window.addEventListener('deviceorientation', fn) for accelerometer events.
* window.navigator.vibrate().
* window.navigator.getBattery().
* navigator.connection.
* navigator.getUserMedia() to ask for use of the mic and camera.
* element.requestFullScreen().
- SVG are made of geometrical shapes formed with a coordinate system, i.e., images are formed of a bunch of points plotted on a grid and lines drawn between those points.
* They're good for illustrations like icons and logos, but not for photographs.
- Bitmap graphics are a series of coloured pixels laid out on a grid.
* The reason they don't scale well is cause when resizing, the computer applies a resizing algorithm to increase or decrease the sizes of the pixels, adding and removing where necessary, algorithms are usually better at removing than adding.
- Linked SVGs (through an img tag src attribute) can't be accessed through CSS or JS.
* Can use the embed tag for that.
- Can use SVG for sprites by using icons with id or fragments.
- Drawing on canvas is bitmap based so not as scalable as SVG.
- autofocus attribute, when present multiple times, the first DOM element gets it.
- spellcheck and lang attr for spell checking (of course).
- You can have form fields outside of the form itself by adding form="form-id" to the fields.
- Datalist tag gives suggestions on input fields.
- There's a progress tag.
- And a meter tag, for like charts maybe.
- And an output tag for showing results of stuff like calculations.
- Form validation with: required, pattern, novalidate, formnovalidate.
- Can access validation through a DOM api: input.willValidate, input.checkValidity(), the invalid event.
- Can target validation pseudo classes with CSS (required, optional, valid, invalid, etc).
]]>
<![CDATA[Patterns of Enterprise Application Architecture]]> 70156 533 Martin Fowler 0321127420 Wilson 4 software-architecture
There's no silver bullet in software development (as Fred Brooks said it), so every design/architecture advice should be taken with a grain of salt.

In that regard, if you'd like to know how your everyday frameworks work underneath, understand how they wire everything together, or perhaps write a better one yourself, this is a book for you.

I started my dev journey as a .NET web developer and remember having heated conversations with other peers doing Java, I now realise how easier stuff would've been should I've known that .NET and Visual Studio made easier for you to pair Table Module(125) with Record Set(508) for the business layer so you'd do that more often than not, while on Java you many times used Domain Model(116) which is a more OO approach.

For the view, .NET web forms used Template View(350), and often Two Step View(365) through what was called master pages, the controllers were Page Controller(333), so you had a controller for each server page called the Code Behind file which was then referenced inside the markup page, the page itself was a subclass of that Code Behind so you could access your protected methods on the view.

While Java Server Pages (JSP) were a bit similar to .NET web forms, if you were using them through a Java framework like Struts (from Apache), you probably had a Front Controller(344) which handled all incoming requests for every page and forwarded them to the appropriate helper class depending on the application flow logic.

Being a JavaScript developer now, I see similar patterns applied in this ecosystem as well.

I really enjoyed the definition of MVC(330), the model is an object that represents some of your domain information, in terms of OO, an object holds knowledge and should own the operations on that knowledge, that is, it should know how to access and modify the data it contains, which is encapsulation. The view is then the visual representation of the model, a collection of UI widgets that render the data inside the model. The controller is the link between the two, it takes inputs from the view and forwards them to the right model to be handled. In that regard, the dependency graph should look something like: view knows about the model (and often times about the controller), the controller knows about the view and the model. One of the main benefits of MVC is separating the presentation logic (View) from the business logic (Model), which in terms is one of the fundamental traits of OO design.]]>
4.12 2002 Patterns of Enterprise Application Architecture
author: Martin Fowler
name: Wilson
average rating: 4.12
book published: 2002
rating: 4
read at: 2018/01/23
date added: 2018/05/21
shelves: software-architecture
review:
Let's be honest, the book was published 15+ years ago, it's highly unlikely that each and every one of the 51 patterns described in it would be completely appropriate for writing software today.

There's no silver bullet in software development (as Fred Brooks said it), so every design/architecture advice should be taken with a grain of salt.

In that regard, if you'd like to know how your everyday frameworks work underneath, understand how they wire everything together, or perhaps write a better one yourself, this is a book for you.

I started my dev journey as a .NET web developer and remember having heated conversations with other peers doing Java, I now realise how easier stuff would've been should I've known that .NET and Visual Studio made easier for you to pair Table Module(125) with Record Set(508) for the business layer so you'd do that more often than not, while on Java you many times used Domain Model(116) which is a more OO approach.

For the view, .NET web forms used Template View(350), and often Two Step View(365) through what was called master pages, the controllers were Page Controller(333), so you had a controller for each server page called the Code Behind file which was then referenced inside the markup page, the page itself was a subclass of that Code Behind so you could access your protected methods on the view.

While Java Server Pages (JSP) were a bit similar to .NET web forms, if you were using them through a Java framework like Struts (from Apache), you probably had a Front Controller(344) which handled all incoming requests for every page and forwarded them to the appropriate helper class depending on the application flow logic.

Being a JavaScript developer now, I see similar patterns applied in this ecosystem as well.

I really enjoyed the definition of MVC(330), the model is an object that represents some of your domain information, in terms of OO, an object holds knowledge and should own the operations on that knowledge, that is, it should know how to access and modify the data it contains, which is encapsulation. The view is then the visual representation of the model, a collection of UI widgets that render the data inside the model. The controller is the link between the two, it takes inputs from the view and forwards them to the right model to be handled. In that regard, the dependency graph should look something like: view knows about the model (and often times about the controller), the controller knows about the view and the model. One of the main benefits of MVC is separating the presentation logic (View) from the business logic (Model), which in terms is one of the fundamental traits of OO design.
]]>
<![CDATA[Refactoring: Improving the Design of Existing Code]]> 44936 Refactoring: Improving the Design of Existing Software, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process.]]> 431 Martin Fowler 0201485672 Wilson 5 4.23 1999 Refactoring: Improving the Design of Existing Code
author: Martin Fowler
name: Wilson
average rating: 4.23
book published: 1999
rating: 5
read at: 2017/12/24
date added: 2018/04/20
shelves: software-architecture, favourites
review:

]]>
<![CDATA[Designing Object-Oriented Software]]> 1887814 Practical and down-to-earth in approach, this bestseller explores the art of designing object-oriented software. It offers basic design principles and a specific design process that can be applied to any software programming effort ? even those not using object-oriented programming languages or environments.

Covers the concepts of object-oriented technology, presents a process to apply those concepts, the tools to use throughout the process, and examples to put it all together.

For developers of object-oriented software.

]]>
368 Rebecca Wirfs-Brock 0136298257 Wilson 5
Most of these concepts have stood the test of time.

You're presented with notions like who controls what, spreading system intelligence as evenly as possible rather than encapsulating most behaviour in a single class, wrap classes inside subsystems (modules) to reduce coupling and increase cohesion.

The authors thoroughly break down the building blocks of OOP in a way you wish you had learned before you've ever saw an OO language:

- Inheritance is just about factoring out common functionality into a single place.
- Objects communicate with each other by sending messages.
- Messages have a name and may include arguments.
- Objects handle messages by executing methods.
- The set of messages an object can respond to is known as behaviour.
- When two or more kinds of objects can respond to the same message by executing different methods which have the same message name, you get polymorphism.

It was great to read a book from the time when a lot of the stuff we now take for granted had to be factored into the design like: classes for handling Arrays, graphic operations, fixed/floating point numbers, etc. Things we today get from programming frameworks with a rich library of built-in functionality, it gives you an idea of where we're coming from being a refreshing reminder of what things the underlying platform is doing for you.]]>
3.77 1990 Designing Object-Oriented Software
author: Rebecca Wirfs-Brock
name: Wilson
average rating: 3.77
book published: 1990
rating: 5
read at: 2017/12/28
date added: 2018/04/20
shelves: software-architecture, favourites
review:
Considering this book was written before many of the most the popular OO languages like Java, C#, Ruby, Python; even existed, it feels pretty contemporary. It talks heavily about arguably suboptimal concepts like multiple inheritance and getting the upfront design right but I think we can take most of the ideas and apply them to Agile environments, that is, we still do planning on Agile even though incremental, iterative development is at the heart of the process. We don't necessarily have to write a full blown upfront design, but we can use the elaborated techniques described in this book to come up with good, supple and flexible feature/system designs easy to refactor down the road.

Most of these concepts have stood the test of time.

You're presented with notions like who controls what, spreading system intelligence as evenly as possible rather than encapsulating most behaviour in a single class, wrap classes inside subsystems (modules) to reduce coupling and increase cohesion.

The authors thoroughly break down the building blocks of OOP in a way you wish you had learned before you've ever saw an OO language:

- Inheritance is just about factoring out common functionality into a single place.
- Objects communicate with each other by sending messages.
- Messages have a name and may include arguments.
- Objects handle messages by executing methods.
- The set of messages an object can respond to is known as behaviour.
- When two or more kinds of objects can respond to the same message by executing different methods which have the same message name, you get polymorphism.

It was great to read a book from the time when a lot of the stuff we now take for granted had to be factored into the design like: classes for handling Arrays, graphic operations, fixed/floating point numbers, etc. Things we today get from programming frameworks with a rich library of built-in functionality, it gives you an idea of where we're coming from being a refreshing reminder of what things the underlying platform is doing for you.
]]>
<![CDATA[High Performance Browser Networking]]> 17985198
Author Ilya Grigorik¡ªa developer advocate and web performance engineer at Google¡ªstarts with the building blocks of TCP and UDP, and then dives into newer technologies such as HTTP 2.0, WebSockets, and WebRTC. This book explains the benefits of these technologies and helps you determine which ones to use for your next application.

- Learn how TCP affects the performance of HTTP
- Understand why mobile networks are slower than wired networks
- Use best practices to address performance bottlenecks in HTTP
- Discover how HTTP 2.0 (based on SPDY) will improve networking
- Learn how to use Server Sent Events (SSE) for push updates, and WebSockets for XMPP chat
- Explore WebRTC for browser-to-browser applications such as P2P video chat
- Examine the architecture of a simple app that uses HTTP 2.0, SSE, WebSockets, and WebRTC]]>
400 Ilya Grigorik Wilson 5 web-development, favourites 4.51 2013 High Performance Browser Networking
author: Ilya Grigorik
name: Wilson
average rating: 4.51
book published: 2013
rating: 5
read at: 2017/12/17
date added: 2018/04/20
shelves: web-development, favourites
review:

]]>
<![CDATA[Secrets of the JavaScript Ninja]]> 31935361 464 John Resig Wilson 5 web-development, favourites 4.61 2008 Secrets of the JavaScript Ninja
author: John Resig
name: Wilson
average rating: 4.61
book published: 2008
rating: 5
read at: 2017/08/21
date added: 2018/04/20
shelves: web-development, favourites
review:
One of the best books to turn your JS knowledge from intermediate to advanced, I loved every chapter. Concepts are explained in such a granular way that even if you haven't read about it much before hand, you'll be able to get a grasp of it and follow along.
]]>
<![CDATA[Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript (Effective Software Development Series)]]> 13705402 240 David Herman 0321812182 Wilson 5 web-development, favourites 4.32 2012 Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript (Effective Software Development Series)
author: David Herman
name: Wilson
average rating: 4.32
book published: 2012
rating: 5
read at: 2017/07/17
date added: 2018/04/20
shelves: web-development, favourites
review:
Nice and easy read, I loved this book. If you're beginning with JavaScript, you'll find the concepts will really help you master the language, but even if you're experienced, there are most likely stuff here you didn't know before, and in some parts you'll find yourself saying: "I knew that worked like that, but didn't know why!". This book is a must read for every JS developer out there.
]]>
CSS: The Missing Manual 26248641 715 David Sawyer McFarland 1491918055 Wilson 3 web-development, dropped
Then I stopped and plan to go with Eric Meyer's CSS: The Definitive Guide, for the following reasons:

- I'm not sure why a book this big, which is even about CSS, is written with a sans-serif font instead of a serif one which is less exhausting to read as it helps the human eye follow the sequences of words.
- The author repeatedly mentions a version of the phrase: "this is what web designers do nowadays". While, that's not necessarily bad, I'm not trying to do things cause other people do it, I'd just like to do the right thing, perhaps this is what he really means to say but for me it feels he's trying to sound more credible by stating that other experts would do the same things.
- I know this book is intended to be for a wider audience included people who know nothing about CSS, but I think the examples are way too granular which just makes the whole book inflated. I mean, if someone decides to read a CSS book, I would expect them to know how to operate a mouse and how to get a context menu with a right click. Examples are bloated with these type of steps directed to an audience with little to no knowledge about computers which in my opinion just get in the way.]]>
4.09 2006 CSS: The Missing Manual
author: David Sawyer McFarland
name: Wilson
average rating: 4.09
book published: 2006
rating: 3
read at:
date added: 2018/04/20
shelves: web-development, dropped
review:
I only read about 200 pages of the book, the content seemed good and concepts are broken down in an easy to grasp way.

Then I stopped and plan to go with Eric Meyer's CSS: The Definitive Guide, for the following reasons:

- I'm not sure why a book this big, which is even about CSS, is written with a sans-serif font instead of a serif one which is less exhausting to read as it helps the human eye follow the sequences of words.
- The author repeatedly mentions a version of the phrase: "this is what web designers do nowadays". While, that's not necessarily bad, I'm not trying to do things cause other people do it, I'd just like to do the right thing, perhaps this is what he really means to say but for me it feels he's trying to sound more credible by stating that other experts would do the same things.
- I know this book is intended to be for a wider audience included people who know nothing about CSS, but I think the examples are way too granular which just makes the whole book inflated. I mean, if someone decides to read a CSS book, I would expect them to know how to operate a mouse and how to get a context menu with a right click. Examples are bloated with these type of steps directed to an audience with little to no knowledge about computers which in my opinion just get in the way.
]]>
<![CDATA[JavaScript: The Definitive Guide]]> 8143605 JavaScript: The Definitive Guide has been the bible for JavaScript programmers¡ªa programmer's guide and comprehensive reference to the core language and to the client-side JavaScript APIs defined by web browsers. The 6th edition covers HTML5 and ECMAScript 5, with new chapters on jQuery and server side JavaScript. It's recommended for experienced programmers who want to learn the programming language of the Web, and for current JavaScript programmers who want to master it.]]> 1093 David Flanagan 0596805527 Wilson 4 web-development Review

Unopinionated guide of pretty much every JS detail, it doesn't get into many suggestions on JS features to avoid or anything like it, the purpose is to explore the complete breadth and depth of the language available to you (up until ES5). I don't think it's a learn-to-program guide to complete beginners, for instance, not like Eloquent JavaScript by Marijn Haverbeke.

I feel the book should've covered the event loop which is fundamental in order to completely understand JavaScript's single threaded execution and event processing.

I like the scripting, clever-ish style used on the code samples which stretch the dynamic nature of the language, they just keep the book interesting.

Notes

Statements/Expressions

- Variable names cannot start with numbers in order to recognise numbers faster.
- Exponential notation: 3e3 = 3 * (10^3), 3e-3 = 3 * (10^-3).
- Underflow: when the result of an operation returns a value closer to zero than the smallest representable number.
* Result is 0 unless it happens from a negative number, when result is -0 like -Number.MIN_VALUE/2 or -1/INFINITY.
- Division by zero = NaN.
- Number.MAX_VALUE + 1 = Number.POSITIVE_INFINITY.
- NaN is the only value not equal to itself.
- -0 == 0 but 1/-0 != 1/0 (cause INFINITY != -INFINITY).
- Manipulate monetary values as integer cents to avoid rounding issues.
- JS uses UTF-16 for encoding strings.
- Strings are sequences of 16-bit values, some unicode chars whose code points don't fit, are stored using two 16-bit values known as a surrogate pair.
* String manipulation methods aren't aware of surrogate pairs.
- Using . or [] to access props on null or undefined causes a TypeError.
- Strings are converted to objects (new String(val)) when accessing its properties, once properties are resolved, the object is discarded, same of Number() and Boolean().
- When comparing objects: object to string conversions use toString() then valueOf, object to number is the opposite, trying the second property method if the first doesn't return a primitive value and then converting to a string or number respectively.
- The ==, != and + operators use a special object to primitive conversion, valueOf() first and then toString(), for Dates is the opposite, using the result directly without forcing it to a number or string.
- <, -, and other operators, same as above without the Date special case.
- An expression is evaluated to produce some value.
- A statement is executed to make something happen.
* Statements are formed by combining expressions.
- Labeled statements have local scope, so they're only visible to inner continue and break statements.
- Labeled statements and variables have different namespaces, which means they can use the same identifiers.
- If a finally block throws an exception, that one overrides any other exception thrown in the try block.
* If it issues a return, it returns normally even if there are still not handled exceptions.
- toLocaleString() returns a localised version.
- Assignments return the value just assigned: (t = typeof o) !== "object").

Objects

- Use getters and setters to make object properties read/write only, and to add custom logic on read/write.
- Object.create(MyObject) is the same as "new MyObject()", it creates a new object and assigns the prototype of the passed in constructor as its prototype.
- If constructors functions return a primitive value, it is discarded and an object is returned.
- Object.defineProperties() creates configurable properties.
- Data properties: the normal ones.
- Accessor properties: props with getters and/or setters.
- Object.getOwnPropertyDescriptor() gets the configuration object.
- toString() returns the class of an object: "[object Regexp]".
- Calling JSON.stringify() calls the method toJSON() if present on an object.
- Object.preventExtensions(): new props cannot be added, check with Object.isExtensible().
- Object.seal(): no props can be added, deleted or configured, existing ones are writable, check with Object.isSealed().
- Object.freeze(): all of the above plus readonly existing own data properties but accessor properties can still be modified, check with Object.isFrozen().
* They all return the object they are passed in Object.seal(), etc).

Arrays

- var arr = new Array(10) creates a sparse array by just setting the length prop, the elements are not undefined, they don't exist so arr[1] !== undefined.
* delete arr[1] creates a sparse array, removes the element without changing the length.
* !(index in arr) checks for non-existing elements on sparse arrays.
- Array-like objects: have indexed props and a length prop.
* Arrays on top of that: always update their length prop when adding/removing elements, length is always equals array max index + one, setting length to a smaller value removes elements, setting it to a grater value creates a sparse array.
- Array.isArray() just does arr.toString() === "[object Array]".

Functions

- Calling functions as functions on non-strict mode:
* uses the global scope as the invocation context or if null/undefined is passed to bind, call, apply.
* converts primitive values to their object representation if passed to bind, call, apply.
- Calling them on strict mode:
* defaults invocation context to undefined.
* uses null/undefined and don't convert primitives to objects on bind, call, apply.
- Parenthesis are optional for constructors without arguments: new Object === new Object().
- Variadic/varargs: function with indefinite arity (multiple arguments).
- Remember you can use static props/methods on functions.
- toString() normally returns a string representation of the function including the body.
- You can create functions with the The Function() constructor.
* They don't use lexical scoping, meaning they don't create closures around their parent function and always compile as if they were top-level functions declared in the global scope, so references to parent functions variables will fail.

Classes and Modules

- Functions get a prototype with a single nonenumerable property: constructor.
- For all functions fn the prototype constructor points back to them: fn.prototype.constructor === fn.
* So objects created by these functions inherit a constructor which points back to the function that created them.
- Instance fields: are created inside the function (this.val = some_argument).
- Inherited fields/methods: are added to the prototype.
- Static fields/methods: are added to the function (myFn.staticMethod = ...).
- instanceOf returns true if the function is part of the object's prototype chain.
* One shortcoming is that it won't work if there are multiple execution contexts like different iframes on a browser cause each frame will have their own version of the objects, i.e. not the same objects.
* So maybe using myObject.toString() which returns "[object myClass]" is more reliable than instanceOf or checking equality agains the constructor function.
* Combine toString() and valueOf() to create interesting enumerated types.

Regular Expressions

- [\b] a literal backspace.
- \b is a word boundary.
- [^...] any char not between the brackets.
- (...) capturing group.
- \n refer to capturing groups.
- (?: ...) group only without capturing.
- (?=p) positive lookahead, require that following characters match "p" but don't include them in the match.
- (?!p) negative lookahead.
- string.search() same as indexOf() but with regex.
- string.split() accepts regex.
- /.../.exec() keeps state and updates a lastIndex prop every time is called, reset the prop to 0 to start from the beginning.

JS Subsets and Extensions

- Describes JS The Good Parts
- It's interesting how this 7-8 year old book is describing ES6, 7 features like: cost, let, destructuring, iterators, generators. As being already included in Mozilla's SpiderMonkey JS engine.
- Rhino is a JS implementation written on Java, it allows access to Java APIs in JS.

Client-Side JS

- You can embed JS in a page using the script tag, html event handlers, javascript: URLs.
- .
- Use arbitrary type="" attributes in script tags to embed content, browsers won't attempt to parse tags with not recognised types.
- Security
* Opening new windows can only happen in most cases in response to user input like click.
* JS code can close windows it opened itself but not others without user confirmation.
* The value prop of FileUpload elements cannot be set.
* Same origin is defined as the protocol, host and port of a document.
* Same origin applies for the origin of the document where the script is loaded and not the src attr of the script itself, i.e. if a host A includes a script hosted by host B, that script has full access to document B (the one who loaded it) and not document A (the one who hosts it).
* It's the reason you can load scripts hosted by, let's say, a CDN into your page.
* You can relax the same-origin policy by setting the domain prop of the Document to something like site.com rather than subdomain.site.com, for all documents/windows you need (e.g. iframes).
* Can use the postMessage() method on window to communicate between fames.
* Access-Control- Allow-Origin for relaxing same-origin policy.

The Window Object

- window.location === document.location
- document.URL is the url of the document when it first loaded, not including hash changes.
- decodeURIComponent() to decode query strings or other URL parts.
- location.assign() loads a specific page, .replace() replaces the browser history entry.
- Cause page updates:
* location = "next-page.com" (relative or absolute).
* location = "#top".
* location.search = "?abc=123".
- history.back(), .forward(), .go().
- You can access the history size (history.length) but not the actual URLs.
- Using .open() and .write() on an iframe can be a way of saving history state on SPA's without modifying the actual document.
- screen.availHeight and width have the available size, not including the task bar, etc.
- window.onerror = (msg, url, line) => {} for capturing unhandled errors, holdover from when JS didn't include try/catch, must return true/false to signal handling, otherwise error will get to the console.
- HTML elements with an id attr get added to the global object if there isn't a prop or global variable with the same name, same for name attr on elements that support it (form, form fields, img, iframe), holdover from early JS days.
- Scripts can interact with multiple windows opened by them (subject to same origin policy).
* window.open().opener contains the opener if opened by .open().
- Accessing frames returns the frame window object:
* window.frames['f1'] / window.frames.f1 / window.f1 / window[1].
- What we call window is actually a WindowProxy that refers to the real window object.

Scripting Documents

- images, forms, links; are props of document, holdover from early days containing HTMLCollection of those element types (only anchor tags with href).
- document.documentElement refers to the root .
- HTMLCollection can be indexed with string names as well as numbers, other than that is pretty much similar to NodeList.
* They have an item() and namedItem() props, not much useful in JS cause of indexed prop access.
* They are live collections, except NodeList returned by querySelectorAll().
- Some browsers won't accept :link or :visited selectors on elements as this exposes browser history information.
- element.children only includes element nodes, childNodes includes also text and comments.
* Can use nodeType to distinguish.
* firstChild, lastChild, nextSibling.. firstElementChild, lastElementChild, nextElementSibling.
- outerHTML.
- element.insetAdjacentHTML() prob not supported in Firefox.
- innerText does not work on script tags, textContent does.
* Treats some table elements as read-only (table, tbody, tr).
* omits extraneous whitespace and tries to keep table formatting.
- Calling appendChild(fr) passing a DocumentFragment, copies all fragment children and leaves it empty.
- Viewport coordinates refer to the size of the visible document (window.innerHeight).
* Document coords also include the scroll position (documentElement.offsetHeight).
- getClientRect() for inline elements that span multiple lines, getBoundingClientRect() otherwise.
* they return viewport coords.
- window[pageXOffset | pageYOffset] or document.documentElement[scrollLeft | scrollTop].
- document.elementFromPoint().
* Mouse events already contain target element.
- window.scrollTo() === .scroll(x, y /* document coords */).
- window.scrollBy().
- element.scrollIntoView(), similar behaviour to window.location.hash.
- element.offsetWidth and height don't include margins.
* .offsetLeft and top are relative to positioned parents, to get the exact position need to add up the parent's offset recursively.
* clientWidth and height is the content size including padding, same as scrollWidth when there's no overflow, zero for inline elements.
* clientLeft and top is the border size.
- Calling form.submit() does not trigger the onsubmit handler.
- document.referrer: link to the page who brought you here (same as HTTP referrer header).
* lastModified, domain, cookie, title.
- document.designMode = 'on' to set the whole document to 'contentditatble'.
* document.execCommand(): runs edit commands on editable elements just like a rich text editor.

Scripting CSS

- el.style.cssText and el.setAttribute('style', val).
- e.style only has inline style attribute, window.getComputedStyle(el, null) for all styles.
* relative values (percent, points) are converted to pixels.
* colours to rgb(), rgba().
* no shorthand properties.
- document.styleSheets[i]
* .disabled = true.
* .cssRules array contains also @import and @page directives.

Handling Events

- Return value is only significant on handlers registered as properties like onbeforeunload.
- Event propagation phases:
* 1st: capturing.
* 2nd: trigger target event handlers.
* 3rd: bubbling.
* readystatechange is invoked right before window.load so maybe DOMContentLoaded is better (invoked when DOM is parsed and deferred scripts complete).

Scripted HTTP

- Ajax could be done by setting the src of an img tag and passing query strings which triggers a GET, the server must respond with an image, even a 1x1 pixels (web bugs).
* Set the src of a hidden iframe, traversing iframes is subject to same-origin policy.
* Set the src of a script tag, which is not subject to same-origin and can do cross-domain communication, data returned is JSON-encoded.
^ Called JSONP: cause your service must send a padded-JSON response, i.e. passing the response as the argument to the passed callback which is then executed when the script downloads.
- Content-Length, Date, Referrer, User-Agent headers are added automatically by XHR.
* as well as handling cookies, charset, encoding, connection lifetime.
- XHR request construction must follow an order:
* req.open().
* req.setRequestHeader().
* req.send().
- req.responseText for text MIME types.
* req.responseXML for parsed, traversable HTML documents.
* can override response MIME types and charset to prevent incorrect parsing.
* FormData() can be used to transfer multipart/form-data which can include multiple file uploads and other data types.
- CORS has to be supported by the browser.
* XHR doesn't send usernames, pwd, cookies or HTTP authentication tokens as part of CORS requests.
- EventSource API for server sent events.

Client-Side Storage

- Cookies, old API designed for server-side scripting, they're appended to every HTTP request, tend to store small pieces of data, implemented as an extension of HTTP.
* Cookie in computing: small chunk of privileged or secret data.
* Default lifetime is the browser process (not the tab), can be changed using max-age.
* Default scope includes url path as well, can be changed to whole site by path='/'.
* Values can't have commas, semicolons, spaces, store encoded with encodeURIComponent().
* All cookies are stored as a string in document.cookie divided by semicolons.
- Web Storage is newer, easier API, used to enhance user experience.
* shared by same-origin (protocol, host, port).
* not shared among browser vendors.
* can trigger change events.
- Cache Manifest: store the whole app locally.
- localStorage is permanent.
- sessionStorage has tab-scope also, dies when the tab is closed (may still be there is same tab is reopened).

HTML5 APIs

- History can hold state, including types like imageData, date, file.
* It takes in a Structured Clone as state param (deep copy or clone).
- postMessage() allow cross-origin communication between windows.
- WebWorker can receive a structured clone as well.
* Use the synchronous self.importScripts() inside workers.
- Typed arrays hold only numbers and are way faster than normal arrays.
* They're views of an underlying ArrayBuffer.
* Use the DataView type to modify ArrayBuffer.
- URL.createObjectURL() for BLOB, File, MediaStream.
* URL.revokeObjectURL() to allow for garbage collection.]]>
4.08 1996 JavaScript: The Definitive Guide
author: David Flanagan
name: Wilson
average rating: 4.08
book published: 1996
rating: 4
read at: 2018/03/18
date added: 2018/04/07
shelves: web-development
review:
Review

Unopinionated guide of pretty much every JS detail, it doesn't get into many suggestions on JS features to avoid or anything like it, the purpose is to explore the complete breadth and depth of the language available to you (up until ES5). I don't think it's a learn-to-program guide to complete beginners, for instance, not like Eloquent JavaScript by Marijn Haverbeke.

I feel the book should've covered the event loop which is fundamental in order to completely understand JavaScript's single threaded execution and event processing.

I like the scripting, clever-ish style used on the code samples which stretch the dynamic nature of the language, they just keep the book interesting.

Notes

Statements/Expressions

- Variable names cannot start with numbers in order to recognise numbers faster.
- Exponential notation: 3e3 = 3 * (10^3), 3e-3 = 3 * (10^-3).
- Underflow: when the result of an operation returns a value closer to zero than the smallest representable number.
* Result is 0 unless it happens from a negative number, when result is -0 like -Number.MIN_VALUE/2 or -1/INFINITY.
- Division by zero = NaN.
- Number.MAX_VALUE + 1 = Number.POSITIVE_INFINITY.
- NaN is the only value not equal to itself.
- -0 == 0 but 1/-0 != 1/0 (cause INFINITY != -INFINITY).
- Manipulate monetary values as integer cents to avoid rounding issues.
- JS uses UTF-16 for encoding strings.
- Strings are sequences of 16-bit values, some unicode chars whose code points don't fit, are stored using two 16-bit values known as a surrogate pair.
* String manipulation methods aren't aware of surrogate pairs.
- Using . or [] to access props on null or undefined causes a TypeError.
- Strings are converted to objects (new String(val)) when accessing its properties, once properties are resolved, the object is discarded, same of Number() and Boolean().
- When comparing objects: object to string conversions use toString() then valueOf, object to number is the opposite, trying the second property method if the first doesn't return a primitive value and then converting to a string or number respectively.
- The ==, != and + operators use a special object to primitive conversion, valueOf() first and then toString(), for Dates is the opposite, using the result directly without forcing it to a number or string.
- <, -, and other operators, same as above without the Date special case.
- An expression is evaluated to produce some value.
- A statement is executed to make something happen.
* Statements are formed by combining expressions.
- Labeled statements have local scope, so they're only visible to inner continue and break statements.
- Labeled statements and variables have different namespaces, which means they can use the same identifiers.
- If a finally block throws an exception, that one overrides any other exception thrown in the try block.
* If it issues a return, it returns normally even if there are still not handled exceptions.
- toLocaleString() returns a localised version.
- Assignments return the value just assigned: (t = typeof o) !== "object").

Objects

- Use getters and setters to make object properties read/write only, and to add custom logic on read/write.
- Object.create(MyObject) is the same as "new MyObject()", it creates a new object and assigns the prototype of the passed in constructor as its prototype.
- If constructors functions return a primitive value, it is discarded and an object is returned.
- Object.defineProperties() creates configurable properties.
- Data properties: the normal ones.
- Accessor properties: props with getters and/or setters.
- Object.getOwnPropertyDescriptor() gets the configuration object.
- toString() returns the class of an object: "[object Regexp]".
- Calling JSON.stringify() calls the method toJSON() if present on an object.
- Object.preventExtensions(): new props cannot be added, check with Object.isExtensible().
- Object.seal(): no props can be added, deleted or configured, existing ones are writable, check with Object.isSealed().
- Object.freeze(): all of the above plus readonly existing own data properties but accessor properties can still be modified, check with Object.isFrozen().
* They all return the object they are passed in Object.seal(), etc).

Arrays

- var arr = new Array(10) creates a sparse array by just setting the length prop, the elements are not undefined, they don't exist so arr[1] !== undefined.
* delete arr[1] creates a sparse array, removes the element without changing the length.
* !(index in arr) checks for non-existing elements on sparse arrays.
- Array-like objects: have indexed props and a length prop.
* Arrays on top of that: always update their length prop when adding/removing elements, length is always equals array max index + one, setting length to a smaller value removes elements, setting it to a grater value creates a sparse array.
- Array.isArray() just does arr.toString() === "[object Array]".

Functions

- Calling functions as functions on non-strict mode:
* uses the global scope as the invocation context or if null/undefined is passed to bind, call, apply.
* converts primitive values to their object representation if passed to bind, call, apply.
- Calling them on strict mode:
* defaults invocation context to undefined.
* uses null/undefined and don't convert primitives to objects on bind, call, apply.
- Parenthesis are optional for constructors without arguments: new Object === new Object().
- Variadic/varargs: function with indefinite arity (multiple arguments).
- Remember you can use static props/methods on functions.
- toString() normally returns a string representation of the function including the body.
- You can create functions with the The Function() constructor.
* They don't use lexical scoping, meaning they don't create closures around their parent function and always compile as if they were top-level functions declared in the global scope, so references to parent functions variables will fail.

Classes and Modules

- Functions get a prototype with a single nonenumerable property: constructor.
- For all functions fn the prototype constructor points back to them: fn.prototype.constructor === fn.
* So objects created by these functions inherit a constructor which points back to the function that created them.
- Instance fields: are created inside the function (this.val = some_argument).
- Inherited fields/methods: are added to the prototype.
- Static fields/methods: are added to the function (myFn.staticMethod = ...).
- instanceOf returns true if the function is part of the object's prototype chain.
* One shortcoming is that it won't work if there are multiple execution contexts like different iframes on a browser cause each frame will have their own version of the objects, i.e. not the same objects.
* So maybe using myObject.toString() which returns "[object myClass]" is more reliable than instanceOf or checking equality agains the constructor function.
* Combine toString() and valueOf() to create interesting enumerated types.

Regular Expressions

- [\b] a literal backspace.
- \b is a word boundary.
- [^...] any char not between the brackets.
- (...) capturing group.
- \n refer to capturing groups.
- (?: ...) group only without capturing.
- (?=p) positive lookahead, require that following characters match "p" but don't include them in the match.
- (?!p) negative lookahead.
- string.search() same as indexOf() but with regex.
- string.split() accepts regex.
- /.../.exec() keeps state and updates a lastIndex prop every time is called, reset the prop to 0 to start from the beginning.

JS Subsets and Extensions

- Describes JS The Good Parts
- It's interesting how this 7-8 year old book is describing ES6, 7 features like: cost, let, destructuring, iterators, generators. As being already included in Mozilla's SpiderMonkey JS engine.
- Rhino is a JS implementation written on Java, it allows access to Java APIs in JS.

Client-Side JS

- You can embed JS in a page using the script tag, html event handlers, javascript: URLs.
- .
- Use arbitrary type="" attributes in script tags to embed content, browsers won't attempt to parse tags with not recognised types.
- Security
* Opening new windows can only happen in most cases in response to user input like click.
* JS code can close windows it opened itself but not others without user confirmation.
* The value prop of FileUpload elements cannot be set.
* Same origin is defined as the protocol, host and port of a document.
* Same origin applies for the origin of the document where the script is loaded and not the src attr of the script itself, i.e. if a host A includes a script hosted by host B, that script has full access to document B (the one who loaded it) and not document A (the one who hosts it).
* It's the reason you can load scripts hosted by, let's say, a CDN into your page.
* You can relax the same-origin policy by setting the domain prop of the Document to something like site.com rather than subdomain.site.com, for all documents/windows you need (e.g. iframes).
* Can use the postMessage() method on window to communicate between fames.
* Access-Control- Allow-Origin for relaxing same-origin policy.

The Window Object

- window.location === document.location
- document.URL is the url of the document when it first loaded, not including hash changes.
- decodeURIComponent() to decode query strings or other URL parts.
- location.assign() loads a specific page, .replace() replaces the browser history entry.
- Cause page updates:
* location = "next-page.com" (relative or absolute).
* location = "#top".
* location.search = "?abc=123".
- history.back(), .forward(), .go().
- You can access the history size (history.length) but not the actual URLs.
- Using .open() and .write() on an iframe can be a way of saving history state on SPA's without modifying the actual document.
- screen.availHeight and width have the available size, not including the task bar, etc.
- window.onerror = (msg, url, line) => {} for capturing unhandled errors, holdover from when JS didn't include try/catch, must return true/false to signal handling, otherwise error will get to the console.
- HTML elements with an id attr get added to the global object if there isn't a prop or global variable with the same name, same for name attr on elements that support it (form, form fields, img, iframe), holdover from early JS days.
- Scripts can interact with multiple windows opened by them (subject to same origin policy).
* window.open().opener contains the opener if opened by .open().
- Accessing frames returns the frame window object:
* window.frames['f1'] / window.frames.f1 / window.f1 / window[1].
- What we call window is actually a WindowProxy that refers to the real window object.

Scripting Documents

- images, forms, links; are props of document, holdover from early days containing HTMLCollection of those element types (only anchor tags with href).
- document.documentElement refers to the root .
- HTMLCollection can be indexed with string names as well as numbers, other than that is pretty much similar to NodeList.
* They have an item() and namedItem() props, not much useful in JS cause of indexed prop access.
* They are live collections, except NodeList returned by querySelectorAll().
- Some browsers won't accept :link or :visited selectors on elements as this exposes browser history information.
- element.children only includes element nodes, childNodes includes also text and comments.
* Can use nodeType to distinguish.
* firstChild, lastChild, nextSibling.. firstElementChild, lastElementChild, nextElementSibling.
- outerHTML.
- element.insetAdjacentHTML() prob not supported in Firefox.
- innerText does not work on script tags, textContent does.
* Treats some table elements as read-only (table, tbody, tr).
* omits extraneous whitespace and tries to keep table formatting.
- Calling appendChild(fr) passing a DocumentFragment, copies all fragment children and leaves it empty.
- Viewport coordinates refer to the size of the visible document (window.innerHeight).
* Document coords also include the scroll position (documentElement.offsetHeight).
- getClientRect() for inline elements that span multiple lines, getBoundingClientRect() otherwise.
* they return viewport coords.
- window[pageXOffset | pageYOffset] or document.documentElement[scrollLeft | scrollTop].
- document.elementFromPoint().
* Mouse events already contain target element.
- window.scrollTo() === .scroll(x, y /* document coords */).
- window.scrollBy().
- element.scrollIntoView(), similar behaviour to window.location.hash.
- element.offsetWidth and height don't include margins.
* .offsetLeft and top are relative to positioned parents, to get the exact position need to add up the parent's offset recursively.
* clientWidth and height is the content size including padding, same as scrollWidth when there's no overflow, zero for inline elements.
* clientLeft and top is the border size.
- Calling form.submit() does not trigger the onsubmit handler.
- document.referrer: link to the page who brought you here (same as HTTP referrer header).
* lastModified, domain, cookie, title.
- document.designMode = 'on' to set the whole document to 'contentditatble'.
* document.execCommand(): runs edit commands on editable elements just like a rich text editor.

Scripting CSS

- el.style.cssText and el.setAttribute('style', val).
- e.style only has inline style attribute, window.getComputedStyle(el, null) for all styles.
* relative values (percent, points) are converted to pixels.
* colours to rgb(), rgba().
* no shorthand properties.
- document.styleSheets[i]
* .disabled = true.
* .cssRules array contains also @import and @page directives.

Handling Events

- Return value is only significant on handlers registered as properties like onbeforeunload.
- Event propagation phases:
* 1st: capturing.
* 2nd: trigger target event handlers.
* 3rd: bubbling.
* readystatechange is invoked right before window.load so maybe DOMContentLoaded is better (invoked when DOM is parsed and deferred scripts complete).

Scripted HTTP

- Ajax could be done by setting the src of an img tag and passing query strings which triggers a GET, the server must respond with an image, even a 1x1 pixels (web bugs).
* Set the src of a hidden iframe, traversing iframes is subject to same-origin policy.
* Set the src of a script tag, which is not subject to same-origin and can do cross-domain communication, data returned is JSON-encoded.
^ Called JSONP: cause your service must send a padded-JSON response, i.e. passing the response as the argument to the passed callback which is then executed when the script downloads.
- Content-Length, Date, Referrer, User-Agent headers are added automatically by XHR.
* as well as handling cookies, charset, encoding, connection lifetime.
- XHR request construction must follow an order:
* req.open().
* req.setRequestHeader().
* req.send().
- req.responseText for text MIME types.
* req.responseXML for parsed, traversable HTML documents.
* can override response MIME types and charset to prevent incorrect parsing.
* FormData() can be used to transfer multipart/form-data which can include multiple file uploads and other data types.
- CORS has to be supported by the browser.
* XHR doesn't send usernames, pwd, cookies or HTTP authentication tokens as part of CORS requests.
- EventSource API for server sent events.

Client-Side Storage

- Cookies, old API designed for server-side scripting, they're appended to every HTTP request, tend to store small pieces of data, implemented as an extension of HTTP.
* Cookie in computing: small chunk of privileged or secret data.
* Default lifetime is the browser process (not the tab), can be changed using max-age.
* Default scope includes url path as well, can be changed to whole site by path='/'.
* Values can't have commas, semicolons, spaces, store encoded with encodeURIComponent().
* All cookies are stored as a string in document.cookie divided by semicolons.
- Web Storage is newer, easier API, used to enhance user experience.
* shared by same-origin (protocol, host, port).
* not shared among browser vendors.
* can trigger change events.
- Cache Manifest: store the whole app locally.
- localStorage is permanent.
- sessionStorage has tab-scope also, dies when the tab is closed (may still be there is same tab is reopened).

HTML5 APIs

- History can hold state, including types like imageData, date, file.
* It takes in a Structured Clone as state param (deep copy or clone).
- postMessage() allow cross-origin communication between windows.
- WebWorker can receive a structured clone as well.
* Use the synchronous self.importScripts() inside workers.
- Typed arrays hold only numbers and are way faster than normal arrays.
* They're views of an underlying ArrayBuffer.
* Use the DataView type to modify ArrayBuffer.
- URL.createObjectURL() for BLOB, File, MediaStream.
* URL.revokeObjectURL() to allow for garbage collection.
]]>
<![CDATA[Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration]]> 18077903 ¡°What does it mean to manage well?¡±
From Ed Catmull, co-founder (with Steve Jobs and John Lasseter) of Pixar Animation Studios, comes an incisive book about creativity in business¡ªsure to appeal to readers of Daniel Pink, Tom Peters, and Chip and Dan Heath. Creativity, Inc. is a book for managers who want to lead their employees to new heights, a manual for anyone who strives for originality, and the first-ever, all-access trip into the nerve center of Pixar Animation¡ªinto the meetings, postmortems, and ¡°Braintrust¡± sessions where some of the most successful films in history are made. It is, at heart, a book about how to build a creative culture¡ªbut it is also, as Pixar co-founder and president Ed Catmull writes, ¡°an expression of the ideas that I believe make the best in us possible.¡± For nearly twenty years, Pixar has dominated the world of animation, producing such beloved films as the Toy Story trilogy, Monsters, Inc., Finding Nemo, The Incredibles, Up, and WALL-E, which have gone on to set box-office records and garner thirty Academy Awards. The joyousness of the storytelling, the inventive plots, the emotional authenticity: In some ways, Pixar movies are an object lesson in what creativity really is. Here, in this book, Catmull reveals the ideals and techniques that have made Pixar so widely admired¡ªand so profitable.
?
As a young man, Ed Catmull had a dream: to make the first computer-animated movie. He nurtured that dream as a Ph.D. student at the University of Utah, where many computer science pioneers got their start, and then forged a partnership with George Lucas that led, indirectly, to his founding Pixar with Steve Jobs and John Lasseter in 1986. Nine years later, Toy Story was released, changing animation forever. The essential ingredient in that movie¡¯s success¡ªand in the thirteen movies that followed¡ªwas the unique environment that Catmull and his colleagues built at Pixar, based on philosophies that protect the creative process and defy convention, such as:
?
? Give a good idea to a mediocre team, and they will screw it up. But give a mediocre idea to a great team, and they will either fix it or come up with something better.
? If you don¡¯t strive to uncover what is unseen and understand its nature, you will be ill prepared to lead.
? It¡¯s not the manager¡¯s job to prevent risks. It¡¯s the manager¡¯s job to make it safe for others to take them.
? The cost of preventing errors is often far greater than the cost of fixing them.
? A company¡¯s communication structure should not mirror its organizational structure. Everybody should be able to talk to anybody.
? Do not assume that general agreement will lead to change¡ªit takes substantial energy to move a group, even when all are on board.]]>
368 Ed Catmull 0812993012 Wilson 0 to-read, business, nonfiction 4.19 2014 Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration
author: Ed Catmull
name: Wilson
average rating: 4.19
book published: 2014
rating: 0
read at:
date added: 2018/04/06
shelves: to-read, business, nonfiction
review:

]]>
<![CDATA[Vision and Art: The Biology of Seeing]]> 56580 208 Margaret S. Livingstone 0810904063 Wilson 0 4.15 2002 Vision and Art: The Biology of Seeing
author: Margaret S. Livingstone
name: Wilson
average rating: 4.15
book published: 2002
rating: 0
read at:
date added: 2018/04/05
shelves: to-read, nonfiction, psycology, science
review:

]]>
<![CDATA[Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers)]]> 1069827 350 Michael T. Nygard 0978739213 Wilson 0 4.24 2007 Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers)
author: Michael T. Nygard
name: Wilson
average rating: 4.24
book published: 2007
rating: 0
read at:
date added: 2018/03/29
shelves: to-read, software-architecture
review:

]]>
<![CDATA[CSS Secrets: Better Solutions to Everyday Web Design Problems]]> 20830437
The talks that spawned this book have been top-rated by attendees in every conference they were presented, and praised in industry media such as ."net" magazine.Get information you won't find in any other bookLearn through small, easily digestible chaptersHelps you understand CSS more deeply so you can improve your own solutionsApply Lea's techniques to practically every CSS problem you faceGain tips from a rockstar author who serves as an Invited Expert in W3C's CSS Working Group]]>
354 Lea Verou 1449372635 Wilson 0 web-development, to-read 4.52 2014 CSS Secrets: Better Solutions to Everyday Web Design Problems
author: Lea Verou
name: Wilson
average rating: 4.52
book published: 2014
rating: 0
read at:
date added: 2018/03/24
shelves: web-development, to-read
review:

]]>
<![CDATA[The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing]]> 22318578 Japanese cleaning consultant Marie Kondo takes tidying to a whole new level, promising that if you properly simplify and organize your home once, you'll never have to do it again. Most methods advocate a room-by-room or little-by-little approach, which doom you to pick away at your piles of stuff forever. The KonMari Method, with its revolutionary category-by-category system, leads to lasting results. In fact, none of Kondo's clients have lapsed (and she still has a three-month waiting list).

With detailed guidance for determining which items in your house "spark joy" (and which don't), this international best seller featuring Tokyo's newest lifestyle phenomenon will help you clear your clutter and enjoy the unique magic of a tidy home - and the calm, motivated mindset it can inspire.

]]>
213 Marie Kond¨­ 1607747308 Wilson 0 3.88 2010 The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing
author: Marie Kond¨­
name: Wilson
average rating: 3.88
book published: 2010
rating: 0
read at:
date added: 2018/03/21
shelves: to-read, nonfiction, productivity
review:

]]>
A Brief History of Time 3869
Told in language we all can understand, A Brief History of Time plunges into the exotic realms of black holes and quarks, of antimatter and ¡°arrows of time,¡± of the big bang and a bigger God¡ªwhere the possibilities are wondrous and unexpected. With exciting images and profound imagination, Stephen Hawking brings us closer to the ultimate secrets at the very heart of creation.]]>
226 Stephen Hawking 0553380168 Wilson 0 4.22 1988 A Brief History of Time
author: Stephen Hawking
name: Wilson
average rating: 4.22
book published: 1988
rating: 0
read at:
date added: 2018/03/20
shelves: to-read, nonfiction, history, science, philosophy
review:

]]>
<![CDATA[Positive Discipline: The Classic Guide to Helping Children Develop Self-Discipline, Responsibility, Cooperation, and Problem-Solving Skills]]> 188497
? bridge communication gaps
? defuse power struggles
? avoid the dangers of praise
? enforce your message of love
? build on strengths, not weaknesses
? hold children accountable with their self-respect intact
? teach children not what to think but how to think
? win cooperation at home and at school
? meet the special challenge of teen misbehavior

¡°It is not easy to improve a classic book, but Jane Nelson has done so in this revised edition. Packed with updated examples that are clear and specific, Positive Discipline shows parents exactly how to focus on solutions while being kind and firm. If you want to enrich your relationship with your children, this is the book for you.¡±
¨CSal Severe, author of?How to Behave So Your Children Will, Too!


Millions of children have already benefited from the counsel in this wise and warmhearted book, which features dozens of true stories of positive discipline in action. Give your child the tools he or she needs for a well-adjusted life with this proven treasure trove of practical advice.]]>
349 Jane Nelsen 0345487672 Wilson 0 to-read, parenting 4.24 1981 Positive Discipline: The Classic Guide to Helping Children Develop Self-Discipline, Responsibility, Cooperation, and Problem-Solving Skills
author: Jane Nelsen
name: Wilson
average rating: 4.24
book published: 1981
rating: 0
read at:
date added: 2018/03/18
shelves: to-read, parenting
review:

]]>
The Art of Seduction 20995 Robert Greene's bold, elegant, and ingenious manual of modern manipulation, The 48 Laws of Power. Now Greene has once again mined history and literature to distill the essence of seduction, the most highly refined mode of influence, the ultimate power trip.

The Art of Seduction is a masterful synthesis of the work of thinkers such as Freud, Ovid, Kierkegaard, and Einstein, as well as the achievements of the greatest seducers throughout history. From Cleopatra to John F. Kennedy, from Andy Warhol to Josephine Bonaparte, The Art of Seduction gets to the heart of the character of the seducer and his or her tactics, triumphs and failures. The seducer's many faces include: the Siren, the Rake, the Ideal Lover, the Dandy, the Natural, the Coquette, the Charmer, and the Charismatic. Twenty-four maneuvers will guide readers through the seduction process, providing cunning, amoral instructions for and analysis of this fascinating, all-pervasive form of power. Just as beautifully packaged and every bit as essential as The 48 Laws of Power, The Art of Seduction is an indispensable primer of persuasion and offers the best lessons on how to take what you want from whomever you want or how to prevent yourself from being taken.]]>
466 Robert Greene 1861977697 Wilson 0 3.93 2001 The Art of Seduction
author: Robert Greene
name: Wilson
average rating: 3.93
book published: 2001
rating: 0
read at:
date added: 2018/03/18
shelves: to-read, business, psycology, nonfiction
review:

]]>
Refactoring to Patterns 85041
This book introduces the theory and practice of pattern-directed refactorings: sequences of low-level refactorings that allow designers to safely move designs to, towards, or away from pattern implementations. Using code from real-world projects, Kerievsky documents the thinking and steps underlying over two dozen pattern-based design transformations. Along the way he offers insights into pattern differences and how to implement patterns in the simplest possible ways.

Coverage includes: A catalog of twenty-seven pattern-directed refactorings, featuring real-world code examples Descriptions of twelve design smells that indicate the need for this book s refactorings General information and new insights about patterns and refactoringDetailed implementation mechanics: how low-level refactorings are combined to implement high-level patterns Multiple ways to implement the same pattern and when to use each Practical ways to get started even if you have little experience with patterns or refactoring

"Refactoring to Patterns" reflects three years of refinement and the insights of more than sixty software engineering thought leaders in the global patterns, refactoring, and agile development communities. Whether you re focused on legacy or greenfield development, this book will make you a better software designer by helping you learn how to make important design changes safely and effectively.
"]]>
367 Joshua Kerievsky 0321213351 Wilson 3 software-architecture
And even if my expectations would've been met, I now realise you wouldn't need a book to describe this relation between patterns and refactoring, that is, I think it's easy to figure it out on your own after thoroughly grasping both concepts individually.]]>
4.05 2004 Refactoring to Patterns
author: Joshua Kerievsky
name: Wilson
average rating: 4.05
book published: 2004
rating: 3
read at: 2018/01/13
date added: 2018/03/11
shelves: software-architecture
review:
This book is presented as the connection between Design Patterns [GoF] and Refactoring [Fowler]. Overall content is good and thoroughly explained. I was expecting it to have a structure like: refactoring ABC from Fowler can be matched with patterns X, Y, Z from GoF. However, it feels more like a paraphrased version of Fowler's Refactoring book, which makes it feel repetitive.

And even if my expectations would've been met, I now realise you wouldn't need a book to describe this relation between patterns and refactoring, that is, I think it's easy to figure it out on your own after thoroughly grasping both concepts individually.
]]>
<![CDATA[On Writing Well: The Classic Guide to Writing Nonfiction]]> 53343 On Writing Well has been praised for its sound advice, its clarity and the warmth of its style. It is a book for everybody who wants to learn how to write or who needs to do some writing to get through the day, as almost everybody does in the age of e-mail and the Internet. Whether you want to write about people or places, science and technology, business, sports, the arts or about yourself in the increasingly popular memoir genre, On Writing Well offers you fundamental priciples as well as the insights of a distinguished writer and teacher. With more than a million copies sold, this volume has stood the test of time and remains a valuable resource for writers and would-be writers.]]> 321 William Zinsser 0060891548 Wilson 0 4.23 1976 On Writing Well: The Classic Guide to Writing Nonfiction
author: William Zinsser
name: Wilson
average rating: 4.23
book published: 1976
rating: 0
read at:
date added: 2018/02/28
shelves: to-read, business, nonfiction, productivity
review:

]]>
<![CDATA[Hooked: How to Build Habit-Forming Products]]> 22668729 How do successful companies create products people can¡¯t put down?

Why do some products capture widespread attention while others flop? What makes us engage with certain products out of sheer habit? Is there a pattern underlying how technologies hook us?
Nir Eyal answers these questions (and many more) by explaining the Hook Model¡ªa four-step process embedded into the products of many successful companies to subtly encourage customer behavior. Through consecutive ¡°hook cycles,¡± these products reach their ultimate goal of bringing users back again and again without depending on costly advertising or aggressive messaging.


Hooked is based on Eyal¡¯s years of research, consulting, and practical experience. He wrote the book he wished had been available to him as a start-up founder¡ªnot abstract theory, but a how-to guide for building better products. Hooked is written for product managers, designers, marketers, start-up founders, and anyone who seeks to understand how products influence our behavior.


Eyal provides readers with:


? Practical insights to create user habits that stick.
? Actionable steps for building products people love.

? Fascinating examples from the iPhone to Twitter, Pinterest to the Bible App, and many other habit-forming products.]]>
256 Nir Eyal 1591847788 Wilson 4
The authors explain why some companies succeed while others providing similar products do not. The book main topic is about how to keep users engaged and coming back to your product by implementing what they call the Hook Model.]]>
4.12 2013 Hooked: How to Build Habit-Forming Products
author: Nir Eyal
name: Wilson
average rating: 4.12
book published: 2013
rating: 4
read at: 2017/09/12
date added: 2018/02/28
shelves: web-design, business, psycology
review:
Great book for understanding user behaviours and the reasoning behind user decisions, all based on the basics of human psycology.

The authors explain why some companies succeed while others providing similar products do not. The book main topic is about how to keep users engaged and coming back to your product by implementing what they call the Hook Model.
]]>
<![CDATA[Homo Deus: A History of Tomorrow]]> 31138556 Yuval Noah Harari, author of the critically-acclaimed New York Times bestseller and international phenomenon Sapiens, returns with an equally original, compelling, and provocative book, turning his focus toward humanity¡¯s future, and our quest to upgrade humans into gods.

Over the past century humankind has managed to do the impossible and rein in famine, plague, and war. This may seem hard to accept, but, as Harari explains in his trademark style¡ªthorough, yet riveting¡ªfamine, plague and war have been transformed from incomprehensible and uncontrollable forces of nature into manageable challenges. For the first time ever, more people die from eating too much than from eating too little; more people die from old age than from infectious diseases; and more people commit suicide than are killed by soldiers, terrorists and criminals put together. The average American is a thousand times more likely to die from binging at McDonalds than from being blown up by Al Qaeda.

What then will replace famine, plague, and war at the top of the human agenda? As the self-made gods of planet earth, what destinies will we set ourselves, and which quests will we undertake? Homo Deus?explores the projects, dreams and nightmares that will shape the twenty-first century¡ªfrom overcoming death to creating artificial life. It asks the fundamental questions: Where do we go from here? And how will we protect this fragile world from our own destructive powers? This is the next stage of evolution. This is?Homo Deus.

With the same insight and clarity that made Sapiens an international hit and a New York Times bestseller, Harari maps out our future.

]]>
450 Yuval Noah Harari Wilson 0 4.19 2015 Homo Deus: A History of Tomorrow
author: Yuval Noah Harari
name: Wilson
average rating: 4.19
book published: 2015
rating: 0
read at:
date added: 2018/02/28
shelves: to-read, nonfiction, science, history, philosophy
review:

]]>
<![CDATA[The Structure of Scientific Revolutions]]> 12864174 The Structure of Scientific Revolutions is that kind of book. When it was first published in 1962, it was a landmark event in the history and philosophy of science. Fifty years later, it still has many lessons to teach.

With The Structure of Scientific Revolutions, Kuhn challenged long-standing linear notions of scientific progress, arguing that transformative ideas don¡¯t arise from the day-to-day, gradual process of experimentation and data accumulation but that the revolutions in science, those breakthrough moments that disrupt accepted thinking and offer unanticipated ideas, occur outside of ¡°normal science,¡± as he called it. Though Kuhn was writing when physics ruled the sciences, his ideas on how scientific revolutions bring order to the anomalies that amass over time in research experiments are still instructive in our biotech age.

This new edition of Kuhn¡¯s essential work in the history of science includes an insightful introduction by Ian Hacking, which clarifies terms popularized by Kuhn, including paradigm and incommensurability, and applies Kuhn¡¯s ideas to the science of today. Usefully keyed to the separate sections of the book, Hacking¡¯s introduction provides important background information as well as a contemporary context. ?Newly designed, with an expanded index, this edition will be eagerly welcomed by the next generation of readers seeking to understand the history of our perspectives on science.]]>
264 Thomas S. Kuhn 0226458121 Wilson 0 4.03 1962 The Structure of Scientific Revolutions
author: Thomas S. Kuhn
name: Wilson
average rating: 4.03
book published: 1962
rating: 0
read at:
date added: 2018/02/28
shelves: to-read, philosophy, science, psycology, nonfiction
review:

]]>
<![CDATA[Simplicity Parenting: Using the Extraordinary Power of Less to Raise Calmer, Happier, and More Secure Kids]]> 6129974
Based on Payne¡¯s twenty year¡¯s experience successfully counseling busy families, Simplicity Parenting teaches parents how to worry and hover less¨Cand how to enjoy more. For those who want to slow their children¡¯s lives down but don¡¯t know where to start, Payne offers both inspiration and a blueprint for change.

? Streamline your home environment. The average child has more than 150 toys. Here are tips for reducing the amount of toys, books, and clutter¨Cas well as the lights, sounds, and general sensory overload that crowd the space young imaginations need in order to grow.

? Establish rhythms and rituals. Predictability (routines) and transparency (knowing the day¡¯s plan) are soothing pressure valves for children. Here are ways to ease daily tensions, create battle-free mealtimes and bedtimes, and tell if your child is overwhelmed.

? Schedule a break in the schedule. Too many activities may limit children¡¯s ability to motivate and direct themselves. Learn how to establish intervals of calm in your child¡¯s daily torrent of constant doing¨Cand familiarize yourself with the pros and cons of organized sports and other ¡°enrichment¡± activities.

? Scale back on media and parental involvement. Back out of hyperparenting by managing your children¡¯s ¡°screen time¡± to limit the endless and sometimes scary deluge of information and stimulation.

Parental hovering is really about anxiety; by doing less and trusting more, parents can create a sanctuary that nurtures children¡¯s identity, well-being, and resiliency as they grow¨Cslowly¨Cinto themselves. A manifesto for protecting the grace of childhood, Simplicity Parenting is an eloquent guide to bringing new rhythms to bear on the lifelong art of parenting.]]>
256 Kim John Payne 0345507975 Wilson 0 to-read, parenting 4.21 2009 Simplicity Parenting: Using the Extraordinary Power of Less to Raise Calmer, Happier, and More Secure Kids
author: Kim John Payne
name: Wilson
average rating: 4.21
book published: 2009
rating: 0
read at:
date added: 2018/02/13
shelves: to-read, parenting
review:

]]>
<![CDATA[Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability (Voices That Matter)]]> 18197267
In this 3rd edition, Steve returns with fresh perspective to reexamine the principles that made Don¡¯t Make Me Think a classic-¨Cwith updated examples and a new chapter on mobile usability. And it¡¯s still short, profusely illustrated¡­and best of all¨Cfun to read.

If you¡¯ve read it before, you¡¯ll rediscover what made Don¡¯t Make Me Think so essential to Web designers and developers around the world. If you¡¯ve never read it, you¡¯ll see why so many people have said it should be required reading for anyone working on Web sites.]]>
216 Steve Krug 0321965515 Wilson 5 web-design
Highlights:

- Follow conventions.

- Try to stay consistent but choose clarity over consistency.

- As users, we're always in a hurry.

- We don't read web pages, we scan them, so format content to support scanning.

- We don't just scan an entire page, consider all the available options and choose the most optimal one, we just click on the first thing that resembles what we're looking for, if we misguess and end up in the wrong page, we're just one or two clicks to the back button away from the starting point. It's even more fun to risk guessing it wrong than to thoroughly think about an optimal choice cause we may as well get a pleasant surprise.

- We don't stop and figure out how things work, we muddle through and often use a site in different ways than what it was intended for.

- Happy talk and instructions must die.

- "It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice."

- Websites are missing some of the cues we rely on to measure space, like they've no sense of scale, that is, we don't really know how big a site is, is it 1k or 10k pages?, it's one of the reasons why visited links display in a different colour, to give us some idea of how much ground we've covered.

- When walking around a store you have a sense of direction and location, you sort of know where you physically are, there's no such physicality on a website, which makes bookmarks (stored personal shortcuts) important. As well as home pages, which act as a North Star, a way to reset and get a fresh start to navigate around the site.

- Navigation reveals content.

- There's no such thing as an average user.

- Don't fall in the trap of thinking most users like what you like.

- Don't ask the question: should we use a pull-down menu or another component?, instead ask if that pull-down with those items, in that context, with that wording, on that page, it's a great experience for most users of the site.

- Focus groups are not usability testing, the former is about a small group of people seating around a table to talk about things like their opinion about products, it helps in determining what the audience wants, needs and likes, in the abstract. Sort of a sampling of user's feelings and opinions. While the latter is about watching a single person at a time use something (an app, prototype, sketch, etc), asking her to perform typical tasks so you can find out if your product works and how to improve it.

- To focus groups you bring questions, to usability testing you bring tasks. The former should be performed as part of the planning phase, before design and development so you can find out if your value proposition is attractive. While usability testing should be used throughout the entire process.

- If doing usability testing yourself, try to keep it simple to 3 users or less and do it like once a month. It sounds like too few users but don't worry about finding every problem in a session anyway since you can find more problems in a single morning than you can fix in a month so just focus on finding the most serious usability problems.

- You could have users test competitors sites to get an idea of what works and what doesn't without having to build anything first.

- To focus on main problems ignore "kayak" problems: sometimes users will think for a moment, kind of like a kayak deviating and getting back on course, as long as it happens quickly, if the user's second guess about where to find things is always right, that's good enough.]]>
4.25 2000 Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability (Voices That Matter)
author: Steve Krug
name: Wilson
average rating: 4.25
book published: 2000
rating: 5
read at: 2018/01/14
date added: 2018/01/14
shelves: web-design
review:
Great usability book which does live up to the hype. Quick, easy and fun read. I'd say the chapter about mobile doesn't provide as much value as the rest but I suppose mobile dev was still on an early stage at the time of writing.

Highlights:

- Follow conventions.

- Try to stay consistent but choose clarity over consistency.

- As users, we're always in a hurry.

- We don't read web pages, we scan them, so format content to support scanning.

- We don't just scan an entire page, consider all the available options and choose the most optimal one, we just click on the first thing that resembles what we're looking for, if we misguess and end up in the wrong page, we're just one or two clicks to the back button away from the starting point. It's even more fun to risk guessing it wrong than to thoroughly think about an optimal choice cause we may as well get a pleasant surprise.

- We don't stop and figure out how things work, we muddle through and often use a site in different ways than what it was intended for.

- Happy talk and instructions must die.

- "It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice."

- Websites are missing some of the cues we rely on to measure space, like they've no sense of scale, that is, we don't really know how big a site is, is it 1k or 10k pages?, it's one of the reasons why visited links display in a different colour, to give us some idea of how much ground we've covered.

- When walking around a store you have a sense of direction and location, you sort of know where you physically are, there's no such physicality on a website, which makes bookmarks (stored personal shortcuts) important. As well as home pages, which act as a North Star, a way to reset and get a fresh start to navigate around the site.

- Navigation reveals content.

- There's no such thing as an average user.

- Don't fall in the trap of thinking most users like what you like.

- Don't ask the question: should we use a pull-down menu or another component?, instead ask if that pull-down with those items, in that context, with that wording, on that page, it's a great experience for most users of the site.

- Focus groups are not usability testing, the former is about a small group of people seating around a table to talk about things like their opinion about products, it helps in determining what the audience wants, needs and likes, in the abstract. Sort of a sampling of user's feelings and opinions. While the latter is about watching a single person at a time use something (an app, prototype, sketch, etc), asking her to perform typical tasks so you can find out if your product works and how to improve it.

- To focus groups you bring questions, to usability testing you bring tasks. The former should be performed as part of the planning phase, before design and development so you can find out if your value proposition is attractive. While usability testing should be used throughout the entire process.

- If doing usability testing yourself, try to keep it simple to 3 users or less and do it like once a month. It sounds like too few users but don't worry about finding every problem in a session anyway since you can find more problems in a single morning than you can fix in a month so just focus on finding the most serious usability problems.

- You could have users test competitors sites to get an idea of what works and what doesn't without having to build anything first.

- To focus on main problems ignore "kayak" problems: sometimes users will think for a moment, kind of like a kayak deviating and getting back on course, as long as it happens quickly, if the user's second guess about where to find things is always right, that's good enough.
]]>