Why Ozon.ru loses business

Yesterday I decided to purchase some audio books in Russian language. Buying paper books is a nuicance, and what can be easier that downloading an mp3 file right after you pay for it?

Ozon.ru is the #1 Russian e-Commerce  portal (they call themselves “Online Megamarket #1”). It’s almost like amazon.com here in the US. Kinda. So I found the audio I wanted, added it to the shopping cart and was ready to pull out my wallet, but got this message:

In English it means the following:
“Yakov, You’re planning to order a shipment of an item, which is not a printed book. Unfortunately, it’s not possible. To continue, please remove the items, which are not books. Currently we’re working on increasing our inventory avalable for the international shipments. We hope to offer you better inventory and service in the future.”

I was surprised to say the least. International delivery of the audio files shouldn’t be overly complicated for the #1 online store in Russia.

The story was not over. Next morning I got the following email from ozon.ru:

It reads, “Hello Yakov, Sometime ago you’ve added goods to your shopping cart, but didn’t complete the order. You can return to these goods at any moment, but remember that our stock is limited, and you can reserve these goods only after the order is complete.

I’m a subscriber of Amazon’s service Audible.com and buy audio books from them all the time – it’s great and easy to use service. I guess, Audible spoiled me.

My first thought was that ozon.ru has only a CD version of this mp3 file. But if this is the case, they simply loose business by not offering direct downloads. Does it mean that they don’t know how to run business?

Then I applied Sherlock Holmes’ science of deduction and figured out that most likely ozon.ru decided to sell only a CD version of the the mp3 just to have a tangible item to ship. Otherwise they’d need to create an infrustructure for the digital right management, which is mission impossible in Russia.

No hard feelings, ozon.ru. I know, you have to operate in a tough environment. Let’s wait for the better times.

Update. After I published this blog one of my readers suggested to try this service: http://www.imobilco.ru/music/audiobooks. I tried. Very little variety, but when I found the audio book I wanted to buy it displayed me a message “Currently not in stock”. The mp3 file is not in stock? God bless America! Happy Thanksgiving!

net

Starting new Web project

We had a project kickoff meeting this morning to discuss tools to be used. This is a consumer-facing single-page Web  application (SPA) that will also have a back-office part to be used by the business owners. During this meeting our engineers suggested a list of software. This list will grow, but I thought you might be interested to see it as it is now.

1. Web designer uses Balsamiq Mockups for prototyping and Twitter’s Bootstrap framework for styled components. We’ll use responsive design principles, so the app will look good on the mobile devices too.

2. Build tool: Gradle

3. Continuous Integration: Team City (JetBrains). We’ll configure automatic builds, unit tests, code coverage findbug.

4. Version control system: Git. The hosting site: Bitbucket. We’ll also use Bitbucket’s Wiki for doc, and Issue tracking feature for bugs.

5. Java Spring 4 framework. The version 4 is still a release candidate, but our engineers are convinced that it’s safe. IMO it’s a little too risky given the fact that the application should go live in 3 months, but we can always fallback to the earlier release. In particular, we’ll be using the following Spring modules: Core, MVC, Data (maybe), Boot, and Security.

6. Consumer-facing front end will be developed in HTML5 using AngularJS and Bootstrap frameworks.

7. The Back-office UI: HTML5 ExtJS framework.

8. Data persistence: MySQL 5.6

9. ORM: either none or MyBatis

10. Code Generators: Apache CXF for WSDL schema, our home grown Clear Data Builder for back office Ext JS-Java CRUD generation

11. Full text search: Apache Solr

12. Web Servers: Nginx server plus servlet container Apache Tomcat 7

13. Deployment – one self-executable Jar with embedded servlet container (Apache Tomcat)

14. Exploring monitoring of servers with Newrelic and Takipi.

15. IDE: One developer uses IntelliJ Idea, another – Eclipse IDE

The client and the project manager (yours truly) are based in New York, the back-end developer is from Toronto, Canada, Web designer and Web Developer/Team lead work from Russia, the sys-admin works from Ukraine. For deployments we’ll be using our data centers – one in Florida and another one in New York.

This is it for now.

Categories Web

Java Swing Has to be Deprecated

Every time I start teaching my new Java class I’m looking at the Swing units in the manual asking myself, “Why my students need to know Swing framework?” Well, I need to teach them how to program GUI, event listeners, asynchronous worker threads and event loop that are pretty much the same in every programming language that deals with UI. My students create applets and test them in appletviewer, then they are going through hard times trying to run them in Web browsers… In the end, I tell them that they won’t be going doing Swing programming in the real world projects. I also tell them that if Amazon.com would decide to re-write their UI in Java they’d be out of business in no time.

If not with Swing framework, how should my Java students learn GUI programming? There is another Oracle product called JavaFX. It’s a better looking wrapper for Swing. It still runs on JVM, so Amazon would go out of business as quickly as with Swing, but at least with a better looking UI.

Java developers look down at the HTML/JavaScript crowd. Yes, programming in JavaScript is not as productive as in Java, but HTML5 applications usually look nice. HTML5 developers know that having a Web designer producing professionally looking CSS is a must. Whereas Swing components are ugly by default. They are so last century.

Recently I was attending a presentation on a particular Eclipse plugin that could produce Web reports. The speaker was using Twitter API to demonstrate how easy it was to generate a report finding tweets based on a certain hashtag. Tada….Report is generated, the Web browser opens the report’s URL and pops up the modal dialog asking to enter the search parameter. What an ugly dialog box that was! Eclipse grey style, 90% of its real estate was empty with an input field on top prompting to enter the parameter’s value. No one in the audience (all Java developers) seemed to care. They are all used to ugly GUI in enterprise applications. OK, this product was using RCP UI components, but the Swing ones are definitely not better.

The sooner Swing is deprecated the better. Even if JavaFX has no future in the Web or mobile applications, it has to become a mandatory replacement for Swing. Just because it promotes a better looking UI. Just because it promotes better taste among Java developers, who live in two different realities: the ugly depressive GUI at work and the eye candy world of iOS or Android applications. Let’s make a first step toward merging these worlds by killing Java Swing framework.

Intro to working with Git and GitHub

In October of 2013 My colleague Victor Gamov and I ran a presentation “Intro to working with GIT and GitHub” for the Princeton Java Users Group.
git1

Then we’ve received a number of requests asking if a recording of this session was available. We didn’t record this session back then and promised to find time and record it, which we did. The recording is here. Please note the Full Screen button on the top toolbar of the recording.

Categories git

Analytical Thinking for Dummies

Some people believe that only good math students can become computer programmers. Nothing can be farther from the truth. To be a successful programmer, a person needs two talents:

  • Logic
  • Analytical Thinking

Logic is needed because the majority of programming in the enterprise world is about writing if-statements. If this happens do this, otherwise do that.

Analytical Thinking is an ability to take what seems to be a complex problem and turn it into a set of simple steps. I’d like to share with you a simple expample illustrating what is analytical thinking.

On Wednesday evening I was walking along Broadway in New York City. While passing a Citibank branch, I noticed a girl who was standing there exchanging text messages with someone. Clearly, her phone was out of juice, but I’ve been wondering how she managed to reach the electric outlet conveniently placed this high?

photo (17)

Somehow the metrics didn’t work out, I took a photo and published it on my Instagram and Twitter accounts with the title “Girls Can Jump”, and one of my followers posted a funny comment, “It’s not the worst thing to expect from Android”. But I was trying to recreate the situation with the outlet, and decided that she asked some tall guy to insert the plug. I was still wondering, how she’d unplug the wire? Would a simple jerk motion do the job?

Yesterday, I’ve published my regular audio podcast about America (it’s in Russian) and asked the audience to offer their version of this puzzle. One of my listeners goes under the nick CoderA – he’s a software developer from Moscow. He answered with a picture that’s worth a thousand words:

photo170jpg

And this is a great illustration of what analytical thinking is. Taking a complex task (“Just figure out how she did it?”) and turning it into several simple ones:

  • What’s the distance between the electric outlet and the floor?
  • What’s the hight of her shoulder?
  • Whats the length of her arm?
  • What’s the length of her forearm?
  • How standing on her toes could extend her reachability?

After adding all these numbers together (the sizes are in pixels), it’s clear that this girl could have plugged it in by herself!

You can start arguing that the numbers may be wrong, but it’s beside the point. What’s a lot more important that CoderA has analytical skills and being a sofwate developer is the right profession for him. When during technical interview at Google they ask candidates “How many piano tuners live in San Francisco?”, they don’t expect to hear the exact number. They want to see the job applicant would try to find out this number!

If anyone from Google reads this post, consider extending a job offer to CoderA. We all know that knowing the syntax of the if-statement in a particular programming language is an easily obtained knowledge. But figuring out how she reached the electric outlet is not a trivial task. It requires analytical thinking.