Showing posts with label SkillsMatter. Show all posts
Showing posts with label SkillsMatter. Show all posts

Wednesday, 19 October 2016

Badoo Londroid

Just for giggle, and potentially free food, I went to a meeting of that alternative Java (i.e. Android) development group Londroid, sponsored by Badoo, a social networking tool, and hosted at Skill Matter/CodeNode. William Gibson once refered to Britain as Mirror World, like America but oddly different, and the same is true of Android to Java. It's where the Java desktop world went when the internet turned up and everything went all server-side, so the meeting had a certain surreal quality for me.

It also gave me the excuse to meetup with my erstwhile colleague Matt, who has finally had enough of working for airline companies and has gone contacting at a fitness firm. Very fitting.

Building a framework with Clean Architecture with Rich King
First up was Rich from the sponsor Badoo. Rich discussed how the Clean Architecure principals, as described in "Uncle" Bob Martin's blog post, impacted on the development of the Badoo Android application. Here's a description of Clean from the man himself:


What Rich described in his presentation is separating the parts of the system into domains (shades of DDD here), usually done in the Java world when designing for a Microservice architecture. Because of the limited nature of the Android platform, all this is in what might be described as a micro-monolith (think there's a niche for nano-services on Android?). All-in-all a nice presentation, only spoilt by ghost transmissions from the presentation upstairs.

Presentation Patterns Using Rx with Yoel Gluschnaider and Flavio Zanda
Although there are no Spring-like frameworks in Android, again due to the limitations of platform, RxJava has taken off somewhat, mostly as a more sophisticated option or supplement to data-binding.
However, there's still a need for what frameworks usually implement, in this case the Model-View-Controller (MVC) design pattern for managing the interactions between the screen and what goes on the the back. Alternatives to this pattern are the Model-View-Presentor (MVP) and the Model-View-ViewModel (MVVM) patterns. The former, and the one they recommended, is a variation on MVC pattern and, like this, the view makes a request to the controller and the controller consults the model about how to respond. MVC assumes the controller is pretty dumb, just acting as a junction box separating the View from the Model. MVP moves most of the decision making to the controller, to the point that View does almost nothing (a Passive View pattern, as it's been called). MVVM is more complicated, by the sounds of it, and I haven't had time to do any research on it at the moment, but that looks interesting.

Yoel and Flavio's talk was very engaging and only marred by the fact that everyone was hungry by the end and expecting the promised food. This was at a place over towards Old Street and well out of my way, so I made my excuses and left the group hungry (for knowledge as well).

Tuesday, 11 October 2016

Domain Driven Design London - The Three Real Problems in Software Development

Yes, I thought there would have been a few more. This was a presentation I attended at Skills Matter/CodeNode, just off Broadgate, by Pete Smith.



The three problems, as Pete sees it, are:
  • grouping and separating the work into domains, both in terms of software and teams;
  • using the tools and technology wisely;
  • communication.
He highlighted different aspects of these problems and indicated some solutions, but, unfortunately, didn't provide any unique insights from a Domain Driven Design perspective, which, I felt, was the whole point. Nevertheless, his presentation was well delivered. It was taped, so you can watch it here.

Saturday, 13 June 2015

Monads - Asking the Right Question, with Pawel Szulc

On Monday, 1st June, I went to an evening presentation given by Pawel Szulc at Skillmatter regarding Monads in Scala (the videocast of it is here).


It's an obscure subject and not one I really understand, and this presentation didn't help much (too many cognative leaps, like reading a technical book with most of the pages stuck together).

Monads are a kind of contract or pattern, encapsulating a data type in a consistant interface. The interface consists of two functions: a "bind" or "flatMap" function that, given a translation function, allows another monad to be created from the first; and a unit function which creates the monad from the original type in the first place.

Pavel's got a thing about monads and tried to explain how they can be used as a design technique, but I think it's something that going to take a bit more than a presentation to explain. A monograph on the subject, perhaps. Clever bloke, though.

Friday, 14 November 2014

Scaling Business Application Development with Play and Scala

Yesterday evening, I went to see a presentation by Peter Hilton at Skills Matter on using Scala and Play for small-scale development.


In an affable and down-to-earth manner, Peter went through two case studies that his company had handled, both small scale web developments in Holland, where he is based. This is somewhat unusual for Scala in particular and any JVM-based language in general: normally much "lighter" technologies, such as ASP.Net or PHP, are used.

He highlighted the use of a stack of technologies: Play, Scala, Slick (for database connectivity and access), PostgreSQL and MySQL for the database and Bootstrap for the website layout. In particular, he went through the use of Slick, which he recommended, as it has an unusual, more SQL, feel compared to other ORM's.

He also emphasised the speed of development and that the amount of code needed was much smaller than previous applications he'd developed: the first application was ~4000 lines and the second ~2000, which are both a lot smaller than the applications I've worked on. It was interesting to see how his team short-cutted: using social media for security (why not?) and Excel spreadsheet integration for record maintenance.

Overall, it was a good presentation about using Scala in a different way.

Thursday, 1 May 2014

Wednesday - The Graphs of Gaming and Recruitment

Yesterday evening, I went to a presentation on Graph Databases (specifically Neo4j, who were the organisers), hosted by Skills Matter.

First up was Nigel Small who talked about Zerograph, a new container/server for Neo4j.


Nigel gave a quick overview of Zerograph, highlighting it's ability to host more than one database and the use of ZeroMQ (thus the name) to increase reliability and robustness. ZeroMQ is a message queue, which is a piece of software designed to buffer and schedule messages between two systems in a more controlled way than a direct connection. It also, in ZeroMQ's case, allows for temporary disconnections, saving the messages to be processed when the connection is resumed. How this works in practise is another matter.

One of things emphasised throughout the talks was the speed with which Neo4j processes queries and returns results. Graph databases are designed to cope with information which is highly relational in nature, so something that in standard SQL would take seconds or even minutes with multiple joins, takes a fraction of that in a graph database.

Next up was Matt Wright to talk about the work at his company Stitched regarding the use of Neo4j in social networks for recruiting.


A quite amusing presentation, Matt illustrated the problems with existing social networks, such as Facebook and LinkedIn, and how "private" networks could be used to give more authentic results.

The last speaker was Yan Cui, from GamesSys, to talk about his experiences using Neo4j to model his company's Freemium online game "Here Be Monsters".


The game is resource based and can be incredibly complex and interrelated, so any small change in the underlying data can have considerable consequences. They've tried to make changes by rule-of-thumb, but this proved too unwieldy, slow and error-prone, so they've been modelling it with Neo4j and had much better results.

One of the things mentioned during the presentations was Cypher. Being interested in cryptography, I was a little baffled, but this turns out to be the Neo4j equivalent of SQL:

MATCH (n:Person)-[:KNOWS]->(m:Person) WHERE n.name="Alice"

Looks similar enough, although I can't see why they didn't call it Graph Query Language (GQL), which would be much more obvious.

Wednesday, 12 March 2014

Tuesday - Java Concurrent Animated

I thought I take a trip into town this evening to see a presentation at Skills Matter by Victor Grazi (complete with "Brooklyn accent") concerning Java concurrency.


Concurrency is always a difficult subject, but not so much the thing itself as what happens when concurrent processes try to access the same resources at the same time. Normally, in Java, this is done via the "synchronized" command. You designate a block of code and wrapper it in a synchronized block:

synchronized(this) {
    Counter.count++;
    System.out.print(Counter.count + "  ");
}

or declare a function to be synchronized:

public synchronized void assign(int i) {
    val = i;
}

However, if one thread gets to the block first, it locks out the any other threads trying to do the same. There's nothing that the others can do about it other than wait.

Victor's presentation was regarding what was available in the Java API, such as Locks, Semaphores, to get around this or avoid it altogether, as well as exploring other aspects of the API such as Thread Pooling.

What made this presentation a little different was the animation of the threads, which were doing little animated circuits to illustrate his points. The source can be found on SourceForge.


As you can see, it looks cute. Plus is does show you the various options available to the Java programmer other than just the ubiquitous "synchronized".

Victor gave a very good presentation of a difficult, but important, subject.

Saturday, 1 March 2014

Monday - Continuous Delivery Gone Bad

At the invitation of my erstwhile and erudite colleague and associate Mr. Laver, I went to a presentation by Gojko Adzic at Skills Matter regarding his experiences and recommendations for continuous delivery, one of the corner stones of agile development.


In quite an interesting, if earnest and intense, presentation, Gojko related some interesting anecdotes, and a few novel ideas.

Notable was that to do justice to continuous delivery, it has to be done with multiple versions, allowing mistakes to be made and features to be added without interrupting the work flow of the customers using the applications. There were a few intakes of breath from the audience, and he didn't disguise the difficulties of this strategy, particularly regarding data versions.

Another was the idea of using fast prototyping techniques, often without any coding whatsoever, to be able to sort out business issues, and that feedback and measuring are also important elements, especially if the project is a success.

All in all, it was quite a good presentation, if a little slow in places, and it was good to see how Matt was faring after starting his new job.

Wednesday, 26 June 2013

Debugging In Python

After an afternoon shift in the shop on Monday, I went into town to see Antonio Cavallo's presentation on debugging tools for Python.


He took us through four different examples and the different techniques used to debug them, in particular the use of the remote debugger, rpdb, to debug multi-threaded python applications, and gdb to debug calls to external C libraries. The latter was interesting because it revealed that the Python interpreter is written in C!.

Friday, 21 June 2013

Oxfam Thursday - Blagging, Nails and a Bit of Naughtiness!

I'm doing quite a few shifts in the shop at the moment, at least twice a week, and mostly downstairs, so hardly worth a mention. Yesterday, however, we had a chap come in with a donation, but there was a twist:

Customer (Geezer): "If I give you these books, can you let me have one in exchange?"
Me: "'Fraid not, mate. That's not how it works."
Geezer: "You sure?"
Me: "Positive. Take my word for it."

He was a bit disgruntled, but donated the books anyway.

John and Michelle were in. Michelle had some new nails, with little butterflies printed on them, which I commented on. John showed me some books which were quite rare and one of these was from The Olympia Press:


Formerly, certain books were banned from being published in the U.K., the Marquis de Sade's, Henry Miller's, etc. To get them, you had to go to France and The Olympia Press published them in English. The dust jackets were reversable and were white on the other side with no markings, so you could get them through customs without them being noticed.

I finished early and went to a seminar in London, at Skills Matter, called The Rise and Fall of Mutable State, given by Malcom Sparks. It was a short talk about one of the features of functional programming languages and a little on the history of programming (everyone's heard of Turing by now, but who's heard of Alonzo Church?). There was a lengthy Q&A afterwards, with lots of talk about Clojure and an extension for Java called Guava. I'm surprised no-one mentioned Java 8, which is purported to have more functional support.

Friday, 19 April 2013

Thursday - Python User Group Meeting

I haven't been to any of the Skills Matter meetings for a while, not since last year at least, so I thought I'd go along to a user group meeting that I'd not attended before. I've used Python a bit for automating tasks, but nothing too heavy duty.

The first talk was just a warm up. Paul Brian tried to talk about... well, nothing in particular, really. "Relying on frameworks too much is a bad thing", "Learn to be better coders"... Platitudes, essentially. He threw in some comparisons with the advent of the printing press, which was poorly thought out and seemed meaningless. It put me in mind of an old expression: better to stay silent and let people think you are a fool that open your mouth and remove all doubt.

The next was a bit more entertaining. Kris Saxton talked about using the Salt framework to manage automation across multiple servers. He demonstrated simple tasks and, in particular, rollout of code automatically across multiple servers. Nice.

I departed towards the end of his talk as I had a long way back home and it was a pretty full day, anyway, so I missed the talk by Emil Vaughn on Cython, an enhanced version of standard Python.

Thursday, 2 June 2011

MongoDB User Group Meeting

I went to the MongoDB Usergroup meeting at SkillsMatter, who run these things. The Guardian were hosting it (they are in the process of converting their Oracle DB's to MongoDB) and SkillsMatter have produced a videocast of the event.

It was similar to the one they did at the MongoUK event, but talking more about how Mongo fits into the future strategy at The Guardian.