Tuesday, June 18, 2013

SQL examples with "group by" and "having"

Here is the ER diagram of Papatya Tourism's database. You can click on image below and show the bigger version.
Papatya Tourism ER Diagram

This software system is designed for Papatya Tourism, so you can create your database in any database management system like Mysql, Postgresql etc. I am going to give you some example of SQLs based on this database. I tried these SQL's on Postgresql.

-- SELECT STATEMENTS

-- Select number of customers grouped by their gender whose occupation is doctor.

select count(*), gender
from customer
where occupation='doctor' group by gender;

-- Select customers who had spent more than 30 km in a single record.

select c.travelandsmile_id, c.name, c.surname, s.kilometers
from customer c, spent_kilometers s
where c.travelandsmile_id = s.travelandsmile_id and s.kilometers > 30;

-- Select customers who had spent more than 100 km in total.

select c.travelandsmile_id, c.name, c.surname, sum(s.kilometers) as total_km
from customer c, spent_kilometers s
where c.travelandsmile_id = s.travelandsmile_id
group by c.travelandsmile_id
having sum(s.kilometers) > 100;

-- Select customers who had spent more than 100 km in total since 2009-10-10.

select c.travelandsmile_id, c.name, c.surname, sum(s.kilometers) as total_km
from customer c, spent_kilometers s
where c.travelandsmile_id = s.travelandsmile_id and date > '2009-10-10'
group by c.travelandsmile_id
having sum(s.kilometers) > 100;

***

Tuesday, June 4, 2013

What does i++ and ++i mean in programming?

In programming, i++ means post increment. It is equivalent to i=i+1. It is important that, i can used in an equation or calculation before increment of i. therefore it means "use the value of i first, then increment".

However ++i means pre increment, and it is also equivalent to i=i+1. This means "increment the value of first, then use".

In most programming languages, the calculations are done from left to right. I tried some examples on Java, Javascript and PHP, and get the same results. They are compiling the calculation lines from left to right. On the other hand, equations are done from right to left.

As an example, we assume that x=6. If x=(--x)-(++x), then what is the last result of x=?

In programming:
x = 6;
x = (--x) - (++x);
print x;

The calculation of  (--x)-(++x) starts from (--x).  Firstly (--x) is x=x-1, so x is 5. I increment the value of first, then use. Secondly, (++x) is calculated. It means x=x+1, so it results that x is 6. Consequently, the calculation is (5-6) anymore, so it results -1.

Here are some examples and think about their results:

<?php
$x = 6;
$x = (--$x)-($x++);
echo 'x: '.$x;

echo "<br />";

$y = 6;
$y = (--$y)-(++$y);
echo 'y: '.$y;

echo "<br />";

$z = 6;
$z = $z++ + ++$z;
echo 'z: '.$z;

?>

Results:
x: 0
y: -1
z: 14

***

Here is more information: Increment and Decrement Operator in Java

Monday, June 3, 2013

Yazılım Proje Yönetimi Risk Örnekleri

- Çoğalan kullanıcı gereksinimleri.
- Proje süresinin uzaması
- Projedeki kısımların takvime uygun geliştirilmemesi, takvimden sapması
- Fazla miktarda doküman/belge işleri.
- Yeni sisteme aktarılamayan sayfalar.
- Kullanıcıların sistemi kullanamaması/beğenmemesi/kullanmakta zorlanması/anlamaması
- Şartname imzalayan firmanın yapılacak işleri anlamaması
- Sistemin ve web sayfalarının çok yavaş çalışması
- Hatalı web sayfası sayısında artış
- Kullanılmayan web sayfalarının yeni sisteme geçirilmesi
- Projenin aniden sonlandırılması
- Sistem üzerinde yasal olmayan işlemlerin yapılması
- Tespit edilemeyen (gizli) hataların olması
- Projedeki herkesin çok fazla mesai yapması ve çalışanların veriminin düşmesi
- Kritik bir işi yapacak olan bir çalışanın hastalanması / işten ayrılması
- Ekip üyeleri arasında iletişim bozukluğu
- Yazılımcıların gerekli eğitimleri alamaması
- Proje yöneticisinin değişmesi
- Şirketin çalışanlarına maaş verememesi
- Test mühendislerinin sistemi çok uzun sürede (çok geç) test etmesi
- Güvenlikle ilgili açıkların olması / bu açıklardan kullanıcıların bilgi sahibi olmaması (kullanıcıların güvenlik açıkları hakkında bilgilendirilmesi gerekiyor)
- Projedeki kusurların açıkca ifade edilmemesi
- Kullanılan yazılım araçlarının lisans süresinin bitmesi
- Donanımsal sorunlar (İnternetin çökmesi, server’ların iletişiminin kopması, uzun süreli elektrik kesintileri, haberleşme cihazlarının bozulması vb.)
- Yazılımın yedeğinin alınmaması
- Veritabanındaki verilerin kaybedilmesi
- Proje dökümanlarının kaybedilmesi
- Klavyenin veya monitör’ün yazılımcıların sağlığını bozması
- Yazılımın boyutunun tahmin edilenden daha büyük olması
- Deprem, sel, toprak kayması, yıldırım düşmesi, fırtına, aşırı kar yağışı gibi doğa olayları sonucunda işlerin aksaması.
- Bombalama veya silahlı saldırı
- Hırsızlık
- Yanlış veri girişi
- Ağ saldırıları, zararlı yazılımların yüklenmesi, yetkisiz erişimler vs.
- Sistemi kullanan kişilerin (Kullanıcıların) bilgisayarına virüs girmesine sebeb olacak bir hata
- Kullanıcı kimlik bilgilerinin çalınması
- Mesajların/epostaların yetkisiz kişilere yönlendirilmesi

***

Thursday, May 30, 2013

Türkiye'de En Çok Java Kullanılıyor

Türkiye 2012 Yazılımcı Raporu | Özcan Acar
Türkiye'de en çok Java programlama dili kullanılıyormuş. Bu istatistiği Java Uzmanı yazılım mühendisi Özcan Acar hazırlamış, onun yaptığı bir anket sonucunda ortaya çıkmış:
http://www.kurumsaljava.com/2013/01/01/turkiye-yazilim-raporu-2012/
Ankete 500'e yakın yazılımcı katılmış. Bence bu oranlar gayet iyi görünüyor, tam olarak Türkiye'ye yansıtıyor diyebiliriz.

Ben de bir kurumsal firmada JavaEE Uzmanı olarak çalışıyorum, web projelerinde Java / JSP kullanıyoruz. Aslında JSP'nin tercih edilmesinin nedeni Scalability'den dolayı, yani daha fazla kullanıcıya daha hızlı ve sağlam (robust) web uygulaması sağlayabiliyorsunuz. Aynı sistemi PHP, Ruby on Rails, ASP.NET c# gibi farklı dil seçenekleri ile de yapabilirsiniz. Fakat internette bu dilleri karşılaştıran yazıları okursanız Java'nın pek çok konuda üstün olduğunu görebilirsiniz.

Benim Cybersoft bünyesinde üzerinde çalıştığım proje Vergi Dairesi Tam Otomasyon Projesi (VEDOP), 1998 yılında başlatılmış ve bugün itibariyle bütün illerdeki vergi dairelerinde, gelir müdürlüklerinde, gümrüklerde ve mal müdürlüklerinde kullanılıyor.

Bizim VEDOP'taki projeler farklı farklı sistemler kullanıyorlar. VDINTRA diye adlandırılan ve benim geliştirici ekibinde bulunduğum proje ilk yıllarda C++ ve Microsoft'un eski ASP sistemi kullanılmış. Active Server Pages ( Türkçe: Etkin Sunucu Sayfaları) kısaca ASP, Microsoft'un ilk dinamik web sayfaları üretmek için geliştirdiği sunucu taraflı betik motoru. Ayrıntılı bilgi için Wiki Makalesi.

ASP teknolojisi 1996'da piyasaya sürülmüş. ASP.NET ise ASP'yi içeriyor ve 2002'de sürülen .NET teknolojisini de içeriyor. ASP.NET C# kullanılarak da süper web projeleri yazılıyor. ASP.NET, Microsoft tarafından geliştirilmiş ve ilk sürümü 2002'de yayınlanmış olan bir web uygulama gelişimi teknolojisidir. Özdevinimli (dinamik) web sayfaları, web uygulamaları ve XML tabanlı web hizmetleri yaratılmasına olanak sağlar.

Bizim projemiz ilerleyen aşamalarda 2004 yılında yeni baştan yazılmış, bu sefer Java teknolojisi kullanılmış. Java Server Pages (JSP), front-end tasarım için kullanılıyor, arkaplanında yine Java class'ları çalışıyor.

Büyük projelerde çeşitli ekipler olur ve farklı uzmanlık alanlarına bakarlar. Koca bir sistemden bahsediyoruz, o sistem sadece Java'dan oluşmuyor.

Bizim projede 200'den fazla server var ve intranet kullanılarak Türkiye'deki bütün vergi dairelerine ulaşılması gerekiyor. Sistemci ekip bu serverları ve networkü yönetiyorlar.

Çok büyük veritabanları var. Bu veritabanları için veritabanı ekipleri çalışıyor.

Ayrıca web servisleri için ayrı bir ekip var. Web servisleri çok önemli. Farklı sistemlerin birbiri ile bütünleşik çalışmasını sağlamak gerekiyor. Web servislerinde SOAP kullanıldığını gördüm, ama 50'den fazla proje olduğu için her birinin altyapısı farklı olabiliyor.

Bütün bunların yanında asıl kullanıcının gördüğü ve kullandığı web uygulamasını yazan yazılım ekibi var. İşte bu yazılım ekibi Java kullanarak yazılım geliştiriyorlar.

Bu 4 grupta çalışan herkes birbirinin işini bilmek zorunda. Yani gerçek hayatta T şeklinde kendini geliştirmiş olman gerekiyor. Her şeyden biraz biraz bileceksin, ama bir konuda derinlemesine bilgi sahibi olacaksın. Mesela ben SQL sorguları yazabilmeliyim, ya da veritabanında yeni bir tablo yaratabilmeliyim, ve bu sistemin devamlı açık/kullanılabilir olduğundan emin olabilmeliyim. Bir sorun olduğunda herkes sorumluluğu alabilmeli.

Aslına bakarsanız "yazılım mühendisi hangi dilleri kullanıyor" önemli değil, hangi teknolojilerde kendini geliştirmek istiyor daha önemli :) Ben PHP uzmanı olarak 1 yıl çalıştım, PHP'de çok iyi seviyeye gelmiştim ama birden JavaEE konusunda çok iyi olmak istiyorum dedim ve o konudaki teknolojilere yöneldim, ama yarın daha iyi bir teknoloji çıkar ve JavaEE kullanmaktan vazgeçersem, o zaman o teknolojide çalışmaya devam ederim. Fakat PHP'den tamamen kopmuş değilim. Çalıştığım yerde yapmam gereken bazı işleri PHP ile hızlıca yapıyorum, işin türüne göre neyi tercih edeceğim değişiyor.

Bilgisayar mühendisliği altyapısı olan bir insan, zaten algoritmaları, tasarım kalıplarını ve veritabanı tasarımını/kısıtlarını bildiği müddetçe farklı dillerde zorlanmaz. Genelde bu zorlanmayı bilgisayar mühendisliği lisans diploması almamış olanlar yaşarlar. Ben genelde çevremde ve internetteki kişilerde bunu gözlemliyorum. Bir dile bağlanıp ondan kopamıyorlar, mesela Android uygulaması geliştirebiliyor ama kendine sorması gereken bir soru: 10 yıl sadece Android uygulaması geliştirmiş olsan, 10 yıl sonra ne yapacaksın? Ya da 10 yıl boyunca PHP developer oldun, sıkı sıkıya fanatik bir şekilde PHPciyim diye geziyorsun, 10 yıl sonra seni proje yöneticisi yaparlar mı? Proje yöneticisi olmak için PHP'den daha fazlası gerekli değil mi? Hadi bir Java projesini yönetmen gerekirse?

Bizim ekip liderimize projenin iPhone ve Android uygulamasının yapılmasını söylediler, web servisi grubundan bir arkadaşımız Android uygulamasını yazdı, bizim ekip liderimiz de iPhone uygulamasını yazdı. Düşünün ekip liderimiz 12 yıldır bu firmada çalışıyor ve adam oturup kolayca ve hızlı bir şekilde uygulamaları yazıp verdi. İşte yazılım mühendisliği budur. O konuda uzman olmanıza gerek yok, sadece mühendis kafasıyla düşünmeniz yeterli. Yeni teknolojilere kolayca adapte olabilmek de mühendislik kafasıyla alakalı.

***

Friday, May 3, 2013

T.C. Kimlik No Javascipt Validation


//Türkiye Cumhuriyeti Kimlik Numarası kontrolunu Javascript Validation Yapmak
function checkDigit(tckimlikno)
{
    var Tmp1 = 0;
var Tmp = 0;

var odd_sum,even_sum,total,ChkDigit2,ChkDigit1;
var D = new Array ( 0,0,0,0,0,0,0,0,0,0 );

    // En az 11 karakter olmalıdır.

/*if (tckimlikno.length < 11)
{
return false;
    }*/
    var tcKimlikNoAsDecimal = parseInt(tckimlikno);
    var loop;
    if ( tcKimlikNoAsDecimal > 0 )
{
  Tmp   = Math.floor(tcKimlikNoAsDecimal/100);
  Tmp1  = Math.floor(tcKimlikNoAsDecimal/100);

  for (loop=9; loop>=1; loop--)
  {
var u1 = Math.floor(Tmp1/10);
u1 = u1 * 10;
D[loop] = parseInt(Tmp1 - u1);
            Tmp1 = Math.floor(Tmp1/10);
  }
  odd_sum   = D[9] + D[7] +D[5] + D[3] + D[1];
       even_sum  = D[8] + D[6] +D[4] + D[2];
       total  = odd_sum * 3 + even_sum;
       ChkDigit1 = (10 - (total % 10)) % 10;

       odd_sum  = ChkDigit1 +D[8] + D[6] + D[4] + D[2];
       even_sum  = D[9]+D[7] +D[5] + D[3] + D[1];
       total  = odd_sum * 3 + even_sum;
       ChkDigit2 = (10-(total % 10)) % 10;

       Tmp = (Tmp * 100) + (ChkDigit1 * 10) + ChkDigit2;

//alert("tckimlikno "+tcKimlikNoAsDecimal+"--"+Tmp+"***"+tcKimlikNoAsDecimal);

       if (Tmp != tcKimlikNoAsDecimal )
       {
           alert("Girilen TC Kimlik Numarası Yanlıştır. Lütfen Kontrol Ediniz.")
           return false;
  }

}
    return true;
}

//Sayi mi degil mi kontrol ettirmek
function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;


   for (i = 0; i < sText.length && IsNumber == true; i++)
   {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
      {
         IsNumber = false;
      }
   }
   return IsNumber;

}

Tuesday, April 30, 2013

JavaEE Frameworks and Automation Tools List

Java Platform, Enterprise Edition or Java EE (its old name is J2EE) is Oracle's enterprise Java computing platform. For JavaEE programming there are plentiful frameworks, API's and tools that can help you. I will list them.

 If you experince any software development on JavaEE platform, you should aware of OOP (Object Oriented Programming) as well as Java programming. New common orientation on programming web application is that programmers choose using modern design concepts for software engineering process such as aspect-oriented architecture, service-oriented architecture, component-oriented architecture etc. Whatever you choose as a design concept, you should perform full software development life cycle (SDLC), including coding standards, code reviews, source control management, build processes, testing, and operations. If you do all well, it is ok.

For team management, I suggest you to use agile development methodology. But it is not a must. I think SDLC is a must to develop a good Object Oriented Program. Maybe the next level of software engineering is software product lines, variability management and test management. These topics will be more common at future.

Here are the list of what you should know about JavaEE. (I collect them from ads which are looking for Java software developers and my experience)

IDE:
  • Intellij IDEA
  • Eclipse
  • Netbeans

Frameworks:
  • Spring
  • EJB3
  • JPA
  • Hibernate
  • JSP
  • Servlet
  • Struts/JSF
  • MVC

Web servers:
  • Tomcat
  • JBoss
  • Jetty
  • GlassFish

Databases:

Database management:
  • Aqua Data Studio
  • JDBS

Source control and versioning:

Web services:
  • JSON
  • SOAP
  • REST
  • JAX-WS
  • JAX-RS
  • XML

Interface:

  • HTML
  • XHTML
  • CSS
  • Javascript
  • Jquery
  • ExtJS
  • Swing


Build management:
  • Ant
  • Maven
  • Jenkins
  • Cruise Control
  • TeamCity

Testing:
  • JUnit

Others:
  • Hadoop
  • Storm
  • Cassandra
  • HBase
  • Lucene
  • Solr
  • ElasticSearch
  • Memcached
  • Redis
  • Clojure
  • Scala
  • Groovy
  • JRuby
  • jMonkeyEngine

Certificates:
  • SCJP
  • SCWCD

You can also add your choices in comments.

Friday, April 26, 2013

JQuery Input Selector with Value, ID and Name

In JQuery, it is very easy to find inputs with using its name, or its value or its id:
  • $(input[name=seval])
  • $(input[id=3])
  • $(input[value=bu])

Complex Example:
[EN] Find the input boxes whose name is "seval2", id finishes with 3 and value starts with "bu".
[TR] Adı seval2 olan, id’si 3 ile biten ve value’su “bu” ile başlayan inputları bul:
  • $("input[name=seval2][id$=3][value^=bu]")

 We can use the all parameters like that:

input[name][id][value]

Here is a working html example:

<html>
<head>
<title>Test</title>
<style type="text/css">
.aciklama {
color: gray;
}
.secildi {
background:yellow;
}
</style>
<script type="text/javascript" src="jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready( function(){
$('input[name=button1]').click( function() {
$("input:text").removeClass('secildi');
$("input[name=seval]").addClass('secildi');
});
$('input[name=button2]').click( function() {
$("input:text").removeClass('secildi');
$('input[name^=sev][value^=ken]').addClass('secildi');
});
$('input[name=button3]').click( function() {
$("input:text").removeClass('secildi');
$('input[name^=seval][id$=3]').addClass('secildi');
});
$('input[name=button4]').click( function() {
$("input:text").removeClass('secildi');
$('input[value^=bu]').addClass('secildi');
});
$('input[name=button5]').click( function() {
$("input:text").removeClass('secildi');
$('input[name=seval2][id$=3][value^=bu]').addClass('secildi');
});
});
</script>
</head>
<body>
<form>
1. <input type="text" name="seval" value="kenan" id="hello1" class="secilmedi"/>
<span class="aciklama">: name="seval" value="kenan" id="hello1"</span><br />
2. <input type="text" name="seval2" value="kenan" id="hello2" class="secilmedi"/>
<span class="aciklama">: name="seval2" value="kenan" id="hello2"</span><br />
3. <input type="text" name="seval2" value="burak" id="hello3" class="secilmedi"/>
<span class="aciklama">: name="seval2" value="burak" id="hello3"</span><br />
4. <input type="text" name="seval2" value="burak2" id="hello4" class="secilmedi"/>
<span class="aciklama">: name="seval2" value="burak2" id="hello4"</span><br />
5. <input type="text" name="seval2" value="ahmet" id="hello3" class="secilmedi"/>
<span class="aciklama">: name="seval2" value="ahmet" id="hello3"</span><br />
<br />
<!-- find whose name is seval -->
<input type="button" value="name degeri seval olanlar" name="button1"><br />
<!-- find whose value starts with ken -->
<input type="button" value="value degeri ken ile başlayanlar" name="button2"><br />
<!-- find whose name starts with seval, id finishes with 3 -->
<input type="button" value="name degeri seval ile başlayan, id degeri 3 ile bitenler" name="button3"><br />
<!-- find whose value starts with bu -->
<input type="button" value="value degeri bu ile baslayanlar" name="button4"><br />
<!-- find whose name is seval2, id finishes with 3 and value starts with bu -->
<input type="button" value="name degeri seval2, id degeri 3 ile biten, value degeri bu  ile başlayanlar" name="button5"><br />
</form>
</body>
</html>

Related Posts Plugin for WordPress, Blogger...