Bilgisayarlar ve 2038 yılı

0
FZ
Belli bir süredir gündemde olan bir sorun bugün takip ettiğim Compunauts listesinde karşıma ilginç bir şekilde çıkınca FM kitlesi ile paylaşayım dedim.

Basit bir Perl komut satırı ile sisteminizin 2038 yılına nasıl tepki vereceğini inceleyebilirsiniz...
perl -e 'use POSIX; $ENV{'TZ'} = "GMT"; for ($clock = 2147483641; $clock < 2147483651; $clock++) {print ctime($clock); }'

Yukarıdaki komutu MS Windows üzerinde Linux uygulamalarını çalıştırmak ve derlemek için kullandığım Cygwin ve bir Debian GNU/Linux sistemlerde denediğimde aşağıdaki çıktıyı elde ediyorum:

Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901

MS Windows için derlenmiş Perl'i kullanarak Windows 2000 Server komut satırında şu şekilde denediğimde ise:

perl -e "use POSIX; $ENV{'TZ'} = 'GMT'; for ($clock = 2147483641; $clock < 2147483651; $clock++) {print ctime($clock); }"

Şöyle bir çıktı elde ediyorum:
Tue Jan 19 05:14:01 2038
Tue Jan 19 05:14:02 2038
Tue Jan 19 05:14:03 2038
Tue Jan 19 05:14:04 2038
Tue Jan 19 05:14:05 2038
Tue Jan 19 05:14:06 2038
Tue Jan 19 05:14:07 2038
Görülen o ki 2038 yılı ile ilgili sorun devam ediyor. Uygulamaların bir kısmının 64 bitlik bir time_t kullanarak derlendiğinde sorunun bir kısmının giderilebileceği düşünülürse de 32 bit kullanarak tarih depolayan veritabanı sistemlerine dikkat etmekte fayda var!

Görüşler

0
tongucyumruk
Öhüm, dayanamayacağım ne yapayım...

import sys, time
print "n".join([time.ctime(f) for f in range(2147483641,2147483651)])
0
tongucyumruk
oops, sys modülüne ihtiyacımız yok... alışkanlıklar işte...
0
sametc
hangisi daha okunaklı ;))

0
mascix
perl
0
FZ
+1
0
sametc
abarttınız ama :)

yani gercekten bir kodlara goz atin .....

hiç programlama dilii bilmeyen biri perl kodunu gorunce 10 cesit soru sorar...

peki python icin kac soru sorar soyliyeyimmi 0 belki print "n" ile ilgili sorar o kadar...........

ilk ogrenilen dil: kolay anlaşılan dildir ....
0
tongucyumruk
Öhüm, print "n" değil aslında print "(backslash)n" olacaktı...
0
sametc
Bende zaten onu kastetmiştim. yani bu "n" ne anlama gelir diye..
0
sundance
Yahu ben de bunu anlamıyorum. Bana ne hiç programlama dili bilmeyen adamdan, dahası bana ne kardeşim Perl bilmeyen adamdan. Perl bilmeyen adam Perl anlamaya çalışmasın, bu mudur sıkıntı ?

Siz hiç duydunuz mu ? "Fransızca güzel bir dil ama Fransızca bilmeyen birisi hiçbir şey anlamaz"

Boşverelim bunları, asıl mesele "Ben xxxx'le şöyle şahane bir program yaptım, şu şu işi yapıyor" demek. Bunları konuşalım.
0
tongucyumruk
Açıkçası bir dili bilmeyen o dili anlamasın fikrine katılmıyorum. Özellikle seninde daha önce bahsettiğin "kendi kendine yetme" konusunda bu daha da önemli bir hal alıyor. Şöyle düşünelim. Ben Perl veya C bilmiyorum. Fakat önümdeki Perl veya C kodu okunaklı bir şekilde yazılmışsa içindeki çok derin olmayan hataları kodu okuyarak ayıklayabiliyorum. Bu sayede hem bir patch ile o kodun yazarına yardımcı olmuş oluyorum, hem de kendi kendime yeterek e-posta listelerinde veya irc'de yardım almama gerek kalmadan sorunumu çözüyorum. Bu nedenle Perl bilmeyen Perl kodu okumasın yaklaşımı bana hatalı geliyor.

Ha bunun Python'un okunabilirliğiyle alakası ne? Python diğer dillere oranla kodu biraz daha okunabilir yazmaya zorluyor. Peki python'da okunaksız kod yazılmaz mı? Bal gibi de yazılır, yazdım oradan biliyorum.

Sonuç olarak programlama dilinin Perl veya Python olması okunabilirlik konusunda sadece bir araç, olay eninde sonunda programcıda bitiyor.
0
FZ
Kusura bakma ama ben de bu mevzu ile verilmiş 3 örnekten en kolay anlaşılabilir olanının Python olduğuna katılmıyorum. Python bilmeyen biri olarak koda bakınca şunu düşünüyorum:

import diye bir şey kullanılmış, herhalde bazı kütüphaneleri, ek özellikleri vs. kullanmak için bir şeyler çağrılıyor. Sonra ekrana bir şey basılacak, ardından bir nokta geliyor... Buradan hemen sonra devreye join diye bir fonksiyon girmiş. Bir şeyleri birleştirecek herhalde. Belki bunu da basacak gibi... Göreceğiz. Ne birleşecek? time.ctime(f) diye bir şey var. Nesneye yönelik programlama herhalde. time diye bir nesnenin ctime diye bir metoduna f parametresi geçilmiş. f ne? Ardından sanki bir döngü geliyor. f var içinde, önceki fonksiyona geçilen f ile aynı mı? f'nin bir range yani aralık içinde olduğu söylenmiş, acaba nasıl artıyor, bu belli değil. Peki bu döngü ile time nesnesinin metodu mu birleşiyor. Yoksa time nesnesi aslında döngünün içinde mi, yoksa önce döngü çalışıyor, sonra bu f bir sürü değer alıyor ve bir anda hepsi time.ctime'a parametre olarak mı geçiliyor? Eğer f in ... diye döngü kurabiliyorsam range dememe gerek var mı, zaten vereceğim şeyin başlangıcı, bitişi (ve belki adım miktarı) yeterli olmaz mı... vs. vs. bir sürü soru.

Perl'e bakınca şunu görüyorum, POSIX diye bir modül kullan. Bir dizi... hayır hayır bir tür anahtar değer çifti (key/value pair), bunu belli bir değere eşitle. Sonra 70'lerden beri alışık olduğumuz bir for döngüsü içinde, ilk değerden başla, son değere dek bir artırarak git, döngü içinde döngü değişkenini ctime fonksiyonundan geçir ve çıkan şeyi bas (döngü bitene dek).

Lisp'e bakınca şunu görüyorum: encode-universal-time fonksiyonuna bir dizi sabit değer geç (muhtemelen bunlar bir şekilde encode edilecek olan gün ay yıl saat, vs. gibi şeyler, fonksiyonun ismi kabak gibi ortada çünkü ;-), neyse işte, çıkan değere 5000 ekle, çıkan değeri decode işlemine tabi tut yani ters fonksiyon uygula. Bitti. (Hmm, evet, tabii PRINT işlevselliği nerede değil mi? E iyi ama burada Lisp'i interpreter modunda kullanmıyor muyuz, yani niye print diyeyim ki, zaten Lisp'e verdiğim şeyler evaluate edilir yani değerleri hesaplanır ve sonuç bana yine Lisp ortamında döndürülür, pratik bir durum değil mi ;-)

Sonuç: Sonuç yok süreç var. Anadilimizi öğrenene kadar bile min. birkaç yıl harcıyoruz, uğraşacağımız dili öğrenmek için de biraz zahmete katlanalım, bir zahmet.

Bilmediğin dilde sorun çözmeye gelince, yani şimdi sana 50 sayfa Türkçe metin sunsam ama bu metin mesela astronomideki bir problemin bir tarifiyle ilgili olsa hemencecik anlayabilecek misin eğer astronomi hakkında bilgi sahibi değilsen? (üstelik böyle bir metin matematiğe çok az göndermede bulunarak da yazılabilir, o yüzden 50 sayfa dedim zaten :-P

Düşüncem şu: Eğer kodun hedeflediği problem alanındaki teoriye vakıf değilseniz o kod, yani kodu geçtim, kabaca anadilinizde mevzuyu anlatsam yine anlamakta güçlük çekersiniz, başka kaynaklara yönelip daha uzun ve açıklayıcı anlatımları okumak gerekir. Bundan ötürü yani kodda sözdizim hatası bulmak kolay olabilir ama yani o kadarını derleyici ya da yorumlayıcı ya da kaynak kod analiz sistemleri de yapıyor. Dilin anlamına yani semantiğine vakıf olmak ve bunun da ötesine o dille çözülmeye çalışılmış probleme vakıf olmak ise bambaşka bir şey, bu bağlamda elbette dil programcıya ne denli soyutlama ve metaprogramlama gücü sunarsa o kadar iyi.
0
tongucyumruk
Anlatmaya çalıştığım şey şu: Kodun okunabilirliği önemlidir. Ben Perl bilmiyorum, Lisp'ten de "Lisp biliyorum" diyecek kadar anlamıyorum fakat üç dilin üçünde de verilen örnekler ne yapmaya çalıştığını rahatlıkla anlamama yetecek kadar açık yazılmıştı. Bana kalırsa i in range(0,10) da i=0; i=10; i++ da kıyısından köşesinden programlamaya bulaşmış herhangi bir insan için yeterince açıktır.

Kodu okuyup ne olduğunu anlamak için değil "kendi kendine yetebilmek" için kodu okumaktan bahsediyorum. Yoksa oturup Zope'un kodlarını okuyup anlamak isterseniz kodun Python ile yazılmış olması eğer python bilmiyorsanız tabiiki bir avantaj sağlamaz.

Bir programın ne "anlattığını" kavrayabilmek için o dili bilmek tabiiki gereklidir. Fakat basitçe bir derleyicinin yakalayamadığı bir ıİ problemini bu problemle daha önce uğraşmış biri C bilmese dahi C kodunun içinde bulup az bir C bilgisi ile düzeltebilir.
0
bm
Yahu ben de bunu anlamıyorum. Bana ne hiç programlama dili bilmeyen adamdan, dahası bana ne kardeşim Perl bilmeyen adamdan. Perl bilmeyen adam Perl anlamaya çalışmasın, bu mudur sıkıntı ?

Baska bir alinti yapayim:

The Novice has been the focus of an alarming amount of attention in the
computer field. It is not just that the preferred user is unskilled, it is
that the whole field in its application rewards novices and punishes experts.


( Erik Naggum http://groups-beta.google.com/group/comp.lang.lisp/msg/a6df017072f4c700 devami orada)

Yani yanliz degilsiniz, pekcok insan bundan rahatsiz. Ben Perl'
u sevdigimden demiyorum bunu, ama _ana_ kistasimiz 3-5 dakikada birseylerin anlasilmasi/olmasi/yapilabilmesi olunca bu karakter itibariyla anlasilmasi/olmasi/yapilmasi 3-5 dakikadan fazla surmesi gereken seylerin esasinda bunlardan faydalanmamalari icin bir sepep olmayan kisilerce dislanmasi sonucunu doguruyor. Yazik oluyor.
0
sundance
Çok güzel alıntı, uzmanların cezalandırılması konusu gerçekten olmakta, teşekkürler.
0
sametc
http://www.fazlamesai.net/modules.php?name=News&file=article&sid=2532

bu haberde yer alan sozlerinizi hatırlamanızı isterim :)
0
bm
CL-USER> (encode-universal-time 59 59 23 31 12 2038)
4386434399
CL-USER> (decode-universal-time (+ 5000 (encode-universal-time 59 59 23 31 12 2038)))

19
23
1
1
1
2039
5
NIL
-2
CL-USER>

problem neydi?

( http://clhs.lisp.se/Body/f_dec_un.htm [clhs.lisp.se])
0
bm
Cok tarafli oldu. Problem var esasinda, ama bignum'la hallolan problemden farkli: http://naggum.no/lugm-time.html [naggum.no]
0
raistlinthewiz
y2k38 :)
bi kac sene once, y2k bug gundemdeyken, bu konuda bir arastirma yapmis ve konuyla ilgili bir yazı yazmıstım ama simdi bulamıyorum :)
Görüş belirtmek için giriş yapın...

İlgili Yazılar

FM.net RSS Okuyucusu

vst

Dedik ki; Fazlamesai.net'in bir RSS okuyucusu olsun. Hatta sadece RSS okumasın, daha başka işler de becerebilsin. Ve hatta, bunu bir güzel hep beraber yapalim :)
Buradan hem kaynak koda hem de halihazırda QT kütüphanesi olan FMcilerin çalıştırabileceği bir ikili dosyaya ulaşabilirsiniz.

fazlamesai.net'e soralım: İçerik Yönetim Sistemleri, Deneyimler, İzlenimler

FZ

CMS (Content Management System) sistemlerini inceleyen siteleri gezmek, eleştirileri okumak, bizzat gidip bazı sistemleri çekip kurup denemek mümkün ama ben yine de FM camiasına bir sorayım dedim:

Bir arkadaşım, hukuk ile ilgili basit bir site açmak istiyor. Yazı yayınlamak ve/veya diğerlerinin yazılarını onaylayıp, düzenleyip yayınlamak. Belki bir miktar kategorizasyon, arama tarama, vs. Uzun lafın kısası en basit bir CMS'ten beklenen en temel özellikler. Kendisi yazılımcı değil, etrafındaki bilgisayarcılar ona yardım edecek ama yine de olabildiğince kurulumu ve bakımı basit bir sistem olmasında, minimum müdahale ve özelleştirme gerektirmesinde fayda var.

FM camiası bu konuda neleri tavsiye eder? Tavsiye ederken lütfen dil kriterini de göz önünde bulundurun. Söz gelimi drupal yakışıklı bir sistem gibi duruyor ancak download kısmına gidip baktığımda Türkçe çevirisinin (en azından resmi olarak) olmadığını görüyorum (debian-tr.org sitesinin Türkçe olarak drupal kullandığını hatırlıyorum ama bildiğim kadarı ile hazır bir çeviri ile değil kendi yaptıkları bir çeviri ile çalışıyorlar).

Özgürlük hakkında...

pismikrop

Dün yaşadığım bir olay internet ve lisans özgürlükleri hakkında aklıma ciddi şüpheler getirdi. Dünyaca ünlü günlük yazılımı b2evolution'a birisi kürdistan bayrağı açıp, Türkiye'nin yarısından fazlasını içerisine alan Kürdistan haritası gösterdi.

Ben elimden geldiğince böyle bir ajitasyona kanmamaları gerektiğini söyledim. Ama nafile! Hesabımın kapatılacağını söylediler. Şimdi tüm fazlamesai.net okuyucularına soruyorum: Sizin yaptığınız özgür bir yazılıma birisi Türkiye'nin yarısını içerisine alan (?) Kürdistan yerelini koymasını isterse kabul eder misiniz?

Özgürlük bir terörist devletin eylemlerine yardım edecek kadar ileri gider mi?

Online Business'in En Aptal 10 Fikri

anonim

Aptalca gibi görünen ama fikir sahiplere yüklüce para kazandıran fikirler: http://weirdtechnewshub.blogspot.com/

Zırvalık mı, dahiyane mi, ekonomik akıl mı, yoksa başka bir şey mi? Siz karar verin.

İnternetin sesi

ninja-g

'icqphone'u ilk keşfettiğim günlerdi..'Nettophone' sayesinde internetten herhangi bir telefonu arayıp konuşabiliyorsunuz. Hemen denedim. Bir arkadaşımı cepten aradım. Çalışıyor... Sonra normal telefonlarda da çalışıyor mu diye kendimi aradım. Zırrrr zırrrr... salonda telefon çaldı. Çalışıyordu... Tam bilgisayarın başından kalkıp açmak için yanına giderken elektrikler kesildi! Telefon çalmaya devam etti. Ahizeyi kaldırdım. Hiç ses yoktu diyemem. Bağlantı kurulmuştu. Çok hafif bir uğultu vardı, artık interneti dinliyordum...