by Bozho | Feb 18, 2014 | Aggregated, Opinions
It’s common knowledge that “ideas are worthless”. An idea will bring you nowhere – you need implementation, focus, a good team, the right environment, luck, etc. And I won’t argue with that – obviously, an idea doesn’t bring you anywhere by itself. Just google for “ideas are worthless” and you can find dozens of convincing articles. Ideas change, ideas evolve, initial idea doesn’t matter. But that’s the perspective of the businessman. A person whose interest is to make profit (nothing wrong with that, of course). Emphasizing the worthlessness of ideas brings a whole slew of startups that are there for the sake of being a startup. We’ll build something. We’ll figure it out along the way. Then they master the skills of fundraising, they focus on Lean, MVP, time-to-market, exit strategies, etc. etc. And that’s all great. Except that it’s not technology. The perspective of a “hacker” is different. A hacker is thrilled by technology, he wants to be challenged. The ultimate point is not to have a startup, to get acquired, to make money. The ultimate point is to make something cool, something different, something technologically innovative. I can have a dozen ideas per day. Things that may actually be turned into a startup. I know all of the above buzzwords, like Lean and MVP, so probably I can turn them into some sort of company. Do I do that? No. And not because I’m afraid not to have a stable income or wasting a couple thousand bucks. I don’t do that just because I’m not convinced they are cool, technological and challenging enough. Probably, that’s the difference...
by Bozho | Jan 13, 2014 | Aggregated, Opinions
Yes, it is my opinion, and yes, it might seem like a hate-post. But I’ll try to address the issues I have with Scala and its surroundings. I have used Scala in a single, relatively small project (currently working in production), so I guess I’m somewhere between “n00b” and “intermediate”. there are multiple right ways to do the same thing – there are a lot of tasks that you can achieve with one or two lines in Scala. But often there is more than one way to do it, and there’s no obvious winner. The options vary on the brevity-readability scale, on the functional-imperative scale, and in many other ways. I know what currying, partial functions, partially applied functions, folding, collect, map, apply, etc. do, but given a simple task I can use all of them I don’t know which one. Probably because I’m a beginner – true, and over time I guess I’ll build a preferred set of approaches. Which will likely differ from those of any other co-worker, and the projects will me “messy”. It would be something like having half the project with curly brackets on same line, and the other half – on the next line. it’s cryptic – you can probably be ok with all the symbols flying around after some coding, but I find it plain ugly. It is a high-level language and the use of so many symbols is troublesome. Take a look at this stackoverflow question to see what I mean. binary incompatibilities – I have an error that in a Scala 2.10 project I can’t use a library compiled with...
by Bozho | Jan 8, 2014 | Aggregated, Opinions
The semantic web. You’ve heard about it. What is it? Chances are, you don’t have a completely clear idea. But why isn’t the web “semantic” yet? First, it’s complex to understand. There are tons of standards around it – RDF, RDFa, RDFS, URI, OWL, SPARQL, etc. It’s hard to get started, because you have to put a lot of unfamiliar stuff in your head. Compare that to the simple, old web page using HTML, where you write some tags and you have a webpage. Pretty easy. Complexity wouldn’t be that much of an issue, if there were visible benefits. What the semantic web relies on, is that every website should conform to a semantic notion (e.g. use RDF). But what if you expose your data in a structured way? Nothing. Yes, you page becomes easier to make sense of my machines, but you don’t get anything. Why would a web shop or a social network or a personal website be “semanticized”? It requires extra effort for some invisible and hard to understand benefits. Note that I’m not saying there aren’t benefits – there certainly are, but they are too far away from the mind of the average website / online business owner. It’s a bit of a chicken-and-egg problem – there’s no immediate benefit, and so people are not making their web sites semantic. And because there are so few semantic websites, there aren’t any popular products that would provide the desired benefit. And here comes one great example – the Facebook Open Graph protocol. It is a proprietary solution (never mind the “open” in the title) that defines...
by Bozho | Dec 9, 2013 | Aggregated, Opinions
My development machine has Windows. I have used Ubuntu at some point, but it was a disaster, so I switched back. And there are always people asking me how I manage to be productive on Windows, and if I don’t miss the shell. Developers use the shell and the tons of available cool utility programs in Linux to achieve some supporting, auxiliary tasks. Doing mass-replace, automating some code-generation process, etc., etc. So don’t I miss the shell and bash programming in order to achieve tasks that are auxiliary to the actual development? Well, I don’t. I don’t even use PowerShell. If my IDE doesn’t provide the functionality I need (or I don’t know it does), then I use a tool class with a main method. Java has a lot of powerful libraries that allow me to ditch the need of doing stuff in the shell or using bash scripts. And the good thing is – it’s Java, it can be versioned if needed, and it’s easy to use, with no additional learning curve, no man pages, etc. My development machine has Windows. I have used Ubuntu at some point, but it was a disaster, so I switched back. And there are always people asking me how I manage to be productive on Windows, and if I don’t miss the shell. Developers use the shell and the tons of available cool utility programs in Linux to achieve some supporting, auxiliary tasks. Doing mass-replace, automating some code-generation process, etc., etc. So don’t I miss the shell and bash programming in order to achieve tasks that are auxiliary to the actual development?...
by Bozho | Sep 2, 2013 | Aggregated, Opinions
PaaS (Platfrom as a Service) is a marketing term for a sandboxed environment where applications can be deployed. The sandbox usually includes a lot of 3rd party software, which can be used by the application. Notable (java-related) PaaS’s include GoogleAppEngine, Heroku, OpenShift, CloudBees, CloudFoundry, Jelastic. It all sounds very nice – you configure your application via a web console, you include the services you need (application server, database, message queue, search engine), add a few configuration hooks and everything is up and running. No need to go and install stuff manually, no need to think of scaling, as this may be automatically handled by the platform – you simply add more instances/engines/dynos/gears/whatever to service the request. But I’ve evaluated a couple of them in the past years and encountered one serious flaw that was essentially a deal-breaker for most projects: software versions. During the development of each project, a part of the stack is upgraded to the latest versions. That’s due to either important bug fixes, or performance improvements, or for the sake of staying up-to-date. In virtually all projects I’ve used, we have found a need to upgrade one or more components. The message queue has a serious bug, then a NoSQL database needs some performance improvements from the new version that covers the specific case used in your project, then the search engine offers a nice distributed feature that you’d rather use. And yet, the managed environments rarely offer the latest versions (if they offer the 3rd party software at all). They might upgrade after a while, or they might not. You don’t have control over that....
by Bozho | Aug 18, 2013 | Aggregated, Opinions
We are all familiar with the KISS (Keep It Simple, Stupid) and YAGNI (You Ain’t Gonna Need It) principles. And yet, overly complicated software is everywhere. Let’s use an application server. Definitely. We can’t go without distributed transactions. And a message queue – for the sake of decoupling. Oh, our business logic is likely to include a lot of business rules, let’s go for a rule engine. And an ESB, definitely an ESB – how else will we distribute our multiple modules without making them interdependent? Database? Oracle, of course. But also CouchDB and Cassandra, because relational databases are not good at some things and we will need very high performance. And we need a couple of additional layers. Some facades here and there. And modules – we just shouldn’t have a monolithic application, how else will we be able to reuse our components? You know, let’s try OSGi, it will suit us. Did I forget web services? SOA is so important. And the ESB requires it anyway. Even if you don’t have designated architects, this is the sort of thing that happens. And each of the things has some seemingly legit reason to be there. No. YAGNI. You are most probably building business software that will be used by not more than a few hundred users simultaneously. It is probably going to include some business logic and a lot of requirements for reports and statistics. And you don’t need any of the above in order to make a functional, easy to maintain piece of software. Am I contradicting myslef when saying you should leave technologies and frameworks out,...
Recent Comments