Süper bir düet olmuş bence. Burçak göndermeseydi aklıma gelmezdi sanırım buraya koymak
Şu ana kadar yapılmış en güzel düetlere aday bir parça bana göre… İzleyin, kararı siz verin…
programlama ve linux dünyası
Süper bir düet olmuş bence. Burçak göndermeseydi aklıma gelmezdi sanırım buraya koymak
Şu ana kadar yapılmış en güzel düetlere aday bir parça bana göre… İzleyin, kararı siz verin…
En sonunda ideefixe‘den sipariş ettiğim GTK+/Gnome ve Linux Altında Görsel Programlama kitaplarım geldi ve bende artık gönül rahatlığı ile başlayabilirim Linux için yeni programlara
Bunun yanındada bir kız var artık hayatımda uzun bir aradan sonra. Yani aslında henüz birşey yok ama bana çok şey hatırlattı ve beni acayip rahatlatıyor. Gerçekten baya bi hoşlanıyorum ondan sanırım. Hatırlatmalarının yanında baya şeyide unutturdu tabi
Geçmişte olanlar falan… Bunun içinde ayrı bir mutluluk var içimde.. Son gelişmeleri size yazarım
Pınar’ın sitesinden aldığım(çaldığım
) bir yazıyı paylaşmak istiyorum. Aslında biraz uzun zaman önce okumuştum yazısını. Ancak yeni aklıma geldi paylaşmak
Günlüğünde kendi yorumlarını okurken kendi kendime bende aynılarını yaptım ve hala yapıyorumda dedim. Üst sınıflardan yada aynı sınıfta olup benden daha iyi seviyede olan kişilerden aldığım kodları kendime göre düzenleyip, ekleyip, çıkardıktan sonra aslında gerçekten reengineering dediğimiz şeyi yapıyorum. Tabi bu kimisine göre modifikasyon oluyor. Ama bende Pınar‘a katılıyor ve reengineering diyorum. Çünkü modifikasyonun anlamı bu değil… Herneyse; daha iyi bir geliştirici olmanın maddelerini aşağıda veriyorum bende… Aslında Pınar’da Yuri‘den almış
Planlama
Planlama şüphesiz bir yazılım için olmazsa olmaz adımlardan biri. Her ne kadar yazılım hakkında tasarladığınız bir takım adımlar olsa da; direkt kafanızdaki taslak ile kodlamaya geçerseniz mutlaka geri dönmeniz gereken adımlar oluyor. Yurii’nin önerdiği planlama şöyle:
- Yapmanız gereken işlerin bir listesini hazırlayın
- Kısa zamanda bitecek işleri ‘Rightnow’ dizinine koyun
- Ertesi gün bitmesi gerekenleri ‘Today’, haftaya kadar bitirilmesi gerekenleri ‘ThisWeek’, … vb. dizininlere koyun
- Bunları yaparken görevleri kısa ve açıkça belirleyin
- Zamanlama konusunda gerçekçi olun
Çalışma
- Öncelikli işleriniz için ‘Rightnow’ dizinine göz atın. Yapılacakları yapın, dizin boşaldığında Today’a, o boşaldığında bir sonraki dizine atlayın
- Ancak üzerinde çalıştığınız dizini bitirmeden bir sonrakine geçmeyin
Kaynak Kodun Yönetimi
- Versiyon kontrol sistemi kullanın: Subversion, Darcs gibi..
- Kontrol mesajlarınızın açıklayıcı olmasına dikkat edin
- trac ya da ona benzer bir scm kullanın
Kaynak Kod
Kodumuzu açık kaynaklı olarak yayınlamakla iş bitmiyor tabii. Anlaşılır kodlar yazmak için de bir dizi öneri var:
- İsimlendirme kurallarına uyun
- Anlamlı değişken, metot, sınıf adları kullanın
- Okunabilir kodlar yazmaya çalışın
- Kod boyutunuzu küçültmeye çalışın; eğer kullandığınız metodun daha kısa hali varsa onu kullanın *
- Kodunuzu depoya göndermeden önce gözden geçirin; beğenmediğiniz yerleri düzeltmeye çalışın
- Meslektaşınızdan kodunuzu 15 dakikalığına gözden geçirmesini rica edin
Bu zaten sıkça dile getirilen bir şey ama, aynı zamanda kodunuza yorum satırları eklemeye özen göstermelisiniz. Bu sadece kodu okuyana değil, uzun bir aradan sonra koda baktığınızda size de faydalı olacaktır.
Test
Yurii bu maddeyi daha çok Ruby kullancıları için özelleştirmiş. Yazacağınız metodun/sınıfın önce iskelet halini oluşturun. Böylece neler yapmanız gerektiğini önünüze koymuş olursunuz. Aynı zamanda belli bir işi yapan kod parçalarını interaktif kabukta deneyerek tüm programı derlemeden/çalıştırmak zorunda kalmadan test edebilirsiniz. Tabii test aşaması oldukça geniş bir alan. Pek çok argüman eklenebilir.
“How To Write Unmaintainable Code”
Pınar’ın bunuda Türkçe’ye çevirmesini sabırsızlıkla bekliyorum…

Title: Sensation Black 2007
Genre: Techno // Hardstyle // Hardcore
Release Date: 2007
Source: CDDA
# Tracks: 38
# CDs: 2
Lenght: 02.38.21
Encoder: LAME 3.97
Quality: 192 kbps / VBR
Channels: Joint Stereo / 44 khz
Nonstop mix: yes
*.cue: yes
Archive size: 217 mb
Read the rest of this entry »
/*
GetIP.c
- Gets external IP from a remote HTTP server.
*/#define WIN32_LEAN_AND_MEAN
#include <string.h>
#include <ctype.h>
#include <windows.h>
#include <winsock.h>
char *GetIP(char *pszDest, char *pszDesc, char *pszBuf, int iLen, unsigned short usPort)
{
SOCKET sock;
WSADATA wsaD;
SOCKADDR_IN sin;
PHOSTENT pHostEnt;
char szGET[60], szBuf[1024], *p;
int i, j;
WSAStartup(0x101, &wsaD);
if(!(pHostEnt = gethostbyname(pszDest))) {
WSACleanup();
return NULL;
}
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sin.sin_family = AF_INET;
sin.sin_addr = *((PIN_ADDR)pHostEnt->h_addr);
sin.sin_port = htons(usPort);
if(connect(sock, (PSOCKADDR)&sin, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
closesocket(sock);
WSACleanup();
return NULL;
}
wsprintf(szGET, "GET / HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", pszDest);
if(send(sock, szGET, strlen(szGET) + 1, 0) == SOCKET_ERROR) {
closesocket(sock);
WSACleanup();
return NULL;
}
while((i = recv(sock, szBuf, sizeof szBuf - 1, 0)) > 0 && i != SOCKET_ERROR) {
if(p = strstr(szBuf, pszDesc)) {
p += strlen(pszDesc);
for(j = 0; (isdigit(*p) || *p == '.') && j < iLen; p++, j++)
*(pszBuf + j) = *p;
*(pszBuf + j) = '';
}
}
closesocket(sock);
WSACleanup();
return pszBuf;
}
int WinMainCRTStartup()
{
char szStr[15];
MessageBox(NULL, GetIP("whatismyip.com", "Your IP Is ", szStr, sizeof szStr - 1, 80), "hi", MB_OK);
return 0;
}