Tuesday, May 28, 2013

Oracle JDK numaralandırmasında değişikliğe gidiyor

İnsanlık tarihinde sayabilmek önemli bir aşama olmuştur. Sayabilmek soyut düşünebilmeyi gerektirir. Bu nedenle bugün anladığımız anlamda sayabilmek için epey bir süre beklemişiz. Başlangıçta duvarlara ya da kil tabletlere çeşitli sembollerle miktarı betimleyen semboller çizdik, eşleştirme yapmak üzere taş gibi cisimlerden yararlandık. Hindistan milattan 300 yıl önce sayı ifadelerini rakamlamaya başladı ve altıncı yüzyıla doğru basamakları sağdan sola doğru olan, 1 ‘den 9’a kadar rakamlar ortaya çıktı. Bu rakamlar 660 yıllarında Hindistan dışında da tanınmaya başlandı. El-Harezmi (780-850) milattan önce ve sonra yazılan eski Mezopotamya, Mısır, Yunan, Hind ve İslam alimlerinin kitaplarından yararlanarak kitaplar yazmıştır. Bunların içinde en önemlisi El-Kitabü’l-Muhtasar fi Hesabi’l-Cebri ve’l-Mukabele kitabıdır. Bu eserin aslı İngiltere Oxford Bodlyn kütüphanesindedir. Bu eserde sıfır rakamı ve 9 ayrı rakamın aritmetik işlemlerde nasıl kullanılacağı açıkça gösterilmiştir.
Oracle Java SE versiyonlarının güncellemelerini numaralama yaklaşımını değiştirmeye karar verdi. Oracle'ın yeni numaralama şekli ile ilgili açıklamasını aşağıda bulabilirsiniz: 

  • Limited Update releases will be numbered in multiples of 20. 
  • We intend for Critical Patch Updates to continue to use odd numbers. The numbers will be calculated by adding multiples of five to the prior Limited Update and when needed adding one to keep the resulting number odd. 
This is best illustrated with an example: 
The next Limited Update for JDK 7 will be numbered 7u40, and the next 3 CPUs after that will be numbered 7u45, 7u51, and 7u55. The next release will be a Limited Update 7u60, followed by CPUs 7u65, 7u71, and 7u75. This numbering scheme will leave several numbers between releases which will allow us to insert releases – for example security alerts or support releases, should that become necessary - without having to renumber later releases.

Sunday, May 5, 2013

MySQL'de XML ile Çalışmak

MySQL ilişkisel veritabanı yönetim sisteminde XML veriler ile çalışmak mümkündür. İlk olarak sorgu sonuçlarını nasıl XML olarak alabileceğimizi görelim:

$ mysql -uroot -proot world --xml -e "select * from Country where continent='Asia'" 
<?xml version="1.0"?>

<resultset statement="select * from Country where continent='Asia'
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
        <field name="Code">AFG</field>
        <field name="Name">Afghanistan</field>
        <field name="Continent">Asia</field>
        <field name="Region">Southern and Central Asia</field>
        <field name="SurfaceArea">652090.00</field>
        <field name="IndepYear">1919</field>
        <field name="Population">22720000</field>
        <field name="LifeExpectancy">45.9</field>
        <field name="GNP">5976.00</field>
        <field name="GNPOld" xsi:nil="true" />
        <field name="LocalName">Afganistan/Afqanestan</field>
        <field name="GovernmentForm">Islamic Emirate</field>
        <field name="HeadOfState">Mohammad Omar</field>
        <field name="Capital">1</field>
        <field name="Code2">AF</field>
  </row>
  .
  .
  .
Burada -e ile mysqld sunucusundan select * from Country where continent='Asia' sorgusunu çalıştırmasını, --xml ile sorgu cevabını XML belgesi olarak ekrana dökmesini istiyoruz. İsterseniz sorgu sonucunu --html seçeneğini vererek doğrudan HTML belgesi olarak da alabilirsiniz. 
Burada mysqld sunucusunun döndürdüğü XML'i daha zengin bir içeriğe dönüştürmek üzere aşağıdaki XSL dönüşümünü uygulayabiliriz:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
    <xsl:template match="/resultset">
        <countries>
            <xsl:for-each select="row">
                <country>
                    <xsl:for-each select="field">
                        <xsl:element name="{@name}" >
                            <xsl:value-of select="."/>
                        </xsl:element>
                    </xsl:for-each>
                </country>
            </xsl:for-each>
        </countries>
    </xsl:template>
</xsl:stylesheet>

Dönüşüm sonunda Asya ülkelerinin listesini yine XML belgesi olarak elde ediyoruz:

<?xml version="1.0" encoding="UTF-8"?>
<countries>        
    <country>
        <Code>AFG</Code>
        <Name>Afghanistan</Name>
        <Continent>Asia</Continent>
        <Region>Southern and Central Asia</Region>
        <SurfaceArea>652090.00</SurfaceArea>
        <IndepYear>1919</IndepYear>
        <Population>22720000</Population>
        <LifeExpectancy>45.9</LifeExpectancy>
        <GNP>5976.00</GNP>
        <GNPOld/>
        <LocalName>Afganistan/Afqanestan</LocalName>
        <GovernmentForm>Islamic Emirate</GovernmentForm>
        <HeadOfState>Mohammad Omar</HeadOfState>
        <Capital>1</Capital>
        <Code2>AF</Code2>
    </country>
.
.
.
XML bir dokümanı herhangi bir tablonun bir sütununda saklayabilirsiniz. Bunun için o sütunu TEXT tiplerinden birini kullanarak tanımlamanız gerekir:
mysql> use test
Database changed
mysql> create table continents (
    -> name varchar(64) not null,
    -> countries MEDIUMTEXT not null ) ;
Query OK, 0 rows affected (0.35 sec)
XML dosyayı bir değişkene okuyabilirsiniz:
mysql> SET @xml = LOAD_FILE("c:\\temp\\asia.xml");
Query OK, 0 rows affected (0.10 sec)
Bundan sonra tabloya eklemek için INSERT INTO cümlesi çalıştırmak yeterli olacaktır:
mysql> insert into continents values ('Asia',@xml);
Query OK, 1 row affected (0.10 sec)
XML dokümanı sakladığınız sütunu sorgularda kullanabilir ve sonucu bir değişkene alabilirsiniz:
mysql> SELECT countries FROM continents where name='Asia' INTO @xml;
Query OK, 1 row affected (0.04 sec)
MySQL XML dokümanlardan üzerinde XPath ifadeleri çalıştırabilmek için ExtractValue isimli bir fonksiyon sağlıyor. Kullanımına ilişkin bir kaç örneği aşağıda bulabilirsiniz: 
  • Asya ülkelerinin sayısını öğrenmek için count(//row) XPath ifadesini kullanabiliriz:
mysql> SELECT ExtractValue(@xml, 'count(//row)');
+------------------------------------+
| ExtractValue(@xml, 'count(//row)') |
+------------------------------------+
| 51                                 |
+------------------------------------+
1 row in set (0.00 sec)
  • Asya ülkelerinin toplam nüfusunu elde etmek için
mysql> SELECT ExtractValue(@xml, "sum(//row/field[@name='Population'])") as 'Tot
al Population';
+------------------+
| Total Population |
+------------------+
| 3705025700       |
+------------------+
1 row in set (0.00 sec)
ExtractValue ve XPath ile birlikte kullanımına ilişkin daha fazla detayı bu bağlantıdan öğrenebilirsiniz.


MD-2013-I

Matematik dünyası dergisinin 2013-I sayısı çıktı. Abone olmak için bağlantıyı takip edin. Yeni sayının içeriğine buradan bakabilirsiniz. MD-2013-I sayısının giriş yazısını aşağıda alıntıladım:
Bir gün birinci sınıflara girdiğim bir dersten çıktım. Öğrenciler pek fena değillerdi doğrusu. Söylediklerimi dinliyor, not tutuyor, ilgileniyor, soru soruyor, üç aşağı beş yukarı bir öğrencinin yapması gereken her şeyi yapıyorlardı. Ama dersten umutsuz çıkmıştım. Çünkü dört yıl içinde o kadar çok şey öğrenmeleri gerekiyordu ki... Sadece bilgi olsa neyse... Bilginin ötesinde bakış açısı, yaklaşım, tavır, düşünme biçimi, alışkanlıklar, refleksler, analiz teknikleri, soyutlama yeteneği, farklı konular arasındaki ilişkiler, bilgiyi özümseme ve daha neler neler... Bütün bunları nasıl ve ne zaman öğretecektim? Mümkün değil... Umutsuz vaka! Yazık çocuklara... 
Bu olumsuz düşüncelere gark olmuş dalgın dalgın yürürken koridorda rastladığım bir mesteklaşım, - Hayrola, dedi, ne düşünüyorsun böyle?- Ne kadar çok şey bildiğimi... dedim!İkimiz de güldük.
Üniversitede öğrenciyken de, bir akademik yıl sonunda, yıl boyunca neler öğrendiğimi aklımdan şöyle bir geçirmiştim. O kadar çok şey öğrenmiştim ki... İnanamamıştım. Bir yıl içinde resmen beynim değişmişti. Başka bir kişiydim. Matematiği ve kendimi başka türlü algılıyordum artık. Bir yıl önceki kendimi cahil ve aptal buluyordum!
Süreç boyunca geçirdiğim değişikliklerin farkına varmamış, yıl sonunda kendimi sınava çekince anlamıştım. 
Bu öğrendiklerimi bir başkasına bir yılda anlatabilir miyim sorusuna kendi kendime olumsuz yanıt verdiğimi anımsıyorum.
Gerçekten de öğrendiklerimi bana bir öğretmemişti. Ben kendim öğrenmiştim.
Bugün geriye baktığımda, matematikte ne biliyorsam kendi kendime öğrendiğimi görüyorum. Kimseden bir şey öğrenmedim. Öğrenmem de mümkün değildi. Öğrendiğim şeyler öğretilecek cinsten şeyler değildi. Beyinlerinin nasıl çalıştığını anlayamadığım belki bir iki dahi hariç, sanırım bu dediğim her mesteklaşım için geçerlidir.
Sebat eden öğrencilerin hepsi imkansızı başarır ve kim dört kimi altı yıl içinde belli bir matematiksel olgunluğa ulaşır. 
Matematik işte böyle bir uğraş dalı. Başkasından bir şey öğrenilmiyor. Başkasından öğrenilecek şeyler yüzeysel olgulardan ibaret. 
Başkası ancak yol gösterebilir, salık verebilir, problem, makale, kitap önerebilir. Ama gerisi kişiye kalmış. 
Varsa yoksa biz yani! 
Bu da saatlerce masa başında oturmak, uzun uzun düşünmek, yalnızlık ve acı demek. 
Ve tabii ağaç yaşken eğilir. Bu dramatik beyin dönüşümü ancak belli yaşlarda mümkün. 
Özetle, tek başına ve şimdi! 
Ali Nesin