Basic Betting: The Micro Bytes Back – 25 years on

Almost 25 years ago I wrote a self-published book that tested gambling systems using programs written in GW-BASIC. I recently came across the spiral bound book and the 3.5″ floppy disc. After struggling to borrow a 3.5″ floppy disc drive I eventually manged to get the programs copied onto my desktop computer. I had a copy of the book as a Word document.

The next issue I faced was finding a way to run the GW-BASIC programs. This turned out to be surprisingly easy to solve. There is an excellent emulator that you can download, for both Mac and PCs and the programs that had been developed almost 25 years ago ran straight away.

Now I had the Word version of the book and the programs, that I could run. I am thinking about doing some minimal updates and releasing the book on a Kindle platform.

I just wonder whether it would actually be of interest to anybody? Here are a few more details.

We describe why bookmakers and casinos always win, and why this is the case. Next we present some betting systems, focusing on roulette, horse racing and football. We provide computer programs so that you can run them for yourself. The systems/programs that we present are the same that were presented in the first edition.

The programs are written in GW-BASIC. This was the predominant language back in 1993 and it is still possible to run these programs today. Although GW-BASIC is not supplied as a matter of course now, there is an excellent emulator available and we have found that it runs the programs perfectly. How to download and use the emulator is detailed on the accompanying web site, describing the process for both PCs and Macs.

The book comprises 13 chapters, following the same structure as the first edition. The first two chapters explain why bookmakers (and casinos) win. Chapters 3 to 8 present roulette systems. Chapters 9 to 11 considers football (in the UK sense), presenting three systems that we could use to predict the outcome of matches. In chapters 12 and 13 we consider horse racing. Chapters 3-13 comes with a computer program that you can run to see how good (or bad) the system is.

Some of the systems that are presented benefit from having a computer program to test it. This is especially true of the roulette systems where it is useful having a computer program simulate a roulette wheel and make, perhaps, thousands of spins. Other systems demonstrate that technology has moved on a little. Chapters 9 and 10, for example, could easily be tested using the basic functionality that is now available on a spreadsheet and if I was to implement these systems today, I would certainly use that tool rather than developing a bespoke program.

The book also has a theme that runs through it that talks about the problems of data entry, data security and the problems we may have it trying to fit all of the data on a 3.5″ floppy disc drive. These issues are no longer of concern today. Any data you require can be downloaded, either freely or through a suitable subscription. The ability to store high volumes of data is unlikely to be a concern and how do you back it up is probably covered through automated backups and/or utilizing cloud technology. I have largely left these discussions in place just to show how technology has moved on and also to provide some historical perspective.

It should be noted that we are presenting the systems for testing. I am not suggesting that the systems will make you money. Indeed, some of them will definitely lose money, which we know before even running the system. If this were not the case then bookmakers and casinos would be out of business. Your task is to decide whether any of the systems have any potential and then, perhaps, develop the ideas further into something that you are happy to test out in the real world.

I would welcome any comments.


I also published this post on LinkedIn. You can see the post here.

My First Java Project

My first Java project
Java Programming. Downloaded from Googled, labelled as free to reuse, under Wikipedia Commons. URL: http://commons.wikimedia.org/wiki/File:Java_Programming_Cover.jpg

It’s been a while since I decided to use Java as my new programming language of choice. Since my last post I have been honing my Java skills, with my first java project.

I had a project I needed to do that is about analyzing academic papers, comparing them in various ways, sorting them, writing out reports etc.

My first instinct was to use PHP (which I learnt a few years ago – and I really like the language) but the only development environment I have is on a server. I could set up a development environment on my desktop, but it did not seem worth it for the times that I would use that environment in anger.

The other option was C++, but that went against what I was trying to do for this project, as you’ll understand if you read earlier posts in this project.

So, the obvious solution was to use Java.

As my first Java project, it seemed to have suitable complexity for a first time Java user, but allowing for the fact that I have a programming background. I suspect that the project would not be suitable for a complete newbie to programming.

The details of what the project has to deliver is not that important but the lessons learnt are important, as these are things that I can use in later, larger, projects. These included:

  • Reading in a CSV (Comma Separated Variable) file. This is always a useful thing to be able to do. It’s one of those fall backs that is useful to have in your armoury as it makes accessing files such as spreadsheets and databases easy to do as they invariably have an option to save as a CSV file. Of course, it’s usually possible to access spreadsheets and databases directly (which is what I used to do under C++ using ODBC) but for this project I thought I would get to grips with CSV first. After some searching, I came across a package called CsvReader. It’s not the most basic package (which is a good thing), and it did have good reviews. I had some challenges installing it, but that was not to do with the package but the fact that this is the first time I have installed a Java package. Once I had sorted that out, it worked perfectly.
  • Writing out a latex/PDF file. One of the things I wanted to do was produce a half decent looking report. My initial thought was to write out a text file and then use Word to manually format it. This, for many reasons, is not a good idea; not least of all as it would be labour intensive every time I produced a new version of the report. I like to think that I had a flash of inspiration (but perhaps it is the obvious thing to do) and I decided to write out a latex file that I would convert to PDF via a suitable editor (my editor of choice at the moment is TexStudio, although I have used WinEdt in the past). This seems to work pretty well and I can now produce nice looking reports, without having to worry too much about the look of the final document as Latex will handle this as long as I have some idea of the structure as I develop the program. Of course, the beauty is that the report is complete, once the program has been run, without any need for any other processing/formatting. In a future blog I’ll provide a few more details as to how I did this as a) I think it’s interesting and b) I am sure that there are better ways of doing things and I’d like to get some ideas for developing the system further.
  • Writing files. An obvious thing I had to do when writing out latex files, was to learn out to write out files. As any Java programmer will know, this is very easy using the PrintWriter package.
  • Sorting arrays. I had a need to sort an array on one of the fields. In fact (see below), this involved sorting an array of class instantiations. This was probably the most difficult thing I did when developing my first Java project, and it took a while before it came together. But following a few examples from the web, and I had this working pretty quickly. It certainly seems easier than C++, which always seemed complicated and involved having to have friends of classes. I’m sure that there are easier ways in C++ but I never really got my head around it.
  • Classes and data. This is not really a Java thing and maybe I am totally wrong, but I quickly found that my data and member functions were making the class quite large, so I decided to have a class called (say) ‘Papers’ and another class called ‘PapersData’. The PapersData class simply holds all the data and the Papers class provides access to it, as well as providing all the other functionality. This leads to (at least in the way I do it) too many getters and setters, but it does separate the data/functions. But, the main reason I did this is because I wanted to hold different data types for my various objects and an ArrayList (or other array type objects) would not allow this. I am happy to be corrected but I was trying to recreate the struct (i.e. a class) type concept of C++. Anyhow, it seemed to work for what I wanted, but whether it would scale to larger projects is another matter.

The system I have ended up with, seems to work well. Whether it is scalable to larger projects remains to be seen, but it has certainly been a very good learning experience. I have doubts that if I was trying to learn C++, even with a good programmimg background, I would have progressed as fast as I have with Java.

No doubt, other people would pick up C++ faster than I would have done but, for me, Java is a lot easier to learn.

The other big bonus is the Eclipse IDE.  No doubt, I have only scratched the surface but the autocomplete (Ctrl/0) and the suggested error correction (Ctrl/1) are my new best friends!

So, as my first Java project, I think, has been a worth while exercise and I have learnt a great deal.

 

Videos on the basics of Java

Videos on the basics of Java

Whilst looking through youtube (see my previous posts – here and here – for why I am doing this), I have come across some very nice youtube videos on the basics of Java. A very nice series of videos by Jose Vidal starts from the the basics of Java:

Eclipse Java ‘Hello World’ Introduction Tutorial

… but moves quickly on to topics such as:

Javadoc

Constructors

Java Wrapper Classes

Java Immutable Classes

Java Packages

Java Arrays

Java Expanding Array

Java Selection Sort

Java Multidimensional Array

Java Inheritance Tutorial

Java Polymorphism

Java Reading a CSV file

Java Reading and Writing Binary Files

Java Serializable interface: Reading and writing Objects to a file

Java Arraylist

Java HashSet HashMap Demonstration

Java Generics Tutorial

Java Iterators

Java Building your own Iterator using Inner Classes

Eclipse Tips and Tricks for Beginners Tutorial

Java Set: HashSet TreeSet LinkedHashSet

Jose has many other videos in his collection and if you find the above useful you should check out his youtube channel.

 

Other useful videos

As I have said before, there are many (many, many) youtube videos out there that can help teach the basics of Java. They are too numerous to list, but here are just a few that I have either found helpful, or that I plan to watch later (and I might just keep adding to this list so that all the videos I found useful are kept in one place).

In no particular order.

Iterators Part 1 (Java)

I realise that many of the topics above are very basic for a seasoned programmer but I think that there is also some advanced material there as well (e.g. inheritance, polymorphism, iterators etc.), so hopefully it will be of interest to a wide variety of people.

I can certainly say (from my own persepctive) that to get your head around this in MFC/VS/C++ would certainly be a lot mor work (for me anyway).

The football prediction project

You can read more about this project by looking at the posts for this football prediction project.

Blackjack in Java

Whilst looking through youtube (see my previous posts – here and here – for why I am doing this), I came across a very nice resource that showed how to implement Blackjack in Java. I am sure the video’s presenter will be the first to admit that the project is far from complete (for example, there is no double down, no splitting etc.). But that is not the point of the exercise. It was to show how to develop a complete application rather than developing a complete Blackjack player in Java.

The video was very useful. It started from an empty project and added classes as they were needed (Card, Deck, Player) and showed how they all linked together.

To be honest, it did not teach me anything I did not know already about the language syntax (as it is very close to C++) but it was very good to see somebody build a complete application from scratch.

Blackjack in Java

If you want to watch the video, take a look at the video below.

Previous interest in blackjack

Blackjack in Java
Blackjack Table (Downloaded from Google, via Wikepedia Commons – labelled as free to reuse); URL: http://commons.wikimedia.org/wiki/File:Blackjack_board.JPG

I must admit to being a little biased towards this video, as I have published an academic paper on blackjack, which evolved a blackjack player so that it could play blackjack and win money. Of course, we could never use this in a casino (for many reasons!) but it was a fun project and it would be interesting to ressurect the project in Java – but that really is for another day. But I might go and see if I can find some open source classes for a deck of cards, then I could do my version of Blackjack in Java!

The football prediction project

You can read more about this project by looking at the posts for this football prediction project.

Learning Java, the first steps

In this post, I describe my first steps in learning Java. Not that I am a newbie to programming. I have been doing it for years, but mostly in C++, or various mainframe languages and editors. But I recently made the decisio to change to Java.

Learning Java

Learning Java
Java Programming. Downloaded from Googled, labelled as free to reuse, under Wikipedia Commons. URL: http://commons.wikimedia.org/wiki/File:Java_Programming_Cover.jpg

I thought it was about time to start learning Java. At the moment, I am based in Malaysia so I cannot simply reach to my bookshelves (in my office in Nottingham) and get one of the many Java books I have accumulated over the years. Of course, I could go to the University library (and may well do so) but at the moment, all I have is Google (other search engines are available!).

There are obviously lots of internet forums around, but these can be quite difficult to follow, can digress quite a lot and are often in the form of Q&As which might not be the best way to learn.

Youtube for Java

I often overlook Youtube, but as I found out in my previous post, there are some fantastic resources out there.

I was fortunate enough to come across a series of videos that introduce various topics. I was drawn to it as the first episode was called “Episode 1: Hello Java! Getting Started with Eclipse.”

I found this quite informative. I think you have to have some programming experience to keep up with it, and there is quite a lot of digressing – but I still found it a good watch.

In fact, I have watched the first 15 videos. Some are very useful, some not so. Tutorial 8 was not easy to follow (it’s about Networking). In my mind this was advanced stuff, but the presenter, I think, has a networking background so, I suspect, to him, it was pretty basic.

But overall, this series was worth watching, and I will watch some of the later episodes in the future.

Others are available

I was attracted to the videos above as it used Eclipse. But looking around Youtube, there are many (many, many) alternatives. Some are more advanced, some confusing, some too simple, some incorrect (or not well explained) – and that is from my limited knowledge.

Understandable?

I’m pleased to report that I understood most things. Of course, knowing C++ helps a lot, as the syntax is pretty similar. It’s also good that I don’t have to worry about whether I am using MFC (Microsoft Foundation Classes), whether, once I have console application, I could ever convert it to a Windows application, what to do when I get binding errors etc. As far as I can see, once you have your imports (for packages and calsses) sorted, then everything should be okay.

There also seem to be some nice features, such as ArrayLists, the Scanner class and the Collections object (which has sorting apparently – saves me having write a qsort and sort out friend functions etc.).

So ….

As far as learning Java, I think that I have found some excellent resources on Youtube and I would urge anybody learning Java to tap into this resource. Indeed, for many techical problems, Youtube seems a great resource.

Questions

Of course, I have questions. What is a call to super? What does implement do? How should I structure packages? How should I structure my classes and the GUI (it seems to me that it would be easy to write a console application and then plug on a GUI? – not something I’d want to try with Visual Studio).

But all these questions seem pretty easy to answer, with access to the right resource, but only time will tell.

The football prediction project

You can read more about this project by looking at the posts for this football prediction project.

Swing or SWT when using WindowBuilder

In my last post I was trying to decide whether to use Swing or SWT when using WindowBuilder. I am using the Eclipse IDE.

Learning to use Swing or SWT

The problem is, there does not seem to be any clear cut view as to which is best. This post on stackexchange is typical.

Researching the options

Most of the forums/tutorials I found on Google tended to jump in at the deep end, assuming that you know the basics and it was not very helpful in making this decision. Then I came across this youtube video.

The sound quality is not that good, but it takes you from how to install WindowBuilder, all the way to using Swing to create a window. I actually followed the tutorial in real time and managed to get the same results (a window with a text button in it), which I though was quite impressive.

The tutorial uses Swing, and I have since heard that Swing is better for Windows applications. Whether that is true or not, I don’t know, but as I have to make a decision, I have decided (for now anyway) to adopt Swing.

If I am honest, I don’t think it actually makes that much difference. The applications that I intend to write will be fairly simple from a GUI point of view, so I doubt that I would really push the limits of either Swing or SWT.

Decisions made

Swing or SWT for the Eclipse IDE?
Eclipse IDE (Dowsnloaded from Google, vis Creative Commons – 06 Mar 2014)

Whether, this is a good decision remains to be seen – but at least I am making some decisions. I have decided to use Eclipse, and now Swing.

I think that these represent two of the major decisions and even they are not reversible. I can always switch at a later date.

Probably of more importance now, is to actually write some Java code. Knowing C++ should make this relatively easy, but bolting everything together within a GUI might be the major challenge!

 

 

 

What Java GUI development tool shoud I use?

In my previous post, I outlined the reasons why I was switching to Java as the programming language of choice for a football prediction system that I am developing. In this post, I try to decide what Java GUI development tool I should use? Should I use Swing or SWT as my Java GUI builder?

Getting to grips with Java

Eclipse IDE (Dowsnloaded from Google, vis Creative Commons - 06 Mar 2014)
Eclipse IDE (Dowsnloaded from Google, vis Creative Commons – 06 Mar 2014)

I still need to get my head around Java. As I said before, I have done some Java programming but I’ll need to get a lot more skilled with the language. But, as one of the key reasons for switching to Java is to try and find an easier way (for me) to develop a graphical user interface, I thought that I ought to try and make that decision now.

WindowBuilder

Digging around, there are some tools that I could use. Eclipse WindowBuilder seems to get a decent write up, so I decided to use that. At the time of writing, I have installed this as part of my Eclipse installation. So far, so good.

Swing or SWT as the Java GUI helper?

Once I started digging a little deeper, I found that I had to make another decsion, whether to use Swing or SWT as my Java GUI builder. This does not seem so easy to answer. Searching for comparisons (this one is typical) tends to brings up pros and cons for each, with the conclusion that there is no right or wrong answer, in the same way that there is not clear cut answer whether you should use Eclipse, NetBeans or IntelliJ as your IDE.

So, at the moment, I am still none the wiser whether to use Swing or SWT. Unless anybody has any insights (please feel free to leave a comment)  I think I might have to try both. Probably eaiser said than done, as I am no where near the stage where I can get a Window to display on the screen, let alone decide the best tool to do it!

I’ll try to report more later.

Time to switch to Java for a football prediction project

Time to switch to Java for a football prediction project
Programming Books (Clive Darra, Creative Commons)

I have decided that it was time to switch to Java for a football prediction project that I have been planning for some time.

I want to do the project justice so I thought I would start from the most basic decision. What programming language should I use?

The Problem with C++

For the past 20 years, I have been using C++ (before that I was using all sorts of mainframe languages). I can do what I need to do with C++, but I have never been entirely happy with it.

As a language, I quite like it, but it is all the stuff that goes with it that has always been frustrating. And most of that stuff is around Visual Studio (VS), MFC (Microsoft Foundation Classes) and Templates. Don’t get me wrong, this is not a Microsoft bashing exercise. I know of many people who use VS and are very happy with it, develop great applications and know how to use the tools that are available.

But I have never really got my head around it. I run into all sorts of problems with namespaces, linking errors, deciding whether to use MFC (Micosoft Foundation Classes), or not – and then regretting it, whether to use the classes available in VS so that I could port my code to another compiler should I wish to do so; and the list goes on.

The end result is that I have never really developed as a C++ programmer. I can do all the usual stuff (classes, inheritance, operator overloading, polymorphism) but I have never been able to get to grips with Windows (Graphical User Interface – GUI) programming and so have always stuck with a Command Line Interface (CLI).

To be honest, using a CLI has served me well and I have managed to churn out some nice programs. But for my football prediction project, I really want to develop some sort of GUI. The question I asked is, should I have another go at getting to grips with MFC, Windows programming and all that is need to get an application developed in VS to display a Window on the screen, or do I change to something else, in the hope that I will find it a little easier to understand?

So why Java?

After a lot of soul searching, and Googling, I decided that it was time to switch to Java. I have written a couple of programs in Java before, but nothing too much beyond “Hello World”.

But is like C (syntax wise), and like C++ (class wise), it is well supported, many of my academic colleagues use it, it is platform independent and, I hope, that GUI programming is a little easier than VS.

More questions that answers

Of course, making the decision to use Java just raises a whole load more questions. What IDE should I use (I have chosen Eclipse), how big is the learning curve, can I easily access Excel files, can I (should I) use MySQL, what Java tools are available to support developing a a GUI etc.

All these questions will have to wait. For now, I have to learn the basics of Java and get my head around the Eclipse IDE (Intergrated Development Environment).

Wish me luck.