burakdede

This user hasn't shared any biographical information

Homepage: http://www.burakdede.com


Posts by burakdede

Change the Default Port On Grails Application

Grails applications by default run on 8080 port.But sometimes  other applications may use the same port ,to solve this problem you need to do some simple console work while starting your application.Let say you want to run your application on port 9090 insted of default one.

grails -Dserver = 9090 run-app

Making changes on default port is simple like that , but if you wanna make this change permanent you can create BuildConfig.groovy file under directory “/grails-app/conf”

"grails-app/conf/BuildConfig.groovy"

How To Install Grails on MacOsX

In order to setup grails and use it form terminal you have to do some work but not much.(If you want to use grails directly you can get Netbeans or IntelliJ IDE and just show where is grails package and you are ready to go)

First you need to download grails then apply to following command from terminal

  • $sudo mv ~/downloads/grails-1.0.1 /usr/share (move it to usr/share)
  • $cd /usr/share (change to that directory)
  • $sudo chmod 755 grails-1.0.1/bin/* (give permission to grails/bin )
  • $ln -s grails-1.0.1 grails (create symbol link)
  • open ~/.profile to edit( vi ~/.profile ) (open profile file to edit)
  • add the following path and home declerations to profile
  • GRAILS_HOME=/usr/share/grails; export GRAILS_HOME (add)
  • PATH=$GRAILS_HOME/bin:$PATH; export PATH (then add this without spaces around = )

(Auto)Boxing and Unboxing with Java Generics

As you may know auto boxing and unboxing is a new feature of the Java 6.(which is not new for languages like C#, we can say it is new feature for the Java).Java has two main data types one is primitive type and other is reference types.Primitive types are the types generally built in language (like int , short,byte,long,float,double,bool,char…) and allocated on the stack side of the memory.But reference types are the types lets say shortly any type that subtype of the class Object in java (like class,array,String…) and they allocated on the heap side of the memory.

What about boxing and unboxing , boxing is conversion of the one primitive type to its corresponding reference type (int to Integer in this situation) while unboxing is conversion of the reference type to corresponding primitive type.You can think of actually “boxing” the varaible and putting it to heap side , and unboxing as reverse procedure to the stack side.

These boxing and unboxing operations are automatically done by java while using generics.Generics  can think of as a compile time check for class or interface or any other types that used with generics for their parameters.From definition its hard to understand so lets show a example of generics use.

1
2
3
List<Integer> ints = new ArrayList<Integer>();
ints.add(1);
int n = ints.get(0);

Here as you can see we are creating a list from arraylist(which is a class the implements list interface so assigment is OK) with specified parameters String in angle brackets.With the help of generics it is guaranteed that all the parameters that added to arraylist is String , if you try to add something other that String it is a compile time error.Before java generics its programmer job to guess what is the variable type coming from list and make suitable cast to that object.It is a extra work for programmer.With generics its is now compiler responsibility to check parameters and give compile time error.

You can say it is not different from c++ templates , but actually it does.There is a different implementation of the generics in bot c++ and java side.In C++ if you use generics and create and objects lets say List<String> and List<Integer> and List<List<String>> , C++ made 3 copy of your code for each generic in use.If you use 100 different type of generics there will be 100 different code , this can lead to code bloat.But in java no matter how many differnt generics you use there is only one code for all.C++ model generics called expansion,it can be lead to code bloat but in performance side it is more efficient that Java model.Also if you are using generics with C++ you have to be careful about usage of angle brackets.

Lets look at another code to see how auto boxing and unboxing work with Java.

1
2
3
4
5
public static int sum (List<Integer> ints) {
  int s = 0;
  for (int n : ints) { s += n; }
  return s;
}

In this code sample we again using a list from arraylist as  parameter to sum function with specified Integer generic.(you can say what is the difference between “Integer” and “int” , and why we not using “int” for generics like this “List<int> ints”) Cause type parameters always bound to reference type not primitive types.And also you can ask why we are using “int” insted of “Integer” as return type like “return Integer”? .Because result types may be either primitive or reference types, and it is more efficient to use the former than the latter.Also you can say why for variable(or you can say foreach another new feature of java 6) not “Integer” insted of  “int”.This is actually hold performace issue behind.If you use “Integer” instead of “int” compiler unbox the value of “Integer” every time and perform operation than box the value back for later iteration.This is a big performance loss.

Here how generics doing auto boxing and unboxing.

1
2
3
List<Integer> ints = new ArrayList<Integer>();
ints.add(new Integer(1));
int n = ints.get(0).intValue();

This is the different version of the first code sample at top.This is how it looks when we are using generics in our code.As you can see if we try to add int value to List that expects Integer , it automatically box the value and then add it to the list.On the other hand if we try to get the value out of list , it again automatically unbox the value and assign it .(here we using integer so if we try to box int value it is done with new Integer(x) , and if we try to unbox it you have to call intValue method of the Integer).

For more information about generics you can look at Sun documentation for generics and also for Collections framework of Java.

Introduction to Google’s Android Platform

As the title says Android is a platform that include operation system,middleware and also application programming interface(api) which is create by Google.It is a solution for developers to create rich mobile applications easily with the power and easiness of Java programming language .Why it is a solution cause mobile systems like symbian and java midlets didnt gave so much flexibility that Android platform gave to developers.

By using Symbian platform you can write applications that access the hardware of the device but it require so much complex c/c++ code.This is kind of tiresome for developers using symbian platform.After symbian platform Java MIDlets have evolved and MIDlets fix the difficult hardware access in mobile platforms by abstracting the underlying hardware platform and giving developers ability to create applications that run on wide variety of platforms that support java run time.Cost of this platform independence is restricted access to hardware.Cause native and third party application doesnt have the same priority.Third party application recieve restricted access to hardware platform.This cant be good for the third party application especially developers who create application for that platform.And

What makes Google Android Different?

Developers can use Java to create applications for the Android platform.This is a big advantage cause Java accepted by developers all over the world and has great support  and most important it is open source like Android platform itself.But what known wrong here that you can not use Java classes directly and write application for the Android platform you have to make your classes and strcutre of your application specific to Android platform.

Antoher difference is that all applications at Android platform whether its a native application or third party they have the same priority.This gives huge flexibility to third party applications , as other platforms do opposite.They gave restricted access to third party application and also restricted resource.

Android platform built on linux kernel and it is a open source platform.You can even write low level code for platform.Also Android is a member of Open Mobile Alliance and Linux Phone Standarts Forum(LiPS).There is  wrong belief that  Android platform is fully open source, well it is not true right now but it is expected to be fully open source.

At this stage, not all of the Android stack has been released as open source, although this is expected to happen by the time phones are released to market. It’s also worth noting that the applications you develop for Android do not have to be open source.

And also your application doesnt have to be open source , you can make money from it, it is a developers choice to make it open source or not.There is a  market that has the same functionality like Apple’s app strore named Android market.You can look at android applications from Android Market.

As a general belief it is not a competitor to Apples İphone.Cause iphone is fully hardware and software platform but Android only offers a general software stack that can run on every hardware platform that meet Android requirements.Unlike Apple’s iphone there is not one Android Mobile Phone.You can check latest Android supported mobile phones here.

Android also has a rich api and great documentation.Also you can download latest SDK from here.What makes Android so attractive is that its open philosophy,you can create or even change applications like you imagine them.

Hello world!

This is my first post i just wanna make sure that everything is ok and carry on the “Hello World” tradition with my first blog post.