Wednesday, December 5, 2012

Αιτίες άνοδου Χρυσής Αυγής

Είναι προφανές ότι αυτή η άνοδος της Χρυσής Αυγής δεν έγινε σε κοινωνικό και ιδεολογικό κενό. Η συρρίκνωση της επιτυχίας της στην απλοϊκή εξίσωση «οικονομική κρίση = άνοδος του φασισμού» συσκοτίζει το φαινόμενο και φυσικά δεν βοηθά στην αντιμετώπισή του. Μπορεί η κρίση και η ανασφάλεια λειτουργεί ως θρυαλλίδα αυτών των φαινομένων, αλλά δεν είναι η συνολική εξήγηση. Υπήρχαν και υπάρχουν υπόγεια ρεύματα στην ελληνική κοινωνία που αποτυπώθηκαν στις προηγούμενες εκλογές. Υπάρχει ο ρατσισμός, στον οποίο δεν είμαστε άνοσοι, όπως νομίζαμε, η συνωμοσιολογία που θέλει το σύμπαν να απεργάζεται το κακό της χώρας, και υπάρχει η βαθιά άγνοια για τη δημοκρατία και τον φασισμό. Αυτά πρέπει να αντιμετωπίζονται από μια κοινωνία, είτε υπάρχει κρίση είτε όχι.

Πάσχος Μανδραβέλης, Medium.gr

Tuesday, October 16, 2012

Μεγιστος - Ελάχιστος με απόλυτη τιμή

Να ένα αλγοριθμικό trick:
Μπορείς να βρεις τον μικρότερο και το μεγαλύτερο από δύο αριθμούς, μόνο με χρήση της απόλυτης τιμής.



Πως δουλεύει;
Ας πάρουμε για παράδειγμα την πρώτη σχέση. Έστω δύο αριθμοί x, y έτσι ώστε x < y:



Sunday, October 14, 2012

Δημοκρατία

Αυτό που δεν διδάχθηκε ο ελληνικός λαός, ούτε από το σχολείο, ούτε από τα ΜΜΕ, ούτε από τα κόμματα, είναι η αξία της δημοκρατίας. Δεν έμαθε ότι οι κανόνες συμβίωσης που έχουμε μπορεί να μην είναι τέλειοι, αλλά στη δημοκρατία ο αγώνας επιτρέπεται και συνεχίζεται. Οτι η ανομία, ανεξαρτήτως κινήτρων, καταλήγει πάντα στη φαλκίδευση των δικαιωμάτων των αδύναμων. Οτι οι κακοί νόμοι δεν καταργούνται με την παράβασή τους, αλλά με την παραγωγή καλύτερων νόμων. Οτι ο λόγος -ακόμη και ο προσβλητικός για κάποιους- δεν μπορεί να θεωρείται παραβατικός, αλλά κάθε παράβαση στην πράξη πρέπει να δικάζεται και να τιμωρείται. Οτι η ανοχή στη μικρή παραβατικότητα οδηγεί στη μεγαλύτερη, για να καταλήξουμε σε πογκρόμ ανθρώπων. Είναι δύσκολο να πεισθούν οι άνθρωποι ότι η αργόσυρτη και γεμάτη δικλίδες ασφαλείας δημοκρατική διαδικασία είναι μακροπρόθεσμα η πιο παραγωγική για τη λύση των προβλημάτων. Αποδείχθηκε όμως στις πρόσφατες εκλογές πως ούτε ο πολιτικός στραβισμός πείθει.
Απόσπασμα από το άρθρο «Τα άκρα και οι συμψηφισμοί» του Πάσχου Μανδραβέλη. Δημοσιεύτηκε στην εφημερίδα «Καθημερινή» στις 14.10.2012

Monday, September 24, 2012

Περί πολιτικών πεποιθήσεων

Όπως πιθανότατα ξέρεις, εσύ που διαβάζεις αυτό εδώ το μπλογκ εδώ και καιρό, δεν είμαι κομμουνιστής (μετά τα 14, τουλάχιστον -αλλά τότε δεν με ήξερες, γιατί δεν υπήρχε ίντερνετ). Δεν πιστεύω ότι όλοι οι άνθρωποι είναι ίδιοι και ότι πρέπει να αμείβονται το ίδιο και να μην υπάρχει ιδιοκτησία. Πιστεύω ότι η ανθρώπινη φύση είναι εξ’ ορισμού ατελής και ότι για να μπορέσουν οι άνθρωποι να συνυπάρξουν και να μοιραστούν τη Γη με κάποιον τρόπο που μοιάζει αντικειμενικά δίκαιος, και ταυτόχρονα να έχουν κίνητρα για να αναπτύξουν φιλοδοξίες και όνειρα και να πάνε την ανθρωπότητα παρακάτω, θα πρέπει να επινοήσουν ένα κριτήριο αυστηρά μη-ανθρώπινο. Ο καπιταλισμός είναι το πιο επιτυχημένο οικονομικό σύστημα στην ανθρώπινη ιστορία, και χάρη σ’ αυτόν σήμερα οι άνθρωποι έχουν υγιή δόντια και κινητά τηλέφωνα και, παρά τις φρικτές του ατέλειες, παραμένει καλύτερος από άλλα, πιο ανθρωποκεντρικά συστήματα, που προτιμούν την ισότητα απ’ την ελευθερία. 

 Το κείμενο αυτό γράφτηκε από το Θοδωρή Γεωργακόπουλο. Μπορείς να το διαβάσεις ολόκληρο εδώ: http://www.georgakopoulos.org/2012/09/al-mirqab/

Thursday, July 5, 2012

XDA Update Checker in Python

I have been checking this url allot lately (last six months). Its the development thread of Android 4: Ice Scream Sandwich for my HTC Desire. So I wrote a small python script to do it for me.
It uses regular expression to separate the title and compares it with the previous one, saved in a text file, to determine if it's new. Here is the code:
URL = 'http://forum.xda-developers.com/showthread.php?t=1355660'
SAVE_FILE = 'ics'
REG_EXP = '<title>.+?\] '

import urllib2, re, time, webbrowser

#### Load page
print "Loading page..."
html_content = urllib2.urlopen(URL).read()
   
#### Search for version info
try:
   match = re.findall(REG_EXP, html_content)[0]
   match = re.findall('\[.+', match)[0] #remove <title>
except IndexError:
   match = "ERROR! Cant match regular expression:" + reg_exp

### Load SaveFile
try: old = open(SAVE_FILE).readline()
except IOError: old = 'file not found'

if old == match:
  ## No new version
   print "Old Version:", match;
   time.sleep(5) #wait and close
else:
  ## Update found!!   
   open(SAVE_FILE, 'w').write(match)
   raw_input("UPDATE! \t"+ match + "\n\nPress any key to open url.") #print and pause
   webbrowser.open_new_tab(URL)

This is a more recent version that is simpler and can check multiple urls. It just prints out the topic title though, without checking if it's new.
URLs = [
        'http://forum.xda-developers.com/showthread.php?t=1766550',
        'http://forum.xda-developers.com/showthread.php?t=1355660',
        ]

import urllib2
for URL in URLs:
   
   #### Load page
   #print "Loading page: " + URL
   html = urllib2.urlopen(URL).read()
   

   begin = html.find('<title>')
   end   = html.find('- xda', begin)
   title = html[begin+len('<title>'):end].strip()

   print title
   #print '\n'
raw_input("Press any key")

Saturday, May 26, 2012

Γενέθλια και η χαμένη Τετάρτη

Πλησιάζουν τα γενέθλια μου! Την Πέμπτη είναι, στις 31 Μαΐου. Πέμπτη;! Μα αφού πέρσι ήταν Πέμπτη Τρίτη. Νόμιζα πως κάθε χρόνο πάνε μια μέρα μπροστά. Κανονικά έπρεπε να είναι Παρασκευή Τετάρτη. 

ΑΑΑ! είναι δίσεκτο έτος φέτος. Χάθηκε μία μέρα, η 28η Φεβρουαρίου!.
Χμμ.., ας το ψάξουμε λίγο περισσότερο.
Μάλλον έχει να κάνει με το ότι φέτος το έτος ηταν δίσεκτο(2012).

Γιατί κάθε κάθε ημερολογιακή μέρα πάει χρόνο μία μέρα της ευδομάδας μπροστά;
Είναι απλο. Ο κανονικός χρόνος(ή Common year) έχει 365 μέρες = 52 εβδομάδες και 1 μέρα (Ευκλείδια διαίρεση: 365 = 52 * 7 + 1). Αυτή η μία μέρα είναι που μετακινεί τα γενέθλια μου.
Δίκαιο ακούγεται πάντως. Έτσι όλοι μπορούν να έχουν γενέθλια σε όλες τις μέρες του χρόνου σε 7 χρόνια.

Σε πια περίπτωση όμως θα τα γενέθλια μου θα ήταν σταθερά;
Για να συμβαίνει αυτό χρειάζεται η παραπάνω ευκλείδια διαίρεση να δίνει υπόλοιπο μηδεν. Αυτό είναι αδύνατον αφού το 7 δεν έχει διαιρέτες.

Τι θα γινόταν όμως αν ο χρόνος είχε, παραδείγματος χάρην 366 μέρες; Τίποτα το ιδιαίτερο.
Αν όμως ταυτόχρονα η εβδομάδα είχε 6 μέρες (έτσι ώστε το δύο να είναι διαιρέτης του 6) θα συνέβενε κάτι ενδιαφέρον. Τα γενέθλια μου θα έπεφταν μόνο στις 3 από τις 6 μέρες της εβδομάδας.
Με 367 μέρες θα έπεφταν μόλις σε 2. 

Μόνο αν η εβδομάδα είχε, για παράδειγμα, 6 ημέρες, στα δίσκετα έτη, που ο χρόνος έχει 366 ημέρες, τα γενέθλιά μου θα έμεναv ακίνητα. (366 = 61 * 6 + 0).

Υ.Γ.: Το αρχικό ποστ είχε μια σειρά(>1) από λογικά λάθη.

Monday, May 21, 2012

Υπολογισμός Μεσοπαράλληλης

Έστω δύο παράλληλες ευθείες ε1, ε2 και η μεσοπαράλληλη τους ε3.
Αν Μ1(x1,y1), M2(x2,y2), Μ3(x3,y3) τυχαία σημεία των ε1, ε2, ε3 αντίστοιχα, ισχύει:
(1)        (2) 
Επειδή το Μ3 είναι μέσο των Μ1, Μ2 για οποιαδήποτε Μ1, Μ2, Μ3 (Θεώρημα Θαλή).

Ομώς Μ1, Μ2, Μ3  ε1, ε2, ε3 αντίστοιχα.
Άρα ισχύει yi = λx + βi, (i=1, 2, 3) και αντικαθιστώντας τα yi η (2) γίνεται:



και τελικά:



Αν δεν υπάρχει λ (a.k.a. οι ευθείες είναι κατακόρυφες), μπορεί να χρησιμοποιηιεί η (1).

Saturday, May 19, 2012

Βουλή των Εφήβων 2012

Όχι, δυστηχώς δεν κληρώθηκα. Δεν είχα προετοιμαστεί με κανένα τρόπο, ούτε είχα αρχίσει ακόμα φροντιστήριο στην Έκθεση. Αυτά βέβαια δεν είχαν σημασία αφού οι βουλευτές επιλέγονται με κλήρωση...
http://efivoi.gr/

 Γιατί θέλετε να συμμετέχετε στη Βουλή των Εφήβων; (50 λέξεις)
Πιστεύω πως η Βουλή των Εφήβων είναι σαν θεσμός, έχει πολλά να προσφέρει στους συμμετέχοντες μαθητές. Τους δίνει την ευκαιρία να σκεφτούν, να εκφραστούν, να κρίνουν και να κριθούν. Βοηθάει ακόμα σημαντικά στην καλλιέργεια της θετικής στάσης των νέων απέναντι στα "κοινά", κάτι πολύ σημαντικό σήμερα, που Ελλάδα έχει ανάγκη από ικανούς ηγέτες.

 Περί αξιοκρατίας (300 λέξεις)
Ο όρος αξιοκρατία δηλώνει την αρχή σύμφωνα με την οποία η ανάληψη αξιωμάτων και θέσεων εργασίας, η αναγνώριση και η επιβράβευση προσπαθειών, γίνονται με βάση την πραγματική αξία του καθενός, χωρίς να επηρεάζονται από την καταγωγή, την πολιτική ιδεολογία ή την κοινωνική του θέση. Η αξιοκρατία ορθά χαρακτηρίζεται βασικό θεμέλιο κάθε δημοκρατικής κοινωνίας και ουσιαστικός παράγοντας για την πρόοδο των ατόμων και τη σωστή λειτουργία των κοινωνιών.

Κάθε Έλληνας ωφελείται από ένα αξιοκρατικό κράτος, μια αξιοκρατική κοινωνία. Αναγκάζεται να γίνει δημιουργικός, κυνηγά την ευκαιρία, όχι το βόλεμα. Του δίνεται το κίνητρο να εργασθεί, να μοχθήσει, και τελικά να πετύχει. Μαθαίνει να έχει εμπιστοσύνη στις προσωπικές του δυνάμεις και διαμορφώνει τις φιλοδοξίες του, και αγωνίζεται για να τις πραγματοποιήσει με βάση τις δυνάμεις αυτές. Παράλληλα, οδηγείται στην αυτογνωσία και στην επίγνωση των πραγματικών αδυναμιών, αλλά και των ικανοτήτων του τις οποίες επιστρατεύει για την επίτευξη των στόχων του. Τελικά, η αξιοκρατία οδηγεί στη συναισθηματική ικανοποίηση του, εφόσον δικαιώνεται απέναντι στον εαυτό του και αναγνωρίζεται από την κοινωνία, ανάλογα με τις προσπάθειες που κατέβαλε.

Και η κοινωνία όμως έχει σοβαρούς λόγους να επιδιώκει την αξιοκρατία. Μέσω αυτής αναπτύσσεται η ευγενής άμιλλα μεταξύ των μελών της. Εξασφαλίζεται η κοινωνική ισορροπία και η δικαιοσύνη, ενώ, παράλληλα, μειώνονται οι κοινωνικές και ταξικές ανισότητες. Τοποθετούνται στις θέσεις εργασίας οι άξιοι και ικανοί πολίτες, με αποτέλεσμα την αναβάθμιση των παρεχόμενων υπηρεσιών και την εύρυθμη λειτουργία της πολιτείας. Τέλος δημιουργούνται πρότυπα ήθους και εργατικότητας, τα οποία με τη σειρά τους εμπνέουν τους νέους.

Από τα παραπάνω γίνεται προφανές το πόσο θα βοηθούσε την Ελλάδα η πιο αξιοκρατική οργάνωση της κοινωνίας. Η παραγωγικοί εργαζόμενοι, προσελκύουν τους υποψήφιους επενδυτές να δημιουργούν νέες επιχειρήσεις και θέσεις εργασία στη χώρα μας.

Είναι τόσο σημαντική η αξιοκρατία, που κατά την άποψη μου, δικαιολογεί κάποιες άδικες ίσως επιπτώσεις προκειμένου να εφαρμοστεί στην εντελώς αναξιοκρατική Ελλάδα. Σίγουρα όμως δεν μπορούμε να αφήνουμε τους ικανότατους νέους μας άνεργους μόνο και μόνο για να αποφύγουμε το "ξεβόλεμα" των αντιπαραγωγικών δημοσίων υπαλλήλων.

Monday, May 14, 2012

[DRAFT]Codejam 2012: Round 1B

This was the first year I participated in Google Codejam. I passed the Qualification round which was far more difficult than I expected. I didn't pass the first round.

However I did write some interesting code to solve Problem C. It's in Python.
'''Output: Second line is one subset. Third line is another subset with the same sum.
####
For the big input, you cannot find the solution in time. 
However, you can make the script read a part of the input set and hope you will still ger a solution. 
Set slice_index to a value between 100 and 500 to do it.  Use None to read the whole input.
'''
slice_index = 50

import itertools

def solve(S):
    #S: the set of numbers 
    
    subsets = (c
               for length in range(1,len(S)+1)
               for c in itertools.combinations(S,length)
               )

    #finds a good subset pair
    result = ((i,j)
              for i,j in itertools.combinations(subsets,2)
              if sum(i)==sum(j)
              )
    

    print "Case #%d:" % (test_case) #, no_new_line
    try:
        a, b = next(result)
        print ' '.join(map(str, a))
        print ' '.join(map(str, b))
    except StopIteration:
        print 'Impossible'

#Input
fin = open('big.in', 'r')
fin.readline()
for test_case, line in enumerate(fin, 1):
    line = map(int, line.split())[1:slice_index]
    solve(line)
Here is the Contest Analysis.

Sunday, May 13, 2012

Dropquest 2012 Chapter 1

So, I have some code that I want to save somewhere and I thought this blog is a good place to post it. I wrote it to solve Chapter 1 if this years Dropquest.
Dropquest is an online challenge, organized by dropbox. The rewards are GBs of free lifetime space in dropbox.

It's written in Python. I am getting pretty fluent after taking CS373: Programming A Robotic Car, a free online course by Udacity.

digitized_numbers = lambda n: (
    map(int, x) for x in
    map(list, map(str,range(pow(10,n-1),pow(10,n)))))
'''digitized_numbers(5) returns all the 5 digit numbers (23546, 23547 etc.) 
  in the form [...[2,3,5,4,6],[2,3,5,4,7]...]''' 
print next( d  
    for d in digitized_numbers(5)
#d[0], d[1] etc. are the digits.
if d[0] * d[1] == 24                #1: 1st * 2nd = 24 
    if d[3] == d[1] /2                    #2: 4th = 2nd / 2
    if d[4] + d[3] == d[0] + d[2]  #3: 5th + 4th = 1st + 3rd
    if sum(d) == 26                      #4
    if len(set(d)) is not len(d)    #5
            )
'''
Instructions:
1: The product of the first two digits is 24.
2: The fourth digit is half of the second digit. 
3: The sum of the last two digits is equal to the sum of the first and third digits.  
4: The sum of all the digits is 26.  
5: Not all the digits are unique.
'''