Scala, Java, Unix, MacOS tutorials (page 1)
This is an excerpt from the Scala Cookbook, 2nd Edition. This is Recipe 3.10, Calculating The Difference Between Two Dates.
While using Scala (2 or 3), you need to determine the difference between two dates.
Scala Solution: Difference between two dates
If you need to determine the number of days between two dates, the
DAYS enum constant of the java.time.temporal.ChronoUnit class is the easiest solution:
This is an excerpt from the Scala Cookbook, 2nd Edition. This is Recipe 3.11, Formatting Dates in Scala.
While using Scala (2 or 3), you need to print dates in a desired format.
Solution: Scala date formatting
Use the java.time.format.DateTimeFormatter class. It provides three types of formatters for printing date/time values:
This is an excerpt from the Scala Cookbook, 2nd Edition. This is Recipe 3.12, Parsing Strings Into Dates.
While using Scala (2 or 3), you need to parse a string into one of the date/time types introduced in Java 8.
If your string is in the expected format, pass it to the
parse method of the desired class. If the string is not in the expected (default) format, create a formatter to define the format you want to accept.
This is an excerpt from the Scala Cookbook, 2nd Edition. This is Recipe 3.9, Creating New Date and Time Instances.
You need to create new date and time instances using the Date and Time API that was introduced with Java 8.
Solution: Dates and times in Scala
Using the Java 8 API you can create new dates, times, and date/time values. Descriptions of common Java 8 Date and Time classes provides a description of some of the new classes you’ll use (from the java.time Javadoc), all of which work in the ISO-8601 calendar system.
A powerful Scala idiom is to use the
Option class when returning a value from a function that can be null. Simply stated, instead of returning one object when a function succeeds and null when it fails, your function should instead return an instance of an Option, where the instance is either:
- An instance of the Scala Some class
- An instance of the Scala None class
None are both children of
Option, your function signature just declares that you're returning an Option that contains some type (such as the Int type shown below). At the very least, this has the tremendous benefit of letting the user of your function know what’s going on.
Some of the computer programming books on the right side of this image are amazing, and I would never discourage anyone from reading the great ones.
But if you’re an object-oriented programming (OOP) developer who wants to start understanding functional programming (FP) over a weekend or a few nights of reading, that’s the goal of the new little book on the left: Learn Functional Programming The Fast Way. It takes you from Java/OOP to functional programming in the simplest possible step-by-step learning process.
FP for Java/Kotlin/OOP developers
I taught Java and OOP for many years, and have used other OOP languages like Kotlin, Python, and Flutter/Dart, so I understand both OOP and FP, and I think that helped to make this a simple book for learning FP.
I also wrote the FP book in the middle — Functional Programming, Simplified — and it’s about three times larger than the little book on the left. I based it on most of the FP books on the right, and it goes into many details that the book on the left doesn’t go into. It’s big, but it’s still easier than reading all the books on the right.
Lately as I’ve been writing and editing Functional Programming, Simplified: Updated for Scala 3, I’ve had the thought, could Functional Programming be called Algebraic Programming? That is, is algebraic programming a more accurate term for this style of programming?
My thought is that yes, FP is about pure functions, higher-order functions, functions as values, referential transparency, etc., but it’s also about domain modeling (ADTs), immutable variables (algebraic) and immutable data, errors as values, and EOP (expressions as equations).
- Functional programmers also use the term “blueprint” a lot, so that’s another possible name.
- To be clear, I’m not calling for a name change or anything like that, just observing that Algebraic Programming may be a more accurate name.
Since I’ve written two functional programming books, I thought it might help to provide a comparison of them.
The short story is that both books have “limited technical jargon,” and as shown, The Little FP Book essentially has one purpose, which is to help Java/Kotlin/OOP developers learn functional programming as fast as possible, using a technique that I “discovered” over the last few years. Conversely, The Big FP Book covers many topics in great detail.
Here are links to the two books:
Functional Programming, Simplified — currently 5-star rated on Gumroad.com, 4.5-star rated on Amazon, and one of the all-time best-selling books on functional programming — is currently on sale in three formats (prices shown in USD):
MARCH, 2023: This book was previously named, Learn Functional Programming Without Fear, but I have renamed it to Learn Functional Programming The Fast Way. I think this name is more reflective of the ZIO and Cats Effect libraries being easier to learn than ever before (without having to know category theory), and the name is also consistent with my other book, Learn Scala 3 The Fast Way.
NOV., 2022: My new book, Learn Functional Programming Without Fear, is currently an Amazon Java and functional programming #1 new release. The book is now available in three formats:
As a brief note today, I just released the first version of a new, free book/booklet that I’ve titled Learning Recursion.
I don't consider myself an Apple fanboy, but I am a Jonathan Ive hardware design fan. I have a great respect for the industrial design work he and his team do. It’s safe to say that if I were in college these days I’d be studying industrial design instead of the aerospace engineering degree I got way back when.
This article contains a collection of quotes on industrial design from former Apple chief designer Jonathan Ive (or “Jony Ive,” as Steve Jobs called him). As an interesting note, Mr. Ive prefers to refer to himself as a “builder” or “maker” as opposed to a designer.
For those who don’t know of him, Jonathan Ive is credited with designing almost every Apple product from 1997 until roughly 2020. I (re)discovered Apple with an iPod in 2004, and given that very long string of success, I became interested in what Mr. Ive has to say about design, and to that end, here’s a collection of Jonathan Ive design interview quotes I’ve gathered over the last few years.
Linux crontab FAQ: How do I edit my Unix/Linux crontab file?
I was working with an experienced Linux sysadmin a few days ago, and when we needed to make a change to the root user crontab file, I was really surprised to watch him cd to the root user’s cron folder, make changes to the file, then do a
kill -HUP on the crontab process.
Thinking he knew something I didn’t know, I asked him why he did all of that work instead of just entering this:
Linux grep FAQ: Can you share some Linux/Unix
grep command examples?
Sure. The name grep means "general regular expression parser", but you can think of the
grep command as a “search” command for Unix and Linux systems: It’s used to search for text strings and regular expressions within one or more files.
I think it’s easiest to learn how to use the
grep command by showing examples, so let’s dive right in.
Linux/Unix FAQ: Can you share some Linux
find command examples?
Sure. The Linux
find command is very powerful. It can search the entire filesystem to find files and directories according to the search criteria you specify. Besides using the
find command to locate files, you can also use it to execute other Linux commands (
rm, etc.) on the files and directories that are found, which makes
find even more powerful.
Java enum FAQ: Can you share some Java enum examples, such as how to declare a Java enum, and how to use a Java enum in a for loop, if/then statement, and Java switch statement?
Sure. As described in the Sun/Oracle Java documentation, “you should use enum types any time you need to represent a fixed set of constants.” Let's take a look at some enum examples to see how this works.