বুলিয়ানোলজি, বিড়ম্বনা ও শিক্ষা (Branching with if(condition) ; should have at lease one else statement)

আমার একটা বদঅভ্যাস আছে। যখন কোন কন্ডিশনাল ব্রাঞ্চিং এর মাধ্যমে কোন বুলিয়ান প্রোপার্টির ভ্যালু আপডেট করার কোড লিখি তখন শুরুতেই ওই প্রোপার্টির ভ্যালু ০ করে নেই। তারপর If() স্টেটমেন্টের মাধ্যমে প্রয়োজনীয় কন্ডিশনের উপর ভিত্তি করে প্রোপার্টির ভ্যালু আপডেট করি।
উদাহরনঃ

hasPlanToBeOut = false;

if(checkIfYouHavePlanToGoOut)
{
   hasPlanToBeOut = true;
}

এই অভ্যাসের বিড়ম্বনাঃ
আজকে বাসায় বসে বসে বিরক্ত হয়ে সন্ধ্যায় পর পর তিনজন কে মেসেজ দিলাম নিচের মত করেঃ
“বের হলে জানাইস”
উপরের কোডের মত যদি লেখি তাহলে দাড়ায়

if(jodiBerHos())
   callMe();

সবই ঠিক আছে। যখন বাইরে বের হবে তখন তারা কল দিয়ে জানাবে যে বাহির হচ্ছে। সমস্যা হয় যদি তাদের আজকে বের হওয়ার কোন প্লান না থাকে। সেক্ষেত্রে আমাকে অনন্ত কালের একটা ওয়েটিং লুপে পরে যেতে হয়। এখানেই বিড়ম্বনা। আমার ওই মেসেজ টা যদি একটু পরিবর্তন করি তাহলেই আমাকে আর এই ওয়েটিং এ পড়তে হয় না।
প্রশ্নঃ “আজকে বের হবি?”

if(jodiBerHos)
   callMe(YES);
else 
   callMe(NO);

কয়েকদিন আগেই একটা প্রজেক্টে বাগ পোস্ট হয়েছিল। বাগটা ছিল এরকম, শুরুতে ২ টা এরিয়ার কালার হলুদ থাকে। সময়ের সাথে সাথে ডাটার উপর নির্ভর করে একটার রঙ পরিবর্তন হয়ে লাল হয়ে যায়। এরপর আবার কিছু সময় পর যখন ডাটা পরিবর্তন হয়ে লাল এরিয়া টা পুনরায় হলুদ হওয়ার কথা সেটা আর হয় না। মানে একবার লাল হয়ে যাওয়ার পর ডাটা পরিবর্তন হলেও ওইটা আর কখনোই হলুদ এ ফেরত আসে না।

//init
areaA = yellow;
areaB = yellow;


//get called in a one minute interval
if(someCondition())
   areaB = red;

কোডটিতে দেখা যাচ্ছে শুরুতেই দুইটা প্রোপার্টির ভ্যালু ইয়েলো রেখে তারপর কন্ডিশন চেক করে রেড করা হচ্ছে। অর্থাৎ যদি someCondition() এর ভ্যালু true হয় তাহলে areaB রেড হয়ে যাবে। এই কন্ডিশন চেকের কোডটুকু এক মিনিট ইন্টারভালে বার বার কল হতে থাকবে। একবার রেড হয়ে গেল। এরপর কোন সময় যদি someCondition() এর ভ্যালু true না হয়ে যদি false হয় তখন আর কিন্তু areaB এর ভ্যালু পরিবর্তন হবে না। রেড ই থেকে যাবে। এই জন্য এই কোড স্নিপেট এর সঠিক রুপ এরকম হওয়া উচিত ছিলঃ

//init
areaA = yellow;
areaB = yellow;


//get called in a one minute interval
if(someCondition())
   areaB = red;
else 
  areaB = yellow;

সারমর্মঃ যেকোন if() স্ট্যাটমেন্টে কমপক্ষে একটি else ব্রাঞ্চ থাকা উচিত।

প্রতিক্রিয়া [আমি ও রুয়েট]

গত মঙ্গলবার (১৭ই সেপ্টেম্বর, ২০১৩) তারিখে আমার রুয়েট জীবনের শেষ ক্লাস, ক্লাসটেস্ট, ল্যাব, ল্যাব ফাইনাল, কুইজ , বোর্ড ভাইভা সব কিছুর পরিসমাপ্তি ঘটল।বাকি শুধু ফাইনাল পরীক্ষা আর থিসিস। এরপর থেকেই আমার ফেসবুকের ওয়াল ভরে আছে বন্ধু,ক্লাসমেট,রুমমেটদের দু:খভরা স্ট্যাটাস দিয়ে। তাই আমিও লিখতে বসলাম।তবে আমি লিখব সেইসব জিনিসের তালিকা যা আমি ঢাকা গিয়ে মিস করব।

খাবার-দাবার :

  • বৈশাখী হোটেলের ডালভাজি (সকালের নাস্তা, পরোটার জন্য না, ডালভাজির জন্য যেতাম)।
  • কাশেমের (k.f.c) হোটেলের আলুভাজি (শুধু আলুভাজি দিয়েই দুই প্লেট ভাত খেয়ে ফেলা সম্ভব)।
  • নর্দানের মোড়ের নাহিলের আম্মার (আমাদের খালা) বানানো ছোলা(প্রতিদিন বিকালে দুই বাটি) আর বেগুনি।
  • ডাইনিং এর পাতলা ডাল। আমার কিন্তু ভালই লাগে।খাওয়া শেষে একবাটি ডাল চুমুক দিয়ে খাওয়া ( পুরো মাখখখখখন)।

বন্ধু-বান্ধব ও অন্যান্য:

  • ডলারের সাথে সেন্স অব হিউমার এর প্র্যাকটিস।
  • সাদিয়া জামান এর সাথে রাত ১২ টার পর ফেসবুকে আড্ডা (3rd ও 4th সেমিস্টারে, সে যাবতীয় পড়াশুনা শেষ করে তারপর ফেবুতে আসত।)
  • প্রবালের একটু পর পর ফেবুতে নক করে “ওই, কি করস?” জিগ্গাসা।
  • রন্জুর ইংরেজী।
  • কারনে অকারনে শাহেদকে মারধোর করা।
  • অভির সাথে শেষ বেঞ্চে বসে সারা ক্লাস ধরে গল্প আর স্যারদের ঝাড়ি খাওয়া।
  • তাহমিদকে চুম্মা দিতে চাইলে ওর লজ্জাভরা মুখ দর্শন।
  • অনিকের সাথে গভীর রাতে মেসেন্জারে অহেতুক গেজানো। নেই কাজ তো খই ভাজ টাইপ
  • কিছু শুভাকাঙ্খী।
  • কিছু অশুভাকাঙখী।
  • সামাদের সাথে রোজ গভীর রাতে তালাইমারী যাওয়া
  • গভীর মনোযোগ দিয়ে স্যার / ম্যাডামের লেকটার শুনার সময় অহেতুক মিসকল দিয়ে অনন্যার মনোযোগ নষ্ট করা।
  • রুমে আই.বি খেলার আসরে রন্জুর “আর কোন পিট নেই” বলা।
  • রুমে আই.বি খেলার আসরে হারার সময় দেবুর নিজের পক্ষে নতুন নতুন নিয়ম আবিস্কার
  • কিছু বন্ধু যারা আমার সামনে আমার সমালোচনা করে। (আমার পছন্দের কাজ)
  • কিছু মানুষ যারা আমার পেছনে আমার সম্পর্কে কটুক্তি করে এবং আমার সামনে খুবই ভাল ভাব ধরে। (আমার অপছন্দের কাজ)
  • কিছু জুনিয়র যারা “দাদা দাদা” ডাকতে ডাকতে অস্থির করে ফেলে।
  • কিছু জুনিয়র যারা পাশ কেটে চলে যায় এবং মনে মনে গালি দেয়।
  • কিছু মানুষ যাদের কমন সেন্স এ আমি মুগ্ধ।
  • কিছু মানুষ যাদের কমন সেন্স আমার থেকেও কম (আমার কমন সেন্স এর মার্ক ১/১০০)।
  • কিছু বন্ধু-বান্ধব যারা আমার উপর খুবই রাগ সেই শুরু থেকে কিনতু আমি কারন জানি না।আমার সামনে প্রকাশ করে না কিনতু আমার অন্য এক বন্ধুর কাছে কটুক্তি করে। :)
  • কিছু প্রিয় বন্ধু-বান্ধব (প্রবাল, সাদিয়া জামান ,অভি)সময়ের ব্যবধানে যাদের সাথে দুরত্ব বেড়ে গেছে (দোষটা হয়ত আমারই)
  • ফয়সাল যাকে না দেখলে আমি বুঝতাম না যে আমার থেকেও নিশ্চিন্ত পোলাপান আছে।
  • কিছু শিক্ষক, কিছু সিনিয়র, কিছু সমবয়সী, কিছু জুনিয়র যাদের থেকে আমি সামনে আগানোর অনুপ্রেরণা পাই।

আরও আনেক কিছু আছে। এখন মনে পড়ছে না। মনে পড়লেই আপডেট হবে। :)

Converting a .JAR Into .EXE for WIndows user

We, the Java developers, develop softwares using Java because of it’s platform independency . Though now-a-days JDK is available to users,we usually provide JAR file of the software to the user.So, users can start it with only a double click. But  still some windows users prefere .exe version of that software. So, now I am going to tell you about a software by which we can convert a .jar file to .exe for windows user.

Before starting this we must read these two posts carefully.

Click here

We will use Jar to exe convert wizard 1.8 to convert  our jar files to exe.

 

Step 1 : Install the software and run the wizard.

Step 2:  Browse project.jar and press next.

Step 3: Select Console application or Windows gui application

Step 4: Select the Main class from where the software will start and keep “select a picture for splash window” blank.

Step 5: enable Support System tray and disable all others disable. [or, you can change as your requirements.]

Step 6: Add others Jars you have used like mysql-connector.jar . Usually these are on project/dist/lib/ if you are using Netbeans IDE. 

Step 6:  press Next and Finish.

Step 7 : We got the converted exe file of our jar file.

 

Thanks for reading this post.

Ujjal

 

 

Frequently used header files ( string.h , algorithm ) in C/C++

I am starting this briefing assuming that the reader is already known about the basic structure of programming with C. Here you will find a brief collection which are used frequently in programming.

Let’s start from #include
strlen(): int strlen(consts char *array)
A frequently used function and quite familiar to everyone is strlen() which returns the length of a character array passed to the function.

Example:

char arr[]=”This is a strlen function test. ”;
Printf(“%d”,strlen(arr));
Output:  30


strcmp(): int strcmp(const char *a,const char *b)

This one is used for comparing two strings. It can be used on Big number comparison also.
Exapmle:


	char  a[]=”ABC”;
	char  b[]=”ABC”;
	char  c[]=”AAA”;
	// now 
	int  x= strcmp(a,b)  ; // x= 0  as a==b
	x= strcmp(a,c);	// x>0  as a>c;  1st  parameter>  2nd parameter
	x= strcmp(c,a)        // x<0  as c<a;   1st  parameter<  2nd parameter

Now what is the basis of comparison of this function and what does this comparison actually mean? This comparison actually means lexicographically comparison.
Each of the character has a ASCII value . and ASCII value thus ‘A’ is less than ‘a’
So if we compare them ‘a’ >’A’

Now let’s have a practice about this type of comparison .
1. strcmp( “abc”,”Abc” ) Output : >0
2. strcmp(“cow”,”woc”) Output: 0
4. strcmp(“cow”,”cowa”) Output: <0
Now have a look closely
A[]= “cow”
B[]= ”cowa”
If we see the memory we would see like this :

A[] :‘c’ ‘o’ ‘w’ 0 0
B[] :‘c’ ‘o’ ‘w’ ‘a’ 0

Now see place 0 : A[0]==B[0] // ‘c’
A[1]==B[1] // ‘o’
A[2]==B[2] // ‘c’
A[3]<B[3] // 0<’a’ by ascii value ( here 0 ,not ‘0’)
So,now strcmp return a value less than 0.
Thus strcmp(A,B)’y’ so it returns >0 value.
It will return 0 if and only if two strings are equal.

strcpy(): char *strcpy(char *destination,const char *source)
This function is used to copy 2nd string to 1st string.
Example:

char destination[]=”DEPT”;
char source[]=”CSE”;
strcpy(destination,source);

destination: “CSE”
source : ”CSE”
One thing is very important and should be remembered that Array size of destination must be greater than array of source, Else program may crash.
Now the question is why?
Look closely at the memory.
Say,
char dest=”cse”; // size is 4 considering the NULL
char source=”department”; // size is 11 considering the NULL
strcpy(dest,source);
Is it possible ?

dest: memory size 4 (considering the NULL)
‘c’ ‘s’ ‘e’ 0

Source : memory size 11 (considering the NULL)
‘d’ ‘e’ ‘p’ ‘a’ ‘r’ ‘t’ ‘m’ ‘e’ ‘n’ ‘t’ 0

Now think is it possible to keep this 11 elements including NULL (0) in 4 sized array of “dest” ? so you have to ensure that the destination will be long enough so that no overflow occurs .

strcat(): char * strcat(char *a,const char *n)
This function is generally used for concatenation. If two strings are str1,str2 then,

char str1[100],str2[100];
gets(str1);  // say input is “cse” 
gets(str2);   // say input is “ rocks.”
strcat(str1,str2);
puts(str1);    // output : cse rocks.
puts(str2);    // output : rocks

1st string is changed and no change to 2nd one .
But here we also have to be careful about size of 1st parameter . As 2nd parameter is added to 1st one , size should be available otherwise overflow will occur.

memset() : void * memset ( void * ptr, int value, size_t num )
This function is very much helpful.If you want to initialize an array with a desired value then what you will do, just iterate.but memset support this with a single statement.

Lets see

  int a[100];  // or  char a[100]
    for(int i=0;i<50;i++) 
 	a[i]= ‘f’;

this may be done by also this:

memset(a,’f’,50*sizeof(a[0]) );

if any one want to insert whole array a single value than

memset(a,’f’,sizeof(a));

A complete c code is also provided here for clarification. 

#include 
#include 

int main ()
{
  char str[] = "almost every programmer should know memset!";
  memset (str,'-',6);
  puts (str);
  return 0;
}

strtok: char * strtok ( char * str, const char * delimiters )
strtok is a superb function indeed. According to me this function is more valuable than any other cstring’s functions. Now let’s see ,what is it ?

char str[]=”I am a cse student. Oh! Shit, I forgot to say my high CGPA.”
strtok= string tokenizer (:P)

If you want to tokenize a string by space ,’!’ ,’.’, ‘,’ or any characters then you can do it by strtok. Now what does tokenize means ? sometimes we take input of an array of a paragraph and we need to separate the words form it. In this case words are our token .
You can use strtok in this case.
char * p =strtok(str,” .,!.”);
now we are ready to get tokens :
1. I
2. am
3. a
4. cse
5. student
6. Oh
7. shit
8. I
9. forgot
10. to
11. say
12. my
13. High
14. CGPA
We have 14 tokens as we has given delimiters ” .,!.”
Here a c code is also provided for more clarification.

#include 
#include 

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string %s into tokens\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}

Output:
Splitting string "- This, a sample string." into tokens:
This
a
sample
string

This were frequently used string manupulating functions.

In c++ there is anothet header file algorithm.h which provides us many bullt-in function Which are frequently used by us. Here I am giving an example for describing some of them.

#include 
#include 
using namespace std;

int main()
{
    int a=10,b=15;

//a=10 b=15
    swap(a,b);
//a=15 b=10

    cout<< max(a,b)<

There are many of these types of usuful functions in this header file.For further information see books.

There is another thing called STL which means Standard Template Library,another useful library of functions which makes programmer's job easier. This function provides with decrease of line of codes.

Frequently used container classes of STL :
1. vector
2. queue
3. string
4. stack
5. map
6. list
7. set
8. pair

Fore more about STL click here

Thanking for reading this,
Ujjal Suttra Dhar
sssujjal@gmail.com

TLE খাওয়া একজন পথিক এর গল্প

Online programming করার জন্য track your progress এ থাকা হয় সবসময়। আমরা কয়েকজন যেমন অনিক শোভন আর আমি chatting করতাম। যাই হোক, ওদিকে যাইয়া লাভ নাই।কিছুদিন Uva onlinejudge তে problem solve করতাম। আমি মাঝখানে বাদ দিয়া দিলাম।কিন্তু ওরা চালাইয়া গেল আর এক এক জন বস হইয়া গেল। আমি টানা ৩-৪ মাস পর ওইদিন আবার Felix Halim ভাইয়ের সাইট টাতে ঢুকে দেখলাম অনিক শোভন কে বলছে, ভাই,১০০৮৩ নাম্বার এর জন্য কোন শর্টকাট নাই।মানুয়ালি করতে হবে। আমি ভাবলাম,অনেকদিন problem solve করা হয় না। এইটা try করি। দেখলাম problem টা Big Number এর। তাই JAVA এর BigInteger এর class ব্যবহার করে solve করে ফেললাম। কিন্তু TLE খাইলাম। এইবার নিজে optimize করার চেষ্টা করলাম।অনেক টাই করলাম।কিন্তু লাভ হল না। পর পর কয়েকবার TLE খাইলাম.এইত গেল প্রথম দিনের ঘটনা। পর দিন অনিক কে বললাম hints দেওয়ার জন্য। ও যা বলল ,তাতে আমি কিছু তা আশা পেলাম। মানে ওর বুদ্ধিতে কিছুটা time কমলো। যাই হক এইবার আর submit করতে পারলাম না।কারন 3rd case এ code টা infinity টে গেল। এইবার শোভন কে বললাম আমার code টা দেখে দিতে। ও কিছু condition add করতে বলল। হা,এইবার আমি খুশি,কারন ওই 3rd case এ এখন আর সমস্যা নেই। কিন্তু আবার TLE.[oh noo!!!] ওইদিন রাতে শোভন কে প্রায় ৪-৫ ঘন্টা খাটাইছি নিজের সার্থ উদ্ধারের জন্য । যাই হোক,শেষ পর্যন্ত divide() function টার কাজ manually করলে টাইম কমবে এই আসায় ওইদিন রাতে কয়েকটা TLE খাওয়ার পর খান্ত দিলাম কারন পরদিন সকালে class আছে। সকালে দেরি করে ঘুম থেকে উঠলাম। মানে class শুরুর আর মাত্র ৫ মিনিট বাকি। আমি dress up করে roommate এর হাতে খাতা টা দিয়ে বললাম class এ চলে যেতে। আমি ব্রাশ নিয়ে দাত মাজতে মাজতে ৩ তালা থেকে নিচে নেমে মুখ ধুয়ে ব্রাশ টা পকেট এ রেখে দৌড় দিয়ে class এ যাই।খুব বেশি দেরী হয় নি। এইবার আসল কথায় আসি, ফেলিক্স হালিম ভাইয়ের ওই সাইট তাতে post দিলাম আমার সমস্যা নিয়ে। nhahtdh আমাকে Reply দিলেন । উনি আমাকে যা করতে বললেন তা আমি আগেই করে রেখেছি। তারপর উনি নিজে solve করে ৩ বার TLE,2 বার WA খাওয়ার পর finally Accepted এর মুখ দেখলেন।দেখা গেল আমি শুধু মাত্র একটা check না করার জন্য TLE খাচ্ছিলাম। ঠিক করলাম। ৩ দিন পর Accepted নামক বাস্তটার মুখ দেখলাম।

মজার ব্যপার যা ঘটল,তা হচ্ছে আমার code টা nhahtdh ভাইয়ের থেকে ৫০% কম সময়ে output দিচ্ছিল। পরে অবশ্য উনি সমস্যা খুজে বের করেচ্ছিলেন উনার code এর।
এই ৩ দিনে আমার অর্জনঃ
2 টা WA ,
3 টা RE,
2 টা CE
9 টা TLE
logarithm ব্যবহার করে division জানতাম না আগে।।এইটা শিখে ফেললাম।
C++ এর String এ যা JAAN ভাইয়ের BigNumber এর যা code ছিল টা জ়াভা টে convert করে ফেললাম।
যদিও এই ২টার কোনটাই এইটায় লাগে নাই।

অবশেষে বাংলা-English এর মিশ্রণ এর জন্য খুবই দুঃখিত।