Τελευταίες Αναρτήσεις »

There are many times that I just want to paste an image in a webpage. So I wrote this script that gets the image from the clipboard, converts it to a data URI and copies it again. The problem is, on ubuntu, when python quits it takes the clipboard with it to oblivion. So I had to open a window so that the clipboard doesn't empty. It's not pretty, but it works, and as a bonus you have the window with the data there to reuse. (triple click the window contents to select all)

#! /usr/bin/python

import pygtk
import gtk
import os
import sys
import base64
import cStringIO
import time

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
clipboard = gtk.clipboard_get()
cbImage = clipboard.wait_for_image()
fH = cStringIO.StringIO()
cbImage.save_to_callback(fH.write, "png")
cbText = "data:image/png;base64," + base64.b64encode(fH.getvalue())
clipboard.set_text(cbText)
clipboard.store()

sw = gtk.ScrolledWindow()
sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)

textview = gtk.TextView()
textbuffer = textview.get_buffer()
sw.add(textview)
sw.show()
window.add(sw)
textbuffer.set_text(cbText)

window.connect("destroy", gtk.main_quit)
window.show()
textview.show()
gtk.main()

#time.sleep(10)

In plain english, if you want to paste an image in a post on your favorite forum, copy it, double click the icon of my little app, and then paste it where the image url would be.

Αυτό το εφέ είναι αρκετά χρήσιμο όταν έχουμε ένα toolbar σε κάποια θέση της σελίδας (όχι πάνω πάνω) που δένει αισθητικά με το περιβάλλον, και έχει νόημα μόνο από εκεί και κάτω, αλλά το μεγάλο μέγεθος της σελίδας απαιτεί να είναι ορατό συνεχώς. Έτσι όταν αρχίζουμε να κατεβαίνουμε σιγά σιγά κάτω κάτω θέλουμε να "κολλήσει στην οροφή"


$(document).ready(function(){
    //ελέγχουμε αν η σελίδα φόρτωσε σε σημείο που πρέπει να εμφανιστεί
    //το toolbar
    showToolbarIfApplicable();
    //ελέγχουμε αν ο χρήστης έκανε scroll σε σημείο όπου πρέπει να
    //εμφανίσουμε το toolbar
    $(window).scroll(showToolbarIfApplicable);
})

function showToolbarIfApplicable(){
  //Αν είμαστε κάτω από το φυσικό ύψος της μπάρας μας
  if ($(window).scrollTop()>$('.navBar').offset().top) {
     //θέτουμε τη θέση της μπάρας σχετική με το παράθυρο και πάνω πάνω
     $('.navBar').css({position:'fixed', top : 0});
   } else {
     // αλλιώς επαναφέρουμε τις προηγούμενες ρυθμίσεις
     $('.navBarTool').fadeOut({position:'', top : ''});
   }
}

To wordpress γενικά έχει αρκετά εύχρηστο user interface παρά την εκτεταμένη λειτουργικότητα. Η απενεργοποίηση των σχολίων στα άρθρα όμως δεν είναι κάτι που είναι προφανές. Στα παρακάτω screenshots υπάρχουν τα 5 (!) βήματα για να κόψετε τα σχόλια από τα παλιά άρθρα σας, καθώς επίσης και η διαδικασία για να μην επιτρέπονται ούτε στα νέα άρθρα.

One of our latest projects involves the conversion of a document to pdf after adding line numbers. After some research I decided that the fastest way to do it while keeping formatiing is through a LibreOffice (formerly OpenOffice.org) headless invocation.

I started by writing a macro for LibreOffice in Basic to open the document, insert the line numbers and save to pdf. I modified the code given here and this is the result

REM ***** BASIC *****

Sub addLineNumbers(cFile)
cURL = ConvertToURL(cFile)
' Open the document.
' Just blindly assume that the document is of a type that OOo will
' correctly recognize and open -- without specifying an import filter.
oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0, Array())

'insert line numbers
oDoc.getLineNumberingProperties().Interval = 1
oDoc.getLineNumberingProperties().IsOn = True

Dim comps
comps = split (cFile, ".")
If UBound(comps) > 0 Then
comps(UBound(comps)) = "pdf"
cfile = join (comps, ".")
Else
cfile = cFile + ".pdf"
Endif

cURL = ConvertToURL(cFile)

' Save the document using a filter.
Dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "FilterName"
args(0).Value = "writer_pdf_Export"
oDoc.storeToURL(cURL,args())

oDoc.close(True)

End Sub

Subsequently I needed to invoke the macro from the command line (and from the php exec() command)
This code (and this website) to the rescue. Note there is a portable version of LibreOffice for use in shared environments for download if you follow the link.

libreoffice -invisible -nofirststartwizard -headless -norestore "macro:///Standard.Module1.addLineNumbers(/home/qwazix/Documents/outofbounds/test/test.odt)

In the meantime I stumbled upon a genius idea that adds line numbers to existing pdf files. Have a look at it.

Additional resources you may find useful for php+pdf

http://stackoverflow.com/questions/7364/pdf-editing-in-php
http://framework.zend.com/manual/en/zend.pdf.usage.html
http://www.setasign.de/support/manuals/fpdf-tpl/fpdf-tpl/fpdf-tpl-gettempaltesize/
http://www.fpdf.de/funktionsreferenz/?funktion=GetX
http://www.phplivedocx.org/2009/02/06/convert-doc-to-pdf-in-php/
http://stackoverflow.com/questions/4416667/php-pdf-template-library-with-pdf-output
http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx
http://superuser.com/questions/250086/what-is-needed-to-invoke-libreoffice-running-just-the-macro-without-the-gui
http://www.togaware.com/linux/survivor/Convert_MS_Word.html
http://codesnippets.services.openoffice.org/Writer/Writer.StoreWriterAsPDF.snip

 

The best selling smartphones of 2011 are not QWERTY keyboard phones. Yet, everyone who has used such a device finds it difficult to go back. People who never used one though think that they don't need it, that they can type perfectly with soft keyboards and that hardware keyboards add unnecessary bulk and weight.
I think that some things that happened that invalidate these thoughts
1. Screen sizes have increased in area (a 4.3" screen has about 1.5 times the area of a 3.5" screen) , so the available space has increased significantly allowing for more spacious and easy to use hardware keyboard.
2. Smartphone thickness has decreased considerably so a small increase in depth to accomodate a hwkb does not make a bulky phone, but rather a less slim one.
In the past years the QWERTY variants of the best known series are something like the lesser brother of devices, instead of the big ones. The E7 had no sd slot and immensely inferior camera than the N8 inspite of the bigger screen. The Droid was in the shadow of the Droid X, the Galaxy Pro and Desire Z were a bit tuned down versions of their slab counterparts. Even the N950, even though it sports the awesome N8 camera, lacks NFC and AMOLED screen of the N9.

My opinion is that if a really desirable brand made a superphone with QWERTY, which of course would be a little bulkier and heavier than the slab of the same series so the slab fanatic would still have a choice, and gifted it with distinctively better features than the slab (some more MP, higher res screen, two sd card slots, full size usb host, magnetic stylus) the people who just get the higher-specced phone irrespectively of form factor would drool about it. This has a multitude of effects.

Let's assume that we have one of the top brands in mobile and we decide to release this superphone:
1. Maybe there will be some leakage of customers to competitors because they would want the higher-specced slab phone, but this should not be very high because people who care mostly about style usually buy iPhones which are never the higher specced phones, and our slab phone would be anyway just as good (or better) than the contemporary iPhone regarding the features.
2. Tech fans and geeks generally like QWERTY phones because they make life easier (and not just that, sometimes the existence of a hwkb is the deciding factor for a software to be playable or not on certain hardware) with the console and OS porting and other advanced operations (running emulators). Tech fans and geeks are more influential in others' decisions when buying phones, and they also buy generally more phones, so we can expect some increased sales there.
3. QWERTY fans are thirsty for high-specced phones so we will probably gain some competitor market share if the competitors only have "last year" phones with hwkb.
4. A very high percent of those users will be converted to keyboard use and will want a hardware keyboard next time too. We will have created a market that will come back to us until competitors realized what happened and provide their own models in the range.

So in short, I say that if a brand can force QWERTY to customers' hands with some gimmick (artificially higher specs, a bit less profit margin, using brand desirability) there will be minor losses in the short term (as the hot thing is now slab phones) but it could be the deciding factor for a fashion change toward QWERTY superphones, and this brand will be there first, to reap the benefits.

As a note, prerequisite for a successful QWERTY phone is that shortcut keys that users are accustomed to from their daily pc usage (Ctrl+z, Ctrl+C, etc.) should work seamlessly throughout the OS. This removes UI clutter, makes life easier and increases the attachment of the user to the OS. And as it is likely that competitors will not have thought about it in their first iteration of "new" QWERTY. Furthermore, the Ctrl and Shift keys can be on the shoulders of the device (like gaming consoles) so that shortcut use is easier, and of course they can be used in gaming too.

Είχα ένα μενού στοιχισμένο δεξια, και ήθελα να γίνει fixed (δηλαδή να μένει στο ίδιο μέρος καθώς η σελίδα θα κάνει scroll), χωρίς να χρειάζεται να του αλλάζω θέση κάθε φορά που προσθέτω ένα καινούριο αντικείμενο. Αυτό είναι εύκολο να το κάνεις στο δεξί άκρο της σελίδας, η σε κάποιο σημείο μετρημένο με pixels από την άκρη της σελίδας. Σε ένα πλήρως δυναμικό (fluid) layout αυτό δεν είναι ικανοποιητικό. Επίσης ήθελα ο χώρος που καταλαμβάνει το μενού να μην καλύπτεται από άλλα div που το ακολουθούν στο markup, με άλλα λόγια, το υπόλοιπο layout να μην μεταβληθεί καθόλου, καθώς το μενού θα γίνει από static -> fixed.

Η λύση είναι η εξής (λίγο βρόμικη αλλά λειτουργεί καλά)

<div>
     <div>
          <div>
               <a href="#">home</a>
               <a href="#">contact</a>
               ...
          </div>
     </div>
</div>

.menu {
text-align: right;
float: right;
}
.menu:after{
content: " ";
height: auto;
display: block;
float: none;
clear: both;
font-size: όσο και το μενού σας
}
.menu .fixed .abs{ right: 0; }
.fixed{ position: fixed; }
.abs { position: absolute; }

Υπ' όψιν ότι αν το element που θέλετε να κάνετε fixed έχει μεταβλητό ύψος το σύστημα αυτό δεν λειτουργεί.

WordPress Plugin Basics

Οδηγός Δημιουργίας Plugin Στο WordPress

Πριν από λίγο καιρό, στα πλαίσια της εργασίας μου στην outofbounds, κλήθηκα να κατασκευάσω ένα πρόσθετο για το wordpress που να χειρίζεται διαγωνισμούς και κληρώσεις. Με βάση λοιπόν αυτήν την εμπειρία αποφάσισα να γράψω έναν μικρό οδηγό προγραμματισμού ενός plugin χωρίς όμως να εμβαθύνω στον τρόπο λειτουργίας του wordpress. Σε αυτόν το οδηγό θα αναφέρω τα απολύτως απαραίτητα γύρω από τον τρόπο που μπορούμε να επεκτείνουμε τον τρόπο λειτουργίας του wordpress και στο τέλος θα παραθέσω τον κώδικα για ένα πολύ απλό πρόσθετο που θα εμφανίζει το μήνυμα “Καλημέρα Κόσμε”. Προβολή ολόκληρου του άρθρου »

Οι οθόνες τύπου AMOLED (active matrix organic light emission diodes) είναι μια τεχνολογία η οποία ξεκίνησε πριν μερικά χρόνια κυρίως για τη δημιουργία οθονών χαμηλής κατανάλωσης ενέργειας. H Samsung είναι αυτή που οδηγεί την τεχνολογία στο εν λόγω τμήμα της αγοράς και παράγει σήμερα το 98% των οθονών amoled παγκοσμίως. Η εκπληκτική οθόνη που βλέπετε μπροστά σας στο εκπληκτικό HTC σας είναι πολύ πιθανόν κατασκευής Samsung (όπως και η οθόνη του iPhone, αλλά αυτό είναι off topic)

Ένα από τα πρώτα κινητά τηλέφωνα με οθόνη ΟLED ήταν το Ε700.

samsun-sgh-e700

Μια από τις πρώτες εφαρμογές OLED οθόνης σε κινητό τηλέφωνο

Ας μιλήσουμε όμως λίγο για τον τρόπο λειτουργίας τους πριν προχωρήσουμε σε σταθμούς στην ιστορία των οθονών ΑΜΟLED και τις εφαρμογές τους στην κινητή τηλεφωνία. Οι οθόνες amoled σε αντίθεση με τις LCD είναι αυτόφωτες, εκπέμπουν δηλαδή το φως τους ενώ οι LCD επαφίενται σε οπισθοφωτισμό. Σκεφτείτε ένα δίχτυ από πολλά πολύ μικρά λαμπάκια LED το ένα δίπλα στο άλλο. Εδώ πρέπει να ξεκαθαρίσουμε πως οι τηλεοράσεις που αυτοδιαφημίζονται ως LED δεν είναι AMOLED, αλλά LCD με οπισθοφωτισμό LED σε αντίθεση με τις παλαιότερες που χρησιμοποιούσαν λάμπες φθορισμού. Ο οπισθοφωτισμός LED σε τηλεοράσεις και οθόνες υπολογιστών προσφέρει πλεονεκτήματα αλλά αυτό είναι θεματική άλλου άρθρου. Σημειώνεται πως σε ορισμένες χώρες απαγορεύτηκε να διαφημίζονται αυτού του είδους οι τηλεοράσεις ως LED για να αποφεύγεται η σύγχιση του κοινού. Οι LCD οθόνες έχουν ομοιόμορφο οπισθοφωτισμό και μπροστά υπάρχει ένα ημιδάφανο φιλμ από υγρούς κρυστάλλους το οποίο επιτρέπει στο φως να περνάει αλλάζοντάς του χρώμα, όπως περίπου γίνεται όταν ο γιατρός βάζει μια ακτινογραφία μπροστά στη λάμπα.

Το πλεονέκτημα μιας αυτόφωτης οθόνης είναι πως ένα μαύρο pixel στην πραγματικότητα είναι ένα σβηστό pixel και δεν εκπέμπει καθόλου φως, αντίθετα με το φιλμ το οποίο αφήνει πάντοτε μια μικρή ποσότητα φωτός να διέλθει, και πως δεν καταναλώνει καθόλου ενέργεια. Έτσι οι οθόνες AMOLED έχουν τεράστιο κοντράστ και με την εξέλιξη της τεχνολογίας όλο και μεγαλύτερη φωτεινότητα, η οποία όμως δεν έχει φτάσει ακόμα τη φωτεινότητα των οθονών LCD. Στα μειονεκτήματά τους συγκαταλέγεται το γεγονός πως δεν μπορούν να λειτουργήσουν με εξωγενή φωτισμό (ορισμένες LCD μπορούν) και πως η απόσταση μεταξύ των LED δημιουργεί μαύρες τελείες ή γραμμές (ανάλογα με την διάταξη των subPixels, περισσότερα πιο κάτω)

Ένας σημαντικός σταθμός στην πορεία των AMOLED ήταν η εφαρμογή τους στα smartphones N85 και Ν86 της Nokia και η πρώτη εφαρμογή σε οθόνη αφής από τη Samsung στο W880 για την κορεάτικη αγορά. Στη συνέχεια εφαρμόστηκε στο πρώτο smartphone αφής (i8910) και εξελίχθηκε ακόμα περισσότερο με ενσωματωμένο τον αισθητήρα αφής (Super Amoled) για καλύτερη ακόμη φωτεινότητα στο Samsung Galaxy S.

Εκτός από τον ενσωματωμένο αισθητήρα αφής που μειώνει τον αριθμό των επιστρώσεων πάνω από την οθόνη, στην Super AMOLED άλλαξε η διάταξη των subPixels (subPixels είναι τα τρία χρωματιστά λαμπάκια που δημιουργούν όλα μαζί ένα pixel) σε PenTile. Όπως βλέπετε στις εικόνες κάθε pixel έχει ένα πράσινο subpixel και μοιράζεται το κόκκινο και το μπλε με τα διπλανά του. Αυτό γίνεται γιατί το ανθρώπινο μάτι είναι πιο ευαίσθητο στο πράσινο, και αντιλαμβάνεται τη λεπτομέρεια βάσει της λεπτομέρειας του πράσινου. Αυτό επιτρέπει μεγαλύτερη αντιληπτή λεπτομέρεια με λιγότερο συνολικό αριθμό subPixels. Έτσι δίνεται η δυνατότητα να αυξηθεί η ανάλυση χωρίς να μειωθεί το ελάχιστο μέγεθος των subPixels το οποίο είναι και συνήθως το όριο, και γι' αυτό μόλις πριν από μερικές μέρες εμφανίστηκαν οι πρώτες AMOLED άνω των 300ppi όπως αυτή του iPhone. Επίσης σύμφωνα με την εταιρία που δημιούργησε την τεχνολογία (τώρα τμήμα της Samsung) ο μικρότερος αριθμός subPixels βοηθάει στο να μειωθεί το ποσοστό του μαύρου (κενό ανάμεσα στα λαμπάκια) αυξάνοντας τη φωτεινότητα της οθόνης.

κοντινή φωτογραφία της οθόνης του Samsung omnia i8910 (2009)

To 2009 το i8910 είχε την πιο εντυπωσιακή οθόνη. Εδώ βλέπουμε πως χρησιμοποιεί τη διάταξη rbg stripe (198ppi) που πρόσφατα επανήλθε στο προσκήνιο με την έλευση του Galaxy SII

 

 

η οθόνη του galaxy s2 από κοντά

Η οθόνη του galaxy SII (217ppi) διαφέρει από το i8910 στο ότι έχει ενσωματωμένο, και όχι από πάνω τον αισθητήρα αφής

H διάταξη PenTile λειτουργεί με "λογικά" και όχι πραγματικά pixels όπου το κάθε λογικό pixel μοιράζειτα subPixels με το διπλανό του

Εδώ βλέπετε την εναλλαγή των subPixels στη διάταξη PenTile στην οθόνη του Galaxy S. H PenTile διάταξη επιτρέπει μεγαλύτερα ppi (233ppi)

To Nokia N9 έχει pentile AMOLED στα 251ppi

η οθόνη AMOLED του Ε7 από κοντά

η οθόνη AMOLED του Ε7 από κοντά. Όπως βλέπετε είναι... plus

Συμπέρασμα: το Plus στην οθόνη του Galaxy S II δεν είναι μια νέα τεχνολογία, είναι επιστροφή στην παλιά που εφαρμόστηκε τόσο στο Ν85 όσο και στο ι8910 (update: και στο Ε7) που έχει καλύτερη συνολική ποιότητα εικόνας όμως δεν μπορεί να εφαρμοστεί (μέχρι πρόσφατα - update: ίσως και ακόμα) σε μεγαλύτερα ppi, γι' αυτό και το μέγεθος οθόνης του S II είναι μεγαλύτερο με τον ίδιο αριθμό pixel (800x480). Το ερώτημα που παραμένει καθώς δεν έχω πρόσβαση σε κάποιο Ν8 ή Ε7 είναι τι είδος οθόνης έχουν. Αν έχετε ένα από αυτά, σχολιάστε.

update: Μια σύγκριση μεταξύ Ν9 και Ε7 δείχνει πως οι rgb stripe έχουν καλύτερη απεικόνιση χρωμάτων. Οι pentile δεν μπορούν να κρύψουν την ύπαρξη μεγαλύτερου αριθμού πράσινων subpixels ιδιαίτερα στα ουδέτερα γκρι.

Πάνω βλέπετε το Ν9 και κάτω το Ε7 να παίζουν το ίδιο βίντεο

Τα Galaxy Nexus και Note αρχίζουν να ανεβάζουν τον πήχη των dpi στις AMOLED οθόνες όμως χρησιμοποιούν και τα δύο pentile διάταξη.

Πλέον έχουμε καταλήξει όλοι στο πόσο σημαντικό είναι μια εφαρμογή να έχει καλό interface. Υπάρχουν αρκετοί κανόνες για να επιτευχθεί αυτό, οι οποίοι όμως είναι γενικού χαρακτήρα. Έτσι αποφασίσαμε να δημιουργήσουμε ένα δικό μας κανόνα σε ένα site με προσφορές ( Dealike ) που πρόσφατα υλοποιήσαμε.
Στο site αυτό υπάρχουν πολλά φίλτρα αναζήτησης. Μπορεί κάποιος να ψάξει προσφορές σε κάποιο γεωγραφικό διαμέρισμα και να τις ταξινομήσει αναλόγως την τιμή, την ημερομηνία λήξης κλπ. Επίσης υπάρχουν οι γενικές κατηγορίες που διαχωρίζουν τις προσφορές όπως ταξίδια, διασκέδαση, προϊόντα, φαγητό και άλλα. Ο χρήστης μπορεί ακόμα να κάνει click στο link κάποιου site για να δει τις προσφορές του. Ποια θα ήταν όμως η μορφή αυτών των links για να περιέχουν όσο το δυνατόν περισσότερη πληροφορία, χωρίς να χρειάζεται να επιβαρύνουμε το χρήστη με επιπλέον δεδομένα στην οθόνη του;
Έτσι , καταλήξαμε πως το μέγεθος αυτών των links θα μπορούσε να συμβολίζει τον αριθμό των προσφορών και το πόσο κόκκινο είναι τον αριθμό των clicks που έχει δεχτεί. Μπορείτε να ρίξετε και μια ματιά στο http://www.dealike.gr.

Pure css star rating bar

Σε πολλές ιστοσελίδες είναι απαραίτητο ένα σύστημα που να επιτρέπει στους χρήστες να βαθμολογήσουν ένα άρθρο, πρόγραμμα, ταινία κλπ

Σχεδιάζοντας ένα site που χρειαζόταν ένα τέτοιο σύστημα σκέφτηκα πως θα μπορούσε να γίνει μόνο με css. Μια αναζήτηση στο google αποκάλυψε διάφορες λύσεις που περιλάμβαναν δεκάδες γραμμές κώδικα και πολλαπλά επικαλυπτόμενα div's με σχετική ή απόλυτη τοποθέτηση. Σκέφτηκα πως θα πρέπει να υπάρχει πιο εύκολος τρόπος.

Ο κώδικας είναι μερικές μόνο γραμμές:

<style type="text/css">
.stars{
width: 120px;
height: 17px;
}
.stars .star{
width: 17px;
height: 17px;
padding: 1px;
display: inline-block;
background: url('http://outofbounds.gr/blog/wp-content/uploads//2011/09/fullstar.png') center center no-repeat;
}
.stars:hover .star{
background-image: url('http://outofbounds.gr/blog/wp-content/uploads//2011/09/fullstar.png') !important;
}
.last ~ .star{
background-image: url('http://outofbounds.gr/blog/wp-content/uploads//2011/09/emptystar.png');
}
.star:hover ~ .star{
background-image: url('http://outofbounds.gr/blog/wp-content/uploads//2011/09/emptystar.png') !important;
}
</style>

<div class="stars">
<div class="star"></div><div class="star"></div><div class="last star"></div><div class="star"></div><div class="star"></div>
</div>

In english

Searching for a pure css star rating bar I found only some solutions that involve dozens of css lines and many overlapping relatively and absolutely positioned elements, so I decided to make my own, simpler solution, which you can see above.

Browser compatibility: IE7+ and all other modern browsers.

Powered by outofbounds.gr and qwazix.