Sunday, December 16, 2018

YCSB ( Yahoo's .. Benchmarking )

Abstract :

 Introduction :

I was working with YCSB for a week or so. I wanted to benchmark redis performance for READ adn UPDATE. By default YCSB implements READ, UPDATE using redis commands hgetall and hset. As the YCSB workload does not already do any pipelined Read and update operations. I had tweak it the redis client bindings to YCSB to achieve that.  And coming from a kernel background i was not familiar with the building such java based benchmarks.
I could easily get started by downloading the build snapshot as instructed in the README. So to start with the code i had to clone it form the github repo and started looking at the code. I could find the build command quite easily in the README. But it was not going to be so easily.

It uses maven to build the whole project, so i figured i could use an option -pl to build only redis-bindings instead of building for all the database bindings.
In one of my machines it would not build throwing some exception related java heap. So i moved to another machine.

As started tinkering with the code, what i cared the least was the indentation, but some how the maven build would throw error for indentation and spacing and wouldn't  build. I could not figure out a way to avoid that and had to comply. One of the other things was the indentation was quite different from what i see in linux kernel. It expected to 2 spaces for every next level of indentation, unlike a 4 or 8 spaced tab.

YCSB abstracts the DB client side code quite nicely, and provides hooks like abstact methods like read() and update() which one can implement on the client side.

I had to just go and change some code here to get my things done. YCSB uses jedis, ( redis Java APIs)  to implemetn redis client. I needed to know the basic redis commands and then how to send those commands using the api. Then i needed to figure out how to pipeline it ( and in the meantime i got to know that it has a feature called transaction ).

Just a brief about it , Redis is in-memory data base and commands directly change the contents on the server. Redis's pipelining feature does nothing but makes the command execution asyncronous or non-blocking. You could send n number of commands and collect the response at a later point of time, hence not waiting for the pervious one to finish.

Redis uses Pipeline class to do that. This is a nice tutorial to get stated with. Generally the tutorials introduce both transation and pipelining togethere which becomes confusing to understand which api is meant for what. But this blog helps bring clarity. Basically Transaction makes sure that a set of commands are executed  atomicly and nothing to do wtih pipelining. But beacuse they are syntacically same, it becomes  confusing.

With all the required changes i could sucessfully build it but , as i had to run on a different machine just copied the whole build set up. Which was a mistake. It would give me errors saying that it could not find some classes in the classpath. I figured out , that it creates the snapshot of the build in a tar.gz and a jar. By simply extracting this tar i could use the binaries, without any errors.

It was quite some learning. I enjoyed it.

Friday, April 8, 2016

Bash auto complete for a script

What is the problem ?

I mostly write  a shell script for some trivial tasks, its saves lot of typing and hence time. Initially its kind of hard coded , works for exactly one thing, But as i start using more often, i tend to make it more flexible with command line arguments. Guess what after a while i come down to same amount of typing by typing everything as a argument or write a new script that calls it with parameters.

 But with all of these i felt like it was not efficient because for most commands when i type the arguments , tend to auto-complete on TAB, definitely saved a lot of typing.

Whereas, when i write my own script , even though the parameters were same/similar, it would not auto-complete. It was obvious how will bash know what arguments should be suggested/auto-completed to.

I was curious to figure out how does it work for normal commands like ssh, which could auto complete even with '@' in between. So first i will tell the solution i did for myself and also explain how it

Solution :

On googling i figured out that i could add autocomplete for custom commands or scripts by adding a new script in  /etc/bash_autocompete.d/* . ( To source it the effect immediately you can source ).

These auto-complete scripts seems to do nothing much but , create an array of options that were possible and print it when requested for a auto-complete for a certain commands. There are some standard parameter types like host_names, users, etc. you don't have to do even that. "complete" is a command line utility which has in some in built capabilities to do that.

Well i only wanted to have hostname as parameters so , i could do that with a simple one line script put in /etc/bash_autocomplete.d/

compete -F _known_hosts <script/command>

in my case it looked like this :

compete -F _known_hosts ./login 

How does it work already for installed commands/utilities? 

In fedora 23 (Others should have a similar approach , but need ot check on that) which i am using, the pre-installed commands have autocompletion. It comes from the script located in  "/usr/share/bash-completion/bash_completion". This gets loaded for every new bash session.
The call chain is  :
.bashrc -> /etc/bashrc -> /etc/profile.d/bash_completion.sh ->  /usr/share/bash-completion/bash_completion 

Well this is only true for very basic commands. Each command has its own the auto complete script in /usr/share/bash-completion/.
Wow! that's a treasure. This should cover most of the kinds of arguments, just reusing this might actually make it easier. 

Next we will see how does a newly installed command installs its auto-complete script. Sounds exciting??  Stay tuned!

Friday, April 26, 2013

To be or not be Dr


 Abstract :

Dilemma of whether to go for a PhD was the question at hand. I did some research to arrive at an answer after looking at three main parts (mainly socio-economic fronts across India, US and Europe) :


  1.  Surviving as a PhD student,
  2.  Difference it makes in a your career
  3.  Difference from a corporate career,

Motivation :


Questions about pursuing PhD has been bothering me since a year now. But as it always happen, unless you have a deadline, you don't conclude. I had always dreamed of being a scientist, my innocent motivation to PhD. Moreover, I found quite a few people who were in a similar situation. I set myself up to figure out what's in store apart from being a scientist as a PhD and the journey for becoming a Doctorate.

Conclusion :

I have always chosen things which opens up more opportunities. In other words, I have always restrained my self from choosing something which channelizes my efforts and look at a bigger goal.

I have discussed on public forums, read books discussed with colleagues , profs, PhD students and concluded. Currently, I am not prepared to be a doctoral student. Hence, decided not to go for PhD immediately after my Masters. (Keeping my options open ..).

Sunday, November 18, 2012

Kalman Filter simplified

While trying to understand what "Kalman Filter" is all about, I encountered that there were very less instances when people have explained in layman's terms.

After searching a lot , I have came up with a combination of three sources which can help you grasp this concept in a easier way.

Before we move on, I always consider a one line description/definition which we can always look back.

First line in the Kalman's Original paper [1] tell us that :
    its a "recursive solution to the discrete-data linear filtering problem"
just re-framing it  :
   "recursive solution for digtal filters"

If you are familiar with digital filters  (low butterworth filters ,etc) it manipulates the incoming data according to the given constraints. Keep in mind frequency is not the only way to characterize a signal. What if one cannot quantify the constants in terms of frequency,wavelets,etc? We land up to something called stochastic method, where we consider variables to be random (with certain constraints) and essentially don't try to characterize in a terms of a "feature" like frequency.

When we are looking at a digital filter, what we should be looking for is :
> type of input
      Discrete-time data. this data can be either scalar or vector.
      E.g. of discrete time scalar data : x
      At t=1 , x=4; At t=2 , x=2; At t=1 , x=8; At t=1 , x=6 ;

> type of constraints and how to apply?
     Constraint is given in terms of Model parameters ( coefficients of the equations given by Kalman )
     Kalman arrives at a linear stochastic equation which is generalization of system prone to noise.
     We apply the constraints guessing the behavior of the system and noise.

> suitable applications
   Filtering noise in most signals (sampled at certain rate). Majorly, used in noise removal from measured quantities when the behavior of the system is known.

The three sources are :
1)  Buffalo tutorial :
start by refering to the block-diagram on page 6. and the description of the variable on page 2.
This will help you visualize what these equations are about.

2) Bilgin's Blog :
  Awesome blog on Kalman filter. It tell you every thing about how can you apply Kalman filters.

3) Cornell course material   :
  Refer to the example of  measurement of water level in tank. This could give a good ending to your pursuit of learning kalman filters.


References:
[1] Kalman, Rudolph Emil. "A new approach to linear filtering and prediction problems." Journal of basic Engineering 82.1 (1960): 35-45.

Sunday, July 1, 2012

understanding DDR2 RAM modules

I was looking for a proper way to understand the working of a DDR2 SDRAM modules which are readily available in the market. I wanted to understand how to interface, but i figured out that its important to know the a about the working.



I figured out that , one can understand by following the following sequence:
1) Look for a Micron DDR2 data sheet.
    - This will give you an idea about the SDRAM 'Chip' on the modules you buy .
2) Then if you look for DIMM(Dual in-line memory module). wiki page is good enough to give you a good idea. Consider looking for SO-DIMM, which are used for Laptops and even Mini-DIMM ,which are used in some of the development kits .
3) Now you may look for difference b/w buffered and unbuffered  modules.

By the end i feel one may completely understand the working of DDR2 modules.

Monday, June 18, 2012

Idle mode disables JTAG interface in LPC2378

I was working with MCB2300 a ARM7 development/evaluation board from Keil. It has LPC2378 , a 32bit 144pin ,ARM7 by NXP .
Interestingly , when i started working on it , around 8 months before , i couldn't figure out that it had Serial ISP. The online userguide on Kiel website is not very friendly.

So, I am an expert in messing things up. I asked the mcu to sleep , but did not tell when to wake up. So whenever i reset the system , the system did perform some task and within miliseconds it would go into Idle mode.
  PCON |= 1; // MCU goes into idle mode

When i tied to program it using JTAG , it won't respond. I was not able to program .Finally, I asked in forums (ARM and Kiel).
It was pretty simple , if JTAG goes down, go for Serial ISP.

Need to put some jumpers on (ISP and COM0)
remove ETM jumper if there.

Erase flash using flashmagic @ 19200 baudrate .
It not done, you need to put it some new code to see whether you Ulink JTAG debugger is not faulty.

I was very happy that Kiel and ARM guys had replied so fast.

Friday, June 8, 2012

Agilent Soft touch pro

Working with Agilent Logic analyzer , I was thrilled to see the technology that has come up in the field of debugging .

I realized lately that XUP-V5 board has a mictor port available for debugging. Mictor stands for Matched impedance connector , very useful for capturing high speed signals and it also captures lot of signals in a small footprint.
Mictor Connector

After this I saw the Soft touch pro , an awesome implementation of contact-less probing . No its not actually contact-less, but it like the probe just touches the pads/lands. Though it has an overhead of soldering additional holder around the trace temporarily, its can be incorporated in end products. No extra cost on connectors on each board, and small foot print a win-win combo. Only thing is that one needs to buy a Agilent soft touch pro connector , which might cost heavily.

Dying to try them all.