Portál AbcLinuxu, 30. dubna 2025 13:31

UNIXové "narodeniny"

12.9.2008 14:34 | Přečteno: 1472× | software | poslední úprava: 13.9.2008 09:45

V poslednom čase som sa celkom nudil a pri programovani v C som si vsimol jednu celkom zaujímavú vec. Všimol som, že čoskoro budem žiť presne toľko sekúnd, koľko ubehlo od 1.1.1970 0:00 po deň môjho narodenia. Túto skutočnosť som sa rozhodol si overiť a tak som si na to spravil jednoduchý program, ktorý to pre mňa vypočítal.

Keďže som sa pred nedávnom začal zaoberať pythonom a gtk, tak som sa rozhodol, že to spravím, prekvapivo, v pythone a výstup bude v gtk(len úplný základ, čo viac by ste čakali od človeka, ktorý si prečítal 1 a pol kapitoly pygtk tutoriálu :) ).

Dôvod, prečo to píše práve dnes? Práve na dnes(v ranných hodinách) mi totiž vychádza táto oslava.

A aby som len nekecal, tak pridávam aj kód. Ak ho chcete použiť na seba, stačí pomeniť jednotlivé hodnoty premenných hneď na začiatku súboru.

A ešte posledné upozornenie. Daný program nemá zmysel pre ľudí, ktorí majú viac než 19 rokov(a nejaké drobné), dozviete sa akurát, že daná udalosť sa už stala.

P.S: Budem rád za každú zmysluplnú kritiku.

A tu už je ten sľúbený kód:

#!/usr/bin/env python
# This code has no licence

import time
import gtk

# Tu treba dat vase vlastne udaje, aby program spravne fungoval
# Udaje vpisuje v UTC
# Ak niektory z udajov nepoznate, jednoducho namiesto neho vlozte nulu
born_year = 1989 # rok narodenia
born_month = 5 # mesiac narodenia
born_day = 8 # den narodenia
born_hour = 1 # hodina narodenia
born_minute = 0 # minuta narodenia
born_second = 0 # sekunda narodenia

def quit(a,b):
	gtk.main_quit()

def compute_month(m):
	a = [31,28,31,30,31,30,31,31,30,31,30,31]
	r = 0
	for i in range(m):
		r += a[i]
	return r

def bonus_days(y,m):
	a = 1972
	i = 0
	while(a < y):
		a += 4
		if (a % 100 != 0) or (a % 400 == 0):
			i+=1
	if a == y and (a%100 != 0 or a % 400 == 0) and m > 2:
		i+=1
	return i

def compute():
	a = int(time.time())
	b = ((((born_year - 1970)*365+compute_month(born_month-1)+(born_day-1)+bonus_days(born_year, born_month))*24+born_hour)*60+born_minute)*60 + born_second
	c = 2*b - a
	if c>0:
		s = ""
		if c/3600/24 > 0:
			s = s + str(c/3600/24) + " day(s), "
		if c/3600 > 0:
			s = s + str(c/3600%24) + " hour(s), "
		if c/60 > 0:
			s = s + str(c/60 % 60) + " minute(s), "
		s = s + str(c % 60) + " second(s)"
	else:
		s = "It has already happened"
	return s

def compute_gtk(button, w):
	s = compute()
	button.destroy()
	button = gtk.Button(s)
	button.connect("clicked", compute_gtk, w)
	w.add(button)
	button.show()

def compute_shell():
	print compute()

#This is gtk version
w = gtk.Window()
button = gtk.Button("Compute")
w.connect("delete_event", quit)
button.connect("clicked", compute_gtk, w)
w.add(button)
w.set_border_width(20)
w.show_all()
gtk.main()

#This is shell version
compute_shell()


EDIT: Upravené, aby dávalo zmysel :).        

Hodnocení: 67 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

12.9.2008 14:46 Mrkva | skóre: 22 | blog: urandom
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
Všimol som, že čoskoro budem žiť presne toľko sekúnd, koľko ubehlo od 1.1.1970 0:00
To byste se musel narodit 1.1.1970 0:00. Nebo mi něco nedochází
Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
Heron avatar 12.9.2008 14:49 Heron | skóre: 53 | blog: root_at_heron | Olomouc
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Taky jsem lehce zmatený.
12.9.2008 15:09 disorder | blog: weblog
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
ja som z toho uplne mimo
12.9.2008 16:14 abr | skóre: 24 | blog: ab
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Treba myslel to, ze od 1970 po urcity cas je to presne na sekundu 2x co jeho vek.
12.9.2008 18:07 jas | skóre: 13 | blog: blag
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Sorry, zle som to napísal. Od 1.1.1970 0:00, UTC do môjho narodenia ubehlo presne toľko sekúnd, ako od môjho narodenia po súčasnosť(teda po dnešné ráno).
12.9.2008 14:48 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
Něco mi uniká - jak může žít někdo, kdo se nenarodil 1.1. 1970 0:00, tolik sekund, kolik uběhlo od tohoto okamžiku? Nebo tady někde něco hrozně rychle lítá?
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
Fluttershy, yay! avatar 12.9.2008 14:49 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Zapomínáš na teorii relativity apod. ^_^
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
12.9.2008 14:57 qiRzT | skóre: 14 | blog: U_Marvina
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
A co ta poslední věta?
Důležité je vědět jak problém vyřešit, zbytek zvládne i cvičená opice...
Fluttershy, yay! avatar 12.9.2008 15:01 Fluttershy, yay! | skóre: 93 | blog:
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Viz níže... spíš někdo.
🇵🇸Touch grass🇺🇦 ✊ ani boha, ani pána
default avatar 12.9.2008 14:58 default | skóre: 22 | Madrid
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Nebo tady někde něco hrozně rychle lítá?
Spíš někdo…
12.9.2008 14:59 CEST
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
taky to moc nechapu:)

jinak ten python ani nectu, ma to snad bejt nejaky super-gui-python reseni ala
date -d "1970/1/1 0:0:0 GMT +$(( $( date +"%s" ) - $( date +"%s"  -d 'Y/M/D 1:0:0' ) )) seconds"
??
12.9.2008 15:02 CEST
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Uch, ze bych to pochopil? ta veta mela asi byt Ze budu zit tolik sekund, kolik ubehlo od 1970/1/1 0:0:0 do casu meho narozeni??
12.9.2008 15:08 CEST
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
A v shellu ( a asi v kazdym dalsim jazyce) by to bylo
date -d "1970/1/1 0:0:0 GMT +$(( 2* $( date +"%s" -d '1989/5/8 1:0:0' ) )) seconds"
13.9.2008 13:52 jas | skóre: 13 | blog: blag
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Ono je to niečo podobné až na to, že toto nezisťuje priamo, kedy sa to stane, ale za aký dlhý časový úsek sa to stane, také dlhé to je len preto, aby sa to dalo ľahko modifikovať pre druhých a preto, že tam je do toho všetkého ešte napratané gtk, inak by sa to dalo napísať na pár riadkov(možno aj na jeden).
Michal Fecko avatar 12.9.2008 15:18 Michal Fecko | skóre: 31 | blog: Poznámkový blog
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
Toto je typicky program typu "Viem co chcem ale neviem ako sa to vola" ;-)
12.9.2008 16:14 jaaj
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
co tak to napsat v perle :)
pavlix avatar 13.9.2008 01:14 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
Hmm, tak to abych ti prvního ledna popřál k tvým 39. narozeninám, co :).
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
15.9.2008 09:52 JS
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc jsem ten program necetl, takze snad smysluplna kritika: Python obsahuje modul datetime, ktery ma vetsinu funkcionality vaseho programu jiz v sobe.
15.9.2008 17:19 jas | skóre: 13 | blog: blag
Rozbalit Rozbalit vše Re: UNIXové "narodeniny"
Vdik, dobré vedieť, že som to robil asi zbytočne :) .

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.