We’ve just started to work on the curriculum of the new online training titled “Modern Web Development for Java Programmers”. This course will be taught by practitioners from our company, Farata Systems. The initial desription is here: https://github.com/yfain/WebDevForJavaProgrammers.
Your feedback is appreciated.
During the last year I’ve been using Sublime Text editor for all of my new text-writing activities.
During the last year I’ve been actively using the version control system Git for our O’Reilly book project.
During the last I’ve been using GitHub hosting for my public projects.
Here’s the problem. Say, you’re a like me – a technical person producing IT content in Sublime Text publishing it on Github. Now imagine, you’re not like me – you have a mistress, and one day you wrote her a love letter using Sublime Text editor. Do you want the content of this letter to become publicly available on GitHub? If you do, stop reading. Now.
Here’s the privacy hole. Sublime Text editor creates a file with the name extension .sublime-workspace. I don’t know all details about what Sublime creators were planning to store there, but it stores unsaved buffers, and I was surprised to see there some texts that were not meant to be public. But it was available to the entire world on GitHub along with my other stuff! Open your .sublime-workspace and let me know if found some surprises there.
To fix this, you need to do the following steps (to the best of my knowledge).
1. Add the line *.sublime-workspace to the .gitignore file in your git repository. The .gitignore is a hidden file, where you can list all the files that should be ignored by Git in future commits.
2. Remove the existing sublime-workspaces file from your Git repository by issuing the following command:
git rm –cached YourFileName.sublime-workspace.
3. Run git filter-branch to remove this file from the history of all branches as described here.
3. Commit and push the changes to Github as usual.
If you’re new to Git and GitHub, you can watch our Introduction to Git video.
Here comes the bad news. Since Git is a distributed version control system, people who forked or cloned your Github repo can enjoy (and sell to the yellow press) that bloody letter you wrote to the mistress. Back to CVS!
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!
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.
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.
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.
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.
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:
- 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?
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:
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.