<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ooblog</title>
	<atom:link href="http://www.outofbounds.gr/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.outofbounds.gr/blog</link>
	<description>μια οπτική της τεχνολογίας έξω από τα δεδομένα</description>
	<lastBuildDate>Wed, 09 May 2012 12:39:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Open Journal Systems(OJS) add editor decision</title>
		<link>http://www.outofbounds.gr/blog/?p=346</link>
		<comments>http://www.outofbounds.gr/blog/?p=346#comments</comments>
		<pubDate>Wed, 09 May 2012 12:39:36 +0000</pubDate>
		<dc:creator>pstamatel</dc:creator>
				<category><![CDATA[tricks]]></category>
		<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=346</guid>
		<description><![CDATA[I was seaching the web trying to figure out how to add a decision at the list available to the editor. Since i couldn't find any solution i had to dive into the code and found out the steps to accomplish it So to add a new editor decision option follow these  steps hint : [...]]]></description>
			<content:encoded><![CDATA[<p>I was seaching the web trying to figure out how to add a decision at the list available to the editor. Since i couldn't find any solution i had to dive into the code and found out the steps to accomplish it</p>
<p>So to add a new editor decision option follow these  steps<span id="more-346"></span></p>
<p><em>hint : _OJS_ is the root directory of ojs installation</em></p>
<div>
<p>1) <strong>Edit _OJS_/classes/submission/common/Action.inc.php.</strong></p>
<p>Add a constant with your new option at the "decision codes" section</p>
<p>2) <strong>Edit _OJS_/pages/SectionEditor/SubmissionEditJHandler.inc.php.</strong></p>
<p>at function recordDecision() add a case to the switch($decision) to match/catch your new option for recording to db</p>
<p>3) <strong>Edit _OJS_/classes/submission/sectionEditor/SectionEditorSubmission.inc.php</strong></p>
<p>at function &amp;getEditorDecisionOptions append a new array record with key the constant you defined at Action.inc.php and value key for your tranlsation(next step)</p>
<p>4) <strong>Edit your locale editor.xml</strong>(i.e for english _OJS_/locale/en_US/editor.xml)<br />
add a translation for your new option</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=346</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>convert image in clipboard to data URI</title>
		<link>http://www.outofbounds.gr/blog/?p=338</link>
		<comments>http://www.outofbounds.gr/blog/?p=338#comments</comments>
		<pubDate>Tue, 14 Feb 2012 18:05:38 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[εκτός κατηγορίας]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=338</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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)</p>
<pre><code>#! /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)
</code></pre>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=338</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Toolbar που «κολλάει» στο πάνω μέρος όταν κάνεις scroll το παράθυρο πιο κάτω από αυτό</title>
		<link>http://www.outofbounds.gr/blog/?p=329</link>
		<comments>http://www.outofbounds.gr/blog/?p=329#comments</comments>
		<pubDate>Thu, 09 Feb 2012 11:36:19 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[εκτός κατηγορίας]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=329</guid>
		<description><![CDATA[Αυτό το εφέ είναι αρκετά χρήσιμο όταν έχουμε ένα toolbar σε κάποια θέση της σελίδας (όχι πάνω πάνω) που δένει αισθητικά με το περιβάλλον, και έχει νόημα μόνο από εκεί και κάτω, αλλά το μεγάλο μέγεθος της σελίδας απαιτεί να είναι ορατό συνεχώς. Έτσι όταν αρχίζουμε να κατεβαίνουμε σιγά σιγά κάτω κάτω θέλουμε να "κολλήσει [...]]]></description>
			<content:encoded><![CDATA[<p>Αυτό το εφέ είναι αρκετά χρήσιμο όταν έχουμε ένα toolbar σε κάποια θέση της σελίδας (όχι πάνω πάνω) που δένει αισθητικά με το περιβάλλον, και έχει νόημα μόνο από εκεί και κάτω, αλλά το μεγάλο μέγεθος της σελίδας απαιτεί να είναι ορατό συνεχώς. Έτσι όταν αρχίζουμε να κατεβαίνουμε σιγά σιγά κάτω κάτω θέλουμε να "κολλήσει στην οροφή"</p>
<pre><code>
$(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 : ''});
   }
}
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=329</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Απενεργοποίηση σχολίων στο wordpress</title>
		<link>http://www.outofbounds.gr/blog/?p=319</link>
		<comments>http://www.outofbounds.gr/blog/?p=319#comments</comments>
		<pubDate>Wed, 08 Feb 2012 12:46:29 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[εκτός κατηγορίας]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=319</guid>
		<description><![CDATA[To wordpress γενικά έχει αρκετά εύχρηστο user interface παρά την εκτεταμένη λειτουργικότητα. Η απενεργοποίηση των σχολίων στα άρθρα όμως δεν είναι κάτι που είναι προφανές. Στα παρακάτω screenshots υπάρχουν τα 5 (!) βήματα για να κόψετε τα σχόλια από τα παλιά άρθρα σας, καθώς επίσης και η διαδικασία για να μην επιτρέπονται ούτε στα νέα [...]]]></description>
			<content:encoded><![CDATA[<p>To wordpress γενικά έχει αρκετά εύχρηστο user interface παρά την εκτεταμένη λειτουργικότητα. Η απενεργοποίηση των σχολίων στα άρθρα όμως δεν είναι κάτι που είναι προφανές. Στα παρακάτω screenshots υπάρχουν τα 5 (!) βήματα για να κόψετε τα σχόλια από τα παλιά άρθρα σας, καθώς επίσης και η διαδικασία για να μην επιτρέπονται ούτε στα νέα άρθρα.</p>
<p><a href="http://outofbounds.gr/blog/wp-content/uploads//2012/02/wordpress-comments-new.png"><img src="http://outofbounds.gr/blog/wp-content/uploads//2012/02/wordpress-comments-new-300x161.png" alt="" title="wordpress comments new" width="300" height="161" class="alignleft size-medium wp-image-325" /></a><a href="http://outofbounds.gr/blog/wp-content/uploads//2012/02/wordpress-comments-old.png"><img src="http://outofbounds.gr/blog/wp-content/uploads//2012/02/wordpress-comments-old-300x161.png" alt="" title="wordpress comments old" width="300" height="161" class="alignleft size-medium wp-image-324" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=319</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>convert .doc to .pdf after adding line numbers</title>
		<link>http://www.outofbounds.gr/blog/?p=309</link>
		<comments>http://www.outofbounds.gr/blog/?p=309#comments</comments>
		<pubDate>Thu, 19 Jan 2012 14:21:42 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=309</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>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 <a title="how to convert doc to pdf" href="http://www.togaware.com/linux/survivor/Convert_MS_Word.html" target="_blank">here</a> and this is the result</p>
<blockquote><p><code>REM ***** BASIC *****</code></p>
<p>Sub addLineNumbers(cFile)<br />
cURL = ConvertToURL(cFile)<br />
' Open the document.<br />
' Just blindly assume that the document is of a type that OOo will<br />
' correctly recognize and open -- without specifying an import filter.<br />
oDoc = StarDesktop.loadComponentFromURL(cURL, "_blank", 0, Array())</p>
<p>'insert line numbers<br />
oDoc.getLineNumberingProperties().Interval = 1<br />
oDoc.getLineNumberingProperties().IsOn = True</p>
<p>Dim comps<br />
comps = split (cFile, ".")<br />
If UBound(comps) &gt; 0 Then<br />
comps(UBound(comps)) = "pdf"<br />
cfile = join (comps, ".")<br />
Else<br />
cfile = cFile + ".pdf"<br />
Endif</p>
<p>cURL = ConvertToURL(cFile)</p>
<p>' Save the document using a filter.<br />
Dim args(0) as new com.sun.star.beans.PropertyValue<br />
args(0).Name = "FilterName"<br />
args(0).Value = "writer_pdf_Export"<br />
oDoc.storeToURL(cURL,args())</p>
<p>oDoc.close(True)</p>
<p>End Sub</p></blockquote>
<p>Subsequently I needed to invoke the macro from the command line (and from the php exec() command)<br />
This code (<a href="http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx" target="_blank">and this website)</a> to the rescue. Note there is a portable version of LibreOffice for use in shared environments for download if you follow the link.</p>
<blockquote><p><code>libreoffice -invisible -nofirststartwizard -headless -norestore "macro:///Standard.Module1.addLineNumbers(/home/qwazix/Documents/outofbounds/test/test.odt)<br />
</code></p></blockquote>
<p>In the meantime I stumbled upon a genius idea that adds line numbers to existing pdf files. <a href="http://tex.stackexchange.com/questions/18760/add-page-and-line-numbers-to-a-pdf#18776" target="_blank">Have a look at it</a>.</p>
<h2>Additional resources you may find useful for php+pdf</h2>
<p><a href="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" target="_blank">http://stackoverflow.com/questions/7364/pdf-editing-in-php</a><br />
<a href="http://framework.zend.com/manual/en/zend.pdf.usage.html" target="_blank">http://framework.zend.com/manual/en/zend.pdf.usage.html</a><br />
<a href="http://www.setasign.de/support/manuals/fpdf-tpl/fpdf-tpl/fpdf-tpl-gettempaltesize/" target="_blank">http://www.setasign.de/support/manuals/fpdf-tpl/fpdf-tpl/fpdf-tpl-gettempaltesize/</a><br />
<a href="http://www.setasign.de/support/manuals/fpdf-tpl/fpdf-tpl/fpdf-tpl-gettempaltesize/" target="_blank">http://www.fpdf.de/funktionsreferenz/?funktion=GetX</a><br />
<a href="http://www.phplivedocx.org/2009/02/06/convert-doc-to-pdf-in-php/" target="_blank">http://www.phplivedocx.org/2009/02/06/convert-doc-to-pdf-in-php/</a><br />
<a href="http://stackoverflow.com/questions/4416667/php-pdf-template-library-with-pdf-output" target="_blank">http://stackoverflow.com/questions/4416667/php-pdf-template-library-with-pdf-output</a><br />
<a href="http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx" target="_blank">http://geekswithblogs.net/robertphyatt/archive/2011/11/19/converting-.docx-to-pdf-or-.doc-to-pdf-or-.doc.aspx</a><br />
<a href="http://superuser.com/questions/250086/what-is-needed-to-invoke-libreoffice-running-just-the-macro-without-the-gui" target="_blank">http://superuser.com/questions/250086/what-is-needed-to-invoke-libreoffice-running-just-the-macro-without-the-gui</a><br />
<a href="http://www.togaware.com/linux/survivor/Convert_MS_Word.html" target="_blank">http://www.togaware.com/linux/survivor/Convert_MS_Word.html</a><br />
<a href="http://codesnippets.services.openoffice.org/Writer/Writer.StoreWriterAsPDF.snip">http://codesnippets.services.openoffice.org/Writer/Writer.StoreWriterAsPDF.snip</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=309</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disturb the market with an old trick. QWERTY keyboards</title>
		<link>http://www.outofbounds.gr/blog/?p=307</link>
		<comments>http://www.outofbounds.gr/blog/?p=307#comments</comments>
		<pubDate>Mon, 16 Jan 2012 16:33:07 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[smartphones]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=307</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.<br />
I think that some things that happened that invalidate these thoughts<br />
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.<br />
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.<br />
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.</p>
<p>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.</p>
<p>Let's assume that we have one of the top brands in mobile and we decide to release this superphone:<br />
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.<br />
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.<br />
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.<br />
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.</p>
<p>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.</p>
<p>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.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=307</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fixed positioning και δεξιά στοίχιση</title>
		<link>http://www.outofbounds.gr/blog/?p=278</link>
		<comments>http://www.outofbounds.gr/blog/?p=278#comments</comments>
		<pubDate>Tue, 22 Nov 2011 16:57:52 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[εκτός κατηγορίας]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=278</guid>
		<description><![CDATA[Είχα ένα μενού στοιχισμένο δεξια, και ήθελα να γίνει fixed (δηλαδή να μένει στο ίδιο μέρος καθώς η σελίδα θα κάνει scroll), χωρίς να χρειάζεται να του αλλάζω θέση κάθε φορά που προσθέτω ένα καινούριο αντικείμενο. Αυτό είναι εύκολο να το κάνεις στο δεξί άκρο της σελίδας, η σε κάποιο σημείο μετρημένο με pixels από [...]]]></description>
			<content:encoded><![CDATA[<p>Είχα ένα μενού στοιχισμένο δεξια, και ήθελα να γίνει fixed (δηλαδή να μένει στο ίδιο μέρος καθώς η σελίδα θα κάνει scroll), χωρίς να χρειάζεται να του αλλάζω θέση κάθε φορά που προσθέτω ένα καινούριο αντικείμενο. Αυτό είναι εύκολο να το κάνεις στο δεξί άκρο της σελίδας, η σε κάποιο σημείο μετρημένο με pixels από την άκρη της σελίδας. Σε ένα πλήρως δυναμικό (fluid) layout αυτό δεν είναι ικανοποιητικό. Επίσης ήθελα ο χώρος που καταλαμβάνει το μενού να μην καλύπτεται από άλλα div που το ακολουθούν στο markup, με άλλα λόγια, το υπόλοιπο layout να μην μεταβληθεί καθόλου, καθώς το μενού θα γίνει από static -> fixed.</p>
<p>Η λύση είναι η εξής (λίγο βρόμικη αλλά λειτουργεί καλά)<br />
<code>
<pre>
&lt;div&gt;
     &lt;div&gt;
          &lt;div&gt;
               &lt;a href="#"&gt;home&lt;/a&gt;
               &lt;a href="#"&gt;contact&lt;/a&gt;
               ...
          &lt;/div&gt;
     &lt;/div&gt;
&lt;/div&gt;

.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; }
</pre>
<p></code></p>
<p>Υπ' όψιν ότι αν το element που θέλετε να κάνετε fixed έχει μεταβλητό ύψος το σύστημα αυτό δεν λειτουργεί.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=278</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin Basics</title>
		<link>http://www.outofbounds.gr/blog/?p=223</link>
		<comments>http://www.outofbounds.gr/blog/?p=223#comments</comments>
		<pubDate>Mon, 31 Oct 2011 14:54:21 +0000</pubDate>
		<dc:creator>pstamatel</dc:creator>
				<category><![CDATA[web development]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=223</guid>
		<description><![CDATA[Οδηγός Δημιουργίας Plugin Στο WordPress Πριν από λίγο καιρό, στα πλαίσια της εργασίας μου στην outofbounds, κλήθηκα να κατασκευάσω ένα πρόσθετο για το wordpress που να χειρίζεται διαγωνισμούς και κληρώσεις. Με βάση λοιπόν αυτήν την εμπειρία αποφάσισα να γράψω έναν μικρό οδηγό προγραμματισμού ενός plugin χωρίς όμως να εμβαθύνω στον τρόπο λειτουργίας του wordpress. Σε [...]]]></description>
			<content:encoded><![CDATA[<h2 align="CENTER"><strong>Οδηγός Δημιουργίας Plugin Στο WordPress</strong></h2>
<p>Πριν από λίγο καιρό, στα πλαίσια της εργασίας μου στην outofbounds, κλήθηκα να κατασκευάσω ένα πρόσθετο για το wordpress που να χειρίζεται διαγωνισμούς και κληρώσεις. Με βάση λοιπόν αυτήν την εμπειρία αποφάσισα να γράψω έναν μικρό οδηγό προγραμματισμού ενός plugin χωρίς όμως να εμβαθύνω στον τρόπο λειτουργίας του wordpress. Σε αυτόν το οδηγό θα αναφέρω τα απολύτως απαραίτητα γύρω από τον τρόπο που μπορούμε να επεκτείνουμε τον τρόπο λειτουργίας του wordpress και στο τέλος θα παραθέσω τον κώδικα για ένα πολύ απλό πρόσθετο που θα εμφανίζει το μήνυμα <span>“Καλημέρα Κόσμε”</span>.<span id="more-223"></span></p>
<p align="LEFT"><strong>Λέξεις Κλειδιά:</strong></p>
<p align="LEFT"><strong>wp-root :</strong> φάκελος που έχει γίνει η εγκατάσταση του wordpress</p>
<p align="LEFT"><strong>Τοποθεσία Πρόσθετων</strong></p>
<p>Τα πρόσθετα του wordpress τοποθετούνται στην διαδρομή <strong>wp-root/</strong>wp-content/plugins/</p>
<p align="LEFT"><strong>Δομή Ενός Plugin</strong></p>
<p>Γενικά το wordpress δεν μας περιορίζει στην δομή των αρχείων ενός πρόσθετου. Θα μπορούσαμε δηλαδή να τοποθετήσουμε όλον το κώδικα του πρόσθετου σε ένα αρχείο και το wordpress θα το εκτελούσε κανονικά. Εγώ προσωπικά προτιμώ τα πρόσθετα που φτιάχνω να έχουν μια ιεραρχική δομή όπου τα αρχεία τοποθετούνται σε φακέλους ανάλογα με το είδους τους. Για παράδειγμα εγώ προτείνω την εξής δομή :</p>
<p align="LEFT"><strong> </strong><span style="font-family: WenQuanYi Micro Hei Mono;"><strong>wp-root</strong></span><span style="font-family: WenQuanYi Micro Hei Mono;">/wp-content / plugin /ονομασία_πρόσθετου</span></p>
<ul>
<ul>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">js/</span></p>
</li>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">css/</span></p>
</li>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">includes/</span></p>
</li>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">images/</span></p>
</li>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">αρχείο κειμένου με οδηγίες</span></p>
</li>
<li>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">ονομασία_πρόσθετου.php ( κύριως κώδικας του πρόσθετου)</span></p>
</li>
</ul>
</ul>
<p align="LEFT"><strong>Hooks</strong></p>
<p align="LEFT"><strong> </strong>Μέσω των πρόσθετων αυτό που θέλουμε να πετύχουμε στην ουσία είναι η επέκταση/τροποποίηση της λειτουργίας του wordpress. Το ίδιο το wordpress μας το επιτρέπει αυτό με την χρήση των λεγόμενων hooks. Χωρίς να εμβαθύνω πολύ τα hooks χωρίζονται σε δύο κατηγορίες</p>
<ol>
<li>
<p align="LEFT"><strong>Actions</strong> : τα actions λένε στο wordpress τι να εκτελέσει στα διάφορα σημεία εκτέλεσης ή μόλις συμβεί κάποιο γεγονός. Μέσα από τα actions μπορούμε να πούμε στο wordpress να εκτελέσει συναρτήσεις που έχουμε γράψει σε όποιο σημείο επιθυμούμε(head, footer, admin menu κτλ).</p>
</li>
<li>
<p align="LEFT"><strong>Filters</strong> : Τα hooks χρησιμοποιούνται από το wordpress για την μορφοποίηση των κειμένων προτού τα προσθέσει στην βάση δεδομένων ή τα εμφανίσει στην οθόνη του χρήστη.</p>
</li>
</ol>
<p>Το wordpress μας παρέχει ένα σύνολο από συναρτήσεις ειδικά για τον χειρισμό των hooks. Λίστα με όλες τις συναρτήσεις υπάρχει στο <a href="http://adambrown.info/p/wp_hooks">http://adambrown.info/p/wp_hooks</a>. Στα πλαίσια του οδηγού αυτού θα ασχοληθούμε μόνο με μία, την <span>add_action.</span> Η συνάρτηση αυτή όπως προδίδει και το όνομά της, χρησιμοποιήτε για να πρωσθέσουμε μια συνάρτησή μας στον κύκλο εκτέλεσης του wordpress. Στην πιο απλή μορφή της παίρνει δύο παραμέτρους. Πρώτον το σημείο εκτέλεσης ή το γεγονός που θέλουμε να πρωστεθεί ο κώδικάς μας και δεύτερον η συνάρτηση που περιέχει την συνάρτησή μας, για παράδειγμα:</p>
<blockquote><p><code>add_action(“περιοχή_action”,”όνομα_συνάρτησης”)</code></p></blockquote>
<p>&nbsp;</p>
<p align="LEFT"><strong>Κώδικας Πρόσθετου</strong></p>
<p>Όπως φένεται και στην δομή ενός πρόσθετου.ο κώδικας του πρόσθετου τοποθετείται στο αρχείο “ονομασία_πρόσθετου.php” και χωρίζεται σε δύο κομμάτια, την κεφαλίδα και τον πραγματικό κώδικα.</p>
<p align="LEFT"><strong>Κεφαλίδα</strong></p>
<p>Η κεφαλίδα(header) ενός πρόσθετου είναι μια σειρά από σχόλια που παρέχουν στο wordpress πληροφορίες όπως το όνομα του πρόσθετου, περιγραφή αυτού, όνομα συγγραφέα, έκδοση και διεύθυνση πρόσθετου. Τα στοιχεία αυτά χρησιμοποιούνται από το wordpress στην σελίδα διαχείρισης των διαθέσιμων πρόσθετων και σε περίπτωση που δεν υπάρχουν στο αρχείο δεν θα εμφανίζεται καθόλου στην λίστα. Παράδειγμα κεφαλίδας :</p>
<blockquote><p>&nbsp;</p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">&lt;?php </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">/* </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Plugin Name: Οut Of Bounds Plugin</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Plugin URI: http://www.outofbounds.gr </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Version: 1 </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Author: http://www.outofbounds.gr </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Description: Lorem Ipsum Dolor Sit Amet </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">*/</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">?&gt;</span></p>
</blockquote>
<p>&nbsp;</p>
<p align="LEFT"><strong>Κώδικας</strong></p>
<p align="LEFT">Όπως φαντάζεστε, ο κώδικας ενός πρόσθετου στην ουσία είναι μια σειρά με συναρτήσεις που περιέχουν τον κώδικα που θέλουμε να εκτελεστεί και οι κατάλληλες κλήσεις της συνάρτησηςadd_actionπροκειμένου να εκτελεστούν στο επιθυμητό σημείο/γεγονός. Στα πλαίσια αυτού του οδηγού θα σας παρουσιάσω δύο τεχνικές που χρησιμοποιούνται για την συγγραφή του κώδικα.</p>
<ol>
<ol>
<ol>
<li>
<p align="LEFT"><strong>Χρήση συναρτήσεων</strong></p>
</li>
</ol>
</ol>
</ol>
<p align="LEFT">Σε αυτήν την μέθοδο κάνουμε αυτό που ανέφερα και πριν. Υλοποιούμε δηλαδή τις συναρτήσεις με τον κώδικα και με την <strong>add_action</strong> τις τοποθετούμε στο επιθυμητο σημείο στον κύκλο εκτέλεσης. Αυτό που πρέπει να προσέξουμε πολύ με αυτή τη μέθοδο είναι να κάνουμε έλεγχο πριν την δήλωση της εκάστοτε συνάρτησης για να σιγουρευτούμε ότι δεν έχει δηλωθεί συνάρτηση με το ίδιο όνομα πιο πρίν από άλλο πρόσθετο ή και από το ίδιο το wordpress. Αυτό μπορεί να γίνει πολύ εύκολα με την χρήση της συνάρτησης function_exists της php. Για παράδειγμα αν θέλαμε να δηλώσουμε την συνάρτηση myTestFunction θα πρέπει να γράψουμε τον εξής κώδικα :</p>
<blockquote><p>&nbsp;</p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">&lt;?php</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> if(!function_exists(“myTestFunction”)){</span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> //κώδικας του πρόσθετου</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }else{</span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> //κώδικας σε περίπτωση που υπάρχει </span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> //συνάρτηση με ίδιο όνομα</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }//telos if-else myTestFunction exists</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">?&gt;</span></p>
</blockquote>
<p>&nbsp;</p>
<ol>
<ol>
<ol start="2">
<li>
<p align="LEFT"><strong>Χρήση Κλάσης</strong></p>
</li>
</ol>
</ol>
</ol>
<p align="LEFT">Σύμφωνα με την μέθοδο αυτή μπορούμε να φτιάξουμε μια κλάση και να δηλώσουμε όλες τις συναρτήσεις ώς μεθόδους αυτών των κλάσεων.Το πλεονέκτημα αυτής της τεχνικής είναι ότι θα κάνουμε μια φορά έλεγχο για το αν υπάρχει ήδη κλάση με ίδιο όνομα και στην συνέχεια μπορούμε να γράψουμε ελέυθερα τις συναρτήσεις χωρίς να ανησυχούμε για το αν έχουν δηλωθεί ξανά. Ο αντίστοιχος κώδικας για το παράδειγμα της προηγούμενης μεθόδου είναι :</p>
<blockquote><p>&nbsp;</p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">&lt;?php</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> if(!class_exists("myTestClass")){</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> class TestClass{</span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> public function testFunction(){</span></p>
<p style="padding-left: 120px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> //κώδικας συνάρτησης</span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }//τελος μεθόδου myTestFunction</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }//τέλος κλάσης</span></p>
<p style="padding-left: 0px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }//τελος if κλάση δεν υπάρχει ήδη</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">?&gt;</span></p>
</blockquote>
<p>&nbsp;</p>
<p align="LEFT"><strong>Widgets</strong> :</p>
<p align="LEFT">Όπως έχουμε ήδη αναφέρει ο με την χρήση της <span>add_action</span> μπορούμε να “πούμε” στο wordpress να εκτελέσει τον κώδικα στο σημείο που επιθυμούμε(wp-head, init, κτλ). Μια άλλη επιλογή που έχουμε είναι να δημιουργήσουμε widget. Με αυτό τον τρόπο θα μπορεί ο διαχειριστής του συστήματος μέσα από το περιβάλλον διαχείρισης να ενεργοποιεί/απενεργοποιεί το πρόσθετο αλλά ακόμα και να ορίζει σε ποιο μέρος της σελίδας θα το εμφανίζει(εφόσον το επιτρέπει το template).</p>
<p align="LEFT">Για να το κάνουμε γράφουμε μια συνάρτηση που δηλώνει το widget και στην συνέχεια με την χρήση της <span>add_action</span> ενημερώνουμε το wordpress για την ύπαρξη αυτού. Συγκεκριμένα οι εντολές είναι οι εξής :</p>
<blockquote><p>&nbsp;</p>
<p align="LEFT"><span> <span style="font-family: WenQuanYi Micro Hei Mono;">function registerWidget(){</span></span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"><span style="font-size: small;"> <span>register_sidebar_widget(WIDGET_ID,ΣΥΝΑΡΤΗΣΗ_ΜΕ_ΤΟΝ_ΚΩΔΙΚΑ);</span></span></span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> }</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> add_action(“plugins_loaded”,”registerWidget”);</span></p>
</blockquote>
<p>&nbsp;</p>
<p align="CENTER"><strong>Κώδικας Πρόσθετου </strong>“Καλημέρα Κόσμε”</p>
<blockquote><p>&nbsp;</p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">&lt;?php </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">/* </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Plugin Name: HelloWorld </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Plugin URI: http://www.outofbounds,gr </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Version: 1 </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Author: Out Of Bounds</span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">Description: Lorem Ipsum Dolor Sit Amet</span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">*/ </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">if(!class_exists("HelloWorld")){ </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">class HelloWorld{ </span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">public static function HelloWorld_frontend(){ </span></p>
<p style="padding-left: 120px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;"> echo “Καλημέρα Κόσμε”;</span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">}//telos static function displayContents </span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">function registerWidget(){ </span></p>
<p style="padding-left: 120px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">register_sidebar_widget(__("HelloWorld"),"HelloWorld::HelloWorld_frontend"); </span></p>
<p style="padding-left: 80px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">}//telos function myChannelContestsPluginInit </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">}//telos klassis </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">$HelloWorldInstance = new HelloWorld(); </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">}//telos if class doesn"t already exists </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">//actions and filters declaration </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">if(isset($HelloWorldInstance)){ </span></p>
<p style="padding-left: 40px;" align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">add_action("plugins_loaded",array(&amp;$HelloWorldInstance,"registerWidget")); </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">}//telos if there is an instance of the HelloWorld class </span></p>
<p align="LEFT"><span style="font-family: WenQuanYi Micro Hei Mono;">?&gt; </span></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=223</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Οθόνες amoled. Πλεονεκτήματα και διαφορές στην υλοποίηση.</title>
		<link>http://www.outofbounds.gr/blog/?p=210</link>
		<comments>http://www.outofbounds.gr/blog/?p=210#comments</comments>
		<pubDate>Sun, 23 Oct 2011 16:31:21 +0000</pubDate>
		<dc:creator>qwazix</dc:creator>
				<category><![CDATA[Απεικόνιση]]></category>
		<category><![CDATA[τεχνολογία]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=210</guid>
		<description><![CDATA[Οι οθόνες τύπου AMOLED (active matrix organic light emission diodes) είναι μια τεχνολογία η οποία ξεκίνησε πριν μερικά χρόνια κυρίως για τη δημιουργία οθονών χαμηλής κατανάλωσης ενέργειας. H Samsung είναι αυτή που οδηγεί την τεχνολογία στο εν λόγω τμήμα της αγοράς και παράγει σήμερα το 98% των οθονών amoled παγκοσμίως. Η εκπληκτική οθόνη που βλέπετε [...]]]></description>
			<content:encoded><![CDATA[<p>Οι οθόνες τύπου AMOLED (active matrix organic light emission diodes) είναι μια τεχνολογία η οποία ξεκίνησε πριν μερικά χρόνια κυρίως για τη δημιουργία οθονών χαμηλής κατανάλωσης ενέργειας. H Samsung είναι αυτή που οδηγεί την τεχνολογία στο εν λόγω τμήμα της αγοράς και παράγει σήμερα το 98% των οθονών amoled παγκοσμίως. Η εκπληκτική οθόνη που βλέπετε μπροστά σας στο εκπληκτικό HTC σας είναι πολύ πιθανόν κατασκευής Samsung (όπως και η οθόνη του iPhone, αλλά αυτό είναι off topic)</p>
<p>Ένα από τα πρώτα κινητά τηλέφωνα με οθόνη ΟLED ήταν το Ε700.</p>
<div id="attachment_211" class="wp-caption alignleft" style="width: 228px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/samsun-sgh-e700.jpg"><img class="size-medium wp-image-211" title="samsun-sgh-e700" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/samsun-sgh-e700-218x300.jpg" alt="samsun-sgh-e700" width="218" height="300" /></a><p class="wp-caption-text">Μια από τις πρώτες εφαρμογές OLED οθόνης σε κινητό τηλέφωνο</p></div>
<p>Ας μιλήσουμε όμως λίγο για τον τρόπο λειτουργίας τους πριν προχωρήσουμε σε σταθμούς στην ιστορία των οθονών ΑΜΟLED και τις εφαρμογές τους στην κινητή τηλεφωνία. Οι οθόνες amoled σε αντίθεση με τις LCD είναι αυτόφωτες, εκπέμπουν δηλαδή το φως τους ενώ οι LCD επαφίενται σε οπισθοφωτισμό. Σκεφτείτε ένα δίχτυ από πολλά πολύ μικρά λαμπάκια LED το ένα δίπλα στο άλλο. Εδώ πρέπει να ξεκαθαρίσουμε πως οι τηλεοράσεις που αυτοδιαφημίζονται ως LED δεν είναι AMOLED, αλλά LCD με οπισθοφωτισμό LED σε αντίθεση με τις παλαιότερες που χρησιμοποιούσαν λάμπες φθορισμού. Ο οπισθοφωτισμός LED σε τηλεοράσεις και οθόνες υπολογιστών προσφέρει πλεονεκτήματα αλλά αυτό είναι θεματική άλλου άρθρου. Σημειώνεται πως σε ορισμένες χώρες απαγορεύτηκε να διαφημίζονται αυτού του είδους οι τηλεοράσεις ως LED για να αποφεύγεται η σύγχιση του κοινού. Οι LCD οθόνες έχουν ομοιόμορφο οπισθοφωτισμό και μπροστά υπάρχει ένα ημιδάφανο φιλμ από υγρούς κρυστάλλους το οποίο επιτρέπει στο φως να περνάει αλλάζοντάς του χρώμα, όπως περίπου γίνεται όταν ο γιατρός βάζει μια ακτινογραφία μπροστά στη λάμπα.</p>
<p>Το πλεονέκτημα μιας αυτόφωτης οθόνης είναι πως ένα μαύρο pixel στην πραγματικότητα είναι ένα σβηστό pixel και δεν εκπέμπει καθόλου φως, αντίθετα με το φιλμ το οποίο αφήνει πάντοτε μια μικρή ποσότητα φωτός να διέλθει, και πως δεν καταναλώνει καθόλου ενέργεια. Έτσι οι οθόνες AMOLED έχουν τεράστιο κοντράστ και με την εξέλιξη της τεχνολογίας όλο και μεγαλύτερη φωτεινότητα, η οποία όμως δεν έχει φτάσει ακόμα τη φωτεινότητα των οθονών LCD. Στα μειονεκτήματά τους συγκαταλέγεται το γεγονός πως δεν μπορούν να λειτουργήσουν με εξωγενή φωτισμό (ορισμένες LCD μπορούν) και πως η απόσταση μεταξύ των LED δημιουργεί μαύρες τελείες ή γραμμές (ανάλογα με την διάταξη των subPixels, περισσότερα πιο κάτω)</p>
<p>Ένας σημαντικός σταθμός στην πορεία των AMOLED ήταν η εφαρμογή τους στα smartphones N85 και Ν86 της Nokia και η πρώτη εφαρμογή σε οθόνη αφής από τη Samsung στο W880 για την κορεάτικη αγορά. Στη συνέχεια εφαρμόστηκε στο πρώτο smartphone αφής (i8910) και εξελίχθηκε ακόμα περισσότερο με ενσωματωμένο τον αισθητήρα αφής (Super Amoled) για καλύτερη ακόμη φωτεινότητα στο Samsung Galaxy S.</p>
<p>Εκτός από τον ενσωματωμένο αισθητήρα αφής που μειώνει τον αριθμό των επιστρώσεων πάνω από την οθόνη, στην Super AMOLED άλλαξε η διάταξη των subPixels (subPixels είναι τα τρία χρωματιστά λαμπάκια που δημιουργούν όλα μαζί ένα pixel) σε PenTile. Όπως βλέπετε στις εικόνες κάθε pixel έχει ένα πράσινο subpixel και μοιράζεται το κόκκινο και το μπλε με τα διπλανά του. Αυτό γίνεται γιατί το ανθρώπινο μάτι είναι πιο ευαίσθητο στο πράσινο, και αντιλαμβάνεται τη λεπτομέρεια βάσει της λεπτομέρειας του πράσινου. Αυτό επιτρέπει μεγαλύτερη αντιληπτή λεπτομέρεια με λιγότερο συνολικό αριθμό subPixels. Έτσι δίνεται η δυνατότητα να αυξηθεί η ανάλυση χωρίς να μειωθεί το ελάχιστο μέγεθος των subPixels το οποίο είναι και συνήθως το όριο, και γι' αυτό μόλις πριν από μερικές μέρες εμφανίστηκαν οι πρώτες AMOLED άνω των 300ppi όπως αυτή του iPhone. Επίσης σύμφωνα με την εταιρία που δημιούργησε την τεχνολογία (τώρα τμήμα της Samsung) ο μικρότερος αριθμός subPixels βοηθάει στο να μειωθεί το ποσοστό του μαύρου (κενό ανάμεσα στα λαμπάκια) αυξάνοντας τη φωτεινότητα της οθόνης.</p>
<div id="attachment_214" class="wp-caption alignleft" style="width: 175px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/i8910.jpg"><img class="size-full wp-image-214" title="κοντινή φωτογραφία της οθόνης του Samsung omnia i8910 (2009)" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/i8910.jpg" alt="κοντινή φωτογραφία της οθόνης του Samsung omnia i8910 (2009)" width="165" height="193" /></a><p class="wp-caption-text">To 2009 το i8910 είχε την πιο εντυπωσιακή οθόνη. Εδώ βλέπουμε πως χρησιμοποιεί τη διάταξη rbg stripe (198ppi) που πρόσφατα επανήλθε στο προσκήνιο με την έλευση του Galaxy SII</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div id="attachment_215" class="wp-caption alignleft" style="width: 206px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/galaxy-s2.jpg"><img class="size-full wp-image-215" title="η οθόνη του galaxy s2 από κοντά" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/galaxy-s2.jpg" alt="η οθόνη του galaxy s2 από κοντά" width="196" height="191" /></a><p class="wp-caption-text">Η οθόνη του galaxy SII (217ppi) διαφέρει από το i8910 στο ότι έχει ενσωματωμένο, και όχι από πάνω τον αισθητήρα αφής</p></div>
<div id="attachment_217" class="wp-caption alignleft" style="width: 164px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/logical-pixel.jpg"><img class="size-full wp-image-217" title="logical pixel" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/logical-pixel.jpg" alt="" width="154" height="177" /></a><p class="wp-caption-text">H διάταξη PenTile λειτουργεί με &quot;λογικά&quot; και όχι πραγματικά pixels όπου το κάθε λογικό pixel μοιράζειτα subPixels με το διπλανό του</p></div>
<div id="attachment_216" class="wp-caption alignleft" style="width: 211px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/galaxy-s.jpg"><img class="size-full wp-image-216" title="Η οθόνη του galaxy S από κοντά" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/galaxy-s.jpg" alt="" width="201" height="178" /></a><p class="wp-caption-text">Εδώ βλέπετε την εναλλαγή των subPixels στη διάταξη PenTile στην οθόνη του Galaxy S. H PenTile διάταξη επιτρέπει μεγαλύτερα ppi (233ppi)</p></div>
<div id="attachment_265" class="wp-caption alignleft" style="width: 121px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/N9.jpg"><img class="size-full wp-image-265 " title="N9" src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/N9.jpg" alt="" width="111" height="110" /></a><p class="wp-caption-text">To Nokia N9 έχει pentile AMOLED στα 251ppi</p></div>
<div id="attachment_298" class="wp-caption alignleft" style="width: 188px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/closeupE7.jpg"><img src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/closeupE7.jpg" alt="η οθόνη AMOLED του Ε7 από κοντά" title="E7" width="178" height="177" class="size-full wp-image-298" /></a><p class="wp-caption-text">η οθόνη AMOLED του Ε7 από κοντά. Όπως βλέπετε είναι... plus</p></div>
<p>Συμπέρασμα: το Plus στην οθόνη του Galaxy S II δεν είναι μια νέα τεχνολογία, είναι επιστροφή στην παλιά που εφαρμόστηκε τόσο στο Ν85 όσο και στο ι8910 (update: και στο Ε7) που έχει καλύτερη συνολική ποιότητα εικόνας όμως δεν μπορεί να εφαρμοστεί (μέχρι πρόσφατα - update: ίσως και ακόμα) σε μεγαλύτερα ppi, γι' αυτό και το μέγεθος οθόνης του S II είναι μεγαλύτερο με τον ίδιο αριθμό pixel (800x480). Το ερώτημα που παραμένει καθώς δεν έχω πρόσβαση σε κάποιο Ν8 <del datetime="2011-12-30T11:10:35+00:00">ή  Ε7</del> είναι τι είδος οθόνης έχουν. Αν έχετε ένα από αυτά, σχολιάστε.</p>
<p>update: Μια σύγκριση μεταξύ Ν9 και Ε7 δείχνει πως οι rgb stripe έχουν καλύτερη απεικόνιση χρωμάτων. Οι pentile δεν μπορούν να κρύψουν την ύπαρξη μεγαλύτερου αριθμού πράσινων subpixels ιδιαίτερα στα ουδέτερα γκρι.</p>
<div id="attachment_301" class="wp-caption alignleft" style="width: 310px"><a href="http://outofbounds.gr/blog/wp-content/uploads//2011/10/N9vsE7.jpg"><img src="http://outofbounds.gr/blog/wp-content/uploads//2011/10/N9vsE7-300x264.jpg" alt="" title="N9vsE7" width="300" height="264" class="size-medium wp-image-301" /></a><p class="wp-caption-text">Πάνω βλέπετε το Ν9 και κάτω το Ε7 να παίζουν το ίδιο βίντεο</p></div>
<p>Τα Galaxy Nexus και Note αρχίζουν να ανεβάζουν τον πήχη των dpi στις AMOLED οθόνες όμως χρησιμοποιούν και τα δύο pentile διάταξη. <!-- Μένει ακόμα να ανακαλύψουμε ένα τηλέφωνο με RGB Stripe και περισσότερα από 230ppi για να διαψεύσουμε τη θεωρία μου !--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=210</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Διεπαφή Ανθρώπου-Υπολογιστή</title>
		<link>http://www.outofbounds.gr/blog/?p=206</link>
		<comments>http://www.outofbounds.gr/blog/?p=206#comments</comments>
		<pubDate>Thu, 13 Oct 2011 14:51:03 +0000</pubDate>
		<dc:creator>mike</dc:creator>
				<category><![CDATA[εκτός κατηγορίας]]></category>

		<guid isPermaLink="false">http://www.outofbounds.gr/blog/?p=206</guid>
		<description><![CDATA[Πλέον έχουμε καταλήξει όλοι στο πόσο σημαντικό είναι μια εφαρμογή να έχει καλό interface. Υπάρχουν αρκετοί κανόνες για να επιτευχθεί αυτό, οι οποίοι όμως είναι γενικού χαρακτήρα. Έτσι αποφασίσαμε να δημιουργήσουμε ένα δικό μας κανόνα σε ένα site με προσφορές ( Dealike ) που πρόσφατα υλοποιήσαμε. Στο site αυτό υπάρχουν πολλά φίλτρα αναζήτησης. Μπορεί κάποιος [...]]]></description>
			<content:encoded><![CDATA[<p>Πλέον έχουμε καταλήξει όλοι στο πόσο σημαντικό είναι μια εφαρμογή να έχει καλό interface. Υπάρχουν αρκετοί κανόνες για να επιτευχθεί αυτό, οι οποίοι όμως είναι γενικού χαρακτήρα. Έτσι αποφασίσαμε να δημιουργήσουμε ένα δικό μας κανόνα σε ένα site με προσφορές ( Dealike ) που πρόσφατα υλοποιήσαμε.<br />
Στο site αυτό υπάρχουν πολλά φίλτρα αναζήτησης. Μπορεί κάποιος να ψάξει προσφορές σε κάποιο γεωγραφικό διαμέρισμα και να τις ταξινομήσει αναλόγως την τιμή, την ημερομηνία λήξης κλπ. Επίσης υπάρχουν οι γενικές κατηγορίες που διαχωρίζουν τις προσφορές όπως ταξίδια, διασκέδαση, προϊόντα, φαγητό και άλλα. Ο χρήστης μπορεί ακόμα να κάνει click στο link κάποιου site για να δει τις προσφορές του. Ποια θα ήταν όμως η μορφή αυτών των links  για να περιέχουν όσο το δυνατόν περισσότερη πληροφορία, χωρίς να χρειάζεται να επιβαρύνουμε το χρήστη με επιπλέον δεδομένα στην οθόνη του;<br />
Έτσι , καταλήξαμε πως το μέγεθος αυτών των links θα μπορούσε να συμβολίζει τον αριθμό των προσφορών και το πόσο κόκκινο είναι τον αριθμό των clicks που έχει δεχτεί. Μπορείτε να ρίξετε και μια ματιά στο <a href="http://www.dealike.gr" target="_blank" title="http://www.dealike.gr">http://www.dealike.gr</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.outofbounds.gr/blog/?feed=rss2&#038;p=206</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

