Plagiarism is Copyright Infringement AND Poor Form

Please repost / reblog / spread the word, should you have been victim of a similar act of plagiarism or copyright infringement!

With my blog getting increasingly popular, I’m more and more facing the problem of plagiarism. Plagiarism is bad for a variety of reasons:

  • It hurts the original author’s SEO, as content starts getting less relevant when duplicated verbatim across the net.
  • It is very poor form and just a plain embarassment to the offender.
  • It will inevitably get back at you. Right, Mr Guttenberg?

Why do people engage in plagiarism? When there is Fair Use? Why do people pretend they have authored something themselves, which they have stolen? Why do people obscure their sources?

I am going to take plagiarism very seriously and not tolerate it. With Google and Google Analytics, it is very easy to detect plagiarism. I’ve recently had an article removed from a popular Indian website, which seems to heavily engage in plagiarism: TechGig.com

ITeye.com is another platform from China, whose members ruthlessly engage in plagiarism as well. Yes, Google also ships with Google Translate. Another great tool to detect plagiarism. Beware, offenders! I will be going after you. And if you make money with my content, I am more than happy to collect some of that, or have your domain challenged with your registrar! All top-level domains are eventually protected by the DMCA, as the ICANN is an American-dominated organisation. You don’t want to risk such action just because a couple of geeks on your platform cannot control themselves! And if your platform itself is the offender, then be sure that you will close down very soon!

Here’s a letter I wrote to CSDN.net (registrar) and ITeye.com. I am licensing this letter as public domain, for you to reuse against your own offenders. Take any parts you may need.

To whom it may concern,

I have found your contact through a whois lookup, as ITeye themselves fail to respond to my recent enquiry. I am continuing to notice that a couple of ITeye bloggers and curators copy and translate articles off my blog http://blog.jooq.org, which is a promotional blog for my database product jOOQ.

In particular, these posts here:

… were in fact copied from my popular blog post here:

… which was syndicated with my express permission to DZone and JCG:

Plagiarism and copyright infringement is a non-trivial offence in many countries, including Switzerland from where I am operating. I urge ITeye to

  • give full author attribution to myself for all blog posts that ITeye writers copy and / or translate verbatim
  • have such authors link to my *original* blog post (not to syndications thereof)
  • have such authors keep promotional links in place
  • or to remove such blog posts immediately

I am taking this infringement very seriously, as the above displays go beyond what is known as “Fair Use”. I am sure ITeye understand that it is of utmost priority for a platform such as ITeye to comply with such laws. I am also sure that CSDN, the registrant will be able to execute the appropriate actions, should ITeye fail to comply, in case of which I will need to act on behalf of the American DMCA.

Please do not engage in plagiarism. Please, critically review your writers’ works and actively block all suspicious content.

Sincerely,

Lukas Eder

The Announcer Badge on Stack Overflow

It just struck me like lightning. I just realised one (surely not the only) very important reason, why Stack Overflow always winds up at least once in the top 10 search results on Google for virtually any programming-related search. The Announcer Badge. When you share a link to a Stack Overflow question or answer using the “share” button, you get a personalised link including your own user ID. If that link generates 25 clicks from distinct IPs, you’ll get an Announcer Badge as a reward for linking to Stack Overflow. This badge has been awarded more than 25k times. Note, there’s also the Booster Badge (awarded around 800 times) and Publicist Badge (awarded around 300 times).

Stack Overflow uses a lot of techniques following the Gamification principle. But this particular badge is really clever. Trick your users into creating highly relevant links from arbitrary websites towards Stack Overflow helping to add relevancy to the platform and to its various questions / answers.

Well done, Stack Overflow!

How to Make Your Advertisement Look Like Spam

I had experienced ZeroTurnaround‘s marketing and sales before, and I thought it was a bit agressive, although their products seem really nice and cool, so I had forgiven them at the time… However, looking at the numerous links to their product JRebel on CodeRanch just looks like quite offending spam to me. Consider an arbitrary question:
http://www.coderanch.com/t/294530/JDBC/databases/NullPointerException-stmt-executeUpdate

The question is about a silly NullPointerException and its answer is straightforward. Now the JRebel link at the bottom:

I agree. Here's the link

I agree. Here’s the link…

“I agree. Here’s the link” – Whatever. Completely off-topic, no? It looks as though CodeRanch had a spam filtering problem which was exploited by a decent company selling decent products. Why would they do that? Well, I understand that being able to put your link on one of the Top 20 Java Websites can be good for search engine optimisation. But making it look like spam will probably start pissing off potential customers, no?

The crazy thing is, it really isn’t spam, it’s a regular advertisement on CodeRanch. Scroll down on this question here:
http://www.coderanch.com/t/376762/java/java/ArrayList-maintain-order

I’m really curious if this advertisement works out for ZeroTurnaround! I’m also curious about your opinion, and whether you also think this is spammy.

Get hidden feature requests from your users

In general, I’m not a marketing guy, I prefer to develop code. But when I look at modern marketing tools that we developers have created for our marketing friends, I’m getting a bit jealous. Take this blog, for instance. It’s the perfect jOOQ marketing tool. Check out my 2013 visitor statistics:

jOOQ blog 2013 statistics

jOOQ blog 2013 statistics

Quite obviously, my February posts were given a lot more attention than my January posts even if I’m taking into account the average visitor that visits old posts, generating “background noise”. The reason is simple:

  • In February, I blogged mostly about controversial Java topics. Before, the topics were more technical and SQL-related (and thus objective and boring). Java blogs get more traction than SQL blogs.
  • My two blogging partners DZone and JCG tend to reblog Java posts more than SQL posts

Aha. So I should write more Java blog posts in order to get even more traffic. But I don’t just want traffic, I want “relevant” traffic.

How to generate “relevant” traffic

“Relevant” traffic for jOOQ is traffic that will generate “conversions”, e.g. people that may not know jOOQ before hitting this blog, checking out jOOQ and downloading it, because they read my articles. That’s an obvious case for “relevant” traffic.

But I also want to get people on my blog / website, because they are already (or not yet) using jOOQ and because they’re looking for something specific, like a jOOQ feature that they’re missing. Only few people will actually take the time to write up a nice, understandable e-mail with a well-explained use-case to issue a feature request on the jOOQ user group. They’re more likely to give up after a couple of google searches. Hence, it is important to take notice of those searches and to be sure that they will end up on my blog / website, not on some arbitrary google search result or on Stack Overflow (which is good, but which I cannot analyse). Here are some interesting search strings that have lead to “hidden” feature requests or blog posts in the past:

Search strings leading to blog posts

These search strings indicated that there are grounds for generating more relevant traffic on the blog:

  • jooq vs linq: jOOQ is a good answer to Java’s missing LINQ (Language INtegrated Query).
  • jooq vs hibernate: jOOQ is a viable alternative to Hibernate. This is a good opportunity to read about the pros / cons of each approach.
  • scala slick: SLICK (Scala Language-Integrated Connection Kit is another “LINQ-esque” API.
  • jooq vs mybatis: MyBatis is a different approach at abstracting the data layer in Java.
  • jooq vs jpa: See jOOQ vs Hibernate
  • java fluent sql: All users that are looking for fluent APIs should come here. There is probably no better fluent implementation of SQL in Java, other than jOOQ.
  • scala sql: Yes, Scala users should use jOOQ to write SQL statements.
  • where are there good java sql open source projects: Here! ;-)
  • jooq migration: Some people may expect jOOQ to add a database migration module. There are good tools for that already, e.g.: Liquibase or Flyway.
  • jooq caching: Some day, I will get this bad idea out of people’s head. The data access layer shouldn’t implement caching!
  • jooq google app engine: Yes, that should work, too. Although I don’t have a running instance anymore.
  • bad software: I don’t know how they got here :-)
  • jooq clojure: I wonder what that would look like. Anything like SQLKorma?
  • jooq alternative: Why?
  • jooq enterprise sql: You can donate here, to feel a bit more enterprisey!
  • how to create a java internal dsl from a bnf: I should sell this idea, or create a non-free tool from it!
  • martin fowler jooq: Yes, I’ve asked him too. Neither he himself, nor his company ThoughtWorks responded to my inquiries so far. I should really get on their tech radar…

The above examples show that I should probably write a post that shows the main disadvantages of LINQ (heavily reduced expressivity) compared to using SQL directly (very expressive, feature-rich language). In a way, LINQ and JPQL both attempt to cripple / standardise SQL by removing most of SQL’s features. Unsurprisingly, one of the most popular articles on this blog is this one here:

https://blog.jooq.org/2012/07/30/when-will-we-have-linq-in-java

Search strings leading to “hidden” feature requests

These search strings indicated that users may be interested in a particular feature:

  • jooq ddl: It’s about time that jOOQ also supports DDL statements.
  • jooq cte: Common Table Expressions (CTE’s) are an important missing feature today, in jOOQ. jOOQ’s current fluent API technique doesn’t fully take care of taking advantage of CTE’s expressivity.
  • postgres insert returning: Postgres’ INSERT/UPDATE .. RETURNING syntax is one of the nice features in jOOQ.
  • jooq transaction: jOOQ currently doesn’t handle transactions. jOOQ can run, but jOOQ can’t hide from this feature (delegating it to other APIs).
  • relational division: Beautiful feature. Implemented in jOOQ!
  • bnf sql: Yes, jOOQ’s API has an underlying (informal) BNF notation. Time to formalise it!
  • jooq cursor: jOOQ can read cursors from stored procedures, which is a pain to do with JDBC.
  • derby trunc: jOOQ simulates functions unavailable in some dialects.
  • jooq logging: jOOQ allows for easy logging of executed SQL statements.
  • jooq meta: jOOQ has an API to query database meta data, which is more intuitive than JDBC’s
  • java multiple cursors: Yes, fetching several result sets is much easier with jOOQ than with JDBC.
  • hibernate olap: No, unfortunately, Hibernate can only handle simple OLTP. For OLAP, you’ve come to the right place.
  • simulate skip locked h2: Beautiful! Challenge accepted.
  • connect by: Oracle and CUBRID support this nice and concise way of expressing recursive SQL.
  • group by rollup: A nice OLAP feature.
  • load mysql script java .sql: jOOQ’s Loader API gets you started quickly, when batch loading data into your database.
  • derby bitand: Ah, yes. Bitwise operations are poorly supported in most SQL dialects. jOOQ simulates them for all databases.
  • jooq blob: Most JDBC drivers don’t really care about the distinction between Blob / byte[], or Clob / String. But things might get nasty for very large Blobs
  • production schema: Yes, jOOQ’s distinction between development schema and production schema has proven very useful to many users.
  • jooq batch insert: Batch queries. A pain to do with JDBC. So simple, with jOOQ
  • jooq customtable: I get a feeling that this “dynamic SQL” thing is still not 100% well implemented in jOOQ.
  • jooq informix support: Yes, one day!
  • for update sql server: jOOQ can simulate pessimistic locking through the JDBC API!

The above examples show that a library that is “true to SQL” in a way that it does not try to hide SQL’s syntax complexity hits the spot with many users.

Conclusion

These search strings help adding even more value to jOOQ. They are the “hidden feature requests” of jOOQ’s users. Tool vendors, use this knowledge and blog about your experience, products, thoughts, ideas. Give away free information that is interesting to a broad audience. It will pay back when you analyse your incoming traffic and the google search strings that people used to find your relevant blog (granted that your blog is somewhat relevant)!