Ashik’s IT Thoughts

December 19, 2016

Adobe Acquires TibeMogul

Filed under: IT — ashikuzzaman @ 2:46 pm

Today Adobe completes the acquisition of TubeMogul. So I will be an Adobe employee from new year 2017.

http://www.multichannel.com/prfeed/adobe-completes-acquisition-tubemogul/409788

Newsroom Link

Last Friday we had the last TubeMogul Holiday party at Ferry Building, San Francisco. We enjoyed it. Here is a picture taken from the photo booth in the party.

tubemogulholidayparty2016

October 7, 2015

Joined TubeMogul Leaving Salesforce

Filed under: IT, Official — ashikuzzaman @ 11:30 am

It’s been 6 weeks since I joined TubeMogul leaving Salesforce. The decision to leave Salesforce was not an easy one, as Salesforce is one of the leading and most innovative software companies in the world with approximately 17 thousand employees. When I joined there 8 years back, they had a little more than 3 thousand employees. So I saw Salesforce rising at a pace, that is only believable if you live in Silicon Valley’s startup atmosphere. I was in a good book in my own department and had a good network of people working in different departments; as I have been working there for so long. There were further growth scope and no doubt Salesforce pays good enough to employees in Silicon Valley (I have to assume elsewhere too). So why move out of Salesforce at all? Here was my rationale.

I have been working in IT Applications Development since my early years in Salesforce. The first half (4 years) I was working on a Java based module and the last half I have been working on Force.com / Apex (Salesforce’s own programming language developed on top of Java). During the second half I started feeling that I am getting out of touch with the Open Source projects and Java community; as being an application developer, I didn’t get a chance to do platform development which allows you to experiment with lots of cutting edge new open source frameworks coming out or the JVM based programming languages. So I considered moving within Salesforce to one of their platform teams but then I became part of a very large project (Project Delight) which I didn’t want to miss. The project took 2 and half years to finish and it was a very good experience in my career, seeing first hand how a large number of teams, each having its own development culture can work together to achieve a bigger goal and what various types of obstacles can come on the way. But once that project was done, I was getting ready for a bigger role on the next big project. But then I started feeling that the core problems that are awaiting me, we have already solved many of those in my last project. So instead why not jump into something completely new, where I will be hopelessly helpless?

That’s when one of my ex-colleague simply submitted my resume to a software company despite my reluctance (confession: I am a lazy person). But as my interview was scheduled. I started looking into what is there in the latest java world and I saw that the companies are moving to Java 8. When experimenting a few programs in Java 8 following the Manning book, I clearly understood it’s a complete revamp of the Java programming language. Lambda expressions, streams, functional style programming are few that excited me too much and I was no more ready to get back to Apex coding (not that Apex is bad, its just proprietary). I honed my Java 8, data structures and algorithm, spring and other open source projects familiarity for couple of weeks to get ready for interviews.

As naturally happens, I got selected by a few companies and rejected by a few others during the interview process. The job market is so good that I had at least half a dozen more interviews waiting for me the next week before I decided to stop interviewing and pick the best I had upto that time. TubeMogul was a clear winner in many areas. Of them are –

  • They are complete java and open source shop
  • They have different engineering teams where you might be able to move around over time – platform core (rtb), machine learning, big data & stats, ui, udb, appeng and more….
  • They are the 5th best place to work in San Francisco Bay Area according to Glassdoor review of 2015
  • They are a mid size company (500+ employees) making it ideal for a growing company and yet not too small to go bankrupt
  • Their business domain Real Time Bidding (RTB) is something completely unknown to me. So it will definitely pose challenges to me in multiple levels (which is what I was looking for).
  • They offered me a decent package. Although I humbly note that if you are working in Silicon Valley as a software engineer, most of the companies will offer you a good package; otherwise they won’t be able to attract or retain good employees.
  • I liked talking to each of the 4 people who interviewed me in TubeMogul as well the recruiter who handled the whole negotiation process in a very professional manner. My manager Murtaza is a very composed man, something similar to Rajesh Misquita at Salesforce whom I admire a lot.

I did let my team in Salesforce know 6 weeks ahead of time about my decision. I went to Bangladesh on vacation for 3 weeks to attend my brother’s marriage in between. I left a good relation with the management and peers before leaving Salesforce. I will always cherish the memories of working in such a nice a big company like Salesforce. But it’s time to move on.

When I joined TubeMogul, I saw my assessments were mostly correct. Except Java, I think everything else was simply unknown to me or I have used/worked on more than a decade ago. I still have not mastered the way to explain what RTB industry is all about. One of the very first things I did here is formed TubeMogul Chess Club. The pace of work is fast and everyone is very friendly. Let me go through a few more months, but as of now I believe my decision was correct to join TubeMogul.

May 11, 2015

My First Java Code Commit to GitHub

Filed under: IT, Java — ashikuzzaman @ 11:46 am

My First Java Code Commit to GitHub. For now I have started with a simple class and will keep adding more classes as I get time –  ListPerformanceTestSimple.java

https://github.com/ashikuzzaman/javaapichecks

I had to do some trial and error before finally all the setups worked in my Ubuntu box. You can save the trial and error time if you follow the steps below that I performed –

1. Register a github account – https://github.com/

2. create a repository – look at top right + sign after you log in.

3. setup authentication from github to git. You can read through this article if you need some help or simply execute the commands that I typed below in sequence – https://help.github.com/articles/set-up-git/#next-steps-authenticating-with-github-from-git or http://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository
3a. $ git config –global user.name “ashikuzzaman”
3b. $ git config –global user.email “ashikuzzaman@gmail.com
3c. $ git config –global core.editor gedit
3d. $ git config –list
3e. $ git log

4. Clone your repository in your local workspace –  $ git clone https://github.com/ashikuzzaman/javaapichecks.git

5. Add a new .java file, locally compile and run. For example, javac -d . ListPerformanceTestSimple.java

6. $ git add ListPerformanceTestSimple.java

7. $ git status

8. $ git commit -m “my first commit from command line to github”

9. $ git push origin master

January 21, 2014

Trying Out Gliffy as Online Diagramming Tool

Filed under: IT — ashikuzzaman @ 12:51 pm

I like free online tools as I use Mac, Ubunutu, Windows, iPhone and iPad at different times from different locations for same or different purposes, both office work or chess or other interests.

I use http://www.onlinehtmleditor.net/ as Online HTML Editor.

I use http://www.jsoneditoronline.org/ as online JSON Editor.

Now I wanted to come out of Visio or MS Paint or Dia for diagramming as those are offline or installed applications.

Today I tried to use Gliffy after searching and testing several other tools online. I see that it gives me close to the functionality of MS Visio although its free and online based.

Gliffy Online Diagramming Tool

May 13, 2013

Agile Product Ownership in a Nutshell

Filed under: IT — ashikuzzaman @ 2:31 pm

June 15, 2012

Why Software Engineers are Grumpy?

Filed under: IT — ashikuzzaman @ 5:40 pm

My friend Paul from East Coast, forwarded this article to me in the morning. While I was reading it, I became, happy, sad was laughing around loudly in the BART train to office and also got thinking. Too many things in it from the experience of an engineer.

Here is the article – The care and feeding of software engineers (or, why engineers are grumpy)

November 25, 2011

Finding Union and Intersection of 2 Large Lists

Filed under: IT, Java — ashikuzzaman @ 10:15 am

One of my colleague who works on performance tracking and tuning of applications asked for some helped around how to find the union and intersection of large lists. He works mostly on Python and Perl. Being a Java guy, I prepared a sample program for him to do this allowing to determine the size of the lists by himself. He was happy to get the program and once I explained him a bit about the retailAll(), addAll() and removeAll() API of Java and how I used those to determine the union and intersection, it was very clear to him. I am giving that program here in case it helps you as a reference implementation.


package com.salesforce.test;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;

/**
* To compiple: javac -d . ListPerformanceTest.java
* To run: java com.salesforce.test.ListPerformanceTest
*
* @author ashik
*/
public class ListPerformanceTest {

private int LOOP_COUNT = 50000;
private List firstList;
private List secondList;

public ListPerformanceTest() {
firstList = new ArrayList();
secondList = new ArrayList();
for(int i = 0; i < LOOP_COUNT; i++) {
if(i % 3 != 0 || i % 5 != 0) {
firstList.add("ashik - " + i);
}
if(i % 9 != 0) {
secondList.add("ashik - " + i);
}
}
}

public static void main(String[] args) {
System.out.println("\nListPerformanceTest starts.....\n");
ListPerformanceTest perf = new ListPerformanceTest();
List intersection = new ArrayList();
List union = new ArrayList();

Date d1 = new Date(System.currentTimeMillis());
System.out.println("d1 = " + d1);
for(String value : perf.firstList) {
System.out.println("value for firstList = " + value);
}
Date d2 = new Date(System.currentTimeMillis());
System.out.println("d2 = " + d2);
for(String value : perf.secondList) {
System.out.println("value for secondList = " + value);
}
Date d3 = new Date(System.currentTimeMillis());
System.out.println("d3 = " + d3);

System.out.println("perf.firstList.size() = " + perf.firstList.size() + " and perf.secondList.size() = " + perf.secondList.size());

if(perf.firstList.size() >= perf.secondList.size()) {
intersection.addAll(perf.firstList);
intersection.retainAll(perf.secondList);
} else {
intersection.addAll(perf.secondList);
intersection.retainAll(perf.firstList);
}
Date d4 = new Date(System.currentTimeMillis());
System.out.println("d4 = " + d4);
System.out.println("intersection.size() = " + intersection.size());

if(perf.firstList.size() >= perf.secondList.size()) {
union.addAll(perf.firstList);
union.removeAll(perf.secondList);
union.addAll(perf.secondList);
} else {
union.addAll(perf.secondList);
union.removeAll(perf.firstList);
union.addAll(perf.firstList);
}
Date d5 = new Date(System.currentTimeMillis());
System.out.println("d5 = " + d5);
System.out.println("union.size() = " + union.size());

System.out.println("\nListPerformanceTest ends.....\n");
}

}

The significant part from the output when you run the program is given below.

d3 = Fri Nov 25 10:03:36 PST 2011
perf.firstList.size() = 46666 and perf.secondList.size() = 44444
d4 = Fri Nov 25 10:03:55 PST 2011
intersection.size() = 42222
d5 = Fri Nov 25 10:04:14 PST 2011
union.size() = 48888

February 11, 2011

Waiting for NoteSlate

Filed under: IT — ashikuzzaman @ 1:57 am

A few days back my Google Reader RSS Feed took me to http://www.noteslate.com and from then onwards NoteSlate is roaming around my mind. I believe Kindle solved my problem of reading books, iPad solved the problem of a personal organizer cum web surfing but none of them really addressed the issue properly of writing or taking notes. NoteSlate will do that if I understood correctly what there current ad shows. Ah, I have to wait 5 more months to verify it!

December 19, 2010

Computers With Attitude

Filed under: IT — ashikuzzaman @ 2:19 pm

I thought it’s funny but I believe all the major O/S vendors are already capable of creating something this now.

Small Java Program To Convert Unicode Character Filled Sentences To Native or UTF-8 Character Filled Sentences

Filed under: IT, Java, Official — ashikuzzaman @ 12:58 pm

My colleague John asked for a tool from me last week so that he can finish the translations / localization works that he was doing. To solve it in a lazy way, I did some google around a bit but couldn’t figure out any easy tool that will convert Unicode characters \uxxxx to native locales. There are plenty of tools available to convert natives to UTF-8 and even the below simple command works in java for native to utf-8 :

native2ascii.exe -encoding UTF-8 your-input-file-name.properties your-output-file-name.properties

So what I have done is just written a small java program that will help you to achieve the reverse of it i.e. converting from unicode to native / utf-8. Here are the steps you will need to perform.

package com.salesforce.test;

import java.io.*;

/**
* To compile: javac -d . SfdcUnicodeToNativeConverter.java
* To run: java com.salesforce.test.SfdcUnicodeToNativeConverter
*
* @author ashik
*/
public class SfdcUnicodeToNativeConverter {

private static String fileName = "output.properties";

private static String sentenceToConvert = "cmgt_configurator/Sfdc_common_summary_32=\u304a\u652f\u6255\u3044\u60c5\u5831\u306e\u5165\u529b";

/*
\u304a\u652f\u6255\u3044\u60c5\u5831\u306e\u5165\u529b
\u304a\u652f\u6255\u3044\u6761\u4ef6 & \u5951\u7d04\u671f\u9593\u306e\u7de8\u96c6
\u6b64\u8ba2\u5355\u7684\u603b\u4f63\u91d1+
\u82e5\u8981\u7e7c\u7e8c\u7d50\u5e33\uff0c\u60a8\u5fc5\u9808\u8a73\u95b1\u8b80\u4e26\u63a5\u53d7\u4ee5\u4e0b\u6240\u5217\u6bcf\u500b\u7522\u54c1\u7684\u689d\u6b3e\u3002
*/
public static void writeOutput(String str, String fileName) {
System.out.println("Unicode to Native Conversion Starts...");
try {
FileOutputStream fos = new FileOutputStream(fileName);
Writer out = new OutputStreamWriter(fos, "UTF8");
out.write(str);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Unicode to Native Conversion Successful!");
}

public static void main(String[] args) {
writeOutput(sentenceToConvert, fileName);
}

}

1. Make sure sure you have JDK installed in your system. Set the environment variable JAVA_HOME in to point to JDK (alternatively there is a shorter way that I can show you).
2. Copy the source java file from the following network location into your machine – \\moorea\departments\AppStore\Comergent\Programs\SfdcUnicodeToNativeConverter.java
3. Open the source file in TextPad or Crimson Editor and replace the value for the variable sentenceToConvert to the actual sentence that you are trying to translate / convert.
4. Compile the java file that I wrote using the command javac -d . SfdcUnicodeToNativeConverter.java
5. Run the program to generate the output file using the command java com.salesforce.test.SfdcUnicodeToNativeConverter
6. A new file named output.properties should be generated in the same folder from where you ran the program.
7. Open this file with Altova Xml Spy or Notepad with UTF-8 Encoding to preserve the file format correctly. You may see some characters that look like junk. Don’t worry, those are not junks.
8. Copy the content from the file in Xml Spy or Notepad and paste those into a new MS Excel Spreadsheet. Now you should see the native characters properly. You can use those for translation purposes I your models.

I have tried to write down the steps above clearly as you will need to perform those repeatedly for each line of translations for each locale. Being a little innovative, you can use the steps above for multi-line translations as well by adding proper \n” + ” to hold many properties / values in the sentenceToConvert variables.

Older Posts »

Create a free website or blog at WordPress.com.