<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raarop</id>
	<title>ICO wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.itcollege.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Raarop"/>
	<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php/Special:Contributions/Raarop"/>
	<updated>2026-05-06T22:55:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68870</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68870"/>
		<updated>2013-11-26T14:45:01Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Autor ==&lt;br /&gt;
Kaspar Steinberg A42&lt;br /&gt;
&lt;br /&gt;
== Versiooni ajalugu ==&lt;br /&gt;
14.12.2011 Valmis esialgne versioon&lt;br /&gt;
&lt;br /&gt;
20.12.2011 Täiendatud/parandatud versioon&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
.htaccess-i puhul on tegemist konfiguratsioonifailiga, mis võimaldab hallata veebiserveri käitumist. Võimaldab piirata ligipääsu kasutaja põhiselt, piirata ligipääsu IP aadressi põhiselt, tekitada ümbersuunamisi, muuta pikad URL-i nimed lühemaks ja kergemini meenutatavaks, luua isekujundatud veateate lehti(nt. 401) ja palju muud. .htaccess faili seaded mõjuvad kataloogile, kus ta asub ning selle kataloogi alamkataloogidele.&lt;br /&gt;
&lt;br /&gt;
== Eeldus ==&lt;br /&gt;
Õpetus on tehtud Ubuntu Server 11.04 kasutades, millega on eelnevalt läbi tehtud Veebiserveri labor: https://wiki.itcollege.ee/index.php/Veebiserveri_labor_v.2 Kõik käsud on tehtud juurkasutaja õigusi omades.&lt;br /&gt;
&lt;br /&gt;
== Kataloogi juurdepääsu piiramine ==&lt;br /&gt;
&lt;br /&gt;
Kõigepealt tuleb luua kataloogi kuhu ligipääsu tahame piirata fail nimega &#039;&#039;.htaccess&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avame mõne tekstiredaktoriga loodud faili, antud juhul nano-ga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sinna faili lisame read, mis määravad ära kust failist kontrollida kasutajat ja parooli, mis kuvatakse sisselogimisaknal. Autentimine on &#039;&#039;basic&#039;&#039;, sest kasutame tavalist HTTP autentimist ning viimane rida annab kõigile ligipääsu, kellel on ligipääsuõigus (võime lubada ka ainult teatud kasutajaid: require user kasutajanimi). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AuthUserFile /var/www/www/admin/.htpasswd&lt;br /&gt;
AuthName &amp;quot;Logi sisse&amp;quot;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loome faili kus on kasutajanimed ja paroolid. -c tähendab, et see fail luuakse. Hiljem kui soovime teisi kasutajaid juurde lisada  tuleks -c ära jätta muidu kirjutatakse fail üle ning eelnevalt kirjas olnud kasutajanimed koos paroolidega kaovad. Peale selle käskluse andmist tuleb sisestada ka kasutajale parool. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
htpasswd -c /var/www/www/admin/.htpasswd peeter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nüüd proovides ligipääsu soovitud asukohale küsitakse kasutajanime ja parooli.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
links www.random.ee/admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IP aadresside/domeenide blokeerimine ==&lt;br /&gt;
&lt;br /&gt;
Näiteks kui soovime blokeerida konkreetset ip aadressi avame .htaccess faili.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisame read, mis lubab kõigile lehte vaadata kuid ip aadressilt 110.124.123.10 mitte.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow, deny&lt;br /&gt;
deny from 110.124.123.10&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kui soovime ära keelata mingi konkreetse ip aadresside vahemiku või domeeni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow,deny&lt;br /&gt;
deny from 110.124.0.0/24&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ümbersuunamine ==&lt;br /&gt;
Suuname terve lehe kuskile teise domeeni. .htaccess fail peab asuma veebi juurkataloogis ning sisaldama järgmist rida. &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect / http://www.google.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teeme nii, et avades www.random.ee/admin, suunataks ta automaatselt esilehele (www.random.ee). 301 tähendab, et see suunamine on jäädav ning otsingumootorid peaksid selle meelde jätma vana asukoha asemel. Kui paneksime sinna 302 siis oleks tegemist ajutise lahendusega ning otsingumootorid kontrolliks üle, ega pole algne aadress uuesti kasutusele võetud.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 301 /admin http://www.random.ee&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mõne faili asukoht on muutnud ning soovime, et vanalt aadressilt suunataks uuele asukohale.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 302 /admin/mingileht.html http://www.random.ee/admin/asd/uusleht.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutamine Proxy-ga ==&lt;br /&gt;
Kui kasutame htacces koostöös Proxy teenusega, siis IP põhine lubamine/keelamine ei toimi, kuna kõik päringud tulevad proxy serveri aadressilt.&lt;br /&gt;
&lt;br /&gt;
Toon näite kuidas kasutada IP põhist juurdepääsu Varnishiga, mis on konfigureeritud kasutama X-Forwarded-For-i&lt;br /&gt;
&lt;br /&gt;
.htaccess faili viime sisse muudatused, millega lubame juurdepääsu aadressidelt 1.2.3.4 ja 2.3.4.5&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deny from All&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;1.2.3.4&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;2.3.4.5&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
Allow from env=AllowIP #Lisame selle rea&lt;br /&gt;
Allow from 1.2.3.4&lt;br /&gt;
Allow from 2.3.4.5 &lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
Rohkem infot https://freistil.zendesk.com/entries/21852711-How-can-I-restrict-IP-addresses-in-htaccess-with-the-reverse-proxy-in-front-&lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&lt;br /&gt;
https://freistil.zendesk.com/entries/21852711-How-can-I-restrict-IP-addresses-in-htaccess-with-the-reverse-proxy-in-front-&lt;br /&gt;
&lt;br /&gt;
http://www.javascriptkit.com/howto/htaccess.shtml&lt;br /&gt;
&lt;br /&gt;
http://25yearsofprogramming.com/blog/20070803.htm&lt;br /&gt;
&lt;br /&gt;
http://jodies.de/ipcalc&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess.php&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess2.php&lt;br /&gt;
&lt;br /&gt;
http://sebastians-pamphlets.com/the-anatomy-of-http-redirects-301-302-307/&lt;br /&gt;
&lt;br /&gt;
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68869</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68869"/>
		<updated>2013-11-26T14:43:34Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Autor ==&lt;br /&gt;
Kaspar Steinberg A42&lt;br /&gt;
&lt;br /&gt;
== Versiooni ajalugu ==&lt;br /&gt;
14.12.2011 Valmis esialgne versioon&lt;br /&gt;
&lt;br /&gt;
20.12.2011 Täiendatud/parandatud versioon&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
.htaccess-i puhul on tegemist konfiguratsioonifailiga, mis võimaldab hallata veebiserveri käitumist. Võimaldab piirata ligipääsu kasutaja põhiselt, piirata ligipääsu IP aadressi põhiselt, tekitada ümbersuunamisi, muuta pikad URL-i nimed lühemaks ja kergemini meenutatavaks, luua isekujundatud veateate lehti(nt. 401) ja palju muud. .htaccess faili seaded mõjuvad kataloogile, kus ta asub ning selle kataloogi alamkataloogidele.&lt;br /&gt;
&lt;br /&gt;
== Eeldus ==&lt;br /&gt;
Õpetus on tehtud Ubuntu Server 11.04 kasutades, millega on eelnevalt läbi tehtud Veebiserveri labor: https://wiki.itcollege.ee/index.php/Veebiserveri_labor_v.2 Kõik käsud on tehtud juurkasutaja õigusi omades.&lt;br /&gt;
&lt;br /&gt;
== Kataloogi juurdepääsu piiramine ==&lt;br /&gt;
&lt;br /&gt;
Kõigepealt tuleb luua kataloogi kuhu ligipääsu tahame piirata fail nimega &#039;&#039;.htaccess&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avame mõne tekstiredaktoriga loodud faili, antud juhul nano-ga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sinna faili lisame read, mis määravad ära kust failist kontrollida kasutajat ja parooli, mis kuvatakse sisselogimisaknal. Autentimine on &#039;&#039;basic&#039;&#039;, sest kasutame tavalist HTTP autentimist ning viimane rida annab kõigile ligipääsu, kellel on ligipääsuõigus (võime lubada ka ainult teatud kasutajaid: require user kasutajanimi). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AuthUserFile /var/www/www/admin/.htpasswd&lt;br /&gt;
AuthName &amp;quot;Logi sisse&amp;quot;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loome faili kus on kasutajanimed ja paroolid. -c tähendab, et see fail luuakse. Hiljem kui soovime teisi kasutajaid juurde lisada  tuleks -c ära jätta muidu kirjutatakse fail üle ning eelnevalt kirjas olnud kasutajanimed koos paroolidega kaovad. Peale selle käskluse andmist tuleb sisestada ka kasutajale parool. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
htpasswd -c /var/www/www/admin/.htpasswd peeter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nüüd proovides ligipääsu soovitud asukohale küsitakse kasutajanime ja parooli.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
links www.random.ee/admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IP aadresside/domeenide blokeerimine ==&lt;br /&gt;
&lt;br /&gt;
Näiteks kui soovime blokeerida konkreetset ip aadressi avame .htaccess faili.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisame read, mis lubab kõigile lehte vaadata kuid ip aadressilt 110.124.123.10 mitte.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow, deny&lt;br /&gt;
deny from 110.124.123.10&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kui soovime ära keelata mingi konkreetse ip aadresside vahemiku või domeeni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow,deny&lt;br /&gt;
deny from 110.124.0.0/24&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ümbersuunamine ==&lt;br /&gt;
Suuname terve lehe kuskile teise domeeni. .htaccess fail peab asuma veebi juurkataloogis ning sisaldama järgmist rida. &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect / http://www.google.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teeme nii, et avades www.random.ee/admin, suunataks ta automaatselt esilehele (www.random.ee). 301 tähendab, et see suunamine on jäädav ning otsingumootorid peaksid selle meelde jätma vana asukoha asemel. Kui paneksime sinna 302 siis oleks tegemist ajutise lahendusega ning otsingumootorid kontrolliks üle, ega pole algne aadress uuesti kasutusele võetud.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 301 /admin http://www.random.ee&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mõne faili asukoht on muutnud ning soovime, et vanalt aadressilt suunataks uuele asukohale.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 302 /admin/mingileht.html http://www.random.ee/admin/asd/uusleht.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutamine Proxy-ga ==&lt;br /&gt;
Kui kasutame htacces koostöös Proxy teenusega, siis IP põhine lubamine/keelamine ei toimi, kuna kõik päringud tulevad proxy serveri aadressilt.&lt;br /&gt;
&lt;br /&gt;
Toon näite kuidas kasutada IP põhist juurdepääsu Varnishiga, mis on konfigureeritud kasutama X-Forwarded-For-i&lt;br /&gt;
&lt;br /&gt;
.htaccess faili viime sisse muudatused&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deny from All&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;1.2.3.4&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;2.3.4.5&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
Allow from env=AllowIP #Lisame selle rea&lt;br /&gt;
Allow from 1.2.3.4&lt;br /&gt;
Allow from 2.3.4.5 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&lt;br /&gt;
http://www.javascriptkit.com/howto/htaccess.shtml&lt;br /&gt;
&lt;br /&gt;
http://25yearsofprogramming.com/blog/20070803.htm&lt;br /&gt;
&lt;br /&gt;
http://jodies.de/ipcalc&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess.php&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess2.php&lt;br /&gt;
&lt;br /&gt;
http://sebastians-pamphlets.com/the-anatomy-of-http-redirects-301-302-307/&lt;br /&gt;
&lt;br /&gt;
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68868</id>
		<title>Htaccess</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Htaccess&amp;diff=68868"/>
		<updated>2013-11-26T14:42:55Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Autor ==&lt;br /&gt;
Kaspar Steinberg A42&lt;br /&gt;
&lt;br /&gt;
== Versiooni ajalugu ==&lt;br /&gt;
14.12.2011 Valmis esialgne versioon&lt;br /&gt;
&lt;br /&gt;
20.12.2011 Täiendatud/parandatud versioon&lt;br /&gt;
&lt;br /&gt;
== Sissejuhatus ==&lt;br /&gt;
.htaccess-i puhul on tegemist konfiguratsioonifailiga, mis võimaldab hallata veebiserveri käitumist. Võimaldab piirata ligipääsu kasutaja põhiselt, piirata ligipääsu IP aadressi põhiselt, tekitada ümbersuunamisi, muuta pikad URL-i nimed lühemaks ja kergemini meenutatavaks, luua isekujundatud veateate lehti(nt. 401) ja palju muud. .htaccess faili seaded mõjuvad kataloogile, kus ta asub ning selle kataloogi alamkataloogidele.&lt;br /&gt;
&lt;br /&gt;
== Eeldus ==&lt;br /&gt;
Õpetus on tehtud Ubuntu Server 11.04 kasutades, millega on eelnevalt läbi tehtud Veebiserveri labor: https://wiki.itcollege.ee/index.php/Veebiserveri_labor_v.2 Kõik käsud on tehtud juurkasutaja õigusi omades.&lt;br /&gt;
&lt;br /&gt;
== Kataloogi juurdepääsu piiramine ==&lt;br /&gt;
&lt;br /&gt;
Kõigepealt tuleb luua kataloogi kuhu ligipääsu tahame piirata fail nimega &#039;&#039;.htaccess&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avame mõne tekstiredaktoriga loodud faili, antud juhul nano-ga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sinna faili lisame read, mis määravad ära kust failist kontrollida kasutajat ja parooli, mis kuvatakse sisselogimisaknal. Autentimine on &#039;&#039;basic&#039;&#039;, sest kasutame tavalist HTTP autentimist ning viimane rida annab kõigile ligipääsu, kellel on ligipääsuõigus (võime lubada ka ainult teatud kasutajaid: require user kasutajanimi). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AuthUserFile /var/www/www/admin/.htpasswd&lt;br /&gt;
AuthName &amp;quot;Logi sisse&amp;quot;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Loome faili kus on kasutajanimed ja paroolid. -c tähendab, et see fail luuakse. Hiljem kui soovime teisi kasutajaid juurde lisada  tuleks -c ära jätta muidu kirjutatakse fail üle ning eelnevalt kirjas olnud kasutajanimed koos paroolidega kaovad. Peale selle käskluse andmist tuleb sisestada ka kasutajale parool. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
htpasswd -c /var/www/www/admin/.htpasswd peeter&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nüüd proovides ligipääsu soovitud asukohale küsitakse kasutajanime ja parooli.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
links www.random.ee/admin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IP aadresside/domeenide blokeerimine ==&lt;br /&gt;
&lt;br /&gt;
Näiteks kui soovime blokeerida konkreetset ip aadressi avame .htaccess faili.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /var/www/www/admin/.htaccess&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Lisame read, mis lubab kõigile lehte vaadata kuid ip aadressilt 110.124.123.10 mitte.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow, deny&lt;br /&gt;
deny from 110.124.123.10&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kui soovime ära keelata mingi konkreetse ip aadresside vahemiku või domeeni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
order allow,deny&lt;br /&gt;
deny from 110.124.0.0/24&lt;br /&gt;
allow from all&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ümbersuunamine ==&lt;br /&gt;
Suuname terve lehe kuskile teise domeeni. .htaccess fail peab asuma veebi juurkataloogis ning sisaldama järgmist rida. &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect / http://www.google.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Teeme nii, et avades www.random.ee/admin, suunataks ta automaatselt esilehele (www.random.ee). 301 tähendab, et see suunamine on jäädav ning otsingumootorid peaksid selle meelde jätma vana asukoha asemel. Kui paneksime sinna 302 siis oleks tegemist ajutise lahendusega ning otsingumootorid kontrolliks üle, ega pole algne aadress uuesti kasutusele võetud.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 301 /admin http://www.random.ee&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mõne faili asukoht on muutnud ning soovime, et vanalt aadressilt suunataks uuele asukohale.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Redirect 302 /admin/mingileht.html http://www.random.ee/admin/asd/uusleht.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Kasutamine Proxy-ga ==&lt;br /&gt;
Kui kasutame htacces koostöös Proxy teenusega, siis IP põhine lubamine/keelamine ei toimi, kuna kõik päringud tulevad proxy serveri aadressilt.&lt;br /&gt;
&lt;br /&gt;
Toon näite kuidas kasutada IP põhist juurdepääsu Varnishiga, mis on konfigureeritud kasutama X-Forwarded-For-i&lt;br /&gt;
.htaccess faili viime sisse muudatused&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Deny from All&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;1.2.3.4&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
SetEnvIF X-Forwarded-For &amp;quot;2.3.4.5&amp;quot; AllowIP #Lisame selle rea&lt;br /&gt;
Allow from env=AllowIP #Lisame selle rea&lt;br /&gt;
Allow from 1.2.3.4&lt;br /&gt;
Allow from 2.3.4.5 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
== Viited ==&lt;br /&gt;
&lt;br /&gt;
http://www.javascriptkit.com/howto/htaccess.shtml&lt;br /&gt;
&lt;br /&gt;
http://25yearsofprogramming.com/blog/20070803.htm&lt;br /&gt;
&lt;br /&gt;
http://jodies.de/ipcalc&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess.php&lt;br /&gt;
&lt;br /&gt;
http://corz.org/serv/tricks/htaccess2.php&lt;br /&gt;
&lt;br /&gt;
http://sebastians-pamphlets.com/the-anatomy-of-http-redirects-301-302-307/&lt;br /&gt;
&lt;br /&gt;
http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62797</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62797"/>
		<updated>2013-04-25T13:14:44Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Saatev skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 14:58, 3 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisi teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamata OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62796</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62796"/>
		<updated>2013-04-25T13:14:20Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Vastvõttev skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 14:58, 3 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisi teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamata OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62795</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62795"/>
		<updated>2013-04-25T13:13:45Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 14:58, 3 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisi teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamata OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62192</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62192"/>
		<updated>2013-04-03T12:12:24Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Sissejuhatus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 14:58, 3 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisi teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamata OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62191</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62191"/>
		<updated>2013-04-03T11:58:57Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 14:58, 3 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62190</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62190"/>
		<updated>2013-04-03T11:57:03Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* NSDistributedNotificationCenter klass */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62189</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62189"/>
		<updated>2013-04-03T11:56:04Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 2. Oma notificationi saatmine ja vastu võtmine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Konsool==&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62188</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62188"/>
		<updated>2013-04-03T11:55:32Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 2. Oma notificationi saatmine ja vastu võtmine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62187</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62187"/>
		<updated>2013-04-03T11:55:24Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Vastvõttev skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62186</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62186"/>
		<updated>2013-04-03T11:54:46Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Vastvõttev skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62185</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62185"/>
		<updated>2013-04-03T11:54:23Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Vastvõttev skript */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kõigepealt käivitame vastuvõtva skript ja siis saatva skripti. Konsooli väljundid võiksi olla järgmised:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
$ python minu_vastuvottev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.346 Python[10108:f07] my.logNotification vastu võetud, logStringKey: Tere Maailm!&lt;br /&gt;
2013-04-03 14:40:32.347 Python[10108:f07] my.stopNotification vastu võetud, lõpetan töö!&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minu_saatev_skript.py&lt;br /&gt;
2013-04-03 14:40:32.344 Python[10109:f07] my.logNotification, logStringKey: Tere Maailm! saadetud&lt;br /&gt;
2013-04-03 14:40:32.345 Python[10109:f07] my.stopNotification saadetud&lt;br /&gt;
$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62184</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62184"/>
		<updated>2013-04-03T11:50:48Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 2. Oma notificationi saatmine ja vastu võtmine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
==Vastvõttev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class main(NSObject): #Minu main klass&lt;br /&gt;
	def init(self): #Init meetod, mis kutsutakse välja klassi loomisel&lt;br /&gt;
&lt;br /&gt;
		#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
		notificationCenter = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.logNotification nimelise teate jaoks, mis kutsub välja myLogNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myLogNotification:&#039;, &#039;my.logNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Lisame NSDistributedNotificationCenter objektile listeneri my.stopNotification nimelise teate jaoks, mis kutsub välja myStopNotification meetodi&lt;br /&gt;
		notificationCenter.addObserver_selector_name_object_(self, &#039;myStopNotification:&#039;, &#039;my.stopNotification&#039;,None)&lt;br /&gt;
&lt;br /&gt;
		#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
		AppHelper.runConsoleEventLoop()&lt;br /&gt;
&lt;br /&gt;
	def myLogNotification_(self, notification):&lt;br /&gt;
		#Otsime notificationiga kaasa tulnud dictionary-st stringi mis vastab võtmele logStringKey ja logime selle&lt;br /&gt;
		if notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;):&lt;br /&gt;
			logString = notification.userInfo().objectForKey_(&amp;quot;logStringKey&amp;quot;)&lt;br /&gt;
			logString = logString.encode(&#039;utf8&#039;)&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, logStringKey: %s&amp;quot;,logString)&lt;br /&gt;
		else:&lt;br /&gt;
			NSLog(&amp;quot;my.logNotification vastu võetud, aga logStringKey puudub!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	def myStopNotification_(self, notification):&lt;br /&gt;
		NSLog(&amp;quot;my.stopNotification vastu võetud, lõpetan töö!&amp;quot;)&lt;br /&gt;
		#Kutsume välja meetodi, mis lõpetab NSRunLoop-i&lt;br /&gt;
		AppHelper.stopEventLoop()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    #Loome main klassi objekti&lt;br /&gt;
    main = main.new() &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Saatev skript==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
logString = &amp;quot;Tere Maailm!&amp;quot;	#String mida saata koos notificationiga, see string lisatakse userInfo dictionary&lt;br /&gt;
&lt;br /&gt;
dictionary = NSMutableDictionary.alloc().init()	#userInfo dictionary, mis saadetakse koos notificationiga&lt;br /&gt;
&lt;br /&gt;
dictionary.setObject_forKey_(logString,&amp;quot;logStringKey&amp;quot;)	#lisame logString userInfo dictionary-sse&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.logNotification ja koos dictionary-ga&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.logNotification&#039;, None,dictionary)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.logNotification, logStringKey: %s saadetud&amp;quot;,logString)&lt;br /&gt;
&lt;br /&gt;
#Saadame notificationi nimega my.stopNotification ilma dictionary-ta&lt;br /&gt;
Foundation.NSDistributedNotificationCenter.defaultCenter().postNotificationName_object_userInfo_(&#039;my.stopNotification&#039;, None,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;my.stopNotification saadetud&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62183</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62183"/>
		<updated>2013-04-03T10:22:16Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit NSRunLoop-i peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb NSRunLoop lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62182</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62182"/>
		<updated>2013-04-03T10:21:48Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kuna me ei lisanud meetodit runConsoleEventLoop() peatamiseks, siis tuleb lõpetamsieks protsess lihtalt killida. Vastasel juhul jookseb runConsoleEventLoop() lõpmatult.&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62181</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62181"/>
		<updated>2013-04-03T08:50:34Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&amp;lt;br&amp;gt;&lt;br /&gt;
Kasutame meetodeid:&lt;br /&gt;
addObserver:selector:name:object: ja postNotificationName:object:userInfo:deliverImmediately:&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62180</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62180"/>
		<updated>2013-04-03T08:46:07Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks olema näha sarnane konsooli väljund.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62179</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62179"/>
		<updated>2013-04-03T08:45:08Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitame pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks oleam näha järgnev.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62178</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62178"/>
		<updated>2013-04-03T08:44:52Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Salvestame selle koodi faili ja käivitmae pythoni.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ python minufail.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Kui oleme faili käivitanud ja iTunes&#039;is mõne loo mängima pannud peaks oleam näha järgnev.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62175</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62175"/>
		<updated>2013-04-03T06:53:34Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2013-04-03 09:48:24.475 Python[5691:f07] Listening for new tunes....&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62174</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62174"/>
		<updated>2013-04-03T06:51:32Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{u&#039;Album&#039;: u&#039;Euphoria - Single&#039;, u&#039;Store URL&#039;: u&#039;itms://itunes.com/album?p=499907070&amp;amp;i=499907132&#039;, u&#039;Skip Date&#039;: 2013-02-18 07:35:39 +0000, u&#039;Track Number&#039;: 1, u&#039;Album Artist&#039;: u&#039;Loreen&#039;, u&#039;Playlist PersistentID&#039;: 4943482652531679104L, u&#039;Location&#039;: u&#039;file://localhost/Users/raidoaarop/Music/iTunes/iTunes%20Media/Music/Loreen/Euphoria%20-%20Single/01%20Euphoria%20(Single%20Version).m4a&#039;, u&#039;Album Rating Computed&#039;: 1, u&#039;Disc Number&#039;: 1, u&#039;Total Time&#039;: 181786L, u&#039;Library PersistentID&#039;: -656295795960417891L, u&#039;Track Count&#039;: 3, u&#039;Genre&#039;: u&#039;Dance&#039;, u&#039;Play Count&#039;: 12, u&#039;Rating Computed&#039;: True, u&#039;Name&#039;: u&#039;Euphoria (Single Version)&#039;, u&#039;Artist&#039;: u&#039;Loreen&#039;, u&#039;Disc Count&#039;: 1, u&#039;Player State&#039;: u&#039;Playing&#039;, u&#039;Album Rating&#039;: 0, u&#039;Artwork Count&#039;: 1, u&#039;PersistentID&#039;: -2268284955121644048L, u&#039;Play Date&#039;: 2013-03-26 14:38:19 +0000, u&#039;Skip Count&#039;: 1, u&#039;Year&#039;: 2012L}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62173</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62173"/>
		<updated>2013-04-03T06:47:33Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Foundation-i logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62172</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62172"/>
		<updated>2013-04-03T06:46:45Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation	#Impordime Foundation teegi&lt;br /&gt;
from AppKit import *	#AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper 	#PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
#Kirjeldame klassi ja ühe meetodi notification vastu võtmiseks&lt;br /&gt;
class GetSongs(NSObject):	&lt;br /&gt;
    def getMySongs_(self, song): &lt;br /&gt;
&lt;br /&gt;
    	#Prindime välja notificationiga saabunud dictonary(song) sisu, mis selle näite puhul sisaldab loo infot.&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
#Loome uue NSDistributedNotificationCenter objekti&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
&lt;br /&gt;
#Loome oma klassi objekti&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
&lt;br /&gt;
#Lisame NSDistributedNotificationCenter objektile listeneri&lt;br /&gt;
#Listeneris defneerime klassi ja meetodi(GetSongs, &#039;getMySongs:&#039;) mida selle notification puhul välja kutsuda, samuti event-i nime(com.apple.iTunes.playerInfo) mida me ootame.&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;) #Obj-C logimise meetod&lt;br /&gt;
&lt;br /&gt;
#Paneme käima NSRunLoop(Foundation) main loop-i&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62171</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62171"/>
		<updated>2013-04-03T06:35:32Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
&lt;br /&gt;
import Foundation #Impordime Foundation teegi&lt;br /&gt;
from AppKit import * #AppKit teegid ipordime kõik objektid&lt;br /&gt;
from PyObjCTools import AppHelper #PyObjCTools teegist impordime AppHelperi klassi&lt;br /&gt;
&lt;br /&gt;
class GetSongs(NSObject):&lt;br /&gt;
    def getMySongs_(self, song):&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;)&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62170</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62170"/>
		<updated>2013-04-02T18:20:43Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import Foundation&lt;br /&gt;
from AppKit import *&lt;br /&gt;
from PyObjCTools import AppHelper&lt;br /&gt;
&lt;br /&gt;
class GetSongs(NSObject):&lt;br /&gt;
    def getMySongs_(self, song):&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;)&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Näide 2. Oma &#039;&#039;notificationi&#039;&#039; saatmine ja vastu võtmine=&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62169</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62169"/>
		<updated>2013-04-02T18:19:10Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Allikad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import Foundation&lt;br /&gt;
from AppKit import *&lt;br /&gt;
from PyObjCTools import AppHelper&lt;br /&gt;
&lt;br /&gt;
class GetSongs(NSObject):&lt;br /&gt;
    def getMySongs_(self, song):&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;)&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed Näide 1]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62168</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62168"/>
		<updated>2013-04-02T18:17:49Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i &#039;&#039;notificationi&#039;&#039; vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import Foundation&lt;br /&gt;
from AppKit import *&lt;br /&gt;
from PyObjCTools import AppHelper&lt;br /&gt;
&lt;br /&gt;
class GetSongs(NSObject):&lt;br /&gt;
    def getMySongs_(self, song):&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;)&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62167</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62167"/>
		<updated>2013-04-02T18:14:03Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Näide 1: iTunes&amp;#039;i notificationi vastu võtmine. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i notificationi vastu võtmine.=&lt;br /&gt;
Seletame lahti näite aadressilt [http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed http://stackoverflow.com/questions/1933107/how-do-you-listen-to-notifications-from-itunes-on-a-mac-using-the-nsdistributed]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import Foundation&lt;br /&gt;
from AppKit import *&lt;br /&gt;
from PyObjCTools import AppHelper&lt;br /&gt;
&lt;br /&gt;
class GetSongs(NSObject):&lt;br /&gt;
    def getMySongs_(self, song):&lt;br /&gt;
        song_details = {}&lt;br /&gt;
        ui = song.userInfo()&lt;br /&gt;
        for x in ui:&lt;br /&gt;
            song_details[x] = ui.objectForKey_(x)&lt;br /&gt;
        print song_details&lt;br /&gt;
&lt;br /&gt;
nc = Foundation.NSDistributedNotificationCenter.defaultCenter()&lt;br /&gt;
GetSongs = GetSongs.new()&lt;br /&gt;
nc.addObserver_selector_name_object_(GetSongs, &#039;getMySongs:&#039;, &#039;com.apple.iTunes.playerInfo&#039;,None)&lt;br /&gt;
&lt;br /&gt;
NSLog(&amp;quot;Listening for new tunes....&amp;quot;)&lt;br /&gt;
AppHelper.runConsoleEventLoop()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62166</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62166"/>
		<updated>2013-04-02T18:09:14Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Näide 1: iTunes&#039;i notificationi vastu võtmine.=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62165</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62165"/>
		<updated>2013-04-02T18:06:54Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* PyObjC installeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyObjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62164</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62164"/>
		<updated>2013-04-02T18:06:31Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* PyObjC installeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyOcjC on võimalik installeerida kasutades pythoni teegihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62163</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62163"/>
		<updated>2013-04-02T18:04:39Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* PyObjC installeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyOcjC on võimalik installeerida kasutades pythoni teekihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme seda kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62162</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62162"/>
		<updated>2013-04-02T18:04:17Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* PyObjC installeerimine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
PyOcjC on võimalik installeerida kasutades pythoni teekihaldureid [http://pythonhosted.org/distribute/easy_install.html easy_install-i] või [https://pypi.python.org/pypi/pip/ pip-i]. On olemas käsitsi variant, selle kohta saab rohkem infot [http://pythonhosted.org/pyobjc/install.html siit]. &amp;lt;br&amp;gt;&lt;br /&gt;
Selles artiklis kasutame easy_install-i, mis peaks olema kaasas OSX Pythoni vaikimisi versiooniga.&lt;br /&gt;
Et teha protsess kiiremaks teeme sea kahe käsuga.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo easy_install -U pyobjc-core&lt;br /&gt;
$ sudo easy_install -U pyobjc-framework-Cocoa&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62161</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62161"/>
		<updated>2013-04-02T17:52:00Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
PyObjC on testitud ja toetab Pythoni versioone 2.7, 3.2 ja 3.3. Python 2.6 on ka toetatud, kuigi ei ole nii tihedalt testitud. Samuti on tihedalt toetatud ja testitud OSX 10.8 ja toetatud kõik OSX-id alates 10.5-est  i386, x86_64 ja ppc arhitektuuriga.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
Selleks et PyObjC instaleerida on vaja kombilaatorit. Kõige lihtsam on tõmmata tasuta [https://itunes.apple.com/us/app/xcode/id497799835?mt=12 Xcode Mac App Store&#039;st]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mõnel juhul on vaja installeerida Xcode lisa Command Line Tools. Main Menu -&amp;gt; Preferences -&amp;gt; Components &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62160</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62160"/>
		<updated>2013-04-02T17:26:29Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 20:26, 2 April 2013 (EEST)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://www.python.org/ Python]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62026</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62026"/>
		<updated>2013-03-30T16:59:39Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* NSDistributedNotificationCenter klass */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub OSX Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&lt;br /&gt;
[http://www.python.org/ Python]&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62025</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62025"/>
		<updated>2013-03-30T16:57:37Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub Foundationi frameworki.&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html NSDistributedNotificationCenter Class Reference]&lt;br /&gt;
[http://www.python.org/ Python]&lt;br /&gt;
[http://pythonhosted.org/pyobjc/ Pyobjc]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62024</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62024"/>
		<updated>2013-03-30T16:56:37Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub Foundationi frameworki.&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html: NSDistributedNotificationCenter Class Reference]&lt;br /&gt;
[http://www.python.org/: Python]&lt;br /&gt;
[http://pythonhosted.org/pyobjc/: Pyobjc]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62023</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62023"/>
		<updated>2013-03-30T16:54:48Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub Foundationi frameworki.&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi Pythonis.&lt;br /&gt;
=PyObjC installeerimine=&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html: NSDistributedNotificationCenter Class Reference]&lt;br /&gt;
[http://www.python.org/:python.org]&lt;br /&gt;
[http://pythonhosted.org/pyobjc/:pyobjc]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62022</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62022"/>
		<updated>2013-03-30T16:50:00Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
See artikkel toob näite kuidas saata ja vastu võtta protsesside vahelisis teated Apple OSX platvormil. Näite eesmärk on teha seda pythoni keeles ilma kasutamatta OSX native Objective-C keelt.&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub Foundationi frameworki.&lt;br /&gt;
==Python==&lt;br /&gt;
Python on levinud ja lihtne programmeersimiskeel, mis toetab mitmeid operatsioonisüsteeme ja platvorme, kaasaarvatud OSX.&lt;br /&gt;
==Python Objective-C bridge==&lt;br /&gt;
PyObjC bridge loob silla Pythoni ja Objective-C programmeerimiskeele vahel. Selles näites kasutame PyObjC teeki et kasutada NSDistributedNotificationCenter klassi pythonis.&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html: NSDistributedNotificationCenter Class Reference]&lt;br /&gt;
[http://www.python.org/]&lt;br /&gt;
[http://pythonhosted.org/pyobjc/]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62021</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62021"/>
		<updated>2013-03-30T16:38:53Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
==NSDistributedNotificationCenter klass==&lt;br /&gt;
Klassi kaudu on võimalik Apple OSX operatsioonisüsteemis saata ja vastu võtta teateid(notifications) erinevate taskide vahel. Klass kuulub Foundationi frameworki.&lt;br /&gt;
&lt;br /&gt;
=Python Objective-C bridge =&lt;br /&gt;
=Allikad=&lt;br /&gt;
[https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDistributedNotificationCenter_Class/Reference/Reference.html: NSDistributedNotificationCenter Class Reference]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62020</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=62020"/>
		<updated>2013-03-30T16:26:12Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
=Python Objective-C bridge =&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=61876</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=61876"/>
		<updated>2013-03-28T10:34:16Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A31 &amp;lt;br /&amp;gt;&lt;br /&gt;
[[User:Raarop|Raarop]] 12:34, 28 March 2013 (EET)&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=61875</id>
		<title>NSDistributedNotificationCenter&#039;i kasutamine Python Objective-C bridge&#039;ga</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=NSDistributedNotificationCenter%27i_kasutamine_Python_Objective-C_bridge%27ga&amp;diff=61875"/>
		<updated>2013-03-28T10:31:34Z</updated>

		<summary type="html">&lt;p&gt;Raarop: Created page with &amp;#039;Autor: Raido Aarop, A21 &amp;lt;br /&amp;gt; --Raarop 19:41, 30 October 2011 (EET)&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A21 &amp;lt;br /&amp;gt;&lt;br /&gt;
--[[User:Raarop|Raarop]] 19:41, 30 October 2011 (EET)&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Vahem%C3%A4lu&amp;diff=45650</id>
		<title>Vahemälu</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Vahem%C3%A4lu&amp;diff=45650"/>
		<updated>2012-01-12T17:14:05Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A21&amp;lt;br /&amp;gt;&lt;br /&gt;
--[[User:Raarop|Raarop]] 23:46, 24 October 2011 (EEST)&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
Vahemälu (ingl. k. cache)&lt;br /&gt;
Kasutatakse korduvalt vajaminevate andmete hoidmiseks ja serveerimiseks. Vahemälu kasutamisel puudub vajadus pöörduda andmete algallika poole (kõvaketas, RAM, CPU jne), vaid andmed serveeritakse vahemälust. Tänu selle suureneb arvutisüsteemi töö kiirus. &lt;br /&gt;
&lt;br /&gt;
Valimaks, millised andmeid vähemälus hoida on kasutusel erinevaid loogikaid, vastavalt süsteemi otstarbele.&lt;br /&gt;
&lt;br /&gt;
Vahemälu õige kasutamisega on võimalik kogu süsteemi tööd kardinaalselt optimiseerida (kiirendada). &lt;br /&gt;
&lt;br /&gt;
Mõned süsteemid, kus vahemälu on kasutusel:&lt;br /&gt;
* Arvuti protsessor (CPU)&lt;br /&gt;
* Salvestuseadmed (Information Storage)&lt;br /&gt;
&lt;br /&gt;
=Arvuti protsessor (ingl. k. CPU – Central Processing Unit)=&lt;br /&gt;
&lt;br /&gt;
Tänapäeval on protsessorite kiirus (sagedus) ületanud mälude kiiruse (sageduse) mitmekordselt. On võimalik valmistada ka sama kiired mälukiipe, kuid nende hind oleks väga kõrge. Suure mahuga kiired mälud oleksid väga kallid. Samuti tekiks probleem mälu andmete kirjutamisega salvestuseadmetele. &lt;br /&gt;
&lt;br /&gt;
Lahendus tekib siis, kui kasutaba väikese mahuga kiiret mälukiipi, mis on toimiks protssesori ja ülejäänud mälu vahel. See kiire mälukiip täidaks vahemälu ülesannet. Vahemällu salvestatakse enim kasutatavad käsud ja nende vastused. Seega sama käsu saamisel teisel korral jääb ära põhimällu pöördumine käsu väljalugemiseks ja protsessori töö käsu täitmisel.&lt;br /&gt;
&lt;br /&gt;
Kuigi von Neumann-i arhitektuuri järgi on tänapäeva arvutitel andmed ja käsud säilitatud samas mälus, siis vahemälude puhul, see reegel ei kehti. Andmeid ja käske hoitakse erinevates vahemäludes. Tänapäeva protsessoritel on enamjaolt kolme tasandilised vahemälud.&lt;br /&gt;
&lt;br /&gt;
Vahemälud on eriti efektiivsed, kuna tänapäeva operatsioonisüsteemid ja programmid kasutavad väga palju samu meetoteid korduvalt.&lt;br /&gt;
&lt;br /&gt;
=Salvestuseadmed (ingl. k. Information Storage Devices)=&lt;br /&gt;
&lt;br /&gt;
Kõige tavalisem kasutus vahemälule on tavalises kõvakettas, mida leidub pea igas arvutis. Selleks et operatsioonisüsteem saaks mingi infolt kõvakettalt lugeda, peab kõvaketas lugemispea viima õigesse kohta ja liigutama magnetketast. See on aga füüsiline töö ja võib väga palju aega nõuda, eriti kui andmed ei asu järest ühel kettal. &lt;br /&gt;
&lt;br /&gt;
Vahemäluna on kasutusel mälukiip, kuhu siis salvestatakse kettalt loetud andmed ja kettale salvestatavad andmed.&lt;br /&gt;
&lt;br /&gt;
Kõvaketta vahemälu jaguneb kaheks osas vastavalt  andemete osa ja märgistusosa, milles registreeritakse andmeta asukoht kõvakettal, kas andmed on kirjutatud kõvakettale ja samuti ka aeg millal neid andmeid viimati kasutati. Märgistusosa oleva aja järgi otsustatakse, kas need andmed on veel vajalikud ja jäävad edasi vahemällu või siis võib vastavad andmed kustutada.&lt;br /&gt;
&lt;br /&gt;
Kõvaketta lugemisoperatsiooni ajal pöördutakse kõige pealt vahemälu poole sooviga saada andmeid. Kui need andmed on olemas, siis tagastatakse need väga kiirelt, kõvaketta enda poole pöördumata. Kui aga andemd puuduvad, siis pöördutakse edasi kõvaketta poole, loetakse sealt vajalikud andmed vahemällu ja alles siis tagastatakse süsteemile.&lt;br /&gt;
&lt;br /&gt;
Kõvakettale kirjutamisoperatisooni ajal kirjutatakse andmeid kõigepealt vahemällu. Seejärel võib süsteem käituda kahel viisil, kas kirjutada andmed kohe vahemälust kõvakettale, mis on ohutum aga aeglasem, või siis kirjutda andmed kõvakettale hetkedel, kui kõvaketta kirjutamispea on sobivates kohtades. Viimane viis on kiirem kuid mitte nii ohutu ,kuna vähemälus olevad admed võivad rikke puhul kaduma minna.&lt;br /&gt;
&lt;br /&gt;
=Vahemälu koherentsus=&lt;br /&gt;
Kui on kasutustel kaks paraleelset toimivat süsteemi tekib probleeme vahemälude koherentusega. Ühe süsteemi vahemälus olevad andmed võivad olla juba töödeldud, kuid teine süsteem ei tea sellest midagi. Nii võivad tekkida vead süsteemi töös. Selleks, et seda vältida on kasutusele võetud koherentsuse tagamise protokollid. &lt;br /&gt;
Erinevad süsteemid kasutavad erinevaid protokolle, vastavalt süsteemi ülesehitusele pöörates rõhku optimaalsesle töökiirusele.&lt;br /&gt;
&lt;br /&gt;
Üks levinumaid viise tomib selliselt, et süsteem kuulutab milliseid andmeid ta soovib vahemälust lugeda/kirjutada. Teine süsteem kuulab ja reageerib vastavalt. Kui teise süsteemi vahemälus on uuemad andmed, siis tagastab ta need ise. Kui aga juhtub et teisel süteemil on vanemad andmed, siis ta märgib need andmed hoopis kehtetuks. &lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[http://www.unilim.fr/sci/wiki/_media/cali/cpumemory.pdf What Every Programmer Should Know About Memory]&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cache_coherence Wikipedia: Cache coherence]&lt;br /&gt;
&lt;br /&gt;
Multicore Application Programming: For Windows, Linux, and Oracle® Solaris, Darryl Gove, 2010&lt;br /&gt;
Information Storage and Management: Storing, Managing, and Protecting Digital Information, G. Somasundaram; Alok Shrivastava, 2009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lingid=&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Vahem%C3%A4lu&amp;diff=45649</id>
		<title>Vahemälu</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Vahem%C3%A4lu&amp;diff=45649"/>
		<updated>2012-01-12T17:13:46Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A21&amp;lt;br /&amp;gt;&lt;br /&gt;
--[[User:Raarop|Raarop]] 23:46, 24 October 2011 (EEST)&lt;br /&gt;
&lt;br /&gt;
=Sissejuhatus=&lt;br /&gt;
Vahemälu (ingl. k. cache)&lt;br /&gt;
Kasutatakse korduvalt vajaminevate andmete hoidmiseks ja serveerimiseks. Vahemälu kasutamisel puudub vajadus pöörduda andmete algallika poole (kõvaketas, RAM, CPU jne), vaid andmed serveeritakse vahemälust. Tänu selle suureneb arvutisüsteemi töö kiirus. &lt;br /&gt;
&lt;br /&gt;
Valimaks, millised andmeid vähemälus hoida on kasutusel erinevaid loogikaid, vastavalt süsteemi otstarbele.&lt;br /&gt;
&lt;br /&gt;
Vahemälu õige kasutamisega on võimalik kogu süsteemi tööd kardinaalselt optimiseerida (kiirendada). &lt;br /&gt;
&lt;br /&gt;
Mõned süsteemid, kus vahemälu on kasutusel:&lt;br /&gt;
* Arvuti protsessor (CPU)&lt;br /&gt;
* Salvestuseadmed (Information Storage)&lt;br /&gt;
&lt;br /&gt;
=Arvuti protsessor (ingl. k. CPU – Central Processing Unit)=&lt;br /&gt;
&lt;br /&gt;
Tänapäeval on protsessorite kiirus (sagedus) ületanud mälude kiiruse (sageduse) mitmekordselt. On võimalik valmistada ka sama kiired mälukiipe, kuid nende hind oleks väga kõrge. Suure mahuga kiired mälud oleksid väga kallid. Samuti tekiks probleem mälu andmete kirjutamisega salvestuseadmetele. &lt;br /&gt;
&lt;br /&gt;
Lahendus tekib siis, kui kasutaba väikese mahuga kiiret mälukiipi, mis on toimiks protssesori ja ülejäänud mälu vahel. See kiire mälukiip täidaks vahemälu ülesannet. Vahemällu salvestatakse enim kasutatavad käsud ja nende vastused. Seega sama käsu saamisel teisel korral jääb ära põhimällu pöördumine käsu väljalugemiseks ja protsessori töö käsu täitmisel.&lt;br /&gt;
&lt;br /&gt;
Kuigi von Neumann-i arhitektuuri järgi on tänapäeva arvutitel andmed ja käsud säilitatud samas mälus, siis vahemälude puhul, see reegel ei kehti. Andmeid ja käske hoitakse erinevates vahemäludes. Tänapäeva protsessoritel on enamjaolt kolme tasandilised vahemälud.&lt;br /&gt;
&lt;br /&gt;
Vahemälud on eriti efektiivsed, kuna tänapäeva operatsioonisüsteemid ja programmid kasutavad väga palju samu meetoteid korduvalt.&lt;br /&gt;
&lt;br /&gt;
=Salvestuseadmed (ingl. k. Information Storage Devices)=&lt;br /&gt;
&lt;br /&gt;
Kõige tavalisem kasutus vahemälule on tavalises kõvakettas, mida leidub pea igas arvutis. Selleks et operatsioonisüsteem saaks mingi infolt kõvakettalt lugeda, peab kõvaketas lugemispea viima õigesse kohta ja liigutama magnetketast. See on aga füüsiline töö ja võib väga palju aega nõuda, eriti kui andmed ei asu järest ühel kettal. &lt;br /&gt;
&lt;br /&gt;
Vahemäluna on kasutusel mälukiip, kuhu siis salvestatakse kettalt loetud andmed ja kettale salvestatavad andmed.&lt;br /&gt;
&lt;br /&gt;
Kõvaketta vahemälu jaguneb kaheks osas vastavalt  andemete osa ja märgistusosa, milles registreeritakse andmeta asukoht kõvakettal, kas andmed on kirjutatud kõvakettale ja samuti ka aeg millal neid andmeid viimati kasutati. Märgistusosa oleva aja järgi otsustatakse, kas need andmed on veel vajalikud ja jäävad edasi vahemällu või siis võib vastavad andmed kustutada.&lt;br /&gt;
&lt;br /&gt;
Kõvaketta lugemisoperatsiooni ajal pöördutakse kõige pealt vahemälu poole sooviga saada andmeid. Kui need andmed on olemas, siis tagastatakse need väga kiirelt, kõvaketta enda poole pöördumata. Kui aga andemd puuduvad, siis pöördutakse edasi kõvaketta poole, loetakse sealt vajalikud andmed vahemällu ja alles siis tagastatakse süsteemile.&lt;br /&gt;
&lt;br /&gt;
Kõvakettale kirjutamisoperatisooni ajal kirjutatakse andmeid kõigepealt vahemällu. Seejärel võib süsteem käituda kahel viisil, kas kirjutada andmed kohe vahemälust kõvakettale, mis on ohutum aga aeglasem, või siis kirjutda andmed kõvakettale hetkedel, kui kõvaketta kirjutamispea on sobivates kohtades. Viimane viis on kiirem kuid mitte nii ohutu ,kuna vähemälus olevad admed võivad rikke puhul kaduma minna.&lt;br /&gt;
&lt;br /&gt;
=Vahemälu koherentsus=&lt;br /&gt;
Kui on kasutustel kaks paraleelset toimivat süsteemi tekib probleeme vahemälude koherentusega. Ühe süsteemi vahemälus olevad andmed võivad olla juba töödeldud, kuid teine süsteem ei tea sellest midagi. Nii võivad tekkida vead süsteemi töös. Selleks, et seda vältida on kasutusele võetud koherentsuse tagamise protokollid. &lt;br /&gt;
Erinevad süsteemid kasutavad erinevaid protokolle, vastavalt süsteemi ülesehitusele pöörates rõhku optimaalsesle töökiirusele.&lt;br /&gt;
&lt;br /&gt;
Üks levinumaid viise tomib selliselt, et süsteem kuulutab milliseid andmeid ta soovib vahemälust lugeda/kirjutada. Teine süsteem kuulab ja reageerib vastavalt. Kui teise süsteemi vahemälus on uuemad andmed, siis tagastab ta need ise. Kui aga juhtub et teisel süteemil on vanemad andmed, siis ta märgib need andmed hoopis kehtetuks. &lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
[http://www.unilim.fr/sci/wiki/_media/cali/cpumemory.pdf What Every Programmer Should Know About Memory]&lt;br /&gt;
[http://en.wikipedia.org/wiki/Cache_coherence Wikipedia: Cache coherence]&lt;br /&gt;
&lt;br /&gt;
Multicore Application Programming: For Windows, Linux, and Oracle® Solaris, Darryl Gove, 2010&lt;br /&gt;
Information Storage and Management: Storing, Managing, and Protecting Digital Information, G. Somasundaram; Alok Shrivastava, 2009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Lingid=&lt;br /&gt;
&lt;br /&gt;
[[Category:Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=Skype_erinevatel_platvormidel&amp;diff=41133</id>
		<title>Skype erinevatel platvormidel</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=Skype_erinevatel_platvormidel&amp;diff=41133"/>
		<updated>2011-10-31T22:02:29Z</updated>

		<summary type="html">&lt;p&gt;Raarop: /* Skype Lisaseadmes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Autor: Raido Aarop, A21 &amp;lt;br /&amp;gt;&lt;br /&gt;
--[[User:Raarop|Raarop]] 19:41, 30 October 2011 (EET)&lt;br /&gt;
=Skype=&lt;br /&gt;
[[File:Skype_logo.jpg|200px|Skype Logo]]&lt;br /&gt;
&lt;br /&gt;
Skype on tarkvara, mis võimaldab:&lt;br /&gt;
 * Tasuta audio ja videkõnesid&lt;br /&gt;
 * Video ja audio konverentskõnesid&lt;br /&gt;
 * Kaugkõnesid kohaliku kõne hinnaga (PSTN)&lt;br /&gt;
 * Saata SMSe&lt;br /&gt;
 * Vestelda reaalajas (Instant Messaging)&lt;br /&gt;
==Tehnoloogia==&lt;br /&gt;
Skype kasutab selleks VoIP (Voice over Internet Protocol) tehnoloogiat ja P2P (Peer-to-peer) ühendusi. P2P tähendab, et kõne tegemiseks vajalik ühendus luuakse otse kasutajate vahel. Servereid on vaja ainult tugitegevusteks, nagu kasutajate autentimine, kasutajate andmebaas jne. Kasutusel on Skype enda VoIP tehnoloogia, mis kasutab krüpteeringut ja on väidetavalt pealtkuulamiskindel.&lt;br /&gt;
&lt;br /&gt;
==PSTN kõned==&lt;br /&gt;
Public switched telephone network (PSTN) on maailmas hetkel kasutusel olev füüsiline telefonivõrk. Skype kaudu on võimalik ka teha kõnesi nendesse võrkudesse. Sellisel juhul luuakse P2P ühendus serveriga soovitud riigis ja seejärel ühendatakse kõne kohalikku telefonivõrku. Tänu sellele ka soodne hind.&lt;br /&gt;
==Ajalugu==&lt;br /&gt;
&lt;br /&gt;
2003 - Tehnoloogia loodi Eestis, kolme mehe poolt: Ahti Heinla, Priit Kasesalu ja Jaan Tallinn. Samad mehed olid ka failijagamistarkvara Kazaa autoriteks.&lt;br /&gt;
&lt;br /&gt;
Oktoober, 2005 - Skype osteti eBay poolt (US$2,6B).&lt;br /&gt;
&lt;br /&gt;
September, 2009 - eBay müüb 70% Skype&#039;st Silver Lake investorite grupile (US$2,75B).&lt;br /&gt;
&lt;br /&gt;
Mai, 2011 - Microsoft ostab Skype (US$8,5B, tehing kinnitatakse Oktoobris).&lt;br /&gt;
&lt;br /&gt;
==Microsoft Skype Divison==&lt;br /&gt;
Skype jätkab tulevikus eraldiseisva divisionina Microsoftis. Kuigi pole veel teada, mis muudatusi Microsoft Skype toodetesse toob, võib vaid oletada et tulevikus on Skype tihedamini integreeritud Microsofti toodetesse.&lt;br /&gt;
&lt;br /&gt;
Esialgu võib vaid oletada, et Microsoft tahaks näha Skype XBox-le, Windows Phone-le ja tihedamini integreeritud Windows 8-sse. &lt;br /&gt;
=Skype arvutites=&lt;br /&gt;
Skype üks suuri plusse on tarkvara kasutamise võimalus enamustes operatsioonisüsteemides.&lt;br /&gt;
==Windows==&lt;br /&gt;
[[File:Skype_win.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Skype versioon 5.6 on kasutatav kõikidel Windows operatsioonisüsteemidel alates Windows XP-st. Enim Skype kasutajaid kasutab Windowsit.&lt;br /&gt;
&lt;br /&gt;
==Mac==&lt;br /&gt;
[[File:Skype_mac.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Skype versioon 5.3 toetab Mac OS 10.5 kuni OS 10.7 ni.&lt;br /&gt;
&lt;br /&gt;
==Linux==&lt;br /&gt;
[[File:Skype_linux.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Skype 2.2B Linuxile toetab kõiki Qt toega Linuxi versioone.&lt;br /&gt;
&lt;br /&gt;
=Skype mobiilides=&lt;br /&gt;
Skype on eelkõige loodud kasutamaks arvutites. P2P tehnoloogia ei ole kõige aku ega intereti ühenduse suhtes säästlik.&lt;br /&gt;
==iOS==&lt;br /&gt;
[[File:Skype_ipad.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Skype toetab nii iPhone-i (alates 3G), iPod touch-i kui ka iPad-i. Enamus seadmetelt on võimalik teha videokõnesid.&lt;br /&gt;
&lt;br /&gt;
==Android==&lt;br /&gt;
[[File:Skype_android.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Skype toetab kõiki Androidi telefone, millel jookseb versioon 2.1 või uuem. Videokõned on toetatud valitud seadmetel.&lt;br /&gt;
==Symbian==&lt;br /&gt;
[[File:Skype_symbian.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Toetatud on kõik Symbiani seadmed. Videokõnede võimalus puudub.&lt;br /&gt;
==&amp;quot;Õhuke klient&amp;quot;==&lt;br /&gt;
Skype on teinud koostööd mõndade mobiilioperaartoritega, mille tulemusena on nende võrgus võimalik laadida telefoni nn &amp;quot;õhuke klient&amp;quot;. Sellisel juhul ei installeerita telefoni mitte omapäi töötavat tarkvara, vaid ainult kasutajaliidese osa mis suhtleb operaatorite toel serverites asuvate ülejäänud Skype komponentidega.&lt;br /&gt;
=Skype telekas=&lt;br /&gt;
==Smart TV==&lt;br /&gt;
[[File:Skype_tv.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Televiisorite tootjad nagu Panasonic, Samsung ja Sony pakuvad koos muu tarkvaraga ka Skype tarkvara oma uutes mudelites. Siiski on vaja eraldi juurde osta kaamera kõnede jaoks.&lt;br /&gt;
==Skype Lisaseadmes==&lt;br /&gt;
[[File:Skype_xbox.jpg]]&amp;lt;br&amp;gt;&lt;br /&gt;
Samuti pakuvad paljud tootjad telekaga ühilduvaid lisaseadmeid (BluRay mängijad, DVD mängijad jne), millesse on integreeritud Skype tarkvara. Ühe lisaseadmena, milles võib tulevikus näha Skype saab mainida Microsoft XBoxi-i.&lt;br /&gt;
&lt;br /&gt;
=Allikad=&lt;br /&gt;
 * Tekst: [http://www.skype.com skype.com]&amp;lt;br&amp;gt;&lt;br /&gt;
 * Pildid: [http://www.skype.com skype.com] ja [http://www.wired.com wired.com]&lt;br /&gt;
&lt;br /&gt;
=Lingid=&lt;br /&gt;
[[Windows-tööjaamade_haldamise_aines_valminud_referaadid_2011_sügis,_päevaõpe]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Raido Aarop, A21 &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
	<entry>
		<id>https://wiki.itcollege.ee/index.php?title=UCK&amp;diff=41129</id>
		<title>UCK</title>
		<link rel="alternate" type="text/html" href="https://wiki.itcollege.ee/index.php?title=UCK&amp;diff=41129"/>
		<updated>2011-10-31T20:29:06Z</updated>

		<summary type="html">&lt;p&gt;Raarop: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Raido Aarop, A21(2011)&lt;br /&gt;
[[Category: Operatsioonisüsteemide administreerimine ja sidumine]]&lt;/div&gt;</summary>
		<author><name>Raarop</name></author>
	</entry>
</feed>