| Title | Level | Authors | Publisher | Date | Pages | Comment |
|---|---|---|---|---|---|---|
| Learn F# (MEAP) | Intro | Isaac Abraham | Manning | Apr-2017 | 400 | |
| Real-World Functional Programming with examples in F# and C# | Tomas Petricek with Jon Skeet | Manning | Dec-2009 | 560 | ||
| Beginning F# 4.0 | Robert Pickering, Kit Eason | Apress | 2016 | 309 | ||
| Friendly F# (Fun with game programming) | Costantini, Giulia & Maggiore, Giuseppe | O'Reilly | Aug-2011 | 191 | ||
| F# Succinctly | Free | Robert Pickering | Syncfu-sion | 2012 | 96 | Free |
| Analyzing and Visualizing Data with F# | Tomas Petricek | O'Reilly | Oct-2015 | 47 | Free, from publisher | |
| FSharp Specification 4.0 | Fsharp Foundation | Fsharp Founda-tion | 365 | Free, Not really a book but can be published as such | ||
| F# Web Programming | Community for F# | GitBook | Free. Not really a book because it's just a set of hints! | |||
| F# Survival Guide | John Puopolo, Sandy Squires | CTO Corner | 2012 | 171 | Free. | |
| Suave Music Store example | 77 | |||||
| The Book of F# | Interm-ediate | Dave Fancher | No Starch Press | Mar-2014 | 312 | |
| Professional F# 2.0 | Ted Neward Aaron, C. Erickson, Talbott Crowell, Richard Minerich | Wrox | 2011 | 434 | ||
| Programming F-sharp 3.0, 2e | Chris Smith | O'Reilly | Oct-2012 | 476 | ||
| Testing with F# | Mikael Lundin | Packt | Feb-2015 | 286 | ||
| F# for Developers | Tao Liu | Micro-soft | 2013 | 619 | ||
| Windows Phone 7.5 Application Development with F# | Web / mobile | Lohith G.N. | Packt | Apr-2013 | 138 | |
| Building Web, Cloud, and Mobile Solutions with F# | Daniel Mohl | O'Reilly | Nov-2012 | 176 | ||
| F# Applied, A practical guide to Web dev in F# using Suave | Tamizhvendan S | 2016 | 96 | link | ||
| Expert F# 4.0 | Expert | Don Syme, Adam Granicz & Antonio Cisternino | Apress | 2015 | 582 | 4 editions of this book |
| F# High Performance | Eriawan Kusumawardhono | Packt | Jan-2017 | 338 | ||
| Mastering F# | Alfonso García-Caro Núñez, Suhaib Fahad | Packt | Nov-2016 | 264 | ||
| F# 4.0 Design Patterns | Gene Belitski | Packt | Nov-2016 | 318 | ||
| F# for Quantitative Finance | Johan Astborg | Packt | Dec-2013 | 286 | ||
| F# 4.0 Programming Cookbook | Kevin Ashton | Packt | Aug-2017 | 371 | ||
| F# Deep Dives | Edited by Tomas Petricek, Phillip Trelford | Manning | Dec-2014 | 372 | ||
| F# for Machine Learning Essentials | Machine Learning | Sudipta Mukherjee | Packt | Feb-2016 | 194 | |
| Machine Learning Projects for .NET Developers | Mathias Brandewinder | Apress | 2015 | 300 | ||
| Learning F# Functional Data Structures and Algorithms | Compu-ter sciency | Adnan Masood | Packt | Jun-2015 | 206 | |
| Fsharp for Scientists | Jon D Harrop | Wiley | 2008 | 334 | ||
| F# for Technical Computing | Jon D Harrop | Flying frog | 2010 | 279 | ||
| Programming Language Concepts | Peter Sestoft | Springer | 2012 | 278 | ||
| Functional Programming Using F# | Michael R. Hansen, Hans Rischel | CUP | May-2013 | 372 |
Thursday, 9 February 2017
F-sharp books.
Of interest. Maybe watch/read
- Beginners
- Books
- Techniques
- Oriented Programming(Functional approach to error handling) – Honza Brestan
- Dependency rejection by Mark Seemann
- Decoupling application errors from domain models by Mark Seemann
- F# Pattern Matching – Part 1 – Introduction
- Working with SQL syntax trees in F# – Isak Sky
- Scripting in F# Using Fake and Paket
- Why is reflection slow?
- paketintro – Intro to Paket
- F# helpers for ... lots of stuff
- Testing
- Type Providers
- Xamarin / XAML
- Suave
- Application examples
- Lux - a strongly typed (Hindley-Milner) Lisp for JVM
- Design
- Refactoring to Functional
- SOLID: The Next Step Is Functional
- Functional Programming Design Patterns
- Functional Patterns in Domain-Driven Design
- Domain-Driven Design Using a Functional Language
- A Type Driven Approach to Functional Design
- DDD and CQRS Using the Functional Language F#
- Developing Functional Domain Models with Event Sourcing
- Don Syme Presents F# Design Principles at .Net Fringe
- Domain Modelling with the F# Type System, by: Scott Wlaschin
- InfoQ
- Stephanie Weirich on Dependent Typing, Extending Haskell, Type System Research
- Molog: Typed Functional Logic Programming in Haskell
- rest: Open Source REST Framework For Haskell
- Scala vs Idris: Dependent Types, Now and in the Future
- Miles Sabin on Dependent Types with Scala, Shapeless, Scala Macros
- Why I No Longer Use MVC Frameworks
- Swift Programming Language
- Elm: Finding the Functional in Reactive Programming
- Reactive Systems: From Drug Development to Functional Programming
- ">The SAM Pattern: Lessons Learned Building Functional Reactive Front-End Architectures
- Building Reactive Services using Functional Programming
- William Byrd on Logic and Relational Programming, miniKanren
- F# 4.1 Brings Improvements and Interoperation with C# 7
- Exploring Azure with F# Azure Storage Type Provider
- Mathias Brandewinder on F# for Data Science
- Introducing F# 4.0
- F# Native App Development on iOS and Android
- F# mobile development with WebSharper
- F# in Numbers: A Look at the Annual F# Survey Results
- Scripting in F# Using Fake and Paket
- Unfrying Your Brain with F#
- Ionide is a New Atom-based F# IDE Written in F#
- LINQ for F#
Friday, 28 October 2016
VS code, asp.net core. Microsoft on all 3 platforms.
Microsoft are writing tools to develop and publish their applications on all 3 platforms. asp.net core is a slimmed down open source asp.net with web forms mercifully removed. Visual Studio code is a lightweight (by Microsoft standards), programming editor. It's cross platform (iOS, Linux, Win) and not too fat. The setup file I downloaded was 32Mb, taking 133.6Mb of disk space. It installed seriously fast (compared with other dev software from Microsoft).
I suppose this is a virtue of giving geeks more control over the development side. They will actually write tools for authoring software on any and every platform. There is presumably a Chrome version in the works too? Any application written should be portable across platforms with ease. It's a completely different philosophy from what we've been used to.
This blog is just a log of Shawn Wildermuth's long (> 9 hours) Pluralsight course "Building a Web App with ASP.NET Core, MVC 6, EF Core, and Angular", as I acquaint myself with the latest version. So much of it is command line driven, I feel I should write it down to remind myself what to do next time.
Entering code . from the command line executes VScode at lightning speed. e.g.
It loads with the project in that folder "HelloWorld", but without intellisense or coloration because each individual language must have support added separately. To add C# support, Ctrl+Shift+X shows a list of extensions, from which I selected C#. Added it, enabled it, the code editor restarts in less than a second.
VSCode does not create projects like full Visual Studio.
We need to use nodejs and npm for that. My copies of these two were quite old.
So I installed a new nodejs from nodejs.org, which seemed to take forever! Snooze. Waking up several minutes later I do:
Now, I'm happier creating a new project from the command line using yoeman, after first installing yoeman (with the global option), the asp.net generator is also installed
Now I will generate an asp.net application. First moving up a level out of my current project.
We see a command line menu system:
Pick "Web Application". If the command arrows are not working just enter the number for that choice ( 5 ) Select the Bootstrap option and call it FunWithYo
navigate to it.
Attempting to run it at this stage shows it's still missing asp.net. So we must restore it, before running it.
The whole can be seen in a browser on port 5000
localhost:5000
My frist asp.net core MVC application up.
Ctrl+c (from the command line, where it is running) stops it.
Once the new project is complete, code ., opens VS code with the current project loaded. We need to answer Yes to the question
Required assets to build and debug are missing from your project. Add them?
Wednesday, 16 March 2016
Programming Languages and programming
There are probably five main styles of programming, which may overlap, and often relate to particular languages. We have imperative, declarative, object oriented, functional and logic programming styles. These are more commonly called programming paradigms than styles. The list below has each style with an iconic sibling language to implement it.
- imperative - C, or BASIC
- declarative - SQL
- object oriented - Smalltalk
- functional - Haskell
- logic - Prolog
Imperative programming begins with the 3 rules of coding: sequence (code executes left to right, top to bottom), selection (if, case) and iteration (loops), and may develop to structured programming. There's something very low level and intuitive about imperative programming but the best programming is rarely done in this style. With imperative programming, our code explains how a problem is solved - the solution can often be understood by tracing through the steps in the code. Imperative code often has a closer relationship to machine code than other styles.
With declarative programming, one declares a statement or code block to solve a problem. Declarative features are generally higher level. We see declarative features in SQL, many functional and logic programming languages.
Object oriented (OO) programming began in the late 1960s, cumulating in Smalltalk (Alan Kay: 1970 to 1980) and design patterns (1990s through to the noughties). 1980s onward saw several post-Smalltalk languages implementing OO features: C++, Java, C#, Javascript. These four now dominate the world of code. Yet your OO-purest is a Smalltalk coder at heart!
Functional programming (FP) began in academia. Elements of LISP (Designed by John McCarthy, 1958) are functional, Robin Milner created ML in 1975. 1980s saw a commercial FP language: Miranda (David Turner). Haskell began in 1987, mostly as a copy of Miranda, ever refining itself, yet staying lean and clean. Modern functional programming stresses, functions as "first class" elements of the language, declarative programming, prefers immutable data. Other commercial FP languages are: OCaml, F#, Scala, Clojure, ...
Logic programming languages began in earnest in the early 1970s with Prolog. Coding styles are very declarative and applications often have an AI basis, data analysis or both.
All these styles mix, to some extent, in actual languages in use. Yet a language is classified with the style which is most important to it. For example we call Scala a functional programing language, even though it is very OO too. Javascript has always had functional features but does not have immutable data. There's even a style called functional Javascript. Yet Javascript will always be an OO language first.
I began this in response to a question : what programming language should one learn first? It's not really a sensible question. You should learn each of the programming language styles, and sub-styles. [e.g. sub-styles: structured programming as a sub-style of imperative programming, design patterns as a sub-style of object-oriented programming, They are not really sub-, but more like meta-, or supra-styles]. We can also recognize certain idioms that span all styles: DRY, SOLID, ... A lot of good coding practices seem orthogonal to implementing specific use cases. You could begin with imperative programming (first six books in list below), and apply the wisdom in the books to your code. Object-oriented languages dominate business, so read books 7 to 12, but only 12 is specific only to OO (in a sense). Finally, you need at least some functional programming and the last two are good starters.
Beginner programmer reading list.
TBH, A beginner can begin with any programming, or programming language book. Yet you won't really have graduated from beginner until you've read most of the 14 books below. Read and apply the lessons of all 14 and you're past beginner/junior programmer level.
- Code Complete: A Practical Handbook of Software Construction, 2nd Edition, by Steve McConnell
- The Art of Readable Code, by Dustin Boswell and Trevor Foucher
- Programming Pearls (2nd Edition), by by Jon Bentley
- 97 Things Every Programmer Should Know, by by Kevlin Henney
- Clean Code: A Handbook of Agile Software Craftsmanship, by Robert C. Martin
- Test Driven Development: By Example, by Kent Beck
- Agile Principles, Patterns, and Practices in C#, by Robert C. Martin and Micah Martin
- Refactoring: Improving the Design of Existing Code, by by Martin Fowler
- Working Effectively with Legacy Code, by by Michael Feathers
- Growing Object-Oriented Software, Guided by Tests, by Steve Freeman and Nat Pryce
- Agile Java: Crafting Code with Test-Driven Development, by Jeff Langr
- Object Design: Roles, Responsibilities, and Collaborations, by Rebecca Wirfs-Brock and Alan McKean
- Programming in Haskell, by Graham Hutton
- The Joy of Clojure, 2nd Edition, by Michael Fogus and Chris Houser
Tuesday, 24 November 2015
The crossword that counts itself
I love puzzles. This is described by Alex Bellos at the Guardian.
It helps to write a spreadsheet to solve this.
- Set the column widths to be about the same as the height, making them look square.
- Draw out the puzzle by highlighting a phrase (there are 12 "phrases"), and formatting: format cells, borders, click outline, OK.
- Repeat for each of the other 11 phrases, highlight, Ctrl-Y (repeats the last format command for a new area)
- Count the lengths of the rectangles (these are "phrase length"), subtract (3 or 2) to get "word length"
- The area inside the blue box is named "puzzle"
- The formula (row 20) for "actual" is: = SUMPRODUCT( LEN(puzzle) - LEN( SUBSTITUTE(puzzle,"e","") ))
- This formula is copied for the 11 rows below and the letter edited, each time.
- The formula for "= target" is: =IF( E20 = F20, "Y", "N")
- When they all show "Y", the puzzle is solved.
- The sum in cell e32 just tallies the 12 "actual" numbers. It must eventually show 68 when the puzzle is solved
- The working between p18 : ae32 allows one to count the number of times each number word is used and tally them (must be = 68 too)
- The cells bordered in red are named: number
- The "word cells" formula is just: = number * R19
- This formula is copied down and across (to the 3 combos). The "3 combos" show the 3 possible combinations of possible words.
- The "# letters" fomula is just the length of the number. e.g.: = LEN( AD20 )
This is not so easy to solve using purely coded program, because the rules to narrow down the combinations are not so clear. After you've figured out what constraints must be met it, no doubt, becomes much easier to program.
Tuesday, 10 November 2015
Code spippets - Fsharp
GistBox Clipper
Clipper is the companion Chrome extension to GistBox. It allows users to create Gists from:
- Example code blocks
- Highlighted text
- Any page on the web
- Enter keyboard data, via console, with validation.
- /// Read a valid age (between 0 and 150) from key input let readage (person: string) = let mutable continueLooping = true let mutable age = 0 while continueLooping do Console.WriteLine("Enter {0}'s age (between 0 and 150): ", person) let canparse, keyin = Int32.TryParse(Console.ReadLine()) age <- keyin if canparse && age >= 0 && age < 151 then continueLooping <- false age
Code snippets - css
- Lists, without indents, with buttons, and over-handing firstline
- ul { list-style: disc outside none; margin-left: 0; padding-left: 1em; } ul.circle { list-style-type: circle; } /* for lists within lists */ li { padding-left: 0.5em; }
- pre :- with CR wrapping a line
- pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ }