Thursday, November 24, 2016

Get a list from another list without for loop in Java 8


In Java, you may need to create a new object list from another object list. This is needed when dependency injection is our concern. The general concept behind dependency injection is called Inversion of Control. According to this concept, a class should not configure its dependencies statically but should be configured from the outside. You may look at "Using dependency injection in Java - Tutorial" for a beautiful example.

In old way, we run a for loop in Java to get the object list from another list. Lets look at the example below. There are two classes: Apple and Orange.

public class Apple{
    private String color;

   public Apple(String color){
      this.color = color;
  }

   public void setColor()(String color){
      this.color = color;
  }

   public String getColor(){
      return this.color;
  }
}

public class Orange{

   private String myColor;

   public Orange(Apple apple){
      this.myColor = apple.getColor();
   }

   public void setMyColor()(String myColor){
      this.myColor= myColor;
  }

   public String getMyColor(){
      return this.myColor;
  }
}


Lets create an Apple list with 2 Apple objects:

List<Apple> appleList = new ArrayList<>();
Apple apple1 = new Apple("Red");
Apple apple2 = new Apple("Green");
appleList.add(apple1);
appleList.add(apple2);

How to get an Orange list from this Apple list?

In old Java:

List<Orange> orangeList = new ArrayList<>();
for(Apple apple : appleList) {
    Orange orange = new Orange(apple);
    orangeList .add(orange);
}

In Java 8:

List<Orange> orangeList = appleList.stream().map(Orange::new).collect(Collectors.toList());

This is the fastest and the shortest way to get a new list with 2 Orange objects which colors are Red and Green. Use Java 8 guys!

***

Tuesday, October 25, 2016

Getting an element list from a Set in Java 8

How to get list of an attribute of an object from Hash Set<Object>? Lets say we have a HashSet<Object> list and we want to get an attribute of all objects in a list, for example in a comma separated string. It is simple in Java 8:

public class ErrorMessageDTO{
    private String errorMessage;

    public String getMessage() {
        return errorMessage;
    }
}

public String getErrorMessageCommaSeparatedFromErrorMessageDTO(Collection<ErrorMessageDTO> errorMessages) {
        HashSet<String> allErrorMessages = new HashSet<>(errorMessages.stream()
        .map(ErrorMessageDTO::getMessage).collect(Collectors.toList()));
        return String.join(",", allErrorMessages );
}

Monday, September 19, 2016

Ne olacak bizim halimiz?

İngiltere'ye yerleştiğimden beri farkettiğim ve Türkiye'de iken göremediğim şey ise "think simple" kavramıdır. Biz Türkiye ekosisteminde profesyonel ve sağlıklı düşünemiyoruz. Hiçbir şeyin önünü, arkasını göremiyoruz. Ticaret ahlakı yok. Alacak peşine düşmekten, çarkı döndürme kaygısından işimize odaklanamıyor ve işimizi geliştiremiyoruz. Ay sonunu getiremiyor, bankalara bulaşıyor ve bankalar için çalışıyoruz. Olmayan bir paranın peşinde, geri dönüşü olmayan bir yolda amaçsızca yürümeye devam ediyoruz.
-- Çetin Karakaya
Aynı şeyler bilim geliştirmek isteyen, kar amacı gütmeyen ar-ge işleri yapmak isteyen kişiler için de geçerli. Bizim tek amacımız ülkemiz ve dünyamız için iyi şeyler yapabilmek. Fakat geçim sıkıntısının, bankalara olan borçların içerisinde öyle bir yüzüyoruz ki, bilim ve ar-ge yapabilecek bir kafa kalmıyor kimsede. Hayat denen çarkı döndürme kaygısı yüzünden profesyonel ve sağlıklı düşünemiyoruz. Ancak refah durumu iyi, kaygı durumu düşük olan ülkelerde temiz kafa ile güzel işler yapılabiliyor. Belki de ülkemize, ülkenin refahı için çalışan, bilimsel çalışmaları daha fazla destekleyen, inşaat işlerini teknoloji işlerinin önüne koymayan bir yönetim lazım. Yani yönetimimizde büyük reformlara ihtiyacımız var.

Saturday, September 3, 2016

How to connect Mysql with mysqli_connect function in PHP 7?

I tried these codes on WAMPSERVER 3 (64 BITS & PHP 5.6.15 & PHP 7)  and works fine. Have fun with PHP 7...

JSON web service example with PHP7:

Lets have a mysql database. The name of database is general_db and there is one table called products. There are two columns: title and price. Add a few examples in database and try the webservice client. It will get the json from server.php and convert to array to use it.

Server codes (server.php):

<?php

$hostname="localhost";

$username="root";

$pass="";

$dbname="general_db";



$connect= mysqli_connect($hostname,$username,$pass,$dbname);



$result=mysqli_query($connect, "select * from products") or die("Query Error");



$jsonobj= array();

while($res=$result->fetch_object())

{

$jsonobj[]=$res;

}



$final_res=json_encode($jsonobj);



echo $final_res;



?>


Client codes (client.php):

<?php

$html=file_get_contents('http://localhost/myproject/server.php');

$html=utf8_encode($html);

$final_res=json_decode($html);



var_dump($final_res);

//$final_res is an array which includes objects of products



?>

Monday, August 1, 2016

Convert Set to List in Java 8 and Convert List to Set in Java 8

Convert Set to List in Java:

Set<Pencil> myPencilsSet = new HashSet<>()
List<Pencil> myPencilsList = new ArrayList<Pencil>(myPencilsSet);

Sort a list in Java:
Collections.sort(myPencilsList); 


Convert List to Set in Java:


Pencil pencil1 = new Pencil(1)
Pencil pencil2 = new Pencil(2)
Pencil pencil3 = new Pencil(3)

Set<Pencil> myPencilSet = new HashSet<>(Arrays.asList(pencil1, pencil2, pencil3))

Thats it. It is so easy.

Monday, May 9, 2016

Bir ülkenin geleceği, gençliğin geleceğinden ayrı düşünülemez!

Harun Karadeniz, 1967-1968 İstanbul Teknik Üniversitesi yıllığında şu satırları kaleme aldı:

“Gençliği ülke sorunları ile ilgilenmeyen bir ulusun sonu gelmiş demektir.Gençlik olarak biz, ülke sorunları ile ilgilenmeyi görev biliyoruz ve ülke sorunlarıyla ilgilenip etken olduğumuz ölçüde görevimizi yaptığımıza inanıyoruz.

Çünkü ülkenin geleceği, gençliğin geleceğinden ayrı düşünülemez. Biz ülke sorunları ile ilgilenmekle, gerçekte kendi geleceğimize sahip çıkmış oluyoruz. Yaşlı kuşağın bize devredeceği Türkiye’yi, Amerikan üslerini, bizi Amerika’ya bağlayan ikili anlaşmaları, yıldan yıla artan dış borçları ve Türk halkının nasıl sömürüldüğünü görüp de ülke sorunlarıyla ilgilenmemek en yumuşak söyleyişle ihanettir. Türk ulusuna ihanettir. Türk devletinin geleceğine ihanettir.

Gençliğin ülke sorunlarıyla ilgilenmesi ve sömürülen Türk halkından yana eylemler yapması, sömürgen çevreleri tedirgin etmekte ve bu çevreler “Gençlik siyaset yapıyor” diye feryadı basmaktadır.

Egemen sınıfın isteğine kalırsa, onlar bizi yönetecekler, ömrümüz boyunca acısını çekeceğimiz ikili anlaşmalarla bizi bir yabancı devlete bağlayacaklardır. Fakat biz kadere boyun eğeceğiz, bu ikili anlaşmalara karşı çıkmayacağız.

Bir doğu-batı savaşında onlar Türkiye’yi bir nükleer hedef haline getirecekler. Fakat biz NATO’ya karşı çıkmayacağız. Bütün yer altı kaynaklarımızı Amerika’ya peşkeş çekecekler, fakat biz bu sömürünün hesabını sormayacağız.

Köylünün ürününü ucuza kapatarak köyle kardeşlerimizi sömürecekler, fakat biz köylüyü sömürüyorsunuz dahi demeyeceğiz. Kıbrıs’ta yolumuzu kesen 6. filo İstanbul Limanı’na demirleyecek, fakat biz 6. filoyu protesto etmeyeceğiz.

Meslek bilgimizi kullanarak lüks binalar inşaa edeceğiz, fakat bu binalarda kimlerin yatıp kalktığını sormayacağız.Mühendis olarak silahlar yapacağız, fakat bu silahlar küçük ücretlerine zam isteyen işçi kardeşlerimize çevrildiği zaman ses çıkarmayacağız.

Bugünün öğrencileri yarının meslek adamları olarak ülkemizin bütün sorunları ile ilgilenmek zorundayız. Öğrenciliği bitirip meslek hayatına atılacak olan biz mühendisler için iki yol vardır. Bu yollardan biri, kim için ve ne için üretim yaptığını düşünmeksizin egemen sınıfların yararına üretim yapmaktır. Kısaca neden ve niçinini düşünmeksizin bir miktar karşılığında üretim yapmak yani robotlaşmak.

İkinci yol ise kim için ve ne için çalıştığını bilerek emekçi halkın yararına üretim yapma olanaklarını aramaktır. Bir başka deyişle, ikinci yol küçük bir azınlığın yararına robotlaşmak değil, büyük çoğunluğun, yani toplumun yararına çalışarak insanlaşmak yoludur.”

***

1942 yılında Giresun’da doğan Harun Karadeniz, 1962’de İTÜ İnşaat Fakültesine girdi.  Fikir Kulüpleri Federasyonu’na üye oldu. İlerleyen süreçte TİP’le tanıştı. Öğrenci Derneği başkanlığı ve İTÜ Öğrenci Birliği başkanlığı yaptı. Birçok anti-emperyalist eylemin en ön saflarında, boykotlarda, okul işgallerinde kitlelere öncülük eden isimlerden biriydi. 1960-1980 döneminde ülkenin sosyal sorunu haline gelen özel okulların devletleştirilmesinde önemli bir rol oynadı. 12 Mart Darbesi (1971) sonrası TKP ve Dev-Genç davalarından yargılandı. Dev-Genç davasından tutukluyken hapishanede ciddi bir hastalığa yakalandı, tedavisine izin verilmedi. 15 Ağustos 1975’de öldü.



Saygıyla anıyoruz…

Wednesday, March 16, 2016

How to upgrade Primefaces 3.5 to Primefaces 5.3?

In this article, I am going to talk about the steps to upgrade Primefaces. I installed Primefaces 5.3 and Primefaces Extensions 4.0.0. Primefaces 5.3 is totaly suitable with Primefaces Extensions 4.0.0. I was using Gradle as build automation system, so I am also giving the details for it. My JSF Mojarra version is 2.2. So lets start to steps....

To upgrade from Primefaces 3.5, do the steps below. Do the changes which are required for both PrimeFaces 4.0 and Primefaces 5.3 :

-- Menu changes

1) Find "MenuItem", replace with "UIMenuItem" (You can use find and replace tool of any IDE)
2) Find "org.primefaces.model.MenuModel", replace with "org.primefaces.model.menu.MenuModel"
3) Find "org.primefaces.model.DefaultMenuModel", replace with "org.primefaces.model.menu.DefaultMenuModel"
4) Find "addMenuItem", replace with  "addElement"
5) Find "addSubmenu", replace with "addElement"

-- Other changes

6) Add into web.xml :
<context-param>
  <param-name>facelets.SKIP_COMMENTS</param-name>
  <param-value>true</param-value>
</context-param>
7) Delete all showButtons="false".
8) Change save file function:
// save file
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(new File(pathToFile + fileName));

            InputStream inputstream = dosya.getInputstream();

            int read = 0;
            byte[] bytes = new byte[1024];

            while ((read = inputstream.read(bytes)) != -1) {
                fos.write(bytes, 0, read);
            }
            fos.close();
        }
9) In Javascript, find all .live(" , replace with .on(".
10) In Javascript, find and replace variable names:
Find: ([a-z]\w+).show\(\);
Replace with: PF\(\'$1\'\).show\(\);
Find: ([a-z]\w+).hide\(\);
Replace with: PF\(\'$1\'\).hide\(\);

-- Changes required just for PrimeFaces 5.3

Now do the changes which is required just for PrimeFaces 5.3 :

11) Remove all old PieChart, BarChart, and LineChart. You have to rewrite all of them with new way which is explained the website of Primefaces 5.3.
12) Update faces-config.xml:
<resource-handler>org.primefaces.application.resource.PrimeResourceHandler</resource-handler>
13) Update build.gradle:
dependencies {
        compile 'org.primefaces:primefaces:5.3'
        compile 'org.primefaces.extensions:primefaces-extensions:4.0.0'
}
14) Create FileUploadRenderer which can be found in here.
15) decode functions require 3 parameters, add null as 3rd parameter.
16) Update MyClient.eml:
<lib name="primefaces-5.3.jar" scope="COMPILE">
<relative-module-cls project-related="jar://$PROJECT_DIR/primefaces-5.3.jar!/"/>
</lib>
<lib name="primefaces-extensions-4.0.0.jar" scope="COMPILE">
<relative-module-cls project-related="jar://$PROJECT_DIR$/primefaces-extensions-4.0.0.jar!/"/>
</lib>
17) Update Lazy classes: The last parameter of Load function must be final Map<String, Object> filters.
18) The old calendars are not working in Primefaces 5.3, so reimplement them.
19) Refresh Gradle, deploy&try the system.

Have fun with your new JSF project with Primefaces 5.3.

Seval.