Struct için güzel bir örnek

Başlatan rutku, 17 Mart 2015 - 23:37:20

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

rutku

Bir geliştirici kendi öz geçmişini c dili ile kendi kod tarzı ile yazar ve güzel tepkiler alır. Temiz kod nasıl yazılır görelim ve örnek alalım arkadaşlar :).Kod tarzına cidden bayıldım. Ayrıca struct (veri yapıları) ı çok mantıklı kullanmış. Paylaşmadan duramam.

#include <stdio.h>
#include <time.h>

typedef struct {
union {
char * company;
char * school;
char * project;
};
union {
char * location;
char * url;
};
union {
char * title;
char * program;
};

time_t started;
time_t left;

char * description[];
} thing_t;

typedef thing_t job_t;
typedef thing_t school_t;
typedef thing_t project_t;

#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */

/* Contact Information */
char * name    = "Kevin R. Lange";
char * email   = "klange@toaruos.org";
char * address = "1045 Mission St, Apt 440\n"
                 "San Francisco, CA 94103";

/* Education */
school_t uiuc = {
.school   = "University of Illinois at Urbana-Champaign",
.location = "Urbana, IL",
.program  = "BS Computer Science",
.started  = 1251158400,
.left     = 1336608000,
.description = {
"Minor in International Studies in Engineering, Japan",
"Focused on systems software courses",
NULL
}
};

school_t hit = {
.school   = "Hiroshima Institute of Technology",
.location = "Hiroshima, Japan",
.program  = "Study Abroad",
.started  = 1274745600,
.left     = 1278288000,
.description = {
"Cultural exchange program",
"Intensive language course",
NULL
}
};

school_t * schools[] = {
&uiuc,
&hit,
NULL
};

/* Projects */
project_t compiz = {
.project = "Compiz Window Manager",
.url     = "http://compiz.org",
.title   = "Developer",
.started = 1201392000,
.left    = 1264291200,
.description = {
"Minor plugin contributor",
"Various research projects",
NULL
}
};

project_t toaruos = {
.project = "ToAruOS",
.url     = "https://github.com/klange/toaruos",
.title   = "Lead",
.started = 1295049600,
.left    = CURRENT,
.description = {
"Hobby x86 Unix-like kernel and userspace",
"Advanced in-house GUI with compositing window manager",
NULL
}
};

project_t * projects[] = {
&toaruos,
&compiz,
NULL
};

/* Employment History */

job_t yelp = {
.company  = "Yelp, Inc.",
.location = "San Francisco, CA",
.title    = "Software Engineer, i18n",
.started  = 1339977600,
.left     = CURRENT,
.description = {
"Developed several internal tools and libraries",
"Provided critical input and design work for Yelp's launch in Japan",
NULL
}
};

job_t apple_internship = {
.company  = "Apple Inc.",
.location = "Cupertino, CA",
.title    = "Software Engineering Intern",
.started  = 1306886400,
.left     = 1314662400,
.description = {
"Built software framework for testing and verification of desktop retina display modes",
"Assisted other interns with Unix fundamentals",
NULL
}
};

job_t * jobs[] = {
&yelp,
&apple_internship,
NULL
};

void print_thing(thing_t * thing) {
char started[100];
char left[100];
struct tm * ti;

printf("%s at %s - %s\n", thing->title, thing->company, thing->location);

ti = localtime(&thing->started);
strftime(started, 100, "%B %d, %Y", ti);

if (thing->left == CURRENT)  {
printf("%s to now\n", started);
} else {
ti = localtime(&thing->left);
strftime(left,    100, "%B %d, %Y", ti);
printf("%s to %s\n", started, left);
}

char ** desc = thing->description;
while (*desc) {
printf("- %s\n", *desc);
desc++;
}
}

int main(int argc, char ** argv) {

printf("%s\n%s\n%s\n\n", name, email, address);

puts("Education\n");
school_t ** s = schools;
while (*s) {
print_thing(*s);
puts("");
s++;
}

puts("Employment\n");
job_t ** j = jobs;
while (*j) {
print_thing(*j);
puts("");
j++;
}

puts("Projects\n");
project_t ** p = projects;
while (*p) {
print_thing(*p);
puts("");
p++;
}

return 0;
}


Çıktısı:
Alıntı YapKevin R. Lange
klange@toaruos.org
1045 Mission St, Apt 440
San Francisco, CA 94103

Education

BS Computer Science at University of Illinois at Urbana-Champaign - Urbana, IL
August 25, 2009 to May 10, 2012
- Minor in International Studies in Engineering, Japan
- Focused on systems software courses

Study Abroad at Hiroshima Institute of Technology - Hiroshima, Japan
May 25, 2010 to July 05, 2010
- Cultural exchange program
- Intensive language course

Employment

Software Engineer, i18n at Yelp, Inc. - San Francisco, CA
June 18, 2012 to now
- Developed several internal tools and libraries
- Provided critical input and design work for Yelp's launch in Japan

Software Engineering Intern at Apple Inc. - Cupertino, CA
June 01, 2011 to August 30, 2011
- Built software framework for testing and verification of desktop retina display modes
- Assisted other interns with Unix fundamentals

Projects

Lead at ToAruOS - https://github.com/klange/toaruos
January 15, 2011 to now
- Hobby x86 Unix-like kernel and userspace
- Advanced in-house GUI with compositing window manager

Developer at Compiz Window Manager - http://compiz.org
January 27, 2008 to January 24, 2010
- Minor plugin contributor
- Various research projects

Kaynak : resume.c
Hayallerini kodla ...

uKiriş
Mezgeldek

-DıLgEş-

Aşkın; gözü kör, kulağı sağır, dili tutuk, aklı kıttır..! Hayır yani bu halde nasıl herkesi madara ediyor onu çözemedim..

Quaoar

Bu geliştiriciyi uzun zamandır takip ediyordum. En sevdiğim projesi de Toaru os sistemi. Adam ciddi ciddi işletim sistemi yapmış.

rutku

Alıntı yapılan: Quaoar - 19 Mart 2015 - 21:36:06
Bu geliştiriciyi uzun zamandır takip ediyordum. En sevdiğim projesi de Toaru os sistemi. Adam ciddi ciddi işletim sistemi yapmış.
Aynen bende ara sıra takip ederim. İşletim sistemi değil de kendi çekirdeğini yazmış. Haiku os daha gibi değil hani :). Forumda başlığını açan olmamış bende daha yeni açmıştım :).
Hayallerini kodla ...

uKiriş
Mezgeldek

Secret++

#4
Gerçekten "Clean Cod" anlamını anlamış ve çok güzel bir kod örneği olmuş.

Reverser

Gerçekten çok temiz kullanmış yapıyı takip edeceğim ben de teşekkürler bildirim için.

XFCE ROCKS !
Powered by Thunar & XFWM4



thoron

#6
#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */


Yorumu anlayamadım, biri açıklayabilir mi?   :D  ???



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 10 Mayıs 2015 - 21:49:02

Bir de

typedef thing_t job_t;
typedef thing_t school_t;
typedef thing_t project_t;


bu sanırım thing_t'deki tanımlamaların aynısını içeren job_t, school_t, ... isimli değişkenler yaratıyor. thing_t varken aynı tanımlamayı tekrar yapmanın mantığı nedir?

blackwidow

Alıntı yapılan: thoron - 10 Mayıs 2015 - 21:45:00
#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */


Yorumu anlayamadım, biri açıklayabilir mi?   :D  ???



Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 10 Mayıs 2015 - 21:49:02

Bir de

typedef thing_t job_t;
typedef thing_t school_t;
typedef thing_t project_t;


bu sanırım thing_t'deki tanımlamaların aynısını içeren job_t, school_t, ... isimli değişkenler yaratıyor. thing_t varken aynı tanımlamayı tekrar yapmanın mantığı nedir?

Linux döneminde hayatta değildim diyor , sanırım ilk linux zamanlarında daha doğmadığını belirtmiş o yüzden Geçerli Durum ( current ) ı 0 yapmış (biraz amaçsız olmuş )

/* Ben yorumundan bunu anladım , farklı bir olayı da olabilir :D */

Diğer sorunun cevabı ise şu olabilir.

Things_t tipinde neredeyse tüm iletişimler var .

Ama arkadaş 3 - 4 kısıma ayırmış Cv sini staj dönemi , OS yazdığı dönem ve çalıştığı dönem gibi bunun için de ayrı bilgiler tutmak amaçlı o tipten farklı 3 tip daha tanımlamış

Böyle anladım ben .

freeman

#8
Alıntı yapılan: thoronKod: [Seç]#define CURRENT 0 /* I wasn't alive at the Unix epoch, so that'll work */

Yorumu anlayamadım, biri açıklayabilir mi?    
UNIX 'le alakalı. UNIX in  sıfır anından, ilk anından şimdiki zamana kadar geçen süre.  Buna "UNIX Epoch" diyorlar. Bu satırda bu olaya değinmiş. Espri yapmış gibi birşey.
Şu andaki UNIX zamanı,

http://www.coolepochcountdown.com/


Alıntı yapılan: thoron

Kod: [Seç]
typedef thing_t job_t;
typedef thing_t school_t;
typedef thing_t project_t;

bu sanırım thing_t'deki tanımlamaların aynısını içeren job_t, school_t, ... isimli değişkenler yaratıyor. thing_t varken aynı tanımlamayı tekrar yapmanın mantığı nedir?

Okunabilirlik.


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 11 Mayıs 2015 - 00:33:34

Son mesajı biraz daha açayım.
thing_t ile hem iş hem okul hem proje ile ilgili bilgileri saklayacak. Yalın olarak thing_t kullanırsa kodlar karışabilir. 
Good morning and welcome to the Black Mesa Transit System. This automated train is provided for the security and convenience of the Black Mesa Research Facility personnel.

thoron

@SkynetX

Dogrudur hocam,1234567890. saniye imis, o da 39.6...  yilina denk dusuyor Unixin.

Okunabilirlik konusunda haklisiniz, buyuk projeleri de hesaba katmali. 20 satir struct tanimlayacagina union kullanmis, ayni sekilde istedigi kadar tanimlamis. Hafizadan yemiyor nasilsa :)

Tesekkur ederim cevap verdiginiz icin. @blackwidow, @SkynetX

sem

Çok başarılı bir kod ve fikir =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?