ag-grid drag and drop column header to re-arrange

Hi all,

I needed drag and drop for ag-grid‘s header to re-arrange columns.

There wasn’t any example I found on the web, so I implemented one, using HTML5 drag&drop.

This post hopefully will help someone looking for the same thing. Leave a comment if this is true.

See the sample here:

Github thread here;

And embedded live example below:

App now in review

This is a short  update, app is finally in review. 🙂

iTunes connect has a nice iOS app which sends push notifications on status change.

The notifications have to be enabled, they are not enabled by default. You do that in your iTunes Connect user settings page.

Where to ask people to review your iOS app

App is still waiting for review.

I’m already thinking about ways to promote it. I’ve found this link, which may help other people in a similar situation:

If your app is a game, also checkout this list:

The above is a list of many websites that handle iOS app reviews, ranked by how popular they are. I plan to send an email to many of those, maybe not all, but as many as I can.

I will also ask / nag my contacts that have a lot of US / other countries contacts to share a picture made with my app, or share the app on Facebook, things like that.

Paid advertising is out of question, but I’m still thinking of sending emails to well known people, and if any of them likes the app and shares it, it’ll still be a good thing.

If only Apple would finish the review already…

First steps in iOS development

I want to get serious about this blog 🙂

I’ll start documenting how my journey into iOS is going. That’s aside from my daily job as a Java and Web Developer.

I created an app, and submitted it to the Apple App Store. It’s currently in review, since Tuesday – today is Thursday. I noticed days are passing slower when your app is in review.

For the curious ones among my 0 readers, here’s a link to it’s website:

After / if it’s approved I’ll let you know how I plan to promote it, how I’m actually promoting it, and how it all goes.

Being a Christmas Greeting App, and having just 2 weeks until Christmas, I’m not sure it’ll be such a great hit (due to time limitations), but I still have my hopes up, because I think I built a quality app with quality content, and that people might just notice that, and use it. Maybe even buy the premium version.
Average app review times are in the 7 days area, so here’s to 5 more slow passing days.


Interesting parenting advice

I got this link from a friend:

This quoted part is related to how would parents advise their children to pick a field to work in, taking into account money versus what the kid wants to do.

And it seemed funny to me:

The advice of parents will tend to err on the side of money. [..] The kids think their parents are “materialistic.” Not necessarily. All parents tend to be more conservative for their kids than they would for themselves, simply because, as parents, they share risks more than rewards. If your eight year old son decides to climb a tall tree, or your teenage daughter decides to date the local bad boy, you won’t get a share in the excitement, but if your son falls, or your daughter gets pregnant, you’ll have to deal with the consequences.

More info on Paul Graham here:

Special thanks goes out to Petrica Rus (a work colleague), who motivated me to write this post.

Heartbleed and Tomcat Out Of The Box SSL config

Tomcat is not vulnerable to HeartBleed out of the box.

Yes, the APR library is linked and SSLEngine is on (if you really want to, you can comment this line, or set SSLEngine to off, but you are not vulnerable even if you leave it like this).

<Listener className=”org.apache.catalina.core.AprLifecycleListener” SSLEngine=”on” />

If you look at the server.xml config file of a default tomcat deployment, it’s SSL connector uses JSSE not the APR library.

<!– Define a SSL HTTP/1.1 Connector on port 8443

This connector uses the BIO implementation that requires the JSSE

style configuration. When using the APR/native implementation, the

OpenSSL style configuration is required as described in the APR/native

documentation –>


<Connector port=”8443″ protocol=”org.apache.coyote.http11.Http11Protocol”

maxThreads=”150″ SSLEnabled=”true” scheme=”https” secure=”true”

clientAuth=”false” sslProtocol=”TLS” />


So it shouldn’t be explotable via Heartbleed. Unless you manually changed the SSL connector to use APR, I think it’s safe to say, you are not vulnerable.

A reply from Tomcat is also available on their page:

Is Tomcat 7 vulnerable to openSSL bug(HeartBleed)?

ChuckC 1 day ago

Yes, if you have been using the APR <Connector> with SSL enabled. Work is underway to include a corrected version of OpenSSL in the tcnative-1.dll binaries, but if you’ve already been hacked, changing your server keys is strongly encouraged. The issued is being tracked here:

Also a discussion thread from attlasian:

For example see this discussion thread from Attlasian:

Hi Andre,

The application version is Apache Tomcat/6.0.32 – Servlet API 2.5.

Below is apache connector config

<Connector SSLEnabled=”true” acceptCount=”100″ clientAuth=”false” disableUploadTimeout=”true” enableLookups=”false”
keyAlias=”tomcat” keystoreFile=”C:\JIRA\.keystore” keystorePass=”xxxxxxx” maxHttpHeaderSize=”8192″
maxSpareThreads=”75″ maxThreads=”150″ minSpareThreads=”25″ port=”443″ protocol=“org.apache.coyote.http11.Http11Protocol
scheme=”https” secure=”true” sslProtocol=”TLS” useBodyEncodingForURI=”true”/>

Vitaly Osipov [Atlassian] · 394 karma · 4 hours ago

You are fine, this configuration uses Java’s own SSL implementation.

This means that if you are using the OOTB config, which uses a JSSE connector, you should be fine.

You can check in your server.xml config file from your tomcat deployment. If you are using APR, your connector will have a protocol value of: protocol=”org.apache.coyote.http11.Http11AprProtocol”.

All you need to do until an updated Tomcat is released is switch to a JSSE connector or manually update OpenSSL.

But again, out of the box config is safe from Heart Blood dripping bugs. 🙂

Optimize GWT performance

It depends on what you are looking to optimize. This article will give some advice concerning – compile time, initial download, and runtime performance.

If compilation takes too much time, you could have different configurations, one for continuous build, one for nightly / automated testing and another for production.
Here’s a link with more details on how to customize the GWT Compiler.

If the initial download of the application is too large, you can check if you are using Code Splitting, a feature that allows the application GWT to start  running after it downloaded a part of the code, while other parts of the code will be downloaded as they are needed. More details here. You can see quickly if it is used or not in the compile report.

If the application is slow at runtime (if it takes long between when you press a button and the action happens), maybe there are too many elements in the DOM. For example if you have a tab panel with complicated UI in each tab, if a tab is not selected, you can remove it from the DOM, and the rest of the application will run faster. (Save it’s index to insert it back in the same place when you need it).

protected void detach (Widget child) {
child.getElement (). removeFromParent ();

protected void attach (Widget child, int beforeIndex) {
getElement (). insertChild (child.getElement (), beforeIndex);

Depending on what libraries you use, they can also slow your app down. Standard GWT is pretty fast, libraries (like GXT that I use also :D) will definitely slow down your app.
Of course it depends on which libraries, and how well they are written. For example mGWT will not make your app slower :).

GWT has several options to optimize the compiler (by modifying the  gwt.xml file), for example:

<! – Smaller JS file ->
<set-property name=”compiler.stackMode” value=”strip” />
<set-configuration-property name=”CssResource.obfuscationPrefix” value=”empty” />

Also make sure the production build does not have this tag in gwt.xml:

<inherits name=””/>

because it will run slower. 😀

There are definitely other optimizations. Add a comment if you have anything to add here :).