The long way through Software Craftsmanship

Refactoring: split loop + loop/map equivalence

Feb 6, 2019 - 2 minute read - Comments - refactoringsplit-loopsplit-loop-refactoringloop-map-equivalencecodekotlinmultiparadigmfunctional-programmingfpobject-oriented-programmingobject-orientedoooop

We can combine the “Split loop” refactoring technique plus the “Loop / Map equivalence” when refactoring.

Given that it does not matter in which order we apply these operations, we can say that they have the associative property

Chart of the operations

Take the case of a loop doing two things. From there:

  • we can replace the loop for a map (including the two actions into a single map body)
  • we can split the loop into two loops

Take the case of two loops, doing one thing each. From there:

  • we can replace a loop for a map
  • we can replace both loops for maps

Take a map doing two things. From there:

  • we can split the map, into two maps, doing one thing each.

(We’re not specifying the inverse operations)

State diagram of the operations


We want to print all substrings of a given string:

(State1: This uses a single loop, performing two actions)

fun printAllSubstrings(string: String){
  for (i in 0.rangeTo(string.length)) {
    val substring = string.substring(i)

From State1, we replace the loop for a map:

(State2: This uses a map, with two operations)

fun printAllSubstrings(string: String) {
    0.rangeTo(string.length).map {
        val substring = string.substring(it)

From State1, Refactor to split the loop:

(State3: This uses two loops, performing one action each)

fun printAllSubstrings(string: String){
  val substrings = mutableListOf<String>()
  for (i in 0.rangeTo(string.length)) {
    val substring = string.substring(i)
  for (substring in substrings) {

Collapse the first loop into a map:

(This uses a map and a loop)

fun printAllSubstrings(string: String) {
  for (substring in 0.rangeTo(string.length)
                     .map { string.substring(it) }) {

Extract the method to give it a name:

(This uses a map, a loop, and a method to explain the logic)

fun printAllSubstrings(string: String) {
  for (substring in allSubstrings(string)) {

private fun allSubstrings(string: String) = 
    .map { string.substring(it) }

Alternatively, use the method, with a map:

(This uses an explaining method, with a map)

fun printAllSubstrings(string: String) {
    .map { println(it) }

private fun allSubstrings(string: String) = 
    .map { string.substring(it) }

Alternatively, from State3, we can also replace the loop for two maps:

(State4: This uses two maps)

fun printAllSubstrings(string: String){
    .map { string.substring(it) }
    .map { println(it) }

Self-Study in February 2019

Feb 1, 2019 - 3 minute read - Comments - self-study-aggregationfebruary2019acidaerospikeagileapaphyratul-adyaavailabilityawkawsbloatbrad-appletoncapcap-theoremcommitcommit-confcomparisonconsistencyconsistency-levelcpdatabasedirty-readdisenchantmentdocumentationdynamodbexecutable-documentationextreme-programmingfeedbackfuzzy-readgood-feedbackguidehelphonest-feedbackisolationjepsenjesuslclaura-lacarraleanlean-softwareliskovmakefilemicrosoftneil-greennikita-prokopovnon-repeatablepartitioningpaxospeoplepeople-managementpersonality-typephantomphantom-readpracticeprinciplequoterantread-committedread-uncommittedrepeatable-readserializabilityserializableslideslidesharesoftwarespanishspeedsql-databasestronger-serializabletonskytransactiontrickvaluexp

Amazon DynamoDB Transactions: How it Works

Explains how transactions work in DynamoDB

Tags: dynamodb, aws, help, transaction, serializable

Id: 7fb09cd4-2639-11e9-9377-0242ac110002 Read: Fri, 01 Feb 2019 15:53:20 +0000

Jepsen: Aerospike

I’ve read this analysis of Aerospike, that explains what kind of database it is, what CAP properties satisfies

Tags: cap, cap-theorem, jepsen, aphyr, aerospike, database, acid, ap, cp, consistency, availability, partitioning, paxos

Id: bd7151c6-2639-11e9-a38e-0242ac110002 Read: Fri, 01 Feb 2019 15:55:04 +0000

A Critique of ANSI SQL Isolation Levels

I’ve read this paper that explains the ANSI SQL isolation levels

Tags: non-repeatable, fuzzy-read, dirty-read, phantom, phantom-read, isolation, serializability, consistency, consistency, consistency-level, read-uncommitted, read-committed, repeatable-read, serializable, microsoft

Id: 01292b8c-263a-11e9-a7fe-0242ac110002 Read: Fri, 01 Feb 2019 15:56:58 +0000

Weak Consistency: A Generalized Theory and Optimistic Implementations for Distributed Transactions

An extended paper on ACID properties for SQL databases

Tags: liskov, atul-adya, stronger-serializable, consistency, consistency-level, isolation, database, sql-database, acid, transaction

Id: 4a1c6f7a-263a-11e9-8e08-0242ac110002 Read: Fri, 01 Feb 2019 15:59:00 +0000

No todo el mundo sabe o debe dar feedback

The author explains why some feedback is dangerous: either the way of giving it, or the message, or both.

In this case, she’s talking about the Commit Conf, but this is applicable to any situation

Para dar un buen feedback es importante:

  • Primero: agradecer el esfuerzo por la charla.
  • Segundo: resaltar algo positivo de ella. Seguro que algo cumple.
  • Tercero: decir cómo mejorarías un aspecto
  • Último: volver a dar las gracias o decir una frase buena que motive.

Dar un mal feedback es muy fácil:

  • Primero: no leerte la descripción ni el nivel de la charla
  • Segundo: te cabreas porque no es lo esperado y dudabas entre esa y otra charla
  • Tercero: dices lo que no te ha gustado sin rodeos.
  • Cuarto: además asumes cosas que no ha hecho y las escribes. Igual que yo he hecho en el Primero y Segundo.
  • Quinto: si además dices algo faltoso gana puntos.
  • Sexto: Utilizas esa tónica destructiva en todos.

Tags: laura-lacarra, commit, commit-conf, feedback, good-feedback, honest-feedback, spanish

Id: 20d8145e-3a92-11e9-8023-0242ac110003 Read: Wed, 27 Feb 2019 13:18:10 +0000

How to Deal with Difficult People on Software Projects

I’ve read this guide on dealing with difficult people.

There are many (48) personality types, including these types:

  • Product Managers
  • Designers
  • Project Managers
  • Development Managers
  • Developers
  • Quality Assurance

Tags: people, people-management, personality-type, guide, neil-green

Id: 95554892-3a92-11e9-9bbf-0242ac110003 Read: Wed, 27 Feb 2019 13:21:25 +0000

Software disenchantment

I’ve read this article about somebody disenchanted with the current state of the art of software: slow, bloated, not better than 10 years ago, or faster.

Tags: nikita-prokopov, bloat, rant, disenchantment, tonsky, comparison, speed, software

Id: 0078d58a-3a93-11e9-8f23-0242ac110003 Read: Wed, 27 Feb 2019 13:24:25 +0000

The Values and Principles of Agile Software Development

I’ve read the slides of this presentation by Brad Appleton, on Values, Principles, and Practices in an Agile environment.

Plenty of good quotes

Tags: brad-appleton, slideshare, slide, agile, practice, principle, value, xp, extreme-programming, quote, lean-software, lean

Id: 42cdde80-3a93-11e9-814c-0242ac110003 Read: Wed, 27 Feb 2019 13:26:16 +0000

Makefiles como dejar de memorizar comandos en docker – Developer Vago

I’ve discovered a new technique for Makefiles:\n\nUsing a common format (a DSL, in fact) to document the goal, then a new goal ‘help’ to print that documentation.

.PHONY: help
help: ## Print this help.
  @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = \":.*?## \"}; {printf \"\033[36m%-20s\033[0m %s\n\", $$1, $$2}'

when you run make help, then

Print this help.

Tags: makefile, jesuslc, documentation, executable-documentation, awk, trick, help

Id: d6a4b78c-3a93-11e9-88d7-0242ac110003 Read: Wed, 27 Feb 2019 13:30:24 +0000

Self-Study in January 2019

Jan 1, 2019 - 1 minute read - Comments - self-study-aggregationjanuary2019bookcycleebookframeworkgetting-things-donegtdlibrarymanagementmental-frameworkpersonal-productivitypomodoropomodoro-techniqueproductivitysearchtime-managementwork-cycle

Work cycles

I’ve read this Work Cycle framework to be more productive with your daily routine.\nSuggests an alternative to Pomodoro technique, in which you are to write down the contents of the goal, then split in small chunks (periods) of time to complete the individual tasks, then debrief at the end of the period and at the end of the cycle.\nAn analogy could be a double-loop Pomodoro technique for tasks.

Tags: pomodoro, pomodoro-technique, framework, management, productivity, personal-productivity, gtd, getting-things-done, work-cycle, cycle, time-management, mental-framework

Id: f280c496-0df2-11e9-bf65-0242ac110002 Read: Tue, 01 Jan 2019 18:27:51 +0000

Site to find books in public libraries

Tags: book, search, library, ebook

Id: 15ca63e4-0df8-11e9-b145-0242ac110002 Read: Tue, 01 Jan 2019 19:04:38 +0000

Books read in 2018Q4

Dec 31, 2018 - 9 minute read - Comments - bookreading2018Q4self-studyreading-club

Read this quarter:

Note: re+read means I’m re-reading this book. The (+) stands for one-or-more times, as in the regexes.

  • Como ganar amigos e influir sobre las personas; Carnegie (+)
  • Oliver Twist; Dickens
  • Building evolutionary architecture; Ford, Parsons
  • Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr. Just chapter 1: The dying self
  • Sota la cistella; Gasol

Como ganar amigos e influir sobre las personas; Carnegie (+)

I’ve re-read this classic book (How to win friends and influence people), by Carnegie.

Explains a few tricks on communication and leadership, such as:

  • >The most important name to somebody is their own

Oliver Twist; Dickens

I’ve read this classic novel by Dickens, to try to understand the character of Oliver Twist, his adventures and misadventures.

I was interested in grokking how it compares to ‘El Lazarillo de Tormes’, a previous Spanish novel.

Building evolutionary architecture; Ford, Parsons

I’ve read this book on software architecture. On how a previous definition of architecture (‘Architecture is what needs to be defined upfront and/or is difficult to change’) is no longer valid and we should strive to approach ‘evolutionary architecture’, where -ilities (features) of the system are easier to change, where architecture changes to accommodate business requirements and where systems are designed with -ilities (features) in mind.

Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr

I’ve just read the chapter 1: The dying self

I’ve read this chapter relating the perfectionism with suicide.

Explains many stories of attempted or committed suicides, giving some insight into them and trying to define a pattern

I got interested in it by reading this article: Improving Ourselves to Death (from

Sota la cistella; Gasol

I’ve read this book by pau Gasol on his experiences playing basketball professionally, with regards to leadership, motivation, career management, etc

One takeaway is ‘the important thing is not to reach there, but to stay there’.

He explains part of his professional successes, and failures as well. How some failures allowed him to progress further in his career, how he reached levels that he only dreamed in the past, how important it is to have a goal and work towards it.

backlog (partially sorted):

  • unsorted V
  • The Machine That Changed the World: The Story of Lean Production
  • Haskell Programming
  • Software Architecture in Practice
  • The five disfunctions of a team: a leadership fable; Lencioni
  • lucha por la desigualdad, la; Pontón; non-technical
  • psicología del dinero, la; Hammond; non-technical
  • Invirtiendo a largo plazo; García Paramés; non-technical, finance
  • Well-Grounded Java Developer, the; own-it
  • Learn You a Haskell for Great Good!; own-it
  • camino al 18J, el; Payne; non-technical
  • Cartas desde la revolución bolchevique; Sadoul; non-technical
  • Java Performance: The Definitive Guide
  • Why programmers work at night
  • Shogun: The Life of Tokugawa Ieyasu; Sadler; non-technical
  • Scrum and XP from the trenches, 2nd edition;
  • Els jueus i Catalunya; Villatoro; non-technical
  • El problema de los tres cuerpos; Liu; non-technical
  • Amazon Web Services in Action; own-it
  • Clojure Programming - Practical Lisp for the Java World
  • Mature optimization
  • XUnit Test Patterns
  • Let Over Lambda
  • The Haskell Road to Logic, Math and Programming
  • Types and Programming Languages
  • Fundamentals of Object-oriented Design in UML
  • Clojure for the brave and true
  • How to Solve It: A New Aspect of Mathematical Method
  • Conceptual Mathematics: A First Introduction to Categories
  • Understanding Computation: From Simple Machines to Impossible Programs
  • Programming in Haskell
  • Programming Languages: Application and Interpretation
  • Doing Math with Python
  • Perfect Software: And Other Illusions about Testing
  • Computability and Complexity - From a Programming Perspective
  • Thinking Forth: a language and philosophy for solving problems
  • Concepts, Techniques, and Models of Computer Programming
  • Bridging the Communication Gap; Adzic
  • Specification by Example; Adzic
  • Cucumber book, the; Adzic
  • Software Architecture for Developers; Brown
  • Object Design: Roles, Responsibilities, and Collaborations
  • RESTful Web APIs
  • RESTful Web Services Cookbook
  • Building Maintainable Software
  • Serverless - Patterns of Modern Application Design Using Microservices (Amazon Web Services Edition)
  • A Pattern Language; Alexander
  • Types and Programming Languages, TAPL; Pierce; own-it
  • Speed Reading Book: Read More, Learn More, Achieve More, the; Buzan
  • Cómo crear mapas mentales (Crecimiento personal); Buzan
  • First things first; Covey
  • What’s best next; Perman
  • problems of philosophy, the; Russell
  • Requiem for the American dream; Chomsky
  • sun also rises, the; Hemingway
  • travels, the; Polo; non-technical
  • Homo Deus: A Brief History of Tomorrow; Harari; non-technical
  • Books by Aristotle; non-technical
  • Books by Plato; non-technical
  • Books by Descartes; non-technical
  • The idea of culture; Eagleton; non-technical
  • Hereditary Intelligence; Galton; non-technical
  • Lean Software Development: An Agile Toolkit; Poppendieck (+)
  • Chaos Monkeys: Obscene Fortune and Random Failure; Garcia Martinez
  • Implementing Lean Software Development: From Concept to Cash; Poppendieck
  • Joel on Software; Spolsky
  • Death March; Yourdon
  • Psychology of Computer Programming, The; Weinberg
  • Introduction to General Systems Thinking; Weinberg
  • Lao Tzu : Tao Te Ching : A Book About the Way and the Power of the Way; Tzu, Le Guin; non-technical
  • Gay Science, the; Nietzsche; non-technical
  • Being Geek; Lopp
  • Finance for Freelancers; Retallick; non-technical, finance
  • Object-oriented software engineering: a use case driven approach; Jacobson
  • Patterns of Enterprise Application Architecture; Fowler; own-it
  • Romeo y Julieta; Shakespeare; non-technical
  • Computer Systems: A Programmer’s Perspective; Bryant, O’Hallaron
  • My Journey to Lhasa: The Classic Story of the Only Western Woman Who Succeeded in Entering the Forbidden City; David-Néel; non-technical
  • Cathedral and the bazaar, the ; Raymond
  • Coding dojo handbook, the; Bache; own-it
  • Making software; Oram and Wilson; own-it
  • Code complete; McConnell; own-it
  • Soft skills; Sonmez; own-it
  • DSLs in action; Ghosh; own-it
  • Purely functional data structures; Okasaki; own-it
  • Working effectively with unit tests; Fields (+); own-it
  • First Nazi, the; Ludendorff; non-technical
  • Greatest story ever told … so far; Krauss; non-technical
  • Master algorithm, the; Domingos; non-technical
  • Invention of Science, the; Wootton; non-technical
  • Tesla: Inventor of the electrical age; Bernard Carlson; non-technical
  • Psychology in minutes; Weeks; non-technical
  • Alan Turing: The Enigma; Hodges; non-technical
  • How to think more about sex; de Botton; non-technical
  • Piccolo manuale di persuasione; Taylor; non-technical
  • arte de la guerra, el; Sun Tzu; non-technical, own-it
  • Piccolo manuale di leadership Confuciana; Adair; non-technical
  • How to Stop Worrying and Start Living; Carnegie; non-technical
  • Uomo - Guida allo stile; Roetzel; non-technical
  • Unwritten Laws of Engineering: Revised and Updated Edition; King
  • Test-Driven JavaScript Development (Developer’s Library); Johansen
  • Test Driven Development: By Example; Beck
  • Arquitectura Java JPA Domain Driven Design; Alvárez, Peláez
  • End of loyalty, the; Wartzman; non-technical
  • Basic Economics; Sowell; non-technical
  • Introduction to Economic Analysis; McAfee; non-technical
  • Patterns of Software; Gabriel
  • Coders at work; Seibel
  • Clean architecture; Martin
  • How to Be a Stoic: Using Ancient Philosophy to Live a Modern Life; Pigliucci; non-technical
  • Introduction to Object-Oriented Programming, an; Budd
  • Gafas de la felicidad, las; Santandreu; non-technical
  • Ser feliz en Alaska; Santandreu; own-it, non-technical
  • Mochila para el universo, una; Punset; non-technical
  • Gods themselves, the; Asimov; non-technical
  • Panamá papers, the; Obermayer, Obermaier; non-technical
  • Originals; Grant; non-technical
  • Optimism over despair; Chomsky; non-technical
  • SCIENCE OF BREATH: A Practical Guide; Ballentine, Hymes; non-technical
  • Yoga Explained: A New Step-by-step Approach to Understanding and Practising Yoga; Mehta,‎ Arjunwadkar; non-technical
  • Wanderlust: A Modern Yogi’s Guide to Discovering Your Best Self; Krasno; non-technical
  • How to Think About Money; Clements; non-technical, finance
  • By Way of Deception; Ostrovsky; non-technical
  • Printemps des sayanim, le; Cohen; own-it, non-technical
  • Deep work; Newport; non-technical, own-it
  • Hooked: How to Build Habit-Forming Products; Eyal, Hoover; non-technical
  • Irresistible: The Rise of Addictive Technology and the Business of Keeping Us Hooked; Alter; non-technical
  • The Attention Merchants: The Epic Scramble to Get Inside Our Heads; Wu; non-technical
  • Willpower: Why Self-Control is The Secret to Success; Baumeister, Tierney; non-technical
  • Principles of Psychology, the; James; own-it, non-technical
  • Our mutual friend; Dickens; non-technical
  • Crucial Conversations: Tools for Talking When Stakes Are High, Second Edition; Patterson, Grenny, McMillan, Switzler; non-technical
  • Amusing Ourselves to Death - Public Discourse in the Age of Show Business; Postman; non-technical
  • Mastery; Greene; non-technical, own-it
  • Silence in the age of noise; Kagge; non-technical
  • Functional programming simplified; Alexander; own-it
  • Your money or your life; Dominguez, Robin; non-technical, finance
  • Batalla del Ebro, la; Reverte; non-technical
  • Historia de la guerra civil española; Rojo; non-technical
  • Lucha por el poder, la; Evans; non-technical
  • Revolución rusa, la; Pipes; non-technical
  • Holocausto, el; Rees; non-technical
  • Martín Lutero, renegado y Profeta; Roper; non-technical
  • Siglo de la revolución, el ; Fontana; non-technical
  • Història de la revolución rusa; Trotsky; non-technical
  • Dispossessed, the; Le Guin; non-technical
  • Left hand of darkness; Le Guin; non-technical
  • Lathe of heaven; Le Guin; non-technical
  • Books in general – Epstein
  • Affluent society, the; Galbraith; non-technical, finance
  • Philosophy of the Buddha; Bahm; non-technical
  • Tribe of mentors; guillem, non-technical, own-it
  • 5 dysfunctions of a team; non-technical
  • Ziglar’s Top Performance; non-technical
  • Pragmatic Programmer (+)
  • High Output Management; Grove; non-technical
  • First Break All the Rules; non-technical, guillem
  • Managing for happiness; Appelo; non-technical
  • Meditations; Marcus Aurelius; non-technical, own-it
  • How to be a stoic - Pugliucci; non-technical
  • Why budism is true; Wright; non-technical
  • 7 hábitos de la gente altamente productiva
  • art of readable code; guillem
  • Domain modeling made functional; guillem
  • Sketchbook handbook; guillem, own-it
  • Agile samurai, the; guillem
  • Miracle of Mindfulness, the; Hanh; non-technical, own-it
  • No mud, no lotus: The Art of Transforming Suffering; Hahn; non-technical
  • Lean Architecture: for Agile Software Development; Coplien, Bjørnvig
  • Agile IT Organization Design: For Digital Transformation and Continuous Delivery; Sriram Narayan
  • Philosophy of Software Design, a; Ousterhout
  • Hope in the Dark; Solnit
  • Agile!: The Good, the Hype and the Ugly; Meyer

unfinished (unsorted):

  • Working Effectively with Legacy Code (+); Feathers; own-it
  • Nonviolent communication (+); Rosenberg; own-it, non-technical
  • Introduction to Buddhism: Teachings, History and Practices, an; Harvey; non-technical, own-it
  • Effective Java; Bloch; own-it
  • Functional Programming Patterns in Scala and Clojure; own-it
  • Release It! - Design and Deploy Production-Ready Software; own-it
  • Refactoring (+); Fowler; own-it
  • Leprechauns of Software Engineering (+), the; Bossavit; own-it
  • Domain-Driven Design: Tackling Complexity in the Heart of Software; Vernon (+); own-it
  • Pragmatic Thinking and Learning: Refactor Your Wetware; own-it
  • Readings in Database Systems, 5th Edition; own-it
  • Structure and Interpretation of Computer Programs (SICP); Abelson, Sussmann, Sussmann; own-it
  • La Sociedad De Coste Marginal Cero (Estado y Sociedad); Rifkin; non-technical
  • Odisea; Homero; non-technical
  • Switch: How to Change Things When Change Is Hard; Heath, Heath; own-it, non-technical
  • Como leer un libro; Adler, van Doren; non-technical, own-it

next (2):

  • Who rules the world?; Chomsky; non-technical
  • Mundo nuevo, ahora, un; Tolle; own-it, non-technical
  • Continuous Delivery; Humble, Farley; own-it
  • Hombre multiorgásmico, el; Chía, Arava; own-it, non-technical

wip (2):

  • Thinking fast and slow; Kahneman; non-technical
  • Java Concurrency in Practice (JCIP); Goetz
  • Hombre en busca del sentido, el; Frankl; own-it, non-technical


  • Como ganar amigos e influir sobre las personas; Carnegie (+); own-it, guillem
  • Oliver Twist; Dickens; own-it, non-technical
  • Building evolutionary architecture; Ford, Parsons; own-it
  • Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr. Just chapter 1: The dying self; own-it, non-technical
  • Sota la cistella; Gasol; own-it, non-technical


  • Stanger in a strange land; Heinlein; own-it, non-technical

Self-Study in December 2018

Dec 1, 2018 - 2 minute read - Comments - self-study-aggregationdecember2018botdigital-nomaddocumentationeliteetsyexperimentfelix-krausefyihow-docimmutable-documentationinfobotlifelongformmanagementmoneymotivationnomadremoterichslackslack-integrationthe-atlanticultrarichwealthwealth-managementwhat-doc

One year nomad - a review

Tags: nomad, felix-krause, digital-nomad, remote, life

Id: 7784a1da-fc82-11e8-a2cc-0242ac110002 Read: Mon, 10 Dec 2018 13:49:51 +0000

The Reason Many Ultrarich People Aren’t Satisfied With Their Wealth

How the rich are motivated to earn more money\n>really rich people are often motivated to acquire more money by the thrill that comes with multiplying one’s fortune by making investments, buying up businesses\n>Those two ways of putting money to use—as a way of covering expenses or as a way of building a bigger fortune—\n>Every billionaire I’ve spoken to, and I’ve spoken to quite a number of them, is extremely excited by each additional increment of money they make\n> Do I have enough to buy this expensive thing I want? but rather Do I have as much or more than these people I’m comparing myself with?\n\n\n>feeling wealthy is about comparison with others in your reference group. So the question is not what individuals want to buy, but what they feel they must buy in order to keep up their status

Tags: rich, wealth, the-atlantic, longform, management, wealth-management, motivation, elite, ultrarich, money

Id: e5650e1c-0081-11e9-a127-0242ac110002 Read: Sat, 15 Dec 2018 15:55:51 +0000

Etsy’s experiment with immutable documentation

Trading freshness for completeness in documentation

Tags: how-doc, what-doc, fyi, documentation, etsy, experiment, immutable-documentation, infobot, bot, slack, slack-integration

Id: 6ef4bf24-0082-11e9-a076-0242ac110002 Read: Sat, 15 Dec 2018 15:59:41 +0000