How to install Kinect in Windows 7

The previous years there was only one version of Kinect, the one bundled with X-Box 360. However, nowadays Microsoft releases another version for PC users which includes the license for general commercial use. Apart from this, Microsoft claims that there are hardware differences too, such as “near mode” (enables the depth camera to see objects as close as 40 centimeters in front of the sensor while maintaining accuracy and precision), skeletal tracking control, API improvements, and improved USB support across a range of Windows computers and Windows-specific 10’ acoustic models. Eventually, Kinect for Windows offers the same skeletal tracking quality and recognition as Kinect for Xbox 360 and its price is tagged $100 higher than the XBox's version.

Plug and Play doesn't work!

The first time you connect the Kinect device to your PC, Windows 7 will automatically search for the drivers and particularly for the Xbox NUI Motor hardware. Even though Windows 7 usually do detect the appropriate software, this is not the case for Kinect.


STEP 1: Install SDK v1.6 or newer

Although Microsoft do not recommend the use of Kinect for Xbox 360 in the development of Kinect for Windows applications, its SDK also seems to work fine with Kinect for XBox

So, instead of installing OpenNI, PrimeSense, NINE or OpenKinect, I strongly recommend you to try first the Kinect's Windows SDK v1.6. Once the SDK has completed installing successfully, ensure the Kinect sensor is plugged into an external power source and then plug the Kinect sensor into the PC's USB port. The drivers will load automatically.


STEP 2: Install Developer Toolkit v1.6 or newer

Secondly, you have to install the Windows Developer Toolkit v1.6. To view the tools or samples, install stamples, or explore other resources, start the Developer Toolkit Browser via the start menu: Kinect for Windows SDK 1.6 -> Developer Toolkit Browser v1.6 (Kinect for Windows).


How to install Kinect in Macbook Air (Mountain Lion)

Requirements

You are going to need Macports. This is quite a useful utility that manages all the terminal-based tools automatically. Go to this link and install the *.dmg package. Just make sure you don't have similar utilities already installed, like Homebrew or Fink, because you might have troubles, such as version mismatches at /usr/bin . Download and Install via Macports:
 sudo port install git-core  
 sudo port install libtool  
 sudo port install libusb +universal  
The "plus universal" parameter is used for x86 (aka 32-bit) libraries.

 

Install OpenKinect

OpenKinect is fuckin great open source project for Kinect owners that want to play, code, create, develop and generally have sex with computer vision research subjects. Createa folder under Documenter or whatever and clone the project from GitHub.
 git clone git://github.com/OpenKinect/libfreenect.git
In case you don't have cmake installed, just do it: Open the GUI version and configure and generate the necessary files for XCode (supposing you have XCode already installed. Don't ya?). Then browse into the build directory and run the libfreenect.xcodeproj. Normally, you gonna see the source code project inside Xcode interface. Then apply any "must-click-to-proceed" messages and press CMD+B (aka Build and Compile). Now go to the blah/bin/Debug folder and there will be these executables: cppview glview record regview glpclview hiview regtest tiltdemo Ok now, plug in your Kinect sensor via USB and have sex with object detection. Also, feel free to make the generally available through the /usr/bin directory. If that's the case go to /blah/bin/Debug folder and copy-paste the files to /usr/bin dir.

sudo cp * /usr/bin/
Now run glview




Ok, now let's make some fun!

Install OpenNI

What's this, you may ask. This is an open source framework – the OpenNI framework – which provides an application programming interface (API) for writing applications utilizing natural interaction. This API covers communication with both low level devices (e.g. vision and audio sensors), as well as high-level middleware solutions (e.g. for visual tracking using computer vision). That has been told, download the latest UNSTABLE source code for Mac/Linux at Select OpenNI Binaries in the first drop down menu Select "Unstable" in the second drop down menu OpenNI Unstable Build for Mac OS X 10.7 (latest version) Click on "Download" Ok, when you download the file, extract it under the base OpenKinect folder (or whatever you want) and run the install script.
sudo ./install.sh

Normally, you gonna see


Installing OpenNI
****************************

copying shared libraries...OK
copying executables...OK
copying include files...OK
creating database directory...OK
registering module 'libnimMockNodes.dylib'...OK
registering module 'libnimCodecs.dylib'...OK
registering module 'libnimRecorder.dylib'...OK
creating java bindings directory...OK
Installing java bindings...OK

*** DONE ***
Okie dokie

Install SensorKinect

Download the latest version of the Unstable SensorKinect https://github.com/avin2/SensorKinect and extract it in your kinect folder. Go to the "bin" folder. Extract the file "SensorKinect093-Bin-MacOSX-v5.1.2.1.tar.bz2" in the same bin folder. Terminal, go to the bin folder and run the command:

sudo ./install.sh

you gonna see:


Installing PrimeSense Sensor
****************************

creating config dir /usr/etc/primesense...OK
copying shared libraries...OK
copying executables...OK
registering module 'libXnDeviceSensorV2KM.dylib' with OpenNI...OK
registering module 'libXnDeviceFile.dylib' with OpenNI...OK
copying server config file...OK
setting uid of server...OK
creating server logs dir...OK

*** DONE ***

Install PrimeSense NITE

Download the latest version of PrimeSense on: Select OpenNI Compliant Middleware Binaries in the first drop down menu Select "Unstable"in the second drop down menu PrimeSense NITE Unstable Build for Mac OS X 10.7 (latest version) Click on "Download".

Extract the tarball and run the installer script.

sudo ./install.sh
Normally you will get:
Installing NITE
***************

Copying shared libraries... OK
Copying includes... OK
Installing java bindings... OK
Installing module 'Features_1_3_0'...
ls: Features_1_3_0/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_3_1'...
ls: Features_1_3_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_4_1'...
ls: Features_1_4_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_4_2'...
ls: Features_1_4_2/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'...
Registering module 'libXnVFeatures_1_5_2.dylib'... OK
Copying XnVSceneServer... OK
Installing module 'Features_1_5_2'
ls: Hands_1_3_0/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_3_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_4_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_4_2/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_5_2.dylib'...OK
Adding license.. OK

*** DONE ***

Run some example

Copy all the xml files from NITE Data to the SensorKinect Data folder. I prefer the terminal way, you may use drag n drop GUI method.

cp Data/*.xml ../SensorKinect/Data/

Now browse onto the Samples dir ( /NITE/Samples/Bin/x64-Release) and launch the the samples. For example let's run the Sample-SceneAnalysis.



Somehow (magically) the Kinect sensor detected myself (body) as blue, letting the background motion in grey. Let's try another one. Let's try the PointViewer! Clap your hands or make a wave-like gesture and hand tracking is about to begin.

OSCeleton

OSCeleton is a proxy that sends skeleton information collected from the kinect sensor via OSC, making it easier to use input from the device in any language / framework that supports the OSC protocol. So, clone the project hosted at GitHub, but make sure your are in OpenNI directory.
cd OpenNI
git clone https://github.com/Sensebloom/OSCeleton.git
now compile it
make -j4
I use -j4 for my 4 cores and way faster compiling ;) If you have HT enabled, try -j8 (in case of four native cores plus 4 visual threads). If everything worked, you can now test OSCeleton. In the folder "Sensebloom-7307683-OSCeleton" double-click the executable "OSCeleton" or open it in Terminal.Keep a distance of two steps away from Kinect and stay in position of calibration, with both arms raised, as shown below:

Thanks to Alexandra leaving me mess around with her room :PPP

You should see in terminal:

Initializing...
Configured to send OSC messages to 127.0.0.1:7110
Multipliers (x, y, z): 1.000000, 1.000000, 1.000000
Offsets (x, y, z): 0.000000, 0.000000, 0.000000
OSC Message format: Default OSCeleton format
Initialized Kinect, looking for users...

New User 1
Calibration started for user 1
Calibration complete, start tracking user 1

Install Processing and libraries

Go to then drag and drop the application into /Applications dir in order to have it installed. The mac way ;)

Download examples

Go to GitHub and clone the OSceleton examples.
https://github.com/Sensebloom/OSCeleton-examples.git
then go to cd OSCeleton-examples/processing/MotionCapture3D/
cd OSCeleton-examples/processing/MotionCapture3D/
and create a libraries folder
mkdir libraries
Inside that folder extract the two libraries need oscP5 - pbox2d - Ok now run the OSceleton again in order to calibrate yourself (again) and in the same time launch MotionCapture3D.pde with Processing. Click play and voila: Thanks to for the tutorial and ideas.

Πόσο γρήγορος είναι το Linux PC σου;

Audio Encoding

Θα τρέξουμε δύο benchmarks τα οποία θα κάνουν encoding ένα κομμάτι μουσικής WAV σε FLAC (lossless format) και MP3 (με τον LAME encoder). Σκοπός μας είναι να δούμε πόσο γρήγορα το συστημά μας θα εκτελέσει αυτή τη μετατροπή, από μία μορφή ήχου σε μία άλλη.



AI Computing

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


Κάνοντας compile από Source

Άλλο ένα benchmark που είναι CPU intensive - δηλαδή απασχολεί κυρίως τον επεξεργαστή παρά το υπόλοιπο σύστημα. Εδώ θα κάνουμε compile κάποια γνωστά Open Source προγράμματα και θα μετρήσουμε τον χρόνο που χρειάστηκε για την μεταγλώτισή τους. Σίγουρα θα έχει μεγάλο ενδιαφέρον για τους φίλους που χρησιμοποιούν Gentoo. Επίσης, ένα generic τέτοιο benchmark θεωρείται το CompileBench (ακόμα δεν έχει φτάσει στην έκδοση 1.0).


Kernel

Θα τρέξουμε μία σειρά από benchmarks τα οποία σχετίζονται (ή μαλλον θα ήταν καλύτερο να πούμε ότι επηρεάζονται) με τον εκάστωτε Kernel της διανομής μας. Στην ουσία, εδώ περιμένουμε να δούμε μία μεγάλη διαφορά ανάμεσα στους δύο kernels.


Postmark

Πρόκειται για ένα benchmark της εταιρείας NetApp το οποίο σχεδιάστηκε για να εξομοιώνει δικτυακές συνθήκες φόρτου ενός mail server (ή γενικότερα ενός fileserver) που επεξεργεγάζεται ένα τεράστιο αριθμό αρχείων μικρού μεγέθους, όπως για παράδειγμα e-mails, νέα και e-commerce. Όπως συμβαίνει και στα e-mails, άλλωτε γράφετε 1 παράγραφο, και άλλωτε τυγχαίνει να αρκεί μία πρόταση. Συνεπώς το μέγεθος ενός αρχείου e-mail μπορεί να ξεκινάει από 1KB και να φτάνει μέχρι μερικά εκατοντάδες KB, αλλα σαν σύνολο αποτελούν ένα τεράστιο όγκο δεδομένων. Για παράδειγμα, ένας μεταξύ των πολλών mail servers που διαθέτει στην κατοχή της η Google, καλείται να επεξεργαστεί την ημέρα περίπου 1 εκατομ. e-mails, δηλαδή περίπου 41.667 e-mails / ώρα. Καταλαβαίνετε λοιπόν ότι πλέον υπάρχει ανάγκη για τεχνολογίες data mining που αναλαμβάνουν να στήσουν ένα workstation που θα επεξεργάζεται τον συγκεκριμένο τύπο δεδομένων κατά τον βέλτιστιο δυνατό τρόπο.

Τρέχοντας το Postmark μπορούμε να αξιολογήσουμε το κατά πόσο μπορεί ο υπολογιστής μας να βγάλει εις πέρας τα καθήκοντα ενός σημερινού mail server. Πιο συγκεκριμένα, εξετάζουμε την ταχύτητα ανάγνωσης/εγγραφής των αρχείων -- ένας ακόμα τρόπος για να αξιολογήσουμε το file allocation του filesystem (πχ ext4, btrfs, xfs, jfs κ.α.). Για να μπορέσει το Postmark να δημιουργήσει παρόμοιες συνθήκες, φτιάχνει ένα μεγάλο workload από txt αρχεία τυχαίου (αλλά μικρού) μεγέθους, και αρχίζει να κάνει transactions (δημιουργήσει, διαβάσει, γράψει, διαγράψει, ανοίξει, αποθηκεύσει) μεταξύ των αρχείων. Το συγκεκριμένο profile που τρέξαμε εκτελεί 25.000 transactions με workload 500 αρχείων μεγέθους από 5 μέχρι 512 kilobytes.

Το αποτέλεσμα του Postmark θα μας δείξει πόσα transaction μπορεί να βγάλει εις πέρα το filesystem ανά δευτερόλεπτο. Όσο περισσότερα TPS (Transcations per Second) τόσο καλύτερες επιδόσεις.



RAMspeed/SMP

To RAMSpeed, όπως δηλώνει και το όνομά του, είναι ένα benchmark που μετράει την ταχύτητα της μνήμης RAM. To /SMP δηλώνει ότι δεν είναι single-threaded εφαρμογή, πράγμα που σημαίνει ότι εάν έχετε περισσότερους από έναν πυρήνες, τότε το RAMspeed θα τους λάβει υπόψην του και θα τους χρησιμοποιήσει.

Τι σχέση έχει η RAM με τους πυρήνες του επεξεργαστή; Πρακτικά καμία, αλλά αν σκαλίσετε λίγο under the hood, θα δείτε πως οι σύγχρονοι πολυπήρυνοι επεξερξαστές διαθέτουν τον ελεγκτή μνήμης (IMC - Integrated Memory Controller) μέσα τους, και όχι πάνω στην μητρική όπως συνηθιζόταν παλαιότερα (στα τσιπάκια Northbridge/Southbridge). Άρα, αφού πλέον ο επεξεργαστής είναι αυτός που καθορίζει τις RAM και τα κανάλια της (dual channel, triple channel, quad channel), είναι λογικό για το RAMspeed να το λαμβάνει υπόψην του. Συγκεκριμένα, αν και οι παλαιότερες εκδόσεις του προγράμματος είχαν γραφτεί σε C, πλέον υπάρχει αρκετά καλύτερο optimization σε i386 πλατφορμές με κώδικα γραμμένο σε Assembly.

Το αποτελέσμα του RAMspeed θα μας δείξει πόσο γρήγορη είναι η RAM μας. Θα φτιάξει μία array με συγκεκριμένο μέγεθος και θα αρχίζει να γεμίζει kilobytes εκθετικά με δυνάμεις του 2. Όσο πιο γρήγορα, τόσο το καλύτερο. Η μονάδα μέτρησης είναι το MB/s (MB ανά δευτερόλεπτο).


Filesystem benchmark

Ext4, ext3, reseirfs κλπ . Βάλτε πάνω το FS Mark και μετρήστε τις επιδόσεις. Είναι τελείως gtp σε σχέση με τους νέους δίσκους, αλλά είναι ένα (έστω και χάλια) reference.


C-Ray

Το C-Ray αποτελεί έναν απλό raytracer που σχεδιάστηκε για να αξιολογίσει την επίδοση floating-point του επεξεργαστή. Γενικότερα, η μέθοδος της ακτινικής καταγραφής (ray tracing) χρησιμοποιεί την μαθηματική τεχνική προσομοίωσης Monte Carlo για να δώσει ένα στατιστικό αποτέλεσμα των rays που θα αποτελέσουν το μοντέλο του σήματος. Το συγκεκριμένο πρόγραμμα, υπολογίζει 8 rays ανά pixel με σκοπό να κατασκευάσει μία εικόνα ανάλυσης 1600x1200.

Όσο πιο γρήγορα την κατασκευάσει, τόσο καλύτερο επεξεργαστή έχουμε. Άρα εδώ θέλουμε να δούμε όσο το δυνατόν πιο μικρό νούμερο (seconds).



Apache Benchmark

Βλέποντα το όνομα Apache, φαντάζομαι ότι αρκετοί έχετε ήδη καταλάβει περί τίνος πρόκειται. Ο καλύτερος web server του διαδικτύου, Apache, αποτελεί την Νο1 επιλογή για πολλά websites που στήνονται καθημερινά. Συνεπώς, δεν θα μπορούσαμε παρά να μην τρέξουμε ένα benchmark το οποίο θα μας δίνει κάποια στοιχεία για το πόσο καλά αποδίδει ο Apache στο σύστημά μας.

Το σενάριο είναι το εξής: αρχίζει μία "επίθεση" από 700.000 requests προς τον υπολογιστή μας, όπου κάθε 100 requests έρχονται ταυτόχρονα.

Το αποτέλεσμα του Apache Benchmark θα μας δείξει πόσα από αυτά τα requests μπορεί να απαντήσει ο υπολογιστής μας ανα δευτερόλεπτο. Προφανώς, όσο περισσότερα, τόσο το καλύτερο.

Υπαρχουν κι αλλα, όμως προς το παρών θα ψάξω αυτά να δω τι παίζει. Εσείς τι benchmarks χρησιμοποιείτε;

Βρίσκοντας bugs

Ξεκινώντας ως νέο μέλος της BugSquad, το πρώτο και το πιο εύκολο πράγμα που έχετε να κάνετε είναι να ψάξετε και βρείτε καινούρια bugs τα οποία δεν έχει προλάβει να τα δει κάποιος άλλος πριν από εσάς, και να κάνετε την αξιολόγησή σας. Λέγοντας αξιολόγηση εννοώ, πχ

εχουν επαρκείς πληροφορίες για να μπορέσει να τα διορθώσει κάποιος;
πόσο σημαντικό είναι το πρόβλημα, τι προτεραιότητα θα του θέτατε;
έχει ξανα αναφερθεί ως bug;

Ως αρχάριος, το καλύτερο είναι να βρείτε πρώτος τα bugs που δεν έχουν γίνει triage από άλλους για να μπείτε πιο εύκολα στο όλο κλίμα.

Πώς βρίσκω untriage bugs;

Θα χρησιμοποιήσουμε την "προχωρημένη αναζήτηση" του Bug Tracking System στο Launchpad. Κάντε λοιπόν κλικ εδώ και ψάξτε με τα παρακάτω κριτήρια:
  • Status: New
  • Importance: Undecided
  • Assigned to: Nobody


ή (δεύτερος τρόπος)

μπορείτε πολύ απλά κάνετε κλικ εδώ και να βρείτε πρώτος όλα τα untriaged bugs του Ubuntu.

OGRE στο Mac

Είναι αργά και τα @@ μου έχουν ήδη σπάσει... τελικά όμως τα κατάφερα, οπότε θα κοιμηθώ ήσυχος στο κρεββάτι μου χωρίς να βλέπώ όνειρα με κώδικες και errors και γενικά από την στιγμή που στο Mac OS X κάνεις ένα απλό drag n drop, όταν αρχίζει το compiling τα πράγματα περιπλέκονται... και γίνονται πιο δύσκολα και από Gentoo.

Και αυτό γιατί δεν υπάρχει documentation, ειδικά σε projects που είναι open source και η Apple δεν τα έχει σε μεγάλη υπόληψη. Ένα τέτοιο project πρέπει να είναι και το OGRE -- διαφορετικά δεν εξηγείται. Έχω "φάει" το internet σήμερα, διαβάζοντας απο comments και forum posts μέχρι wiki και documentations, και τελικά την λύση πάλι μόνος μου την βρήκα.

Το πρόβλημα είναι ότι το OGRE για πρέπει να γίνει compile... για αυτό όταν πάς να το κατεβάσεις εδώ σε ρωτάει τι θέλεις:

  1. Το pre-compiled (που θα το κάνεις μόνο build ; )
  2. Το source που θα το κάνεις όλο μόνος σου
Αφού λοιπόν υπάρχει precompiled εκδοχή, αρχικά είπα να δοκιμάσω το ότι πιο εύκολο. Προσοχή βέβαια να κατεβάσετε την σωστή έκδοση. Εγώ έκανα λάθος (βλάκας) και κατέβασα την έκδοση για iOS, αντί για mac OS X. Βέβαια μικρό το κακό αφού το κατάλαβα αμέσως μετά αφού κατέβηκε και είδα ότι το build ήταν προορισμένο για iPhone και iPad. Συνεπώς, την 2η φορά κατέβασα την σωστή έκδοση, και συγκεκριμένα την OGRE 1.8.0 SDK for Mac OS X (Μάιος) με το μειονέκτημα ότι η source είναι πάντα μερικούς μήνες νεώτερη ως 1.8.1 RC (Σεπτεμ). Τέσπα, klein mein λέω, ας μην έχω και το latest αρκεί να παίξει.

Ξεκινάω λοιπόν, φορτώνω το dmg, το κάνω extract όπως λέει και μετά μου πετάει το θεϊκό μύνημα: Πρέπει να έχεις εγκατεστημένο το cmake. Και εδώ είναι τώρα που γαμιέται όλος ο Δίας. Έχοντας λοιπόν εγκαταστήσει το homebrew δίνω ο χριστιανός (λέμε τώρα) την εντολή να μου περάσει το cmake (brew install cmake --universal). Όλα καλά, βλέπω ότι μου πέρασε την νεώτερη έκδοση 2.8-9 και την έκανε και compile. Ξεκινάω λοιπό να φορτώσω το project του OGRE όπως δηλώνουν οι οδηγίες.... έλα που ομως με πατούσε σφάλμα...

Ώς πρώτη μου φορά που ανοίγω το XCode 4.5 -- γιατι με αυτό πρέπει να φορτώσεις το OGRE -- δεν είχα ιδέα που μου παν τα τέσσερα. Μέχρι να εξικοιωθώ και να μπορώ να αλλάζω πράματα όπως target, debug release και αρχιτεκτονική μου πήρε κανα 30λεπτο. Anyway, δεν είχα ιδέα τι σκατά ήταν το σφάλμα και άρχισα να googlάρω... και κατέλειξα στο ότι το αναθεματισμένο το cmake δεν πρέπει να είχε εγκαταστηθεί σωστά.

Βλέπεις στο site έδινε έτοιμο dmg file το οποίο δεν είχα προτιμήσει (πάρταααααα μαλάκα) αλλά προτίμησα την πιο ψαγμενη λύση με το brew. Τέλος πάντων, με μία εντολή το πετάω έξω το cmake (brew uninstall cmake) και λέω να δοκιμάσω το dmg. Πάω λοιπόν στην επίσημη σελίδα του cmake και κατεβάζω την έκδοση Mac OSX 64/32-bit Universal (for Intel, Snow Leopard/10.6 or later, δηλαδή την cmake-2.8.9-Darwin64-universal.dmg. Η εγκατάσταση γίνεται πανεύκολα κάνοντας drag n drop και ως διαμαγείας έχουμε γραφικό περιβάλλον για το cmake. wow!

Υπάρχει ένα πρόβλημα όμως... οι καλοί προγραμματιστές δεν έχουν κάνει σωστά την δουλειά τους. Συγκεκριμένα, κατά την εγκατάσταση του cmake dmg σας ρωτάει αν θέλετε να εγκαταστήσει και το command line tool ώστε να δουλεύετε το cmake από bash shell. Εδώ γαμιέται πάλι ο Διας.. βλέπετε, αν έχετε εγκαταστήσει μία προηγούμενη έκδοση του cmake για terminal, πχ το cmake-2.8-8 τότε έχουν δημιουργηθεί symlinks προς το /usr/bin/cmake όπου ταυτίζονται με αυτή την έκδοση. Κανονικά, θα έπρεπε βάζοντας μία καινούρια έκδοση του cmake να αναβαθμίζει και τα symlinks ώστε να βλέπουν την καινούρια έκδοση... δυστυχώς όμως το dmg file δεν έχει σωστά γραμμένο script με αποτέλεσμα να μην μπορεί να κάνει Overwrite τα symlinks λόγω permissions...  πετώντας το μύνημα:

Failed to remove file installation may be incomplete: /usr/bin/ccmake

Άρα ο νουμπάς χρήστης mac καταλήγει έχοντας γραφικό περιβάλλον cmake-2.8-9 και τερματικό cmake-2.8-8 ή ακόμα παλαιότερο... Πιστεύω δεν χρειάζεται να εξηγήσω τι τριμπούρδελο μπορεί να γίνει έτσι και αν ανοίξετε project με cmake (όπως είναι το 99% των C/C++) στο mac.

Η λύση είναι να αλλάξετε εσείς τα symlinks με το χέρι. Δεν κάθησα να γράψω ένα καλό script, αλλά επειδή μου είχαν σπάσει τα @@ έγραψα κάτι πολύ πολύ πρόχειρο που όμως έκανε την δουλειά μου.



#!/bin/bash

osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-9.app/Contents/bin/cmake\" /usr/bin/cmake" with administrator privileges'
osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-9.app/Contents/bin/ccmake\" /usr/bin/ccmake" with administrator privileges'
osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-9.app/Contents/bin/cmakexbuild\" /usr/bin/cmakexbuild" with administrator privileges'
osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-9.app/Contents/bin/cpack\" /usr/bin/cpack" with administrator privileges'
osascript -e 'do shell script "ln -sf \"/Applications/CMake 2.8-9.app/Contents/bin/ctest\" /usr/bin/ctest" with administrator privileges'

Αυτό που κάνει δηλαδή είναι να βάζει symlink της GUI version στην terminal based version. Έτσι όπως το έγραψα θα σας ζητήσει 5 φορές τον κωδικό root :P . Μία καλή επιλογή είναι να βάλω μία μεταβλητή $cmake_ver όπου θα ισχύει αυτόματα για όλα τα ln -sf overwrites. Τέλος πάντων, αυτή είναι μία καλή λύση guys.

Ανοίγω λοιπόν το cmake γραφικό και κάνω ότι λένε οι οδηγίες για compile -- ναι για compile άσχετα αν έχουμε επιλέξει το pre-compiled way. Θέλουμε να αλλάξουμε τα settings και το configuration του project σύμφωνα με τα δικά μας.

  • Launch CMake via Applications
  • In the "Where is the source code" box, type or browse to the root directory of your OGRE source (the one that contains the OgreMain folder)
  • In the "Where to build the binaries" box, type or browse to any folder you like - this will be where the build output will go (libraries, headers, dlls & sample exes). The folder does not have to exist yet. Note that you can run this process more than once with different output folders if you want (but we won't complicate matters now)
  • Hit the 'Configure' button near the bottom of the screen
  • Pick 'Xcode' as the generator and opt to use native compilers
  • Answer 'Ok' when asked if you want to create the build directory
  • Wait for the configure process to finish
  • The screen will now have a bunch of configuration options on it, which will be red (this is to indicate this is the first time you've seen them). You can see the potential for customising your build here, but for now just click the 'Configure' button again
  • The values will turn grey, and the 'Generate' button at the bottom will now be enabled. Click 'Generate'
  • Build files will now be generated in the location you picked
Το επόμενο πρόβλημα βρίσκεται στο CMakeScripts/ReRunCMake.make το οποίο περιέχει τα symlinks του project προς το σύστημά σας. Η μαλακία εδώ είναι ότι το OGRE που επιλέξαμε είναι pre-compiled το οποίο σημαίνει πως έχει γίνει compile σε άλλο mac ήδη, άρα το αρχείο ReRunCMake.make περιέχει τα symlinks του εκάστωτε μηχανήματος. Για παράδειγμα εμένα είχε σε όλα την έκδοση 8.8 του cmake και μάλιστα σε διαφορετικό directory. Άρα πάλι με έναν  texteditor κάνει replace τα πάντα όλα σύμφωνα με το σύστημά... το σωστό πλέον αρχείο ήταν αυτό: 

# Generated by CMake, DO NOT EDIT
CMakeFiles/cmake.check_cache: \
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCCompiler.cmake.in\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCCompilerABI.c\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCInformation.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCXXCompiler.cmake.in\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCXXCompilerABI.cpp\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCXXInformation.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeCommonLanguageInclude.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeDetermineCCompiler.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeDetermineCXXCompiler.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeDetermineCompilerABI.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeDetermineCompilerId.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeDetermineSystem.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeFindBinUtils.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeFindXCode.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeGenericSystem.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeParseArguments.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeParseImplicitLinkInfo.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeSystem.cmake.in\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeSystemSpecificInformation.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeTestCXXCompiler.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/CMakeTestCompilerCommon.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Compiler/GNU-C.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Compiler/GNU-CXX.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Compiler/GNU.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/FindBoost.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/FindPackageMessage.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/FindPkgConfig.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Platform/Darwin-GNU-C.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Platform/Darwin-GNU-CXX.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Platform/Darwin-GNU.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Platform/Darwin.cmake\
/Applications/CMake\ 2.8-9.app/Contents/share/cmake-2.8/Modules/Platform/UnixPaths.cmake\
$(SRCROOT)/CMakeFiles/CMakeCCompiler.cmake\
$(SRCROOT)/CMakeFiles/CMakeCXXCompiler.cmake\
$(SRCROOT)/CMakeFiles/CMakeSystem.cmake\
$(SRCROOT)/CMakeLists.txt\
$(SRCROOT)/Samples/BSP/CMakeLists.txt\
$(SRCROOT)/Samples/BezierPatch/CMakeLists.txt\
$(SRCROOT)/Samples/Browser/CMakeLists.txt\
$(SRCROOT)/Samples/CMakeLists.txt\
$(SRCROOT)/Samples/CameraTrack/CMakeLists.txt\
$(SRCROOT)/Samples/CelShading/CMakeLists.txt\
$(SRCROOT)/Samples/Character/CMakeLists.txt\
$(SRCROOT)/Samples/Compositor/CMakeLists.txt\
$(SRCROOT)/Samples/CubeMapping/CMakeLists.txt\
$(SRCROOT)/Samples/DeferredShading/CMakeLists.txt\
$(SRCROOT)/Samples/Dot3Bump/CMakeLists.txt\
$(SRCROOT)/Samples/DualQuaternion/CMakeLists.txt\
$(SRCROOT)/Samples/DynTex/CMakeLists.txt\
$(SRCROOT)/Samples/FacialAnimation/CMakeLists.txt\
$(SRCROOT)/Samples/Fresnel/CMakeLists.txt\
$(SRCROOT)/Samples/Grass/CMakeLists.txt\
$(SRCROOT)/Samples/Instancing/CMakeLists.txt\
$(SRCROOT)/Samples/Isosurf/CMakeLists.txt\
$(SRCROOT)/Samples/Lighting/CMakeLists.txt\
$(SRCROOT)/Samples/NewInstancing/CMakeLists.txt\
$(SRCROOT)/Samples/OceanDemo/CMakeLists.txt\
$(SRCROOT)/Samples/ParticleFX/CMakeLists.txt\
$(SRCROOT)/Samples/ParticleGS/CMakeLists.txt\
$(SRCROOT)/Samples/SSAO/CMakeLists.txt\
$(SRCROOT)/Samples/ShaderSystem/CMakeLists.txt\
$(SRCROOT)/Samples/Shadows/CMakeLists.txt\
$(SRCROOT)/Samples/SkeletalAnimation/CMakeLists.txt\
$(SRCROOT)/Samples/SkyBox/CMakeLists.txt\
$(SRCROOT)/Samples/SkyDome/CMakeLists.txt\
$(SRCROOT)/Samples/SkyPlane/CMakeLists.txt\
$(SRCROOT)/Samples/Smoke/CMakeLists.txt\
$(SRCROOT)/Samples/SphereMapping/CMakeLists.txt\
$(SRCROOT)/Samples/Terrain/CMakeLists.txt\
$(SRCROOT)/Samples/TextureArray/CMakeLists.txt\
$(SRCROOT)/Samples/TextureFX/CMakeLists.txt\
$(SRCROOT)/Samples/Transparency/CMakeLists.txt\
$(SRCROOT)/Samples/VolumeTex/CMakeLists.txt\
$(SRCROOT)/Samples/Water/CMakeLists.txt\
$(SRCROOT)/cmake/FindOGRE.cmake\
$(SRCROOT)/cmake/FindOIS.cmake\
$(SRCROOT)/cmake/FindPkgMacros.cmake\
$(SRCROOT)/cmake/OgreAddTargets.cmake\
$(SRCROOT)/cmake/OgreConfigTargets.cmake\
$(SRCROOT)/cmake/PreprocessorUtils.cmake
 /Applications/CMake\ 2.8-9.app/Contents/bin/cmake -H$(SRCROOT) -B$(SRCROOT)

Στην συνέχεια (όχι δεν τελειώσαμε) βάζουμε το Ogre.framework που βρίσκεται μέσα στο /lib/Release/Ogre.framework και το κάνω copy στο /Library/Frameworks  του συστήματος.

Στο καπάκι, κατεβάζω τα Command Line Tools για το Xcode και τα κάνω εγκατάσταση. Μιλώντας περί Xcode και αφού βάλω τα cmd tools κάνω μία αλλαγή για το σύστημα: sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

Στα καπάκια κάνω install και το ComputerGraphics (aka CG) ToolKit της nVIDIA από εδώ.

Πλέον νομίζω ότι μπορώ να ανοίξω το OGRE.xcodeproj το οποίο όμως βρίσκεται όχι στο OgreSDK αλλά στο OgreSDK/Build (τον κατάλογο που μου έφτιαξε το γραφικό περιβάλλον του cmake). Μόλις το ανοίξω περίμένω κανα 5-10 λεπτο να κάνει index καμιά 300αρια αρχεία . Μόλις το κανει πρέπει να έχω ένα κίτρινο θαυμαστικό, το οποίο μου λέει (αν το πατήσω) Validate Project Settings, Update to Recommended Settings. Πατάω ναι να το κάνει (δηλαδή να περάσε το configuration του cmake) και κάνω πλέον Build. Θα βγάλει άπειρα warning αλλά θα κάνει επιτυχημένο built. Σε περίπτωση που πετάξει error ψάξτε το αρχείο CMakeScripts/ReRunCMake.make το οποίο θα φταίει κατά 99%.

Πλέον μπορείτε να πάτε στο OgreSDK/bin/debug και να τρέξετε την εφαρμογή που SampleBrowser.app

Τι γαμάτο! Παίζει!

Αμ δε! ΑΜ ΔΕ! Το πρόβλημα είναι ότι αυτή η precompiled έκδοση του Ogre βλέπει μόνο τα πακέτα που είχε όταν έγινε compile, για παράδειγμα το OSI και κάτι άλλα δεν τα διαβάζεις κάν ότι υπάρχουν στο σύστημά μου, με αποτέλεσμα να μην μπορώ να τα χρησιμοποιήσω. Άρα η μόνη λύση μου είναι ... compile from source.

Αφού λοιπόν διάβαζα περίπου 2 μέρες για τα dependencies και πως να τα βάλω, τελικά βρήκα ένα γαμάτο αποθετηριο που το διατηρούν για αυτό ακριβώς τον λόγο. Επειδή δεν ήταν στο github αλλά στο mercury κατεβασα το αντιστοιχο πρόγραμμα από το brew και στο καπάκι το έκανα clone στο mac. Μετά από μερικά λεπτά τα είχα όλα έτοιμα. Δυστυχώς το compile δεν έγινε με την πρώτη, αλλά μετά από αρκετές προσπάθειες βρήκα την άκρη και το έκανα compile!!!! Fuck yeah!

Πάλι όμως υπάρχει πρόβλημα... ναι γαμώ τον Δία και το μουνί της μάνας του... πάλι πρόβλημα! Αυτή την φορά, το project για compile από source δεν είχε ενταγμένα τα targets για samples και τον SampleBrowser app με αποτελεσμα να μην παράγεται κανένα app για mac. Πηρες ενα project, το έκανες compile και αυτο ήταν... καθεσαι σαν μαλακας τωρα και το κοιτάς...

Διαβάζω λοιπόν ότι πρέπει να διαβάσω άλλες τόσες μέρες για να βρω πώς το κάνω αυτό αφού το Xcode είναι ένα μπουρδέλο και μισό. Εννοείται δε ότι το Xcode 4.5 δεν έχει καμία σχέση με το Xcode 3.5. Οπότε όσα guides βρήκαν ήταν το λιγότερο outdated....

Με αυτά και μα αυτα λοιπόν, σκέφτομαι να δω τι παίζει σε Ubuntu και OGRE. Αραγε θέλει 1 εβδομάδα προετοιμασία;

One word...

sudo apt-get install libogre-dev



Ta sxolia dika sas

Homebrew

Είναι ένα πολύ γαματο εργαλείο φτιαγμένο για να κάνει την ζωή σας εύκολη στον mac. Για παράδειγμα όταν θέλετε μερικά αργαλεία, κυρίως open source τα οποία όμως δεν είναι διαθέσιμα για mac, η λύση είναι μία: homebrew

εγκαταστήστε το XCode
κάντε register ως Apple Developer κατεβάστε το Command Line Tools for Xcode


 Ωραία, τώρα είμαστε έτοιμοι να εγκαστήσουμε το Homebrew δίνοντας:

ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)


Περισσότερες πληρ θα βρείτε εδώ: http://mxcl.github.com/homebrew/


Πώς να γίνεις μέλος της BugSquad Team του Ubuntu

Για να γίνεις μέλος της ομάδας BugSquad χρειάζεται να κάνεις τρία πράγματα:
  1. Να υπογράψεις ψηφιακά ότι θα τηρείς τον κώδικα δεοντολογίας του 
  2. Ubuntu Να διαβάσεις τις οδηγίες που θα σου δώσουν για Triage 
  3. Να κάνεις subscribe στην mailing list της ομάδας

Υπογράφοντας ψηφιακά

Για να υπογράψεις (γενικότερα) πρέπει να έχεις έναν στυλό και μία υπογραφή η οποία σε χαρακτηρίζει και σε δεσμεύει σαν άτομο. Στον κόσμο των υπολογιστών έχουμε ψηφιακές υπογραφές, ή για να το πω πιο σωστά έχουμε κλειδιά. Το κλειδι που χρειάζεται να φτιάξουμε λέγεται OpenPGP (ή με εναλλακτικό όνομα GNU Privacy Guard). Με αυτό το κλειδί μπορεί να υπογράφετε σε έγγραφα, e-mails, αρχεία και γενικά να το χρησιμοποιείτε σαν την προσωπική σας ηλεκτρονική υπογραφή.

Το OpenPGP key αποτελείται από δύο μέρη:
  1. Public key: το οποίο το μοιράζεστε με τον υπόλοιπο κόσμο 
  2. Private key: το οποίο το κρατάτε κρυφό μόνο για να τον εαυτό σας. 

Συνδιάζοντας τα δύο παραπάνω κλειδιά, θα πάρετε το OpenPGP κλειδί που αποτελεί την ψηφιακή υπογραφή σας. Αυτή είναι που ζητάει το Launchpad και ο λόγος που την ζητάει είναι για πιστοποιήσετε τον εαυτό σας ψηφιακά.

Κάντε Register το OpenPGP key σας στο Launchpad

Μην δοκιμάσετε τον γραφικό τρόπο -- τουλάχιστον σε εμένα δεν δούλεψε. Σας προτείνω να ακολουθήσετε άφοβα τις οδηγίες που λέει εδώ στο τερματικό. Εν ολόγης φτιάχνετε κλειδί, το κρυπτογραφείτε με ένα passphrase και το στέλνετε στον keyserver του Ubuntu. Στην συνέχεια ζητάτε από το launchpad να πιστοποιήσει το κλειδί σας. Για να γίνει αυτό, δίνετε στο launchpad το fingerprint και αυτό σας στέλνει ένα e-mail με το κείμενο που πρέπει να κάνετε decrypt. Το κείμενο το βάζετε σε ένα αρχείο txt, για παράδειγμα:

-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.10 (GNU/Linux)

hQEMA/LwIvfSlOwQAQgAt6bY5Lxm5Kz4Z55lI6Zj9UpchHqMFSEozdGHYDMgvyvv
N3Dw9CkNCQiilAMFP+sMvPc4L9Be+OcNLf7CiTitCvp0VBxEDNsfD9+wmXNOOGII
ZyjzWf2RDBXv00Y50mIEiJdELsTGNcKStiAb79ynAYdNbWsLDZlDZSauMs7AJfxi
ZZUmPw1Ea1/waDrszvH0L9Yz5O/Sv4Ev/wkzG5lniAHluxN1jqz6J3UoL6g9s5jY
meaGCUqHbObAd/+iGSDSfLcVUK34w8wjB37mzsLtBKBPkD5Uk4yA35DTqIeu2Ob7
rJeCu1tqAKPZrjYFUdg/noiOr3OvFq5O2Seuoct+2tLAtgFbpFp0pEH50jQLeudL
uc1KXuy0dYmLo98uXXIGarD/BsaqfkkgHR08pdTpsMht5MSpEHqXIQ2eALLMzOL8
fEO5a7vClWO8JOzpurtEo71aJ4tSbxC0WxeuNBSoLbb5zxVEK+OhYEfrTh//wsMN
RJeNDvY2Fqw5GISbnT+JRlHCoIJy6r5gNF79c5cuA9O4ILHBvj4sPYK+ysYhhz9t
VcrkFbNO8V/iK/DEOImbrHPuRujevPSmB8cRV5GT4cyH0WueuL1oxBRMstRosoZM
ML8C+v95p64ew5ry0qm+Sy/wTjDENCOhuDuQpn6MDu8euqs2rBFb/2nmefzORgZt
7XWEelFm1RUtqNw27ezUteGmui5dEFGezmWwZ/G8xTuMSDhSikmZaCqBHG3c3rxb
mVUjvhWqwIZBYLHl2C63eRadiNHKCIxGC3obQqb0Q4ljfvZOSYvPzPPJPdaRD1jV
0j9OPemL5hTBLJxQsjPqkKgncqlRfLNJ
=+tR+

-----END PGP MESSAGE-----

και κάντε το decrypt με την passphrase. Μετά σας δίνει ένα link του launchpad όπου κάνει confirm το κλειδι.

Υπογράψτε το Ubuntu Code of Conduct

Πλέον είστε σε θέση να υπογράφετε ηλεκτρονικά χρησιμοποιώντας το κλειδί σας. Πηγαίνε στην αρχική του Launchpad και κάντε κλικ στο Ubuntu Code of Conduct και ακολουθείστε τις οδηγίες. Στην ουσία είναι ένα txt αρχείο το οποίο το υπογράφετε ηλεκτρονικά με το τερματικό χρησιμοποιώντας την passphrase. Το αποτέλεσμα θα είναι ένα αρχείο *.asc το οποίο θα είναι το πλέον υπογεγραμένο. Αυτό το αρχείο το ανεβάζετε στο launchpad.


Μάθετε τι είναι το Triage

Διαβάστε τον οδηγό.


Κάντε subscribe στην bugSquad



Κάνε αίτηση στην BugSquad

https://launchpad.net/~bugsquad/+join


Τα λέμε στο κανάλι  #ubuntu-bugs channel on freenode.
Now, please read this page for more detailed instructions.