tag:blogger.com,1999:blog-7719215020207466642024-02-19T12:20:04.310+01:00Tobiasz SiemińskinotatnikAnonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-771921502020746664.post-60596248842136846362014-10-10T11:42:00.001+02:002014-10-10T11:42:31.554+02:00Jak stworzyć grę przy pomocy silnika Cocos2dx na platformy Android i iOS?<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguohzIUZQe-ymrYdOWYHFG1aCLer-m_0azA-yxeHF-aJFmlyNI9nHWm6RPBeUo0nE7PtOj-Vtcu-m3EVYwEAgQB4aaHKQRxRYCEJ_8Uqdue321DRGNAmGzznwo7SmoZT18rpRVNxr2yOhQ/s1600/20140622004005359.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguohzIUZQe-ymrYdOWYHFG1aCLer-m_0azA-yxeHF-aJFmlyNI9nHWm6RPBeUo0nE7PtOj-Vtcu-m3EVYwEAgQB4aaHKQRxRYCEJ_8Uqdue321DRGNAmGzznwo7SmoZT18rpRVNxr2yOhQ/s1600/20140622004005359.jpg" height="200" width="200" /></a></div>
Na firmowym blogu opisałem krok po kroku, jak utworzyć multiplatformową grę w silniku Cocos2dx. <a href="http://galantelabs.blogspot.com/2014/10/how-to-create-multiplatform-cocos2d-x.html" target="_blank">Zapraszam do przeczytania. </a>Kolejne części będą sukcesywnie pojawiały się w przyszłości, więc zachęcam do śledzenia RSS/FB/Twittera/nowego taga.</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-61917051518431786852013-04-20T20:30:00.002+02:002013-04-20T20:32:38.546+02:00Ubuntu 12.10 i bardzo wolny Nautilus<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjELIgqP3AX7eYBurCdkFRH133PjMRgEvoF4P_ETQeq1dfd-dhqmNExPk9TaSmCwPJ_vKxfPCm2Kff6k1rbkeabyTPgAlfFI2nklVKudxdz3-VRR3VGyJFCFMc3GAUTmq7bUpL7D1bjsQuN/s1600/nautilus-logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjELIgqP3AX7eYBurCdkFRH133PjMRgEvoF4P_ETQeq1dfd-dhqmNExPk9TaSmCwPJ_vKxfPCm2Kff6k1rbkeabyTPgAlfFI2nklVKudxdz3-VRR3VGyJFCFMc3GAUTmq7bUpL7D1bjsQuN/s1600/nautilus-logo.jpg" height="200" width="200" /></a></div>
Na niektórych urządzeniach występuje błąd Nautilusa (w wersji 3.4), który objawia się bardzo długim czasem oczekiwania na otwarcie dowolnego katalogu. Najprostszym sposobem na obejście tego błędu jest instalacja Nautilusa w wersji 3.6, w którym ten błąd nie występuje, przy pomocy poniższych poleceń:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo add-apt-repository ppa:gnome3-team/gnome3 </span><br />
<div>
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get update && sudo apt-get install nautilus</span></div>
<div>
<br />
<br />
Następnie wystarczy ponownie uruchomić komputer lub się przelogować.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXOSahW32nwSXqbTjionNfd8qZxYdTKSKfj5Bu5y3QKTwih3tCTVYdeXlg5PG3NtAjoMpc9VtMhfunxXDubecwHptyNJnDqPa1ySvP6MhzV6UfxDeZploOO_tLNDvohluSo9AHbLdPswgg/s1600/nautilus.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXOSahW32nwSXqbTjionNfd8qZxYdTKSKfj5Bu5y3QKTwih3tCTVYdeXlg5PG3NtAjoMpc9VtMhfunxXDubecwHptyNJnDqPa1ySvP6MhzV6UfxDeZploOO_tLNDvohluSo9AHbLdPswgg/s1600/nautilus.png" height="400" width="580" /></a></div>
Plusem jest nieco odświeżony wygląd programu.</div>
<div>
<br />
<br /></div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-38164359219516097002013-04-04T18:35:00.000+02:002013-04-04T20:06:40.471+02:00Mój "build" w sieci Play<br />
<div style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;">
<a href="https://blogger.googleusercontent.com/img/proxy/AVvXsEjavJYZ13IJFmJmHUNjzlMUTW_B8mUWNnDRlkCp9TaX8xiVM94jJyQIx-cbELrrIrwCSht3g8hqJyHOK6IbI5mQFcpmqzQGZQajaUo87nHfhl94ErD3lFS51xWMtyCy=" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/T9smbn2.png" height="82" width="200" /></a>Chciałbym przedstawić swój "build" w sieci Play na kartę, gdzie przy doładowaniu co miesiąc za kwotę 30 zł i wykorzystaniu 21 zł na pakiety, otrzymamy:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="margin-left: 1em; margin-right: 1em;">
<span id="goog_368220283"></span><span id="goog_368220284"></span></div>
<br />
<ul>
<li>nielimitowane* SMSy i połączenia do Play </li>
<li>nielimitowane* SMSy poza Play </li>
<li>1024 MB Internetu</li>
<li>jeśli ktoś do nas sporo dzwoni spoza Play to także darmowe rozmowy poza Play, a jeśli nie to i tak mamy 9 zł na połączenia poza sieć w cenie 29 gr/min (w tym wypadku można wykupić pakiet 30 minut poza Play za 6zł - dla mnie to zbędne)</li>
</ul>
<a name='more'></a><br />
1. Rejestrujemy się na <a href="http://www.24.play.pl/">www.24.play.pl</a> - z tego miejsca możemy sterować taryfami, pakietami i wszystkim. (dla posiadaczy telefonów z Androidem polecam <a href="https://play.google.com/store/apps/details?id=com.play.play24m&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5wbGF5LnBsYXkyNG0iXQ.." target="_blank">oficjalną aplikację od Play'a</a>)<br />
<br />
2. Wchodzimy w Usługi > Zmiana taryfy i wybieramy taryfę <b>Play na Kartę 5 zł (0 zł w Play)</b>. Zmiana taryfy trwa do 24h, więc trzeba odczekać. Ta zmiana da nam darmowe rozmowy i SMSy do Play Z AUTOMATU na okres zależny od kwoty doładowania.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/proxy/AVvXsEhYK5JttI9RqoykSEZpefh5K1hHzzRjX1VF0kWlrYeSbMbL9sHexI33Fo-uU7q_IwKoE7Xw7_mNNSjAtBUs4grvt3n6TYcvHp1ULBAvAwtuWXeWRfZQ4uPz5Kswfh8j=" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://i.imgur.com/4hJZOpw.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Źródło: <a href="https://www.play.pl/resources/pdf/Regulamin_Oferty_Promocyjnej_Darmowe_Rozmowy_i_SMS-y_w_Play_dla_Oferty_Play_Fresh.pdf">https://www.play.pl/resources/pdf/Regulamin_Oferty_Promocyjnej_Darmowe_Rozmowy_i_SMS-y_w_Play_dla_Oferty_Play_Fresh.pdf</a></td></tr>
</tbody></table>
3. W Usługi > Pakiety aktywujemy następujące pakiety:<br />
<ul>
<li><b>Nowe Zbieraj Minuty</b> (usługa za 3 zł, która trwa 3 miesiące i dodaje nam 1 minutę do wszystkich sieci poza Play za 2 minuty przychodzące spoza Play. Mi w ten sposób się uzbierało 180 minut. Zawsze coś.</li>
<li><b>Nielimitowane SMSy do wszystkich sieci za 10 zł</b> - brak limitu smsów, po wysłaniu 1k SMSów w miesiącu nadal nie pobierało pieniędzy. Regulamin <a href="http://www.play.pl/resources/pdf/Regulamin_Oferty_Promocyjnej_Nielimitowane_Pakiety_SMS_do_wszystkich_dla_ofert_na_karte_25092012.pdf" target="_blank">tutaj</a>.</li>
<li><b>Nielimitowany Internet za 10 zł</b> - limit Internetu na 1024MB, ale to spokojnie wystarcza każdemu amatorowi sieci. Ponadto działa w warszawskim metrze.</li>
</ul>
<br />
U mnie wygląda to tak: <br />
<br />
<img src="http://i.imgur.com/nL9pvaL.png" height="511" width="620" />
<br />
<span style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;"></span><br style="background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;" />
Podsumowując, doładowujemy miesięcznie konto za 30 zł i:<br />
<ul>
<li>co 3 miesiące kupujemy usługę <b>Nowe Zbieraj Minuty</b> (1zł/msc)</li>
<li>co miesiąc kupujemy pakiet <b>Nielimitowane SMSy do wszystkich sieci za 10 zł</b> (10zł/msc)</li>
<li>co miesiąc kupujemy pakiet <b>Nielimitowany Internet za 10 zł </b>(10zł/msc)</li>
</ul>
Uważam, że dla osób "aktywnych" mobilnie to obecnie najlepsza oferta na rynku i szybko nic jej nie przebije.<br />
<br />
Regulamin całej taryfy <a href="http://www.play.pl/resources/pdf/Cennik_Oferty_Play_na_Karte_22062012.pdf">tutaj</a>.<br />
Szczegóły na temat ważności wychodzących i przychodzących połączeń <a href="http://www.play.pl/oferta/play-karta/niezbednik/zestawienie/" target="_blank">tutaj</a>.<br />
<br />
<b>UWAGA.</b> Doładowując przez stronę <a href="http://www.doladowania.play.pl/">www.doladowania.play.pl</a> lub przez <a href="http://www.24.play.pl/">www.24.play.pl</a> otrzymujemy 15% bonusu od kwoty doładowania. Przy doładowaniu za 30 zł to aż 4.5 zł dodatkowo na rozmowy (niestety nie da się tego wykorzystać na pakiety)!<br />
<br />
* nielimitowane oznacza w tym wypadku nielimitowane
<!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fi.imgur.com%2F4hJZOpw.png&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/proxy/AVvXsEhYK5JttI9RqoykSEZpefh5K1hHzzRjX1VF0kWlrYeSbMbL9sHexI33Fo-uU7q_IwKoE7Xw7_mNNSjAtBUs4grvt3n6TYcvHp1ULBAvAwtuWXeWRfZQ4uPz5Kswfh8j=" --><!-- Blogger automated replacement: "https://images-blogger-opensocial.googleusercontent.com/gadgets/proxy?url=http%3A%2F%2Fi.imgur.com%2FT9smbn2.png&container=blogger&gadget=a&rewriteMime=image%2F*" with "https://blogger.googleusercontent.com/img/proxy/AVvXsEjavJYZ13IJFmJmHUNjzlMUTW_B8mUWNnDRlkCp9TaX8xiVM94jJyQIx-cbELrrIrwCSht3g8hqJyHOK6IbI5mQFcpmqzQGZQajaUo87nHfhl94ErD3lFS51xWMtyCy=" -->Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com1tag:blogger.com,1999:blog-771921502020746664.post-54664598427642268572013-03-10T00:29:00.000+01:002013-03-16T01:14:59.050+01:00AT Commands: Jak spingować Google?<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvLIdDXWICqWU7ulPaFunCQoxrVBs-FxRPSVOpCB-J3fyVmDoApzjDhjTHt2ihIq-tfxn1E4nsqDTbUvbuNZIfBiaIzu1EmbDsliB_EjAJLleo1mlyLzL50DCf0nDTaGJeXsgKtrKiZtuf/s1600/Wifi+modem.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvLIdDXWICqWU7ulPaFunCQoxrVBs-FxRPSVOpCB-J3fyVmDoApzjDhjTHt2ihIq-tfxn1E4nsqDTbUvbuNZIfBiaIzu1EmbDsliB_EjAJLleo1mlyLzL50DCf0nDTaGJeXsgKtrKiZtuf/s1600/Wifi+modem.png" height="200" width="200" /></a></div>
Gdy mamy ustanowione połączenie GPRS, możemy się zastanawiać jak spingować Google.<br />
<br />
Pierwsze, czego potrzebujemy to IP google.com, czyli używamy komendy <b>ping </b>i kopiujemy adres IP serwera..<br />
<br />
Następnie wywołaj komendę<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sisx="Ping",[slot],[ip do połączenia],[liczba części],[timeout]</b></span><br />
<br />
dla przykładu:<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sisx="Ping",0,173.194.35.152,4,2000</b></span><br />
<br />
wynik:<br />
<span style="font-family: Courier New, Courier, monospace;"><b> ^SISX: "Ping",1,0,"173.194.35.152",646<br /> ^SISX: "Ping",1,0,"173.194.35.152",337<br /> ^SISX: "Ping",1,0,"173.194.35.152",332<br /> ^SISX: "Ping",1,0,"173.194.35.152",397</b></span><br />
Ostatnia cyfra, to liczba otrzymanych bajtów danych.<br />
<br />
<span style="font-family: Courier New, Courier, monospace;"><b> ^SISX: "Ping",2,0,4,4,0,0<br /> ^SISX: "Ping",3,0,332,646,428</b></span><br />
OKAnonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-86788014342496367052013-02-25T02:02:00.000+01:002013-03-16T01:15:19.528+01:00AT Commands: Inicjalizacja połączenia GPRS<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvLIdDXWICqWU7ulPaFunCQoxrVBs-FxRPSVOpCB-J3fyVmDoApzjDhjTHt2ihIq-tfxn1E4nsqDTbUvbuNZIfBiaIzu1EmbDsliB_EjAJLleo1mlyLzL50DCf0nDTaGJeXsgKtrKiZtuf/s1600/Wifi+modem.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvLIdDXWICqWU7ulPaFunCQoxrVBs-FxRPSVOpCB-J3fyVmDoApzjDhjTHt2ihIq-tfxn1E4nsqDTbUvbuNZIfBiaIzu1EmbDsliB_EjAJLleo1mlyLzL50DCf0nDTaGJeXsgKtrKiZtuf/s1600/Wifi+modem.png" height="200" width="200" /></a></div>
W celu rozpoczęcia pracy z modemem zazwyczaj potrzebujemy skonfigurować połączenie GPRS. Przedstawię jak zrobić to w prosty sposób, w kilku krokach. Po pierwsze, musisz znać APN (Access Point Name) swojego operatora GSM. APN możesz sprawdzić <a href="http://rebelsimcard.com/apn-settings.html#.USqzbjXPct0" target="_blank">tutaj</a>. (Jest to dość stare zestawienie, na którym nie ma polskiego T-Mobile, ale na dzień dzisiejszy kodem dla tej sieci jest <span style="background-color: #cccccc; font-family: Courier New, Courier, monospace;">internet</span>)<br />
<br />
<div>
Drugim krokiem jest ustawienie typu połączenia na slocie 0 na "<b>gprs0</b>":<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sics=0,contype,gprs0
</b></span><br />
<br />
<br />
Następnie należy ustawić APN do połączenia:<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sics=0,apn,[TWOJE APN]<your apn=""></your></b></span><br />
<span style="font-family: Courier New, Courier, monospace;">dla przykładu:</span><br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sics=0,apn,internet
</b></span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
Testowanie połączenia GPRS przy pomocy komendy:<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sici?
</b></span><br />
<div>
Powinno zwrócić puste napisy oddzielone przecinkami.<br />
<br />
Ta komenda otwiera połączenie, skonfigurowane na slocie 0.<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sico=0</b></span><br />
<span style="font-family: Courier New, Courier, monospace;"><b><br /></b></span>Należy poczekać około 2 sekund na nawiązanie połączenia i przetestować ponownie.<br />
<span style="font-family: Courier New, Courier, monospace;"><b>at^sici?</b></span><br />
<span style="font-family: Courier New, Courier, monospace;"><b><br /></b></span>
No i jest! Jako rezultat powyższej komendy powinniśmy uzyskać adres IP.</div>
</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-61724822209150148552013-02-24T01:33:00.000+01:002013-03-16T01:09:26.365+01:00Blog - podejście trzecie<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOdxpApJZY5yzqacX_OTTL562D4z_7n0RDqVdJJEMtI47QHHpG6WEgMnjCoBm2xcfqzaC-EG_NPmXIebB1dyABT3Ik_XASHDB7TU-Ynm20gsTOkkqLtgy87uIG8JkUtQ5ETOxbVwfpqrm/s1600/Blogger.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaOdxpApJZY5yzqacX_OTTL562D4z_7n0RDqVdJJEMtI47QHHpG6WEgMnjCoBm2xcfqzaC-EG_NPmXIebB1dyABT3Ik_XASHDB7TU-Ynm20gsTOkkqLtgy87uIG8JkUtQ5ETOxbVwfpqrm/s1600/Blogger.png" height="200" width="200" /></a></div>
Ostatni wpis miał miejsce w dniu 30 października 2012. To zdecydowanie zbyt dawno. W międzyczasie, kiedy nic nie pisałem, założyłem drugiego bloga na krótkie notatki, fragmenty kodu, których nie chciałem zamieszczać tutaj. Zrozumiałem, że blog ma służyć głównie mi jako notatnik, dlatego postanowiłem wprowadzić w blogu, a raczej w sposobie jego prowadzenia, kilka znaczących zmian.<br />
<br />
<br />
<br />
<a name='more'></a>Lista rzeczy, które chcę zmienić:<br />
<ol>
<li>Oprócz długich blogpost'ów zamierzam dodawać krótkie notatki, jeśli przedstawiają coś ciekawego.</li>
<li>Więcej code snippet'ów.</li>
<li>Chcę zwiększyć częstotliwość zamieszczania wpisów, po części poprzez dodawanie krótkich notatek.</li>
</ol>
<div>
Mam nadzieję, że zmiany wyjdą na dobre i powrócę do blogowania na dłużej.</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-18557408278391840962012-10-30T14:45:00.000+01:002013-03-09T23:24:34.726+01:00Eclipse - #3 Skróty klawiszowe<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" /></a></div>
Pracodawca płaci za czas programisty i nie lubi, gdy programista marnuje ten czas. Dobre IDE to połowa sukcesu w drodze do efektywności. Druga połowa to dobrze skonfigurowane IDE, skrojone na miarę dla programisty, idealnie pasujące do jego preferencji. W dzisiejszym wpisie opiszę skróty klawiszowe.<br />
<br />
<br />
<a name='more'></a><br />
<b>ALT + strzałka w dół/w górę</b><br />
Przenieś zaznaczony/e wiersz/e do góry/w dół. Kod będzie również poprawnie wcięty.<br />
<br />
<b>ALT + strzałka w lewo/w prawo</b><br />
Przenieś kursor do ostatniej edytowanej linii. NIE cofa wykonywanych akcji, cofa jedynie nas do miejsc, w którym coś zmienialiśmy. Działa między wszystkimi otwartymi plikami.<br />
<br />
<b>ALT + SHIFT + M</b><br />
Wyodrębnia wybrany fragment kodu do nowej metody.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy-wwJMumhfInhMrvaL4hTQLA6kx1PAodhdZvg6VxYafaK_diXZufuJeZmuEyQwePooJaH8bDCp9YQa7wk8LRCdoAkzNG_ZDnn-GE8lVf-7nPOKzhRGYJAfV64LB7u92pofg_PJiFWVNrd/s1600/skr1.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy-wwJMumhfInhMrvaL4hTQLA6kx1PAodhdZvg6VxYafaK_diXZufuJeZmuEyQwePooJaH8bDCp9YQa7wk8LRCdoAkzNG_ZDnn-GE8lVf-7nPOKzhRGYJAfV64LB7u92pofg_PJiFWVNrd/s1600/skr1.PNG" height="272" width="400" /></a></div>
<br />
<b>ALT + SHIFT + V</b><br />
Przenosi wskazany plik/fragment kodu. Wykonany na kodzie, przenosi wybraną metodę do innej klasy; wykonany na pliku w project explorer, przenosi plik.<br />
<br />
<b>ALT + SHIFT + R</b><br />
Zmiana nazwy pliku/metody/zmiennej.<br />
<br />
<b>ALT + SHIFT + T</b><br />
Wywołuje menu <span style="font-family: Courier New, Courier, monospace;">refactor</span>, dzięki któremu możemy między innymi wyrzucić metodę do pod/nadklasy.<br />
<br />
<b>CTRL + SPACJA</b><br />
Wyświetlenie podpowiedzi skrótów leksykalnych dla napisanej frazy.<br />
<br />
<b>CTRL + D</b><br />
Usuwa obecnie wskazany przez kursor wiersz. Ten skrót jest tak piękny, że często odruchowo używam go w oknie przeglądarki, gdy coś piszę. A w przeglądarkach ten skrót dodaje obecną stronę do zakładek, więc jest to irytujące ;)<br />
<br />
<b>CTRL + SHIFT + O</b><br />
Dodaje wymagane "importy".<br />
<br />
<b>CTRL + 1</b><br />
Wykonane w linii, w której występuje błąd, wyświetla okno z dostępnymi akcjami.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6v5uqB5TD8WfanvldesWlFLVqFw_pQC6q3mOZtFHOGGlBXzOUsHiB4Eo7lAl2OYAtRLuElqJ6EQuFOy4-7lCfpDxZ9GHwassjuZZSU8oLnlf_rYiqQvC_ytAuV5YRu3NeBmHRUn3bMWwU/s1600/skr2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6v5uqB5TD8WfanvldesWlFLVqFw_pQC6q3mOZtFHOGGlBXzOUsHiB4Eo7lAl2OYAtRLuElqJ6EQuFOy4-7lCfpDxZ9GHwassjuZZSU8oLnlf_rYiqQvC_ytAuV5YRu3NeBmHRUn3bMWwU/s1600/skr2.png" height="147" width="400" /></a></div>
<br />
<b>CTRL + SHIFT + T</b><br />
Otwiera klasę o podanej nazwie.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWRMjo56l9qDCQ6_vku8m2jPtJNF5piHXj6Jo7S8wCXhN4mbrzK1QDoYnaX_tZ5L5mgwKIOyNDfrRfF7H_NAfD5M9BvUeD097Jn-KOE_XYu3IjpsH9tGxN3XTqpZvdy8hvRgEhzCtHaadM/s1600/skr3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWRMjo56l9qDCQ6_vku8m2jPtJNF5piHXj6Jo7S8wCXhN4mbrzK1QDoYnaX_tZ5L5mgwKIOyNDfrRfF7H_NAfD5M9BvUeD097Jn-KOE_XYu3IjpsH9tGxN3XTqpZvdy8hvRgEhzCtHaadM/s1600/skr3.png" height="332" width="400" /></a></div>
<br />
<b>CTRL + E</b><br />
Otwiera listę wszystkich otwartych kart w edytorze.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvBIdHOpThayQFvtbmI9sauH1Xhk7OR0fpyMwOSiC0kuyH1fzPTNWV6XKCa85_9l413vMFaYCJ4i4e0XNVZD7ghIqb_XiuMtx3CwLSz-Yj3BoXluz2_LA1iRugodb-1HMvAx55He_W2Jun/s1600/skr4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvBIdHOpThayQFvtbmI9sauH1Xhk7OR0fpyMwOSiC0kuyH1fzPTNWV6XKCa85_9l413vMFaYCJ4i4e0XNVZD7ghIqb_XiuMtx3CwLSz-Yj3BoXluz2_LA1iRugodb-1HMvAx55He_W2Jun/s1600/skr4.png" height="71" width="400" /></a></div>
<br />
<b>CTRL + F6</b><br />
Pokazuje listę wszystkich otwartych kart w edytorze. Jest to wolniejsze niż CTRL+E. Okazuje się pomocne, gdy ważna jest kolejność modyfikacji danych plików. Skrót sortuje listę według tego kryterium.<br />
<br />
<b>CTRL + F7</b><br />
Przełączanie między widokami, przydatne gdy chcemy przełączyć się między <b>project explorer'em</b> a <b>editor'em</b>.<br />
<br />
<b>CTRL + F8</b><br />
Przełączanie między perspektywami.<br />
<br />
<b>CTRL + SHIFT + G</b><br />
Gdy kursor jest na danej klasie, skrót wyszukuje miejsca, w których dana klasa jest wykorzystywana.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TTe5Q77LBsmdcXy6gubSf27wMOZjR46QzodlocanwPsZpl-vflsabBtd6GORQhPQnA7QFOTxP4C6zisyML6aytJrRJIKgviQzgh-d2L895MOIYd9uUhjpG0-F9pooRb9y3XGS9_k1dle/s1600/skr5.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TTe5Q77LBsmdcXy6gubSf27wMOZjR46QzodlocanwPsZpl-vflsabBtd6GORQhPQnA7QFOTxP4C6zisyML6aytJrRJIKgviQzgh-d2L895MOIYd9uUhjpG0-F9pooRb9y3XGS9_k1dle/s1600/skr5.PNG" height="141" width="400" /></a></div>
<br />
<b>CTRL + F11</b><br />
Uruchamia aplikację.<br />
<br />
<b>CTRL + SHIFT + F</b><br />
Formatuje kod według domyślnego formattera. Więcej o ustawieniach formattera dowiesz się <a href="http://www.sortris.blogspot.com/2012/10/eclipse-2-wstepna-konfiguracja.html" target="_blank">tutaj</a>.<br />
<br />
<b>CTRL + T</b><br />
Type hierarchy - hierarchia typów. Gdy mamy kursor na interfejsie, widzimy jakie klasy go rozszerzają lub odwrotnie - kursor na klasie i widzimy co implementuje/rozszerza.<br />
<br />
<b>CTRL + N</b><br />
Utwórz nowy plik/typ/xml/pakiet itp.<br />
<br />
<b>CTRL + M</b><br />
Maksymalizuje lub minimalizuje obecną kartę.<br />
<br />
<b>CTRL + I</b><br />
Poprawia wcięcia.<br />
<br />
<b>CTRL + J</b><br />
Szukanie wybranej frazy. Strzałka w górę/w dół podświetla kolejne wystąpienia szukanej frazy.<br />
<br />
<b>CTRL + SHIFT + L</b><br />
Pokazuje listę skrótów.<br />
<br />
<b>CTRL + SHIFT + C</b><br />
Wielo linijkowy komentarz w plikach XML.<br />
<br />
<b>F3</b><br />
Przenosi nas do definicji klasy danego obiektu.<br />
<br />
<b>CTRL + SHIFT + N</b><br />
Mój własny skrót. Tworzy nową klasę.<br />
<br />
<br />
<b><span style="font-size: large;">Tworzenie nowych skrótów</span></b><br />
Window > Preferences > General > Keys<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Z5XDOHzorGPa08k77MDDgK7g-7Y8rE9xfWlZEOLvN5ZwuUyUzLMfruoE4pHFNDD_d2e28btoHY7VwPwzZ5uYD776Q9wVWFAwzF_KlNNfRrA7NYiFeViA9Gx2_AUPCAhO-svL0yQjfxl8/s1600/skr6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3Z5XDOHzorGPa08k77MDDgK7g-7Y8rE9xfWlZEOLvN5ZwuUyUzLMfruoE4pHFNDD_d2e28btoHY7VwPwzZ5uYD776Q9wVWFAwzF_KlNNfRrA7NYiFeViA9Gx2_AUPCAhO-svL0yQjfxl8/s1600/skr6.png" height="267" width="400" /></a></div>
<br />
Wybieramy interesującą nas akcję i w polu <b>bindings</b> wprowadzamy pożądany przez nas skrót klawiszowy, który zostanie przypięty do tej akcji. Następnie w polu <b>when</b> ustalamy, kiedy ten skrót ma być aktywny. Wybierając <b>in windows</b>, skrót będzie aktywny wszędzie, czyli podczas otwartego project explorera oraz w edytorze (wtedy wykorzystuje informacje o aktualnym pakiecie).<br />
<br />
Z jakich skrótów jeszcze korzystacie?Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com1tag:blogger.com,1999:blog-771921502020746664.post-37107062999452812122012-10-26T23:54:00.000+02:002012-11-08T02:28:58.395+01:00"Sztuka pisania oprogramowania. Wybór i redakcja Joel Spolsky" - recenzja<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis51ocqdF8AfuiUmAlhce3RPTqQ5t36TVG9GNZRALT6Su5VY0eSGGzrj17PWhBNCGQK9XbU75tzwJXdR-DZB4U2u4AhnjPpQvGm4qzeVnhO7fy-LAhpm8Tsn2hCH-mgFAxD0ge436Qbl_l/s1600/sztuka-pisania-oprogramowania-wybor-i-redakcja-joel-spolsky.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis51ocqdF8AfuiUmAlhce3RPTqQ5t36TVG9GNZRALT6Su5VY0eSGGzrj17PWhBNCGQK9XbU75tzwJXdR-DZB4U2u4AhnjPpQvGm4qzeVnhO7fy-LAhpm8Tsn2hCH-mgFAxD0ge436Qbl_l/s1600/sztuka-pisania-oprogramowania-wybor-i-redakcja-joel-spolsky.jpg" width="140" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">www.helion.pl</td></tr>
</tbody></table>
Książkę "Sztuka pisania oprogramowania. Wybór i redakcja Joel Spolsky" polecił mi znajomy. Obecnie jest już niedostępna w księgarni Helion, można ją dostać tylko na Allegro. W książce znajdziemy zbiór esejów o tematyce programistycznej i około-programistycznej.<span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px;"><br /></span>
<span style="font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px;"><br /></span>
<br />
<div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px; margin: 0px; padding: 0px;">
<br />
<br />
<br />
<br />
<br />
<a name='more'></a><br clear="none" /></div>
Autorzy tych wpisów to sama śmietanka świata IT: <b>Ken Arnold, Bruce Eckel, Paul Graham, Clay Shirky i wielu innych</b>. Książka jest zbiorem najciekawszych tekstów wybranych z blogów ww. autorów, opublikowane głównie w roku 2003. Eseje zostały wyselekcjonowane przez Joel'a Spolsky'ego i każdy z nich opatrzony jest jego komentarzem, który przedstawia czasem odmienne pole widzenia, wdaje się w delikatną dyskusję z autorem danego wpisu.<br />
<div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px; margin: 0px; padding: 0px;">
<br clear="none" /></div>
<div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px; margin: 0px; padding: 0px;">
<blockquote class="tr_bq">
"Programowanie to nie tylko wiedza -- to także sztuka. Aplikacja jest narzędziem, które powinno być przede wszystkim użyteczne i ergonomiczne. Niestety, wielu twórców oprogramowania zapomina o tym, pisząc swoje programy. Powodów jest wiele: zbyt mało czasu, źle sformułowane założenia, nieprawidłowa komunikacja między członkami zespołu projektowego czy też niestosowanie się do konwencji kodowania i testowania. Niezależnie od przyczyn, konsekwencją jest oprogramowanie, które nie spełnia swojej podstawowej funkcji, jaką jest użyteczność."
www.helion.pl</blockquote>
</div>
<div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px; margin: 0px; padding: 0px;">
<br /></div>
Z książki dowiemy się wielu ciekawych rzeczy. Znaleźć można tekst na temat prowadzenia projektów, o tym dlaczego dobrze i źle być managerem. Dowiemy się dlaczego znakomici programiści odchodzili z Electronic Arts oraz zdamy sobie sprawę z tego, że rekrutacja programistów to ryzykowna i trudna sprawa. Autorzy opiszą swoje przemyślenia na temat stylu kodowania, przeczytamy o pułapkach outsourcingu oraz o właściwych procedurach testowania. <b>Poznamy różnicę między programistą, a deweloperem!</b> Książkę w świetnym stylu kończy mini przewodnik po języku Ruby z elementami komiksu.<br />
<br />
Czytelnikowi oddanych zostało prawie 30 znakomitych artykułów, jednych z najwybitniejszych ludzi IT. Eseje doskonale się wzajemnie równoważą, przeczytamy o stricte technicznych rzeczach, by za chwilę trafić na rozważania na tematy około-programistyczne, czy o umiejętnościach miękkich. Wiele razy wpisy te otworzyły mi oczy i pozwoliły spojrzeć na omawiane problemy z innej perspektywy. Praktycznie każdy zasługuje na miano najlepszego, ale najbardziej w mój gust trafiły:<br />
- Prosto, zwyczajnie, po ludzku<br />
- Wielcy hakerzy,<br />
- Pasja,<br />
- Grupa sama dla siebie jest największym wrogiem,<br />
- Loteria zatrudniania,<br />
<br />
Tłumaczenie jest dobre, natomiast dostrzec można kilka literówek. Wydanie jest na standardowym papierze, czarno-białe. Objętość książki to 310 stron. Polecam ją każdemu, kto ma styczność ze światem IT, czy to programista, czy manager. Książka świetna do zrelaksowania się, na przykład w czasie podróży.<br />
<div>
<br />
Cena: około 30-40zł<br />
<div style="border: 0px; font-family: Helvetica, Arial, 'Droid Sans', sans-serif; font-size: 14px; line-height: 19.983333587646484px; margin: 0px; padding: 0px;">
<br clear="none" /></div>
</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com1tag:blogger.com,1999:blog-771921502020746664.post-27849977375015288572012-10-25T00:31:00.000+02:002012-10-25T00:32:32.437+02:00Eclipse - #2 Wstępna konfiguracja<div class="separator" style="clear: both; text-align: center;">
<a href="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" /></a></div>
Pracodawca płaci za czas programisty i nie lubi, gdy programista marnuje ten czas. Dobre <a href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> to połowa sukcesu w drodze do efektywności. Druga połowa to dobrze skonfigurowane IDE, skrojone na miarę dla programisty, idealnie pasujące do jego preferencji. W dzisiejszym wpisie, opiszę wstępną konfigurację Eclipse.<br />
<br />
<br />
<a name='more'></a><br />
<b><span style="font-size: large;">1. Zmiana długości linii dla formattera JAVA:</span></b><br />
<b>Window > Preferences > Java > Code Style > Formatter</b><br />
W celu zmiany długości linii dla Formattera Java należy utworzyć swój profil ustawień i go wedytować. W zakładce <b>Line Wrapping</b> w polu <b>Maximum line width</b> ustawiamy maksymalną długość linii w liczbie znaków. W innych zakładkach możemy również zmieniać takie opcje jak wielkość wcięcia, podświetlanie białych znaków itp.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX28F_12ZXx9e3vMaVleXocVtBXo7H0EfNK59MCsDptP_YGqCNCxdZ-JJYaMfEsnapRtgYbeeGlpWetOUaykW_92pDlWEGm2HLdrM2yETzmm4boYyAYtMv3rbHL8bLf3F2ZcSXgz3KmXu-/s1600/javaFormatter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX28F_12ZXx9e3vMaVleXocVtBXo7H0EfNK59MCsDptP_YGqCNCxdZ-JJYaMfEsnapRtgYbeeGlpWetOUaykW_92pDlWEGm2HLdrM2yETzmm4boYyAYtMv3rbHL8bLf3F2ZcSXgz3KmXu-/s1600/javaFormatter.png" width="333" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Utworzenie i edycja profilu ustawień formattera</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHRUyQnLB5Bbr4CYqf-qRkkEp5PSE5WP23O05GZRJCsmyL4z67wDouvYVlqmtMuGFPFmx97c-gW1DHsqgXDTLpbFKgc2v6KeHXebqFX1FD9qHd9Tna6thrBUmpyr0Wp_HqbDmuFaSb1PHL/s1600/lineWrapping.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHRUyQnLB5Bbr4CYqf-qRkkEp5PSE5WP23O05GZRJCsmyL4z67wDouvYVlqmtMuGFPFmx97c-gW1DHsqgXDTLpbFKgc2v6KeHXebqFX1FD9qHd9Tna6thrBUmpyr0Wp_HqbDmuFaSb1PHL/s1600/lineWrapping.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Line wrapping</td></tr>
</tbody></table>
<br />
<span style="font-size: large; font-weight: bold;">2. Zmiana długości linii dla formattera HTML:</span><br />
<b>Window > Preferences > Web > HTML Files > Editor</b><br />
Zmiana długości w polu <b>Line width</b>.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkxc0yMPqARoYA0-mG5hSFU0Uaged5LCVABPcNVq-6S1pVpjfA-83v-IpEslaXWlFBXOyGqk43f2JcyHCefSOAAxfi6LxfgLc3nkxWC7izKKPj6UCtZpTYlQnk_SS3ziqv6PbafaG21zdV/s1600/htmlLineWidth.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkxc0yMPqARoYA0-mG5hSFU0Uaged5LCVABPcNVq-6S1pVpjfA-83v-IpEslaXWlFBXOyGqk43f2JcyHCefSOAAxfi6LxfgLc3nkxWC7izKKPj6UCtZpTYlQnk_SS3ziqv6PbafaG21zdV/s1600/htmlLineWidth.png" width="335" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Długość linii w plikach HTML</td></tr>
</tbody></table>
Polecam również dostosowanie długości i rodzaju wcięcia.<br />
<br />
<span style="font-size: large; font-weight: bold;">3. Zmiana długości linii dla formattera CSS:</span><br />
<b>Window > Preferences > Web > CSS Files > Editor</b><br />
Analogicznie jak wyżej - pole <b>Line width</b>.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGn0EvXkovHB3dU5ZAFTqpq2WLguXRNogUG5C9vsvrKrLkeUFkm5Atcfg7psaJNqY0HaBDJYF_wfgFEUlFBxwZT4qlxvR6-oEdN0q1VQRaEu9qyOfossJ47ZpvCQknZUESJ16HH8uqeN29/s1600/cssFormatter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGn0EvXkovHB3dU5ZAFTqpq2WLguXRNogUG5C9vsvrKrLkeUFkm5Atcfg7psaJNqY0HaBDJYF_wfgFEUlFBxwZT4qlxvR6-oEdN0q1VQRaEu9qyOfossJ47ZpvCQknZUESJ16HH8uqeN29/s1600/cssFormatter.png" width="331" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Długość linii w plikach CSS</td></tr>
</tbody></table>
<br />
<span style="font-size: large; font-weight: bold;">4. Zmiana długości linii dla formattera XML:</span><br />
<div>
<b>Window > Preferences > XML > XML Files > Editor</b><br />
Również pole <b>Line width.</b><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizP7BOoq0nSHBOsfmW238Ljh9OuY0mlSqwipkH-ibMIKqPctrqoETXnQ92naYA6zVsSbFkY0VJXKTwKJy0DzNgxyPGMnkjV3Sy6_4klX3g0FnTAn651cVpsdQW-opNMNLF0QuCjrDZ7TP9/s1600/xmlFormatter.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizP7BOoq0nSHBOsfmW238Ljh9OuY0mlSqwipkH-ibMIKqPctrqoETXnQ92naYA6zVsSbFkY0VJXKTwKJy0DzNgxyPGMnkjV3Sy6_4klX3g0FnTAn651cVpsdQW-opNMNLF0QuCjrDZ7TP9/s1600/xmlFormatter.png" width="331" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Długość linii dla plików XML</td></tr>
</tbody></table>
</div>
<br />
<span style="font-size: large; font-weight: bold;">5. Otwieranie pliku XML</span><br />
Jeśli posiadamy doinstalowaną wtyczkę Androida dla Eclipse, możemy mieć problemy przy formatowaniu plików XML. Otóż powyższe ustawienia mogą nie działać. Przyczyna leży w tym, że po zainstalowaniu SDK Androida dla Eclipse, domyślnym programem do otwierania plików XML staje się Android Common XML Editor, dla którego te ustawienia nie mają zastosowania. W celu zmiany domyślnego edytora do otwierania plików XML należy wejść w:<br />
<b>Window > Preferences > General > Editor > File Associations</b><br />
w górnej części wybrać <b>*xml</b>, a niżej wybrać jako domyślny <b>XML Editor</b>.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7rqPZexCm5wjn4sotvTwPVGhdFJAiCikkkwO2OIqbwruy541i-JC1iPxiuMJDX0bf_dMUymhW6qLpSpk9A750wzYPUiawCvzz9g-dOHgWgOGV7iDmZmK6Kef1kJw04BtdktpZVJhN0Q_m/s1600/xmlDefaultAssociation.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="333" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7rqPZexCm5wjn4sotvTwPVGhdFJAiCikkkwO2OIqbwruy541i-JC1iPxiuMJDX0bf_dMUymhW6qLpSpk9A750wzYPUiawCvzz9g-dOHgWgOGV7iDmZmK6Kef1kJw04BtdktpZVJhN0Q_m/s1600/xmlDefaultAssociation.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">XML domyślny edytor</td></tr>
</tbody></table>
<br />
<span style="font-size: large; font-weight: bold;">6. Zestaw kolorów edytora Eclipse</span><br />
<b>Window > Preferences > General > Appearance > Color Theme</b><br />
Nie każdemu mogą odpowiadać ciemne znaki na jasnym tle (np. mi), dlatego ustawienia kolorystyczne można zmienić w powyższy sposób. W Eclipse domyślnie dodanych jest kilka tematów kolorystycznych, a dla marudnych polecam <a href="http://eclipsecolorthemes.org/" target="_blank">tę stronę</a>.<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM3CsT1cfKmjd8lrSMl2yFnCn36FcBtxHW9zUaMpshyiYxSFX1t2u0TrGhjPCT8Rx_asXXlW5AJvuqrjViDwVEbIBjHxKhZrX6rtBODaDZ7a0EhDuPulpSrrrttD9A3amNooIluL0naYIS/s1600/colorTheme.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM3CsT1cfKmjd8lrSMl2yFnCn36FcBtxHW9zUaMpshyiYxSFX1t2u0TrGhjPCT8Rx_asXXlW5AJvuqrjViDwVEbIBjHxKhZrX6rtBODaDZ7a0EhDuPulpSrrrttD9A3amNooIluL0naYIS/s1600/colorTheme.png" width="372" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">RecognEyes - mój ulubiony - jeśli dobrze pamiętam, nie ma go domyslnie w Eclipse</td></tr>
</tbody></table>
<br />
<span style="font-size: large; font-weight: bold;">7. Lokalizacja klucza publicznego i prywatnego</span><br />
<div>
<b>Window > Preferences > General > Network Connections > SSH2</b><br />
Zmiana domyślnej lokalizacji klucza publicznego i prywatnego może być przydatna podczas konfigurowania Gita dla Eclipse.</div>
<div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGYhDn9Oeps_yJ22hceFSOWtIEWYnzxC5RbcM6Kq4f_gQywpYGN0Ebl-NTfsAVys6oJOCkxxL4r_fIgUHNYtL5J4qsY6yUYX_BI1pTadCJzTd_glXixrWRKOb-e4CH0iZ3zUT7ThbPWhKM/s1600/sshKeys.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGYhDn9Oeps_yJ22hceFSOWtIEWYnzxC5RbcM6Kq4f_gQywpYGN0Ebl-NTfsAVys6oJOCkxxL4r_fIgUHNYtL5J4qsY6yUYX_BI1pTadCJzTd_glXixrWRKOb-e4CH0iZ3zUT7ThbPWhKM/s1600/sshKeys.png" width="372" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Klucze - ustawienia domyślne</td></tr>
</tbody></table>
<br />
To chyba wszystkie podstawowe rzeczy, które zmieniam w "świeżym" Eclipse. Powyższe wskazówki sprawdzone zostały na <b>Eclipse Juno</b>, ale na starszych też powinny być OK.<br />
<br />
Co Waszym zdaniem można jeszcze zmienić po instalacji nowego Eclipse?</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-54776377926896012922012-10-19T14:36:00.001+02:002012-10-19T14:41:47.477+02:00jQuery i slider z różnym czasem wyświetlania slajdów<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5J0qmk0JlwdLmcyOr3NjPPr9fh72ij_SbtwMyWcc3Kl38_MGd6D0Ikf2tc6ck7L7VbsWtpAHprqJqijJBTZ8yqc8ffkTAFJThoP8ehY-wTtuh02aPYgLzQKsaVqNNZSbyZDO16-QcI6Q/s1600/jquery_logo_color_onwhite.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="76" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5J0qmk0JlwdLmcyOr3NjPPr9fh72ij_SbtwMyWcc3Kl38_MGd6D0Ikf2tc6ck7L7VbsWtpAHprqJqijJBTZ8yqc8ffkTAFJThoP8ehY-wTtuh02aPYgLzQKsaVqNNZSbyZDO16-QcI6Q/s1600/jquery_logo_color_onwhite.png" width="320" /></a></div>
<span style="background-color: white;">Stworzenie standardowego slidera przy pomocy jQuery jest raczej proste. W moim przypadku, problem rozpoczął się, gdy czas wyświetlania poszczególnych slajdów był różny, wczytywany z pliku XML. Chciałbym przedstawić fragment kodu, który wykonuje to zadanie.</span><br />
<span style="background-color: white;"></span><br />
<a name='more'></a><span style="background-color: white;">Oto cały kod:</span>
<span style="background-color: white;"><br /></span>
<pre class="brush:js">animationTime = 1000; //czas trwania wszelkich animacji
xmlURLLocal = "adres/sample.xml";
XML = null; //zmienna globalna, uchwyt do XML'a
error = false; //czy wystapil error podczas pobierania slajdu
index = 0; //globalna zmienna, index, ktory obecnie slajd jest wyswietlany
var slidesDisplayed = 0;//liczba wyswietlonych slajdow
intervalTime = 3000; //domyslny czas wyswietlania 1 slajdu
myInterval = null; //globalny uchwyt do obiektu Interval, ktory odpowiada za okresowe wyswietlanie slajdow
//startujemy
function welcome() {
$('#footer').hide(); //ukryj footer
$('#main').hide().fadeIn(animationTime); //pokaz z animacja napis glowny
$('#loading').hide().fadeIn(100, getXML); //pobierz XML
if (error == false)
$('#loading').hide().fadeIn(animationTime, parseXML);
}
//pobierz ajaxowo XML ze slajdami
function getXML() {
$.ajax({
type: "GET",
url: xmlURLLocal,
dataType: "xml",
success: successXML, //jesli sukces
error: errorXML //jesli error
});
}
//jesli wystapil error podczas pobierania slajdu, wyswietl informacje o tym i ustaw zmienna globalna na true
function errorXML() {
$('#loading').html("Wystapil blad podczas pobierania XML'a. Sprawd polaczenie z serwerem.");
error = true;
}
//jesli z sukcesem pobrano XML bo piszemy o poprawnie wykonanej akcji i ustawiamy zmienna globalna z XMLem
function successXML(xml) {
$('#loading').text("Poprawnie pobrano XML.");
XML = xml;
}
//parsuj XML, co okreslony czas, ta funkcja powinna wykonac sie tylko raz, po kazdym pobraniu slajdu
function parseXML() {
if (error == false)
myInterval = setInterval("getOneSlide()", intervalTime);
}
//funkcja do pobierania pojedynczego, kolejnego slajdu
function getOneSlide() {
$('#footer').fadeIn(animationTime);
var tab = $(XML).find("slide");//tablica ze slajdami
var size = tab.length;//liczba slajdow w kolejce
var slide = tab[index];//n-ty slajd
intervalTime = parseInt($(slide).attr("delay")); //ustaw czas trwania slajdu
//CO ILE MA POBIERAC NOWE SLAJDY???
//obecnie pobiera nowy XML na przedostatnim slajdzie
if (slidesDisplayed == size-1) {
getXML(); //pobierz XML
slidesDisplayed = 0; //wyzeruj licznik wyswietlonych slajdow
}
else {
getTemplate(slide); //pobierz odpowiedni template
$("#content").hide().html(htmlContent).fadeIn(animationTime); //wyswietl to, co przygotowal template
//idz do nastepnego slajdu albo zacznij od poczatku
if (index == tab.length-1) {
index = 0;
}
else {
index++;
}
slidesDisplayed++; //zwieksz licznik wyswietlonych slajdow
}
//wyczysc interval i utworz nowy, o danym czasie trwania delay'a
clearInterval(myInterval);
myInterval = setInterval("getOneSlide()", intervalTime);
}
</pre>
Ustawienie wyświetlania slajdu przez dany okres czasu następuje w funkcji parseXML() w linii:
<br />
<pre class="brush:js">myInterval = setInterval("getOneSlide()", intervalTime);
</pre>
<br />
Kluczowy w tym przykładzie jest następujący fragment:
<br />
<pre class="brush:js">//wyczysc interval i utworz nowy, o danym czasie trwania delay'a
clearInterval(myInterval);
myInterval = setInterval("getOneSlide()", intervalTime);
</pre>
czyli metoda clearInterval, która czyści obecny interwał czasowy, dzięki czemu możemy utworzyć nowy, z nowym czasem wyświetlania slajdu. A dokładniej z czasem, po którym ma zostać wyświetlony nowy slajd.
Kod html body:
<br />
<pre class="brush:html"><body id="body">
<div id="content">
<div class="title" id="main">Tytuł</div>
<div class="text" id="loading">Loading slides...</div>
</div>
<div id="footer">
<div class="info"></div>
<div class="datetime"></div>
<div class="clear"></div>
</div>
</body>
</pre>
oraz przykładowy plik XML:
<br />
<pre class="brush:xml"><content>
<slide>
<title>Tytul pierwszego slajdu</title>
<text>Tekst pierwszego slajdu</text>
</slide>
<slide>
<title>Tytul drugiego slajdu</title>
<text>Tekst drugiego slajdu</text>
</slide>
</content>
</pre>
Mam nadzieję, że przykład okazał się przydatny. Wszelkie uwagi mile widziane.
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-29594597747308028322012-10-09T00:59:00.000+02:002012-10-09T00:59:38.961+02:00Java Traps #1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7B_n11JZMmj7c3RKgRMiJDlN-FEbeWeUtnf787YGiEWYMbOQ059TneSuyROBrngiQSzL-IeQrPZkSLeKDtr_ptyFAt6yBxAVT0EQJ_w-kriqzELx-ZDFg0rfQJ1ku75xbFOcz3z6wESo/s1600/200px-Java_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7B_n11JZMmj7c3RKgRMiJDlN-FEbeWeUtnf787YGiEWYMbOQ059TneSuyROBrngiQSzL-IeQrPZkSLeKDtr_ptyFAt6yBxAVT0EQJ_w-kriqzELx-ZDFg0rfQJ1ku75xbFOcz3z6wESo/s1600/200px-Java_logo.png" /></a></div>
Tym wpisem chciałbym rozpocząć serię postów na temat języka programowania Java i ciekawych(lub nie) rzeczy, które można w tym języku spotkać. Będę chciał odpowiadać też na pytania, które sam zadaję "Czy da się tak zrobić?", "Co się stanie gdy zrobię tak i tak?". Zapraszam.<br />
<br />
<br />
<br />
<br />
<br />
<a name='more'></a>Czy jest możliwe dziedziczenie klasy A po klasie B, która dziedziczy po klasie C, która dziedziczy po klasie A? Jednym słowem, czy jest możliwa pętla dziedziczenia i jak na to zareaguje IDE oraz kompilator?<br />
<br />
Mamy taką klasę, która zawiera klasy prywatne, wzajemnie po sobie dziedziczące:<br />
<br />
<pre class="brush:java">package javaTraps;
public class PetlaDziedziczenia {
private class A extends F {
}
private class B extends A {
}
private class C extends B {
}
private class D extends C {
}
private class E extends D {
}
private class F extends E {
}
}
</pre>
<br />
Oto reakcja IDE:
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLq-iWK6ezSGnFBO-7XAUzAadh_zZ64vx3xIpYqFdmfC2f53Eb_eym59QtNjehttBen7ZSIK_sK1QEygSzlehDznqJOfnPjbzlaMcnksOD1MpPEw_3ykuSlNhWRBhFD-Bg5rpEbsQ2xDx0/s1600/petlaDziedziczenia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLq-iWK6ezSGnFBO-7XAUzAadh_zZ64vx3xIpYqFdmfC2f53Eb_eym59QtNjehttBen7ZSIK_sK1QEygSzlehDznqJOfnPjbzlaMcnksOD1MpPEw_3ykuSlNhWRBhFD-Bg5rpEbsQ2xDx0/s400/petlaDziedziczenia.png" width="380" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Widać wskazanie na błąd przy wszystkich klasach. Przy klasach A, C, D, E, F komunikat błędu jest następujący:</div>
<blockquote class="tr_bq">
The hierarchy of type C <span style="font-size: xx-small;">(tu wstaw odpowiednią klasę)</span> is inconsistent.</blockquote>
Przy klasie B natomiast komunikat jest taki:<br />
<blockquote class="tr_bq">
Cycle detected: a cycle exists in the type hierarchy between PetlaDziedziczenia.B and PetlaDziedziczenia.A
</blockquote>
Widać więc, że prekompilacja wykonana przez IDE wykryła pętlę dziedziczenia.<br />
Próba kompilacji zwraca taki błąd:<br />
<blockquote class="tr_bq">
[tobiasz@tobiasz javaTraps]$ javac PetlaDziedziczenia.java <br />
PetlaDziedziczenia.java:6: error: cyclic inheritance involving PetlaDziedziczenia.A<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>private class A extends F {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> ^<br />
1 error</blockquote>
Czyli w zasadzie wszystko jest ok. Jesteśmy ostrzegani przed błędem i pętla nie jest możliwa.<br />
Zapraszam do zapoznania się z <a href="http://sortris.blogspot.com/2011/05/java-zagadka.html" target="_blank">podobnym wpisem</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-53588120581614742912012-10-03T15:13:00.001+02:002012-10-03T15:13:47.829+02:00Eclipse - #1 Instalacja<div class="separator" style="clear: both; text-align: center;">
<a href="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://javastart.pl/wp-content/uploads/2011/03/eclipse_ide.jpg" /></a></div>
Pracodawca płaci za czas programisty i nie lubi, gdy programista marnuje ten czas. Dobre <a href="http://en.wikipedia.org/wiki/Integrated_development_environment" target="_blank">IDE</a> to połowa sukcesu w drodze do efektywności. Druga połowa to dobrze skonfigurowane IDE, skrojone na miarę dla programisty, idealnie pasujące do jego preferencji. Tym postem na temat instalacji, chciałbym rozpocząć 4-częściową serię wpisów na temat Eclipse IDE oraz jego dopasowywania do naszych wymagań.<br />
<br />
<a name='more'></a><strong><span style="font-size: large;">Instalacja</span></strong><br />
<div>
1) Wchodzimy na tę stronę [<a href="http://www.eclipse.org/downloads/" id="" shape="rect" target="_blank">http://www.eclipse.org/downloads/</a>] i pobieramy <b>Eclipse IDE for Java EE Developers</b>, 219 MB Linux 32 lub 64 bit.</div>
<div>
<br /></div>
<div>
2) Wypakowujemy to, co pobraliśmy:</div>
<div>
<pre class="brush:bash">tar xzf eclipse-SDK-3.7-linux-gtk-x86_64.tar.gz</pre>
</div>
<div>
<br />
3) Przenosimy do /opt/ i nadajemy uprawnienia</div>
<div>
<pre class="brush:bash">sudo mv eclipse /opt/
sudo chown -R root:root /opt/eclipse
sudo chmod -R +r /opt/eclipse
</pre>
</div>
<div>
<br />
4) Tworzymy plik wykonwaylny</div>
<div>
<pre class="brush:bash">sudo touch /usr/bin/eclipse
sudo chmod 755 /usr/bin/eclipse
sudo nano /usr/bin/eclipse
</pre>
</div>
<div>
Wklejamy to do utworzonego pliku:</div>
<div>
<pre class="brush:bash">#!/bin/sh
#export MOZILLA_FIVE_HOME="/usr/lib/mozilla/"
export ECLIPSE_HOME="/opt/eclipse"
$ECLIPSE_HOME/eclipse $*
</pre>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<pre xml:space="preserve"></pre>
<pre xml:space="preserve"></pre>
</div>
<div>
5) Tworzymy element menu Gnome:</div>
<div>
<pre class="brush:bash">sudo nano /usr/share/applications/eclipse.desktop</pre>
</div>
<div>
<br /></div>
<div>
wklejamy:</div>
<div>
<pre class="brush:bash">[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=eclipse
Icon=/opt/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
</pre>
</div>
<div>
<br />
6) Uruchamiamy Eclipse za pierwszym razem:</div>
<div>
<pre class="brush:bash">/opt/eclipse/eclipse -clean &</pre>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAGxSjHRLg17gq5PSU0pAg_joi_oXsVlE7oa0RQToMPWF4epoH1oU-qtN5HPFkkgUIjN5ROoZ_BvCwV8E4qJ1zeDqyoItbC-k4dFtCwzwpHS_b0Y7ndTcvlYdfplw7f7y1__Q8GFAH5qCu/s1600/eclipse1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAGxSjHRLg17gq5PSU0pAg_joi_oXsVlE7oa0RQToMPWF4epoH1oU-qtN5HPFkkgUIjN5ROoZ_BvCwV8E4qJ1zeDqyoItbC-k4dFtCwzwpHS_b0Y7ndTcvlYdfplw7f7y1__Q8GFAH5qCu/s320/eclipse1.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFIEHdU4eckHBaxb_86Cil5kOCyKIVV2Tfy8Tpq6_qNvXk2JEzKW5nGTqnYS7UVmxCDxiE6CEUy456ULKmvYGoFbHg3bF3HDpHlO5T5jtw73wUNLJ0CLZyhra_ZzSwQyNtblCOGteaVQA8/s1600/eclipse2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFIEHdU4eckHBaxb_86Cil5kOCyKIVV2Tfy8Tpq6_qNvXk2JEzKW5nGTqnYS7UVmxCDxiE6CEUy456ULKmvYGoFbHg3bF3HDpHlO5T5jtw73wUNLJ0CLZyhra_ZzSwQyNtblCOGteaVQA8/s400/eclipse2.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
7) Element menu Gnome pojawi się w Programy > Programowanie > Eclipse</div>
<div>
</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com1tag:blogger.com,1999:blog-771921502020746664.post-79460819247564552142012-09-26T01:51:00.000+02:002012-09-26T01:51:54.442+02:00Nvidia i dpkg: błąd przetwarzania libgl1-nvidia-alternatives<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://upload.wikimedia.org/wikipedia/en/thumb/2/21/Nvidia_logo.svg/230px-Nvidia_logo.svg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://upload.wikimedia.org/wikipedia/en/thumb/2/21/Nvidia_logo.svg/230px-Nvidia_logo.svg.png" /></a></div>
Podczas instalacji pakietów dotyczących głównie środowiska graficznego i sterowników do karty graficznej NVIDIA, coś może pójść nie tak. Na moim Debianie Wheezy właśnie coś poszło nie tak.<br />
<br />
<br />
<br />
<br />
<a name='more'></a><br />
Jeśli przy instalacji dowolnego pakietu widzisz ten błąd:<br />
<blockquote class="tr_bq">
dpkg: błąd przetwarzania libgl1-nvidia-alternatives</blockquote>
zalecam wykonanie następujących kroków:<br />
1. Próbujemy oczyścić przy pomocy:<br />
<pre class="brush:bash">sudo aptitude purge nvidia~i</pre>
<br />
<div>
2. Jeśli powyższe nie pomoże to:</div>
<div>
<pre class="brush:bash">dpkg-divert --list</pre>
<br /></div>
<div>
3. Następnie dla takiego wyniku:</div>
<div>
<pre class="brush:bash">diversion of /usr/lib/libGL.so to /usr/lib/nvidia/diversions/libGL.so by libgl1-nvidia-alternatives
diversion of /usr/lib/libGL.so.1 to /usr/lib/nvidia/diversions/libGL.so.1 by libgl1-nvidia-alternatives
diversion of /usr/share/vim/vim72/doc/help.txt to /usr/share/vim/vim72/doc/help.txt.vim-tiny by vim-runtime
diversion of /usr/share/man/man1/sh.1.gz to /usr/share/man/man1/sh.distrib.1.gz by dash
diversion of /usr/bin/firefox to /usr/bin/firefox.real by iceweasel
diversion of /usr/share/vim/vim72/doc/tags to /usr/share/vim/vim72/doc/tags.vim-tiny by vim-runtime
diversion of /usr/share/dict/words to /usr/share/dict/words.pre-dictionaries-common by dictionaries-common
diversion of /bin/sh to /bin/sh.distrib by dash</pre>
<div>
<br /></div>
<div>
wykonujemy to:</div>
<div>
<pre class="brush:bash">sudo dpkg-divert --remove /usr/lib/libGL.so.1
sudo dpkg-divert --remove /usr/lib/libGL.so</pre>
</div>
<div>
<br /></div>
<div>
4. I ponownie: </div>
<div>
<pre class="brush:bash">sudo aptitude purge nvidia~i</pre>
</div>
<div>
<br /></div>
<div>
5. I jest OK.</div>
</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-21410728204332371102012-09-21T21:49:00.000+02:002012-09-21T21:51:02.797+02:00Youtube Discovery<div class="separator" style="clear: both; text-align: center;">
<a href="http://academy.hubspot.com/Portals/137828/images/youtube%20logo%2005.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="150" src="http://academy.hubspot.com/Portals/137828/images/youtube%20logo%2005.png" width="200" /></a></div>
Nie jestem w stanie pracować przy komputerze, nie słuchając muzyki na słuchawkach. Często włączam sobie wybrane utwory z dysku twardego, ale co zrobić, gdy w danej chwili nie mamy ochoty na nic z naszej biblioteki? Na pomoc przychodzi znany wszystkim serwis Youtube, a dokładniej jedna z jego usług, czyli <b>Youtube Discovery</b>. Czy wiedziałeś, że coś takiego istnieje?
<br />
<a name='more'></a><br />
<br />
<br />
Zadaniem Youtube Discovery jest odkrywanie nowej muzyki, wykorzystując podaną przez nas nazwę artysty. Na początku serwuje nam kilka utworów tegoż wykonawcy. Następnie playlista przełącza się na artystów podobnych do wskazanego. Wszystko odtwarzane jest w formie playlisty, więc dowolnie możemy kolejność modyfikować, czy zapętlać. Niestety usługa nie wspiera dobrze polskich wykonawców.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXKCOq5bjfjussljBi-q4SDoIQgYeG8f8KvrLywZ1vflURGoQ8zJeksRPu6HsL87AhZPDGEWtdGPpXVgVxRer-ir9S20zRUNNxEmNubPU8RWYRH-Ecsmi3U5Bnfqnqx9KklSAkxAFprSn/s1600/ytDisco.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQXKCOq5bjfjussljBi-q4SDoIQgYeG8f8KvrLywZ1vflURGoQ8zJeksRPu6HsL87AhZPDGEWtdGPpXVgVxRer-ir9S20zRUNNxEmNubPU8RWYRH-Ecsmi3U5Bnfqnqx9KklSAkxAFprSn/s400/ytDisco.png" width="400" /></a></div>
<br />
<br />
<b><span style="font-size: large;">Co podoba mi się w Youtube Discovery?</span></b><br />
- Idea. Podajemy znanego nam wykonawcę, a otrzymujemy podobnych, których twórczość może przypaść nam do gustu.<br />
- Odtwarzanie wszystkiego jako playlisty, nie muszę otwierać karty i ręcznie włączać następnych utworów.<br />
<blockquote class="tr_bq">
Adres: <a href="http://www.youtube.com/disco">www.youtube.com/disco</a></blockquote>
Youtube Discovery to moim zdaniem świetna alternatywa, gdy znudzimy się kolekcją muzyczną posiadaną na dysku. Świetnie nadaje się również do odkrywania nowych horyzontów muzycznych, w kontrolowanym przez nas kierunku.Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-49994498590197750482012-09-04T15:46:00.000+02:002012-09-04T15:52:09.031+02:00Eric A.Meyer "Podręcznik CSS" - recenzja<div class="separator" style="clear: both; text-align: center;">
<a href="http://nokautimg1.pl/p-88-dc-88dc81dbdaa383d31fdb5e82baff511f500x500/podrecznik-css-eric-meyer-o-tworzeniu-nowoczesnych-ukladow-stron-www-smashing-magazine.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="http://nokautimg1.pl/p-88-dc-88dc81dbdaa383d31fdb5e82baff511f500x500/podrecznik-css-eric-meyer-o-tworzeniu-nowoczesnych-ukladow-stron-www-smashing-magazine.jpg" width="200" /></a></div>
<span>Tym wpisem chciałbym rozpocząć serię recenzji książek na temat programowania. Na początek opiszę swoje wrażenia po lekturze "Podręcznik CSS. </span>Eric Meyer o tworzeniu nowoczesnych układów stron WWW. Smashing Magazine<span>", której autorem jest <a href="http://meyerweb.com/" target="_blank">Eric A. Meyer</a>. Data polskiego wydania to lipiec 2011 roku. Mimo, że rok w tej dziedzinie to ogromny kawał czasu, książka omawia ponadczasowe techniki, które mogą się przydać każdemu webdeveloperowi.</span><br />
<br />
<br />
<br />
<a name='more'></a><blockquote class="tr_bq">
"Eric A. Meyer jest znanym na całym świecie specjalistą od języków HTML i CSS oraz standardów sieciowych. Pracuje w tym zawodzie już od 1993 roku! Jest założycielem firmy Complex Spiral Consulting, której klientami są takie koncerny jak Apple, Adobe czy Microsoft. Meyer jest również autorem pięciu bestsellerów poświęconych tematyce kaskadowych arkuszy stylów i projektowania stron (...)"<br />
Źródło: www.helion.pl</blockquote>
<b><span style="font-size: large;"><br /></span></b>
<b><span style="font-size: large;">Rozdział 1 "Narzędzia"</span></b><br />
to omówienie narzędzi obowiązkowych dla każdego webdevelopera. Autor skupia się na zaprezentowaniu <a href="http://getfirebug.com/" target="_blank">FireBug'a</a>, czy dodatku o nazwie <a href="https://addons.mozilla.org/pl/firefox/addon/web-developer/" target="_blank">WebDeveloper</a> oraz specyficznych dodatkach dla wszystkich popularnych przeglądarek (FF, Chrome, Safari, Opera i nawet IE). Omawia też bardzo ciekawą rzecz, jaką jest diagnostyczny arkusz stylów. Służy on do zdiagnozowania wadliwych konstrukcji CSS i HTML zawartej na naszej stronie, ale takich, których nie wyłapie walidator <a href="http://validator.w3.org/" target="_blank">ten</a> i <a href="http://jigsaw.w3.org/css-validator/" target="_blank">ten</a>. Kolejnym ciekawym narzędziem jest specjalny arkusz stylów CSS służący do <b>zerowania</b> domyślnych stylów zastosowanych w przeglądarkach. Ostatnie narzędzie to skrypt IE9, który pomaga przeglądarce nadgonić straty względem konkurencji, a twórcy stron umożliwić tworzenie spójnego wyglądu dla wszystkich przeglądarek.<br />
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Rozdział 2 "Selektory"</span></b></div>
<div>
omawia selektory CSS wraz z pseudoelementami oraz pseudoklasami. Bardzo dużo dał mi podrozdział o tytule <u>"precyzja selektorów"</u>, który rozjaśnił dlaczego niektóre selektory CSS nie działały, a moim zdaniem powinny. Omówione zostają też takie zagadnienia jak własności, selektor uniwersalny. Bardzo spodobała mi się treść na temat selektorów atrybutów, selektorów atrybutu class, a także selektorów podłańcuchów wartości atrybutów (nie wiedziałem, że przy pomocy CSS takie coś jest możliwe). Rozdział zawiera też podstawy, takie jak selektory dzieci czy przypisanie wielu klas do jednego elementu.</div>
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Rozdział 3 "Porady"</span></b></div>
<div>
to hasło <u>"nie jedz ołowiu"</u> i inne wskazówki. Dowiemy się wszystkiego, co powinno nam skrócić czas pracy oraz szukania błędu, gdy coś nie działa poprawnie.</div>
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Rozdział 4 "Układy"</span></b></div>
<div>
nie mówi o włoskiej mafii, ale o układach elementów na stronie. Autor przedstawia najbardziej znane techniki do tworzenia wielokolumnowych stron. Omówionych układów jest kilka, a do nich dochodzą również przykłady pozycjonowania na sztywno nagłówków i stopek. Bardzo ciekawy i przydatny materiał.</div>
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Rozdział 5 "Efekty"</span></b></div>
<div>
jest opisem tworzenia efektów przy pomocy starych technik CSS, które w większości wyszły już z użycia. Dowiemy się jak tworzyć przezroczyste tło, aby prawidłowo działało w IE6, czy też jak zaokrąglać rogi i tworzyć menu podręczne. Warto się jednak z nimi zapoznać, nie tylko dla samej nauki, ale dla docenienia dobrodziejstwa jakim jest CSS3 :) Najciekawszą techniką zaprezentowaną w tym rozdziale jest dla mnie tworzenie nieregularnych kształtów pływających.</div>
<div>
<br clear="none" /></div>
<blockquote class="tr_bq">
<a href="http://pdf.helion.pl/tfacss/tfacss.pdf" target="_blank">Zobacz przykładowy rozdział w PDF</a>.</blockquote>
<div>
<br /></div>
<div>
<b><span style="font-size: large;">Rozdział 6 "Tabele"</span></b></div>
<div>
to omówienie podstawowych i zaawansowanych zastosowań poczciwych tabel. Nauczymy się tworzyć nagłówki wierszy, dowiemy się, że element <br />
ma atrybut <b>scope</b> oraz jak rozmieścić komórki tabeli w sposób nieregularny! Autor pokaże nam również jak stworzyć wykres przy pomocy tabeli.<br />
</div>
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Rozdział 7 "Pieśni przyszłości"</span></b></div>
<div>
stanowi zgrabne przejście z HTML4 i starego CSS do HTML5 i CSS3. Autor niestety bardzo pobieżnie opisuje najnowsze techniki, ale mimo to, przedstawia kilka ciekawych przykładów.</div>
<div>
<br clear="none" /></div>
<div>
Książka ma 272 stron i wydana została w kolorze na papierze kredowym, co idealnie sprawdza się przy tego typu publikacji. Tłumaczenie jest dobre, lecz zdarzają się błędy, które uważny czytelnik z łatwością wyłapie. <a href="http://helion.pl/errata.cgi?id=tfacss" target="_blank">Tutaj dostępne są erraty</a>. Nie pamiętam jej ceny, gdyż zamówiłem ją dawno z Promocji Dnia na stronie wydawnictwa Helion, ale oscylowała w granicach 35zł. Warto dodać, że książka wyszła pod patronatem <a href="http://www.smashingmagazine.com/" target="_blank">Smashing Magazine</a>, co w pewnym sensie jest jakością samą w sobie.</div>
<div>
<br clear="none" /></div>
<div>
<b><span style="font-size: large;">Dla kogo jest ta książka?</span></b></div>
<div>
Sam autor na wstępie pisze, że książka jest dla średniozaawansowanych i z tym się zgadzam. Podstawy CSS są wymagane. Książka natomiast w dobry sposób porządkuje wiedzę i uczy zaawansowanych i cennych technik. W głównej mierze omawia ponadczasowe sztuczki przy pomocy starego CSS. Autor <b>w żadnym przykładzie</b> nie odpuszcza zgodności z przeglądarką Internet Explorer, co jest dużym plusem. Polecam książkę każdemu, kto zna podstawy CSS i chce poznać nowe techniki oraz uporzadkować wiedzę, jednocześnie zahaczając o CSS3.</div>
<div>
<br /></div>
<div>
Więcej na temat nowej wersji kaskadowych arkuszy stylów znaleźć można <a href="http://www.css3generator.com/" target="_blank">tu</a> oraz <a href="http://www.css3please.com/" target="_blank">tu</a>.</div>
<div>
<br /></div>
<div>
PS. Nie czerpię żadnych korzyści z powyższego artykułu. Po prostu uważam, że książka warta jest swojej ceny.</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-3547292966146959662011-07-31T00:10:00.008+02:002012-08-25T20:28:19.514+02:00mBank i pojęcie "transakcji bezgotówkowej"<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiy7IO9F8fDM7KbFZTfybkXs-MowdErymMoOv_jbhbbHXgRWfbNb5NkGe1fIFlXmzcTvR2zu2pFOy_SP6q9x1nD9QvHSEvW9Tl_hKIU18Uqfd4Z_AFYL2YUI-HNuOqMjhFe-hl35f8Doy_/s1600/mbanklogo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiy7IO9F8fDM7KbFZTfybkXs-MowdErymMoOv_jbhbbHXgRWfbNb5NkGe1fIFlXmzcTvR2zu2pFOy_SP6q9x1nD9QvHSEvW9Tl_hKIU18Uqfd4Z_AFYL2YUI-HNuOqMjhFe-hl35f8Doy_/s1600/mbanklogo.png" /></a></div>
Kiedy mBank w 2009 roku otrzymał <a href="http://media.mbank.pl/pr/123832/mbank-znow-ozlocony-za-ekonto">Złote Godło Lauru Klienta 2009 w kategorii "Internetowe konto bankowe"</a> jego oferta wydawała się nie do przebicia - wszystko za 0zł (no, prawie wszystko, ale kto korzysta z np. przelewów <a href="http://pl.wikipedia.org/wiki/SORBNET">SORBNET</a> ?) Dziś, niemalże 2 lata po tym wydarzeniu, ceny zamiast maleć - wzrastają. Konkurencja na rynku paradoksalnie przy większej liczbie banków maleje, zamiast rosnąć. Od 1 sierpnia br. mBank wprowadza miesięczną opłatę w wysokości 2 zł za kartę debetową. Zmienia coś, co zawsze było jego główną zaletą - brak opłat.<br />
<a name='more'></a><b><span class="Apple-style-span" style="font-size: large;"><br /></span></b>
<b><span class="Apple-style-span" style="font-size: large;">Początek</span></b><br />
Z usług mBanku korzystam od prawie dwóch lat i do tej pory nie miałem najmniejszego powodu do narzekania. Ciekawe lokaty jednodniowe z limitem wpłaty 1000zł, obsługa klienta 24h/dobę dzięki możliwości czatu z konsultantami oraz całkowite 0zł opłat za wszystkie podstawowe czynności. Usługi typu, przelew krajowy do innego banku, wydanie i posiadanie karty debetowej, wypłaty z bankomatów EuroNetu i Cash4You były darmowe, czyli to, co przeciętnemu klientowi do szczęścia potrzeba. Kwestię oprocentowania rachunku oszczędnościowego pozostawię oddzielnej dyskusji, bo to była już kwestia "optymalizacji" pod kątem opłat i ewentualny wybór innego banku.<br />
<br />
Mimo wszystko, wraz z upływającym czasem, oferta mBanku zamiast stawać się bardziej atrakcyjna, zmieniała się na gorsze. Kilka miesięcy temu podniesiono limit minimalnej kwoty do 500zł do otwarcia dowolnej lokaty, średnio co 2-3 tygodnie zmieniano regulamin i obecnie nie wiem na czym stoję, bo mało kto jest w stanie to wszystko "ogarnąć", obniżono oprocentowanie na rachunku osobistym i oszczędnościowym, a od 1 sierpnia, czyli od jutra, wejdzie w życie przepis o miesięcznej opłacie w wysokości 2zł za posiadanie karty debetowej. To nie jest to, czego klienci od mBanku oczekiwali, tym bardziej, że konkurencja nie spała i stworzyła oferty korzystniejsze. Osobiście konto <b>internetowe</b> służy mi do wykonywania przelewów, a karta do wypłacania środków z konta na drobne zakupy, np. bilety. Rzadko płacę kartą, dlatego najprawdopodobniej opłata mnie nie ominie.<br />
<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Jak się uwolnić?</b></span><br />
Jednakże <a href="http://www.mbank.pl/blog/artykul,972,zmiana-w-ofercie-cenowej-kart-debetowych-od-1-sierpnia-2011-r.html">od wspomnianej opłaty za kartę, wg. mBanku możemy zwolnić się na dwa sposoby</a>:<br />
<blockquote>
<i>- wykonanie w ciągu miesiąca kalendarzowego <b>płatności bezgotówkowych</b> o łącznej wartości min. 100 PLN, dowolnymi posiadanymi kartami mBanku (debetowymi, kredytowymi, wirtualnymi - dotyczy kart z oferty dla Klientów indywidualnych) - transakcje te muszą zostać w danym miesiącu rozliczone (czyli widoczne w historii operacji wykonanych),</i><br />
<i>- posiadanie aktywnej usługi "Wypłaty ze wszystkich bankomatów"</i></blockquote>
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Transakcja bezgotówkowa</b></span><br />
W związku z powyższym napisałem maila do obsługi mBanku z pytaniem o wyjaśnienie pojęcia "transakcji bezgotówkowej". Otrzymałem odpowiedź:<br />
<blockquote>
<i>Nawiązując do Pana korespondencji uprzejmie informuję, że w celu uniknięcia opłaty za kartę debetową pod uwagę brane będą wyłącznie rozliczone transakcje bezgotówkowe, wykonane kartami dla osób fizycznych (debetowymi, kredytowymi, wirtualnymi). Łączna kwota minimalna zwalniająca z opłaty za kartę to 100 PLN.</i><br />
<br />
<i>Za transakcje bezgotówkowe zwalniające z opłaty rozumie się:</i><br />
<i>- płatności w punktach usługowych oraz handlowo-usługowych,</i><br />
<i>- płatności internetowe oraz korespondencyjno-telefoniczne,</i><br />
<i>- zakup z cashback,</i><br />
<i>- transakcje zbliżeniowe typu PayPass/PayWave,</i><br />
<i>- przelewy wykonane z karty kredytowej za pomocą usługi mTransfer. </i><br />
<br />
<i>Z transakcji bezgotówkowych wliczających się w minimalną do wykonania łączną kwotę 100 PLN wyklucza się przelewy z karty kredytowej.</i><br />
<i>Przelew środków z rachunku rozliczeniowo-oszczędnościowego nie jest transakcją kartową, tym samym nie spełnia warunków przygotowanych przez Bank celem uniknięcia opłaty za kartę debetową.</i></blockquote>
<br />
Powyższe pytanie wysłałem również do pracowników <a href="http://www.deutsche-bank-pbc.pl/">DeutscheBanku</a> i otrzymałem następującą wiadomość zwrotną:<br />
<blockquote>
<i>Szanowny Panie,</i><br />
<i>W odpowiedzi na zapytanie informujemy, iż w przypadku wykonania minimum jednej transakcji finansowej przy użyciu karty (na przykład wypłata środków z bankomatu, czy płatność kartą) w ciągu jednego miesiąca kalendarzowego, opłata nie zostanie naliczona. </i></blockquote>
<span class="Apple-style-span">W DB także mają opłatę za kartę, ale jak się okazuje na trochę innych warunkach.</span><br />
<b><span class="Apple-style-span" style="font-size: large;"><br />
</span></b><br />
<b><span class="Apple-style-span" style="font-size: large;">Podsumowanie i alternatywa</span></b><br />
W powyższych przykładach widać, że między opłatami w obydwu bankach istnieje jedna różnica: <b>w DeutscheBanku wypłata środków z bankomatu jest transakcją bezgotówkową!</b><br />
<br />
Osobiście rozważam skorzystanie z <a href="http://www.deutsche-bank-pbc.pl/index.php/l1/konta/l2/db_net_konto_internetowe">oferty internetowego konta w DeutscheBanku</a>.<br />
<br />
Zastanawiam się nad jedną rzeczą. Czy zostanę zwolniony z opłaty w mBanku jeśli nie posiadam karty kredytowej, a tylko debetową i wykonam mTransfer lub zwykły przelew?<br />
<br />
Więcej informacji o zmianach w mBanku wraz z filmem można znaleźć <a href="http://www.mbank.pl/blog/artykul,986,przypominamy-ze-1-sierpnia-2011-r-nastapi-zmiana-w-ofercie-cenowej-kart-debetowych.html">tutaj</a>.Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com8tag:blogger.com,1999:blog-771921502020746664.post-32420310308739587742011-06-25T00:54:00.010+02:002012-08-25T20:30:17.177+02:00Tworzenie mocnego hasła<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcgDeAXSCDMflOvZ6L31P-ylGfXfE84TZubrYEh2UYbykSlYvxbPAGfdGi-kbBY0XenlC32gHq4d9C8_Md2RmVXdyOHSTM049j7_FShAyixXdLQQj2fqt6cM82gvf589Ws8RcbQxWHJJq/s1600/encryption-shield.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcgDeAXSCDMflOvZ6L31P-ylGfXfE84TZubrYEh2UYbykSlYvxbPAGfdGi-kbBY0XenlC32gHq4d9C8_Md2RmVXdyOHSTM049j7_FShAyixXdLQQj2fqt6cM82gvf589Ws8RcbQxWHJJq/s1600/encryption-shield.png" /></a></div>
Z roku na rok spędzamy coraz więcej czasu przed komputerami. W tym czasie korzystamy z różnego rodzaju usług internetowych, np. z konta internetowego, e-mail. Uwierzytelnienie najczęściej przebiega przy pomocy loginu i hasła. Takich kont mamy coraz więcej, w związku z tym więcej haseł musimy stworzyć i zapamiętać. Jak stworzyć mocne hasło odporne na ataki cyberprzestępców? Przeczytaj.<br />
<br />
<a name='more'></a><br />
<b><span class="Apple-style-span" style="font-size: large;">Atak brutalnej siły</span></b><br />
Najbardziej podstawowym atakiem na hasła jest atak siłowy (atak brutalnej siły - brute force), którego celem jest sprawdzenie wszystkich możliwych kombinacji, dopóki hasło nie zostanie znalezione. Przeciętny komputer przy pomocy najpopularniejszego programu do łamania haseł (<a href="http://www.openwall.com/john/">John the Ripper</a>), potrafi sprawdzić 770000 kombinacji na sekundę! Sporo, prawda?<br />
<br />
<b>Sprawdźmy ile czasu łamane byłoby hasło 5 znakowe składające się ze znaków z alfabetu od a do z [a-z].</b><br />
Ilośc kombinacji dla danego hasła obliczamy na podstawie wzoru:<br />
<br />
<blockquote class="tr_bq">
liczba_możliwych_znaków ^ liczba_znaków_w_haśle</blockquote>
<div style="text-align: center;">
<br /></div>
w tym przypadku mamy 26^5 co daje 11881376 kombinacji. Podzielone przez 770000 operacji na sekundę daje nam około 15.5 sekundy na złamanie naszego hasła.<br />
<br />
<b>Hasło 8 znakowe z alfabetu [a-z] to już 26^8, czyli 208827064600 kombinacji</b>, podzielone przez 770000 operacji na sekundę daje 271203 sekundy, czyli 75 godzin. To już sporo, ale dla upartego nic trudnego - zaledwie 3 doby.<br />
<br />
<b>Co się stanie jeśli nasze 5 znakowe hasło ozdobimy przez jedną cyfrę i jedną dużą literę?</b><br />
Na przykład z hasła <b>qwert</b>, zrobimy <b>qw9EB</b>. Daje to nam 26 znaków z alfabetu [a-z], 26 znaków z alfabetu [A-Z] i 10 cyfr [0-9]. W sumie mamy 62 możliwe znaki i liczba kombinacji dla naszego hasła wyniesie 62^8, czyli 218340105584896 kombinacji, co daje około 9 lat na złamanie hasła.<br />
<br />
<br />
Tak się składa, że hasło qw9EB nie jest najłatwiejsze do zapamiętania, tym bardziej, że powinniśmy w każdym serwisie mieć inne hasło i myślę, że wizja zapamiętania 10 podobnych haseł nie jest najciekawsza. Dlatego człowiek upraszcza sobie tego typu sprawę i tworzy hasła długie, z wielkimi literami i cyframi, które jest odporne na atak brutalnej siły, używając do tego słów łatwych do zapamiętania, np: ania90, Azor2001, które są używane przez nas na codzień - dzięki temu mamy pewność, że ich nie zapomnimy.<br />
Dla przykładu, utworzymy długie i bezpieczne hasło o postaci: Jowisz95, ponieważ interesujemy się astronomią i Jowisz to największa planeta naszego układu słonecznego, a rok 95 to rok, w którym urodziła się nasza córeczka. Złamanie takiego hasła metodą bruteForce trwałoby około 9 lat.<br />
<br />
<b><a href="http://sortris.blogspot.com/2011/06/obliczanie-entropii-hasa.html">Sprawdź siłę swojego hasła obliczając jego entropię</a>.</b> Hasło o entropii powyżej 50 bitów uznaje się za względnie bezpieczne, a hasło o entropii powyżej 100 bitów za bardzo bezpieczne.<br />
<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Atak słownikowy</span></b><br />
Niestety nie jest tak różowo. Kiedy nasze hasło jest już względnie zabezpieczone (bo przecież to tylko kwestia lat pracy komputera, a zza horyzontu wyłaniają się już komputery kwantowe) przed atakiem brutalnej siły, nadchodzi kolejny rodzaj ataku na hasła - atak słownikowy. Metoda ta polega na tworzeniu kombinacji nie ze znaków, lecz z popularnych słów danego języka. W sieci bez problemu można znaleźć zestaw popularnych słów w języku polskim, z ktorych atakujący program tworzy kombinacje hasła. Przykładową listę słów języka polskiech znajdziemy <a href="http://packetstormsecurity.org/files/download/32015/polish.gz">tutaj</a>. Dużo łatwiej trafić w hasło firanka2000 atakiem słownikowym, niż metodą brute force. Na przykład na stronie <a href="http://www.tomshardware.com/news/imperva-rockyou-most-common-passwords,9486.html">www.tomshardware.com</a> możemy znaleźć 20 najpopularniejszych haseł na świecie (na podstawie 32 milionów haseł). Lista przedstawia się następująco:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGmneRFVj2-Ulz_tghY1IO_nziv42D9sifKmRVjbVe3jQLYUv7RYVI5ROU3jZ7U0MgfIrBge_mhvqfY66QT8b-4An9-yEArGR8hlYf7KMY_uoI0nAL4u_NaHO5j-cmuY7GcDSGiejjRT8H/s1600/CapturePW.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="363" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGmneRFVj2-Ulz_tghY1IO_nziv42D9sifKmRVjbVe3jQLYUv7RYVI5ROU3jZ7U0MgfIrBge_mhvqfY66QT8b-4An9-yEArGR8hlYf7KMY_uoI0nAL4u_NaHO5j-cmuY7GcDSGiejjRT8H/s400/CapturePW.PNG" width="400" /></a></div>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikxMMwq-TBe5ezldeIqu1-8FFWs9RPBHEFM4Wqtoz09XKtq9IGeI2FGd4alKPyU_yfoiCu2Yghzl62ffVVuyO7EkpdPx9kXGXLVSPNIydNsBM69wqCpXSNOKUpGMA17GyrUCk6wsecOIwO/s1600/CapturePW2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="336" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikxMMwq-TBe5ezldeIqu1-8FFWs9RPBHEFM4Wqtoz09XKtq9IGeI2FGd4alKPyU_yfoiCu2Yghzl62ffVVuyO7EkpdPx9kXGXLVSPNIydNsBM69wqCpXSNOKUpGMA17GyrUCk6wsecOIwO/s400/CapturePW2.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Źródło: <span class="Apple-style-span" style="font-size: x-small;">http://www.tomshardware.com/news/imperva-rockyou-most-common-passwords,9486.html</span></td></tr>
</tbody></table>
Szok, prawda?<br />
Nasze hasło w porównaniu do tych z listy, nie wygląda najlepiej. Spróbujmy poprzestawiać kilka liter, by utworzyć następujące hasło: Oj5wizs9. Zawiera te same małe litery i cyfry, ale jest już odporne na atak słownikowy. Jeśli skojarzymy nowe hasło z poprzednim, łatwo je będzie zapamiętać. Czy już jesteśmy bezpieczni?<br />
<br />
<br />
<span class="Apple-style-span" style="font-size: large;"><b>Ataki cyberprzestępców</b></span><br />
Ataki cyberprzestępców z roku na rok stają się coraz bardziej wyrafinowane. Jedne z popularniejszych dziś to ataki phishingowe, które polegają na wysyłaniu do ofiar wiadomości e-mail, w których przestępcy podają się np. za nasz bank i proszą o podanie hasła i loginu. W celu ochronienia się przed atakami phishingowymi wystarczy zapamiętać jedną prostą zasadę:<br />
<b>Nigdy nikomu nie podajemy naszego hasła, nawet jeśli podaje się za obsługę danego serwisu.</b><br />
<b><br />
</b><br />
Popularną metodą jest również podrabianie zaufanych nam stron, tylko po to byśmy zalogowali się na nie ze swoimi danymi, aby napastnik mógł zapisać nasze dane dostępowe. Dlatego istotne jest, w przypadku najważniejszych dla nas serwisów (e-mail, bank), by przy adresie strony widniała (zazwyczaj zielona) kłódka, na którą możemy kliknąć, po czym wyświetlone zostaną informacje o zabezpieczeniach strony. <a href="http://niebezpiecznik.pl/post/gmail-uwaga-na-phishing/">Ostatnio użytkownicy poczty GMail padli ofiarą podobnego ataku!</a><br />
<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Atak socjotechniczny</span></b><br />
<a href="http://pl.wikipedia.org/wiki/In%C5%BCynieria_spo%C5%82eczna_(informatyka)">Nie mniej groźny jest atak socjotechniczny</a>. Wyobraźmy sobie sytuację, w której dzwoni do nas osoba, która podaje się za pracownika naszego operatora sieci komórkowej. Mówi, że mają problem w systemie i prosi, by podać jej hasło do naszego konta, ponieważ bez szybkiej reakcji możemy stracić wszystkie dane oraz zapisane numery telefonów. Kiedy chwilę pomyślimy, powód wydaje się śmieszny, ale w obliczu prawdziwego tego typu zdarzenia istnieje szansa, że podamy nasze hasło obcej osobie, która okaże się nie tą, za którą się podawała. Wtedy jest już za późno. W przypadku tego typu ataków jedną z najważniejszych zasad jest:<br />
<b>Weryfikuj swojego rozmówcę, nigdy nie wykonuj poleceń osoby niezaufanej i nigdy nikomu nie podawaj swojego hasła.</b><br />
<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Metody obrony</span></b><br />
Oto co <a href="http://pl.wikipedia.org/wiki/Kevin_Mitnick">Kevin Mitnick</a> (znany haker i socjotechnik) pisze w swojej książce pt. "Sztuka podstępu. Wydanie II" o polityce haseł:<br />
<blockquote>
<b><i>Instrukcja.</i></b><br />
<i><b></b>Użytkownicy komputerów powinni wybierać hasła, które odpowiadają poniższym wymaganiom. Musi składać się z co najmniej ośmiu znaków w przypadku standardowych kont użytkowników i co najmniej dwunastu na kontach uprzywilejowanych. Musi zawierać co najmniej jedną cyfrę, co najmniej jeden symbol (np. $, _, %,!), co najmniej jedną małą literę i co najmniej jedną dużą literę (pod warunkiem, że pozwala na to system operacyjny). Nie może być wyrazem ze słownika dowolnego języka, wyrazem związanym z rodziną, hobby, samochodem, pracą, numerami rejestracyjnymi, numerem NIP adresem, telefonem, imieniem psa, datą urodzenia lub frazą zawierającą te wyrazy.</i><br />
<i>Nie może być wariacją poprzedniego hasła z jednym elementem niezmiennym, a drugim zmieniającym się, np. Roman0l, Roman02, Roman03 lub RomanSty, RomanLut.</i><br />
<br />
<b><i>Uwagi.</i></b><br />
<i><b></b>Hasło stworzone przy przestrzeganiu powyższych wytycznych będzie trudne do odgadnięcia dla socjotechnika. Inną możliwością jest stosowanie metody spółgłoska-samogłoska, dzięki której otrzymujemy łatwe do wymówienia i zapamiętania hasło. Aby skonstruować takie hasło, należy posługiwać się wzorcem „XYXYXY”, gdzie w miejsce X wstawiamy spółgłoski, a w miejsce Y samogłoski. Przykładami mogą być SOFEKA albo WACUNE.</i></blockquote>
<br />
<b><span class="Apple-style-span" style="font-size: large;">Podsumowując,</span></b><br />
nasze hasło powinno:<br />
- mieć co najmniej 10 znaków<br />
- zawierać co najmniej 1 wielką literę<br />
- zawierać co najmniej 1 cyfrę<br />
- zawierać co najmniej 1 znak specjalny (np. !@#%$^&*)<br />
- być odporne na atak słownikowy - nie powinno zawierać popularnych słów, np. ilovemusic<br />
- pamiętajmy, że operatorzy sieci komórkowych, pracownicy banku itp. NIGDY nie proszą nas o podanie hasła, nikt oprócz nas nie powinien znać naszego hasła, bez względu na wytłumaczenie prośby<br />
- NIGDY nie zapisujmy hasła na kartce i nie umieszczajmy go w widocznym miejscu<br />
- uważajmy na ataki phishingowe<br />
- zmieniajmy hasła co najmniej raz na pół roku<br />
<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">UWAGA!</span></b><br />
Zachowajmy przezorność w rejestrowaniu się w każdym nowym serwisie. Możemy do takich kont mieć specjalne "śmieciowe"-proste hasło, ale nigdy nie stosujmy go w ważnych dla nas kontach. Dla przykładu hasło na konto e-mail powinno być różne od hasła do konta bankowego, a te powinno być różne do konta na przykład na portalu społecznościowym. Problem w tym, że nasze hasło może być mocne, ale istnieje szansa, że będzie źle przechowywane "po drugiej stronie". <a href="http://niebezpiecznik.pl/post/sony-znowu-zhackowane-wykradziono-1-000-000-hasel/">Przykładem jest firma Sony</a>, która przechowywała hasła użytkowników w postaci czystego tekstu (mimo, że OBOWIĄZKOWE jest ich szyfrowanie-wtedy ich wykradzenie nic by nie znaczyło). Po wykradzeniu haseł z bazy danych firmy, napastnicy mogą dane hasło bez problemu sprawdzić na pozostałych naszych kontach, np na koncie e-mail.<br />
<br />
Mam nadzieję, że choć trochę przybliżyłem metody tworzenia i łamania haseł, choć zdaję sobie sprawę, że oprócz przedstawionych, istnieją inne metody łamania haseł - pomysłowość napastników nie zna granic. A czy Ty masz MOCNE hasło?Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com4tag:blogger.com,1999:blog-771921502020746664.post-68060098445014820272011-06-24T23:53:00.001+02:002012-08-25T20:33:10.442+02:00Obliczanie entropii hasła<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcgDeAXSCDMflOvZ6L31P-ylGfXfE84TZubrYEh2UYbykSlYvxbPAGfdGi-kbBY0XenlC32gHq4d9C8_Md2RmVXdyOHSTM049j7_FShAyixXdLQQj2fqt6cM82gvf589Ws8RcbQxWHJJq/s1600/encryption-shield.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEcgDeAXSCDMflOvZ6L31P-ylGfXfE84TZubrYEh2UYbykSlYvxbPAGfdGi-kbBY0XenlC32gHq4d9C8_Md2RmVXdyOHSTM049j7_FShAyixXdLQQj2fqt6cM82gvf589Ws8RcbQxWHJJq/s1600/encryption-shield.png" /></a></div>
Buszując po sieci co rusz proszeni jesteśmy o podanie hasła - czy to przy zakładaniu konta, czy przy logowaniu. Skąd możemy wiedzieć, czy nasze hasło jest mocne i trudne do złamania? Jednym ze sposobów jest obliczenie jego entropii.<br />
<br />
<br />
<a name='more'></a><br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Czym jest entropia?</span></b><br />
Entropia w teorii informacji to miara, ile informacji zostało zakodowanych w ciągu znaków. Dokładniej mówiąc jest to średnia ilość informacji, przypadająca na jeden znak z danego zbioru, z danym prawdopodobieństwem zdarzenia. W celu obliczenia entropii dla tekstu-dokumentu, musimy najpierw wykonać histogram dla wszystkich znaków. Dzięki temu będziemy mogli wyznaczyć prawdopodobieństwa wystąpienia każdego ze znaków. Także entropia dla danego tekstu wynosi:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifdNstFgdYY7ZdpcCqCBnzIgsWHLTGFU8spPAYEHhgA10jNSNT7DC1AQpFZ5rARTun-kGOsJiWmzre8uRPS2PlG-Q5RYTo_TADti7xKKTx3Pc09nWufS9w1V6tInLP7oha2AMmMhG5yzp2/s1600/entropia.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifdNstFgdYY7ZdpcCqCBnzIgsWHLTGFU8spPAYEHhgA10jNSNT7DC1AQpFZ5rARTun-kGOsJiWmzre8uRPS2PlG-Q5RYTo_TADti7xKKTx3Pc09nWufS9w1V6tInLP7oha2AMmMhG5yzp2/s1600/entropia.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Źródło: wikipedia.org</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
gdzie:<br />
<b>p(i)</b> to prawdopodobieństwo wystąpienia danego znaku - obliczone na podstawie histogramu<br />
<b>n</b> - liczba wszystkich niepowtarzalnych znaków<br />
<b>i</b> - zmienna iterująca<br />
<b>r</b> - podstawa logarytmu, w tym wypadku jest równa 2, ponieważ mówimy o bitach, jako o jednostce entropii<br />
<br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<b><span class="Apple-style-span" style="font-size: large;">Po co mi entropia?</span></b></div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
Entropia informacyjna (czyli ta o której tu mówimy) jest najprostszą miarą siły naszego hasła,</div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
bowiem jest w ścisłym związku z ilością możliwych kombinacji potrzebnych do złamania hasła. Dokładniej, możemy obliczyć maksymalną liczbę kombinacji potrzebnych do złamania naszego hasła za pomocą wzoru:</div>
<div style="text-align: center;">
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
<blockquote class="tr_bq">
<b>2^liczba_bitów_entropii_hasła</b></blockquote>
</div>
</div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
Krótko mówiąc, im więcej bitów entropii w haśle, tym trudniej atakującemu będzie je złamać. Za</div>
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">
względnie bezpieczne hasło uznaje się hasło powyżej 56 bitów entropii.</div>
<br />
<b><span class="Apple-style-span" style="font-size: large;">Obliczanie entropii dla hasła</span></b><br />
W przypadku obliczania entropii dla hasła sprawa wygląda prościej, ponieważ prawdopodobieństwo wystąpienia każdego ze znaku jest takie same. Obliczenie entropii hasła zaczynamy od obliczenia liczby bitów entropii w jednym znaku. W tym celu stosujemy wzór:<br />
<div style="text-align: center;">
<blockquote class="tr_bq">
<b>H(x) = log2(n)</b></blockquote>
</div>
Gdzie <b>n to liczba wszystkich znaków w danym zbiorze</b>. Dla przykładu obliczmy entropię jednego znaku w zbiorze liter <b>od a do z [a-z]</b>, których w alfabecie międzynarodowym jest 26. Zatem<br />
log2(26) = około 4.7 bitu entropii na znak.<br />
<br />
Entropia dla całego hasła wynosi:<br />
<div style="text-align: center;">
<blockquote class="tr_bq">
<b>entropia_jednego_znaku * liczba_znaków_w_haśle</b></blockquote>
</div>
Dla hasła 6-znakowego złożonego z alfabetu [a-z], entropia wynosi 6*4,7 = około 28,2 bitów.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Obliczanie entropii dla znaków z wielu zbiorów</span></b><br />
Co zrobić w przypadku, gdy mamy hasło zawierające nie tylko małe znaki, ale również litery wielkie, cyfry i znaki specjalne? Otóż wystarczy zsumować wszystkie możliwe znaki z tych zbiorów, które utworzą nam zmienną <b>n</b>. Podstawiając do wzoru:<br />
<div style="text-align: center;">
<blockquote class="tr_bq">
H(x) = log2(n)</blockquote>
</div>
otrzymamy liczbę bitów entropii w jednym znaku.<br />
<br />
Dla przykładu policzmy entropię hasła składającego się z 8 znaków (małych liter [a-z] oraz<br />
cyfr [0-9]). Nasze n w tym przypadku wyniesie 26+10=36. 26 małych liter i 10 cyfr. Liczba bitów w jednym znaku to log2(36) = około 5,17. Z racji tego, że hasło ma 8 znaków otrzymujemy 8*5,17 = 41,36 bitów entropii hasła.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Przykład wzrostu liczby bitów entropii w zależności od hasła</span></b><br />
Idąc dalej tym tropem możemy stwierdzić, że najwięcej bitów przypadnie na jeden znak w przypadku wykorzystania znaków z wszystkich zbiorów.<br />
<br />
Dla znaków ze zbiorów:<br />
-znaków specjalnych:<b> </b><span class="Apple-style-span" style="font-family: inherit;"><b>!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~</b></span><br />
-małych liter: <b>abcdefghijklmnopqrstuvwxyz</b><br />
-wielkich liter:<b> ABCDEFGHIJKLMNOPQRSTUVWXYZ</b><br />
-cyfr: <b>0123456789</b><br />
<br />
otrzymujemy w sumie 94 znaki i w haśle, w którym wykorzystujemy co najmniej jeden znak z każdego z tych zbiorów, w jednym znaku zapisanych jest aż 6,55 bitów entropii. Spójrzmy na przykłady:<br />
<br />
<b>Hasło: aaaa</b><br />
Bitów entropii na znak: 4.7<br />
Bitów entropii w haśle: 18.80<br />
<br />
<b>Hasło: aaa9</b><br />
Bitów entropii na znak: 5.17<br />
Bitów entropii w haśle: 20.68<br />
<br />
<b>Hasło: aa9C</b><br />
Bitów entropii na znak: 5.95<br />
Bitów entropii w haśle: 23.82<br />
<br />
<b>Hasło: a9C$</b><br />
Bitów entropii na znak: 6.57<br />
Bitów entropii w haśle: 26.28<br />
<br />
Jak widać z powyższego przykładu, różnica miedzy hasłem zawierającym tylko małe litery, a hasłem, które zawiera co najmniej jeden znak z każdego zbioru jest bardo duża, bo aż 8 bitów entropii.<br />
<div>
<br /></div>
<br />
Prosty program do obliczania entropii dla hasła oraz maksymalnej liczby operacji potrzebnych do złamania hasła metodą BruteForce:<br />
<pre class="brush:python"># -*- coding: utf-8 -*-
#Tobiasz Siemiński
import string, math
def getEntropy(chars, passwordLength):
""" zwraca liczbę bitów entropii w haśle """
charsLength = len(chars)
entropyPerChar = math.log(charsLength,2)
entropy = passwordLength*entropyPerChar
print "\nDługość hasła: %d" %(passwordLength)
print "Entropia jednego znaku: %f" %(float(entropyPerChar))
print "Entropia podanego hasła: %f" %(entropy)
print "Do złamania hasła potrzeba około %d operacji\n" %(2**entropy)
return entropy
def checkPassword():
""" prosi o hasło i na jego podstawie określa zbiór znaków z jakiego składa się hasło """
haslo = raw_input("Podaj hasło:")
lower = False
upper = False
digits = False
special = False
tab = ""
for znak in haslo:
if znak in string.ascii_lowercase:
lower = True
elif znak in string.ascii_uppercase:
upper = True
elif znak in string.digits:
digits = True
elif znak in string.punctuation:
special = True
if lower == True:
tab+=string.ascii_lowercase
if upper == True:
tab+=string.ascii_uppercase
if digits == True:
tab+=string.digits
if special == True:
tab+=string.punctuation
tab+=" "
print "Zbiór znaków: %s" %(tab)
entropy = getEntropy(tab, len(haslo))
return entropy
entropy = checkPassword()
if entropy < 56:
print "Hasło SŁABE"
entropy = 0
while entropy < 56:
print "Podaj hasło jeszcze raz"
entropy = checkPassword()</pre>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com3tag:blogger.com,1999:blog-771921502020746664.post-63384233879170749252011-06-20T19:22:00.007+02:002012-08-25T20:37:33.880+02:00Skuadak - program do rozdzielania składów<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSXU_DedLf2Wf72DKm9vJGztp6LLqc5S_-N1lzvBoj3f4Gs4tcTJzI32m5_0SWV-T8gbyKgE1XV5gQeKriKh-PyfM8vp6s2g80K3E1-l_2X9c3Jc1iR9M8EnR5P7IeUXraEchYBvTXHpZ7/s1600/python-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSXU_DedLf2Wf72DKm9vJGztp6LLqc5S_-N1lzvBoj3f4Gs4tcTJzI32m5_0SWV-T8gbyKgE1XV5gQeKriKh-PyfM8vp6s2g80K3E1-l_2X9c3Jc1iR9M8EnR5P7IeUXraEchYBvTXHpZ7/s1600/python-logo.png" /></a></div>
<div style="text-align: left;">
Jakiś czas temu mój znajomy poprosił mnie o napisanie programu, służącego do rozdzielania grupy zawodników grających w piłkę nożną na dwa względnie równe składy. Prośba ta świetnie współgrała w czasie z chęcią nauczenia się przeze mnie języka Python i dowolnej biblioteki umożliwiającej tworzenie interfejsu graficznego. Jest to moja pierwsza aplikacja stworzona w tym języku.</div>
<div style="text-align: left;">
<br /></div>
<a name='more'></a><div style="text-align: left;">
<b><span style="font-size: large;"><br /></span></b></div>
<div style="text-align: left;">
<b><span style="font-size: large;">Działanie programu</span></b></div>
<div>
<div style="text-align: left;">
Program otrzymał nazwę "Skuadak", a jego działanie jest następujące:</div>
<div style="text-align: left;">
Użytkownik ma możliwość stworzenia małej bazy zawodników poprzez ich dodawanie, usuwanie i edycję. Poprzez edycję rozumie się określenie nazwy gracza, ocenę jednej z czterech umiejętności (Opanowanie, Sprawność fizyczna, Technika i Zaangażowanie) oraz ustalenie pozycji na jakiej czuje się najlepiej. Użytkownik definiuje również informacje na temat danego spotkania, tzn. miejsce rozgrywek, datę oraz godzinę. Następnie dodaje wybranych zawodników (którzy potwierdzili swój udział) do wydarzenia i generuje składy. Algorytm stara się dobrać jak najbardziej zbliżone do siebie umiejętnościami zespoły. Ponadto program generuje kod z drużynami, sfromatowany specjalnie do wklejenia na forum, opartym na skrypcie <a href="http://www.phpbb.com/">phpBB</a>. Dzięki temu zautomatyzowane zostało również informowanie zawodników o składach i terminie spotkania.</div>
<div style="text-align: left;">
<br /></div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitp7yO-oVbd2fgUNvVg7GBZ5ea8cnt7CWw9PImY_2ve6SzhnKLY3p-5t-WUUmt7gBE3Kg2FLhZbtFdxbxpbxqpjc_CDENAdSdbQ0jFb67odqd2awrYxnuSY1B9AKNSD4nENZ7qVgpMYTI1/s1600/skuadak0.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitp7yO-oVbd2fgUNvVg7GBZ5ea8cnt7CWw9PImY_2ve6SzhnKLY3p-5t-WUUmt7gBE3Kg2FLhZbtFdxbxpbxqpjc_CDENAdSdbQ0jFb67odqd2awrYxnuSY1B9AKNSD4nENZ7qVgpMYTI1/s400/skuadak0.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 1: Okno główne programu</td></tr>
</tbody></table>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: large;">Specyfikacja</span></b></div>
<div style="text-align: left;">
Jeśli chodzi o to, co jest pod maską, to aplikacja została napisana w języku Python 2.6.6. Jako bibliotekę do interfejsu graficznego użyłem <a href="http://wiki.python.org/moin/PyQt4">pyQT4</a>. Jeśli ktoś spyta "dlaczego akurat pyQT?", odpowiem, że po prostu pierwsze wpadło mi pod rękę, a dokumentacja pozwoliła na natychmiastową pracę; po kilku godzinach pisało się przyjemnie i praca szła do przodu. Edytor, którego używałem to gedit, z podświetlaniem składni, bez jej uzupełniania. Ogólnie w pewnym momencie zabrakło mi tego elementu ;)</div>
<div style="text-align: left;">
Całego GUI'a klepałem "z ręki", bez pomocniczych narzędzi typu QtDesigner. Uważam, że w ten sposób programista ma doskonałą okazję do poznania danej biblioteki i o ile w przypadku pisania któregoś programu z rzędu jest to nieefektywne, to na pierwszy raz moim zdaniem jest to świetne rozwiązanie.</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCgYfanzwCuq82ZtlUV3OEmbmDsP-y9eG8fKqZjx-1esN5_Q34pESF-WbvwbkjDGMswuToWBfTHks5QoRdTGBy_MEY7X2AXIGerv-6vezCy1x6YObr7v3-8k0-XyquMm8oxuKn44ceCre/s1600/skuadak2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMCgYfanzwCuq82ZtlUV3OEmbmDsP-y9eG8fKqZjx-1esN5_Q34pESF-WbvwbkjDGMswuToWBfTHks5QoRdTGBy_MEY7X2AXIGerv-6vezCy1x6YObr7v3-8k0-XyquMm8oxuKn44ceCre/s400/skuadak2.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 2: Okno z wygenerowanymi drużynami.</td></tr>
</tbody></table>
<div style="text-align: left;">
Było to moje pierwsze starcie z tym językiem, ale bardzo przyjemne. Starałem się podzielić kod na logiczne części, w oddzielnych plikach oraz dobrze go wykomentować. Próbowałem także trzymać się zasad <a href="http://pl.wikipedia.org/wiki/KISS_(regu%C5%82a)">KISS</a> i <a href="http://pl.wikipedia.org/wiki/DRY">DRY</a>, lecz już teraz wiem, że w jednym miejscu to mi się nie udało (a raczej nie chciało ;)).</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: large;">"Peryferia"</span></b></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp9DNQSpz2LBQTTg0XmbbS1ZN9H0G7tBOwcH5NvHshz4zdCeZvWVDoWiy_MILCKPZ1tEgtfjnp1rX7I9p5k9o-oBSmCZ8LXbM734GLxtxo1wjYxiq9MBLw6gjb6ZRtH3jIxJt5Ub29XpXl/s1600/qt-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp9DNQSpz2LBQTTg0XmbbS1ZN9H0G7tBOwcH5NvHshz4zdCeZvWVDoWiy_MILCKPZ1tEgtfjnp1rX7I9p5k9o-oBSmCZ8LXbM734GLxtxo1wjYxiq9MBLw6gjb6ZRtH3jIxJt5Ub29XpXl/s1600/qt-logo.png" /></a></div>
<div style="text-align: left;">
Przy okazji skorzystałem z tzw. Project Hosting jakim jest <a href="http://code.google.com/">Google Code</a>. Bardzo ciekawe narzędzie do zarządzania projektem - konkurencyjne do GitHuba i innych. Polecam.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Dodatkowo poznałem narzędzia do kompilowania skryptu *.py na *.exe. Potrzebowałem tego w celu ostatecznego przeportowania aplikacji na systemy z rodziny Windows - docelowa platforma użytkowania. Z pomocą przyszło <a href="http://www.py2exe.org/">py2exe</a>. Konfigurację setup.py dla py2exe przygotował <a href="http://www.tynecki.pl/">Katharsis</a>, dzięki czemu wynikowy plik *.exe ważył 8MB zamiast 20, za co jestem bardzo wdzięczny.</div>
<div style="text-align: left;">
Liczba rewizji stanęła na numerku 36 i wydaje mi się, że w przypadku tak małego projektu, jest to liczba optymalna.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
<b><span class="Apple-style-span" style="font-size: large;">Hiperłącza</span></b></div>
<div style="text-align: left;">
Do nauki pyQT polecam dwie strony:</div>
<div style="text-align: left;">
<a href="http://www.opendocs.net/pyqt/pyqt4/html/classes.html">nieoficjalna, lecz raczej kompletna dokumentacja pyQT4</a> (ang.)</div>
<div style="text-align: left;">
<a href="http://zetcode.com/tutorials/pyqt4/">tutorial pyQT4</a> (ang.)</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Strona z projektem na Google Code, gdzie można poczytać kod jest <a href="http://code.google.com/p/skuadak/">tutaj</a>.</div>
<div style="text-align: left;">
Aplikację dla Windowsa można pobrać <a href="http://dl.dropbox.com/u/5649592/skuadakPublic.rar">stąd</a>.</div>
</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-18677948186309659902011-06-19T22:59:00.003+02:002012-08-25T20:38:29.259+02:00Angry Birds dla Google Chrome<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicOf_H3R18vud22BwvJaPwOeWuLgVEuZzZH7m6-enTLCrc4Wp0I96p0-zZ9cNrBE6laIlEXcHVOXX9VN43CMzTIAnXHwNG3IYyXb7D9I3L0WA0HpEFJWtDtlkM8LaDd9rzcA5NSCnGyPMA/s1600/New-Chrome-Icon1.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicOf_H3R18vud22BwvJaPwOeWuLgVEuZzZH7m6-enTLCrc4Wp0I96p0-zZ9cNrBE6laIlEXcHVOXX9VN43CMzTIAnXHwNG3IYyXb7D9I3L0WA0HpEFJWtDtlkM8LaDd9rzcA5NSCnGyPMA/s1600/New-Chrome-Icon1.png" /></a></div>
Gry Angry Birds nie trzeba chyba nikomu przedstawiać, ale dla tych, którzy jakimś cudem nie słyszeli o tym produkcie przypomnę, że jest to fenomen ostatnich lat - prosta gra logiczno-zręcznościowa stworzona w grudniu 2009 przez <a href="http://pl.wikipedia.org/wiki/Rovio_Mobile">Rovio Mobile</a>. Gra początkowo powstała na platformę iOS i została sprzedana w nakładzie ponad 12mln kopii. Po tym sukcesie stworzono wersje na wiele innych platform: Android'a, PSP, PS3 i inne. Angry Birds łączy w sobie przyjemność rozgrywki, humorystyczny styl i stosunowo niską cenę (na Android'a jest darmowa). Od niedawna w Angry Birds możemy zagrać na przeglądarce Google Chrome.<br />
<a name='more'></a><br />
Mimo, że nie jest to najnowsza informacja, postanowiłem o tym napisać. Podczas tegorocznej <a href="http://www.google.com/events/io/2011/index-live.html">konferencji Google I/O</a> zaprezentowana została aplikacja Angry Birds dla Google Chrome. Możemy ją znaleźć w sklepie <a href="https://chrome.google.com/webstore?hl=pl">Chrome Web Store</a> i zainstalować, dzięki czemu będzie dostępna z poziomu nowej karty oraz nie będzie wymagać aktywnego połączenia z Internetem. Oczywiście aplikacja jest darmowa. Dostępna jest również bez konieczności instalowania jako rozszerzenia przeglądarki pod <a href="http://chrome.angrybirds.com/">tym adresem</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_MZ4d3p0rr8J-4J80fX1PxBTYcWnqL5NdaAeVfninEnVOPsBFnTV9R8cBVGhcplHCoV_5SckzGgCZk3IEhjmRRdN_GeiQ0wd8lDCTcMjsJ7v_hkpXgYv_kX0zUX0us3j3S7cscsLzgHBT/s1600/angryBirds.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_MZ4d3p0rr8J-4J80fX1PxBTYcWnqL5NdaAeVfninEnVOPsBFnTV9R8cBVGhcplHCoV_5SckzGgCZk3IEhjmRRdN_GeiQ0wd8lDCTcMjsJ7v_hkpXgYv_kX0zUX0us3j3S7cscsLzgHBT/s320/angryBirds.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Gra oferuje nam 60 podstawowych poziomów oraz 10 dodatkowych, unikalnych, zwanych Chrome Dimension, które możemy odblokować zbijając ukrytą ikonkę Chrome'a w podstawowych poziomach. Zapowiadane są kolejne plansze.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVnMmCPQI7ULgFX9nX9j1q_M5LUm_2S25bD0_g0uhbiJtQUP7_H_ym1q88JbUH2V-HPoZKN686iBCs_MdyAmEo17pPE1SbFQtuf3NEyBKj98UOAUQwTLNY18-XQ0T2HQtG1aJgVRsUUfTQ/s1600/angryBirds1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVnMmCPQI7ULgFX9nX9j1q_M5LUm_2S25bD0_g0uhbiJtQUP7_H_ym1q88JbUH2V-HPoZKN686iBCs_MdyAmEo17pPE1SbFQtuf3NEyBKj98UOAUQwTLNY18-XQ0T2HQtG1aJgVRsUUfTQ/s320/angryBirds1.png" width="320" /></a></div>
<br />
Możemy zagrać w dwóch dostępnych rozdzielczościach, dzięki czemu Angry Birds działa płynnie również na słabszym sprzęcie, choć potrafi dobrze rozgrzać naszą maszynę.<br />
<br />
Całość oparta jest na <a href="http://www.box2d.org/">silniku fizycznym box2d</a>.<br />
Uwaga! Wciąga!Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-44158028964950720922011-05-29T12:31:00.002+02:002012-08-25T20:44:59.523+02:00Prosty odpowiednik ssh-copy-id<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3C7eeonx_a1UdtvBtazNPaPmk_x7FXqlTRnhFLRT4oOOL-yZnzhAm8-YPQDwXH_ExM4XUI3fsQBPeelGn0OiLTVqUerI2rKtsMsiuRlMnv4wn73bq665bR-EioWthfvX3ahigWqI1DGhJ/s1600/terminal-logo-small.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3C7eeonx_a1UdtvBtazNPaPmk_x7FXqlTRnhFLRT4oOOL-yZnzhAm8-YPQDwXH_ExM4XUI3fsQBPeelGn0OiLTVqUerI2rKtsMsiuRlMnv4wn73bq665bR-EioWthfvX3ahigWqI1DGhJ/s1600/terminal-logo-small.png" /></a></div>
Potrzebowałem ostatnio wyeksportować swój klucz publiczny, lecz na maszynie o dziwo nie posiadałem zainstalowanego <a class="link" href="http://linux.die.net/man/1/ssh-copy-id">ssh-copy-id</a>. Postanowiłem więc zrobić to na swój sposób. W środku dwa proste skrypty spełniający swoje zadanie.<br />
<br />
<a name='more'></a><br />
<br />
<br />
<pre class="brush:bash">cat ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"
</pre>
lub<br />
<pre class="brush:shell">scp ~/.ssh/id_rsa.pub user@machine:.ssh/authorized_keys
</pre>
Należy pamiętać, że powyższe polecenie jest odpowiednie dla klucza wygenerowanego w domyślnej lokacji, z domyślną nazwą pliku, bez hasła na plik (czyli 3x Enter przy generowaniu klucza).Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-83986645840103589232011-05-28T12:00:00.002+02:002012-08-25T20:46:05.414+02:00Java zagadka<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7B_n11JZMmj7c3RKgRMiJDlN-FEbeWeUtnf787YGiEWYMbOQ059TneSuyROBrngiQSzL-IeQrPZkSLeKDtr_ptyFAt6yBxAVT0EQJ_w-kriqzELx-ZDFg0rfQJ1ku75xbFOcz3z6wESo/s1600/200px-Java_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhB7B_n11JZMmj7c3RKgRMiJDlN-FEbeWeUtnf787YGiEWYMbOQ059TneSuyROBrngiQSzL-IeQrPZkSLeKDtr_ptyFAt6yBxAVT0EQJ_w-kriqzELx-ZDFg0rfQJ1ku75xbFOcz3z6wESo/s200/200px-Java_logo.png" width="108" /></a></div>
Podczas tegorocznych <a href="http://www.targipracy.org.pl/">Inżynierskich Targów Pracy</a> jedna z firm przygotowała dla odwiedzających test wiedzy o języku Java. Do rozwiązania było 10 zadań, w tym 8 testowych i 2 otwarte. Jedno z pytań było bardzo ciekawe.<br />
<br />
<br />
<br />
<br />
<a name='more'></a><br />
<br />
<br />
<br />
Pytanie było mniej więcej takie:<br />
Jaki będzie wynik wykonania następującego kodu?<br />
<br />
<pre class="brush:java">Integer a = 100, b = 100, c = 200, d = 200, e = 300, f = new Integer(300);
System.out.println((a==b)+" "+(c==d)+" "+(e==f));
</pre>
Proste, prawda? Nie, nie będzie to:<br />
<pre class="brush:java">false false false</pre>
lecz<br />
<pre class="brush:java">true false false</pre>
<br />
Na pierwszy rzut oka można stwierdzić, że zadanie jest banalne, gdyż dla każdej zmiennej przypisana zostanie oddzielna instancja klasy Integer - nasza liczba zostanie opakowana. Szczerze mówiąc byłem trochę zaskoczony poprawną odpowiedzią, ale kilka minut w sieci dało odpowiedź na pytanie.<br />
<br />
Java, obiekty typu Integer, Byte, Short lub Long o wartościach z przedziału -128 do 127, przechowuje w miejscu, gdzie te obiekty się nie powtarzają, dlatego dla tych wartości zawsze otrzymamy tę samą referencję. Aby otrzymać obiekty o różnych adresach należy użyć słowa kluczowego <b>new</b>.<br />
<pre class="brush:java">Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a==b);
</pre>
<pre class="brush:java">false</pre>
Więcej na ten temat można przeczytać <a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#190730">tutaj</a>.Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com2tag:blogger.com,1999:blog-771921502020746664.post-69998394482479334902011-05-27T23:55:00.000+02:002012-08-25T20:46:44.944+02:00Blog - podejście drugie<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj7Cud8NdbCnYYdwYDX46-RMMtgg02dTri2aM4-U_wN_7cufRN2QOaxBvoWBZIM0ASqcSWd0N5plxz68XJk7_tkpanMua488tnSjilZqF31PhxGCPfUurY5mF7SK7B7i3x1_1owqFIL3cI/s1600/Blogger.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgj7Cud8NdbCnYYdwYDX46-RMMtgg02dTri2aM4-U_wN_7cufRN2QOaxBvoWBZIM0ASqcSWd0N5plxz68XJk7_tkpanMua488tnSjilZqF31PhxGCPfUurY5mF7SK7B7i3x1_1owqFIL3cI/s200/Blogger.png" width="200" /></a></div>
Od kilkunastu godzin można zauważyć na blogu mały ruch i zmiany spowodowane podjęciem przeze mnie kilku decyzji. Co się zmieniło, co się jeszcze zmieni, a co zostało? <br />
<br />
<a name='more'></a><br />
<br />
<br />
<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;"><br /></span></b>
<b><span class="Apple-style-span" style="font-size: large;">Motyw</span></b><br />
W pewnym momencie straciłem chęć publikowania postów na tym blogu - blogu opartym na systemie Bloggera. Mój 'twór' wydał się mało oryginalny w porównaniu z innymi tego typu miejscami w sieci.<br />
Postanowiłem, że napiszę swojego bloga od podstaw, mając w 100% kontrolę nad jego wyglądem i zachowaniem. Po dwóch miesiącach stwierdziłem, że nie warto tracić czasu na pisanie czegoś, co już tak naprawdę istnieje.<a href="http://www.mikekarnj.com/blog/2011/05/15/stop-building-apps-and-start-disrupting-industries/"> Czas, który posiadam, jest na tyle cenny, że warto byłoby wykorzystać go w lepszy sposób.</a> Tym bardziej, że pomimo braku nowych postów, liczba odwiedzin bloga nie spadała, a wręcz przeciwnie, delikatnie rosła. Blogger daje doskonałe pozycjonowanie w wyszukiwarce Google. Ponadto zapewniony mam darmowy hosting i przetestowany system. <a href="http://googlesystem.blogspot.com/2011/03/upcoming-blogger-features.html">Co więcej, zachęca mnie nadchodzącymi zmianami.</a><br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Zmiany</span></b><br />
W związku z powyższym zdecydowałem się na kilka znaczących zmian, by ukierunkować rozwój tego miejsca na blog w pełni profesjonalny:<br />
- Zmieniłem system etykiet na kategorie, co zwiększa przejrzystość i układ tematyczny bloga,<br />
- Jak widać dodane zostały tak zwane 'strony', co również pozwala między innymi dowiedzieć się czegoś więcej o twórcy tego bloga,<br />
- Jeśli chodzi o treść, ukierunkuję się bardziej na programowanie, zamieszczając więcej kodu, nie poprzestając jednak na tematach pobocznych, których na dzień dzisiejszy jest więcej,<br />
- Zmieniony został szablon bloga, lekko przeze mnie zmodyfikowany, mam nadzieję, że przypadnie Wam do gustu<br />
- Postanowiłem publikować pod innym szyldem, a dokładniej podpisująć się imieniem i nazwiskiem, w dalszym ciągu zachowując swój internetowy nick<br />
- W przyszłości zamierzam podpiąć blog pod własną domenę<br />
- Usunąłem 2 mało przydatne wpisy<br />
<br />
Mam nadzieję, że zmiany na blogu przypadną Wam do gustu, ułatwią odnajdywanie potrzebnych informacji, a także zachęcą do odwiedzin kolejnych czytelników.Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-20571940022844812152011-03-16T00:36:00.004+01:002012-08-25T20:47:35.858+02:00Mój sposób na RSS na Ubuntu<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqiyVrrkHQwU4H0MoFMKiCYwymBHp9xmc8YADDtg2n9HX1UxBZJfkL4IMCzm264ZgCRA_lMlDnB6lfN60UoqTXR4oIXhsa6GChrwi4hXIJySYfFMIMHIeFhbOUrycWoDBIVU_LcdFP8N7N/s1600/jabber-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqiyVrrkHQwU4H0MoFMKiCYwymBHp9xmc8YADDtg2n9HX1UxBZJfkL4IMCzm264ZgCRA_lMlDnB6lfN60UoqTXR4oIXhsa6GChrwi4hXIJySYfFMIMHIeFhbOUrycWoDBIVU_LcdFP8N7N/s1600/jabber-logo.png" /></a></div>
Po pewnym czasie korzystania z Internetu, człowiek odnajduje kilka miejsc, które lubi odwiedzać. Miejsc tych jest coraz więcej i więcej czasu trzeba poświęcić dziennie na ich odwiedzanie. Na szczęście ktoś mądry wymyślił RSS - nie my odwiedzamy strony www w celu sprawdzenia, czy pojawiło się coś nowego, lecz jesteśmy o tych nowościach powiadamiani.<br />
<br />
<a name='more'></a>Mimo, że postanowiłem "sprawić" sobie RSS'a, to nie podobał mi się pomysł instalowania oddzielnej, nowej aplikacji. Chciałem <a href="http://pl.wikipedia.org/wiki/RSS">RSS</a> jako dodatek do czegoś, co już mam: myślałem o przeglądarce internetowej oraz o komunikatorze. Udało mi się znaleźć <a href="http://dev.cmeerw.org/Projects/jabrss">JabRSS</a>, czyli RSS dla <a href="http://pl.wikipedia.org/wiki/Jabber">Jabber'a</a>. A że mam już konto Jabbera i codziennie jestem zalogowany do sieci, rozwiązanie wydało się być idealne.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Początek</span></b><br />
<b>JabRSS</b> dodajemy jako kolejnego znajomego do listy. Musimy oczywiście mieć konto Jabbera na jednym z dostępnych serwerów. Jeśli tego nie posiadamy (a warto!), to polecam zajrzeć do obszernego, lecz bardzo przystępnego opisu postępowania, tj. <a href="http://www.jabberfaq.info/">Jabber FAQ</a>, gdzie dowiemy się między innymi o zaletach tego protokołu(XMPP).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-kgBWHC6mE9DzMt3sQMcy66TTcYfHEwrHwo6f3WRzz2VkZ0RoIqCflDF77GztJpTP8GB2qcUMnSeALLiyggpwUJxM5Y7DUhAsD1NS5d-8k5_JV0xLWBJDDObL7JjX_erfEVh0Y1n4F9O/s1600/xmpp-logo.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN-kgBWHC6mE9DzMt3sQMcy66TTcYfHEwrHwo6f3WRzz2VkZ0RoIqCflDF77GztJpTP8GB2qcUMnSeALLiyggpwUJxM5Y7DUhAsD1NS5d-8k5_JV0xLWBJDDObL7JjX_erfEVh0Y1n4F9O/s200/xmpp-logo.png" width="194" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Dawniej Jabber, dziś XMPP, protokół wykorzystywany przez GTalk</td></tr>
</tbody></table>
<b><span class="Apple-style-span" style="font-size: large;">Korzystanie</span></b><br />
Czytnika RSS używamy poprzez wysyłanie do niego wiadomości za pomocą komunikatora. Przykładowe polecenia:<br />
<b>subscribe</b> <b>[adres źródła rss]</b> - dodajemy kolejne źródło rss do czytania<br />
<b>unsubscribe</b> <b>[adres źródła rss]</b> - usuwamy źródło rss<br />
<b>list</b> - wyświetla listę obecnych źródeł rss<br />
<b>info</b> <b>[adres źródła rss] </b>- wyświetla informacje na temat danego źródła<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQrZrLmXNgPW6Vj7kA6NEzATzpWq6QbtKHN4nFNYkLpjScVldiBtVQqY088RFwwDHvAZS7mt3Rxku_vZC-A1cnlCq66fpFSrXyc8i-ReWjezdfxwiu4_TNUAE-Cl3mZgZyq8Ms3VOiBVCi/s1600/rss.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQrZrLmXNgPW6Vj7kA6NEzATzpWq6QbtKHN4nFNYkLpjScVldiBtVQqY088RFwwDHvAZS7mt3Rxku_vZC-A1cnlCq66fpFSrXyc8i-ReWjezdfxwiu4_TNUAE-Cl3mZgZyq8Ms3VOiBVCi/s400/rss.png" width="365" /></a></div>
<br />
Listę wszystkich dostępnych poleceń uzyskujemy po wysłaniu wiadomości o treści: <b>help</b><br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Zalety:</span></b><br />
- oszczędność czasu<br />
- centralizacja dodatkowych rozwiązań (nie ma potrzeby instalacji nowej aplikacji)<br />
- wygoda<br />
- konieczność posiadania konta Jabber (na początku umieściłem ten punkt w wadach, lecz jeśli ktoś jeszcze nie zna tego protokołu, na pewno nie pożałuje, że o czymś takim się dowiedział)<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Wady:</span></b><br />
- brak?<br />
<br />
Na koniec dodam tylko, że protokół XMPP(czyli de facto Jabber) jest używany np. przez aplikację Google Talk i w naszym komunikatorze możemy dodać konto znajomego z Gmaila. Dzięki temu nie musimy logować się do poczty, by z nim porozmawiać, wystarczy jedynie komunikator z Jabber'em.Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com0tag:blogger.com,1999:blog-771921502020746664.post-39510883276240163682011-02-15T20:17:00.005+01:002012-08-25T20:54:48.867+02:00VMware Player na Ubuntu - instalacja i wstępna konfiguracja<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-f9_Ifu7g_1zfZfvDLoY-yGU_1mOdcNa-wVgmDjl3CsXSjewlXkaI9jIdvhmpZPr7k_oYzHz0x2gdnGsx-Gx-oxsGOPuHtqqPL82GoBGroM2MZNqomFP_hrPl7pM_WhGdFgG7HwbGi-hJ/s1600/vmware_logo.jpg" imageanchor="1" style="clear: left; float: left; margin-right: 1em;"><img border="0" height="81" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-f9_Ifu7g_1zfZfvDLoY-yGU_1mOdcNa-wVgmDjl3CsXSjewlXkaI9jIdvhmpZPr7k_oYzHz0x2gdnGsx-Gx-oxsGOPuHtqqPL82GoBGroM2MZNqomFP_hrPl7pM_WhGdFgG7HwbGi-hJ/s320/vmware_logo.jpg" width="320" /></a></div>
VMware Player to darmowe oprogramowanie pozwalające na uruchomienie wirtualnej maszyny, a także tworzenie własnych maszyn. Programu używam od dłuższego czasu i okazuje się bardzo pomocny. Nie muszę przechodzić z Ubuntu na "okienka", gdy muszę wykonać jakieś zadanie w typowo windowsowym programie. Mogę również nieinwazyjnie testować inne dystrybucje Linuxa. Jednym słowem wygoda i możliwości.<br />
<br />
<a name='more'></a><b><span class="Apple-style-span" style="font-size: large;">Instalacja</span></b><br />
<a href="https://www.vmware.com/tryvmware/?p=player&lp=default">Na stronie producenta rejestrujemy się</a> (niestety), potwierdzamy rejestrację klikając w link, który dostaniemy na maila, a następnie będąc zalogowanym, pobieramy plik <b>.bundle (VMware Player for Linux 32-bit .bundle Installation file for 32-bit Linux - dla 32bitowych maszyn i odpowiednio VMware Player for Linux 64-bit .bundle Installation file for 64-bit Linux - dla 64 bitowych)</b>. Gdy już mamy plik na dysku, przechodzimy w konsoli do folderu, w którym się on znajduje i wykonujemy poniższe polecenia (nadanie praw wykonania oraz uruchomienie):<br />
<pre class="brush:bash">sudo chmod +x VMware-Player-3.1.3-324285.x86_64.bundle
sudo ./VMware-Player-3.1.3-324285.x86_64.bundle</pre>
Przechodzimy proces instalacji, prosty i wszystkim znany - klikanie <b>Dalej</b> ;)<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Tworzymy maszynę wirtualną</span></b><br />
Od tej pory możemy odpalać VMware Playera poprzez <b>Programy</b> > <b>Narzędzia systemowe</b> > <b>VMware Player</b>, co też robimy. Najłatwiej emuluje się maszyny na podstawie obrazów .iso. Wybieramy opcję <b>Create a New Virtual Machine</b>, a następnie zaznaczamy <b>Installer disc image file (ISO)</b>. <table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6p_q2qi_7Dg506K_gXMz3n2G6vP7io1_SDlYcnCjFJznTNSNCTHF0MfxkFaycuh_xRNJAR7bdZGT1yXuH76oL8sJQwfcOi2HSS-FcecTKe3XcND_umX3uKo3Sg4yIL4hNWBFUkwH6ecmU/s1600/1.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6p_q2qi_7Dg506K_gXMz3n2G6vP7io1_SDlYcnCjFJznTNSNCTHF0MfxkFaycuh_xRNJAR7bdZGT1yXuH76oL8sJQwfcOi2HSS-FcecTKe3XcND_umX3uKo3Sg4yIL4hNWBFUkwH6ecmU/s320/1.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 1: Pierwsze kroki.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Wskazujemy obraz systemu, który chcemy uruchomić, i klikamy <b>Next</b>. W następnym oknie uzupełniamy (a raczej ewentualnie poprawiamy) informacje o rodzaju systemu i jego wersji, naciskamy <b>Next</b>. Kolejno podajemy nazwę naszej maszyny (będzie wyświetlana w menu VMware) oraz lokację, gdzie mają zostać zapisane pliki dotyczące tego systemu, naciskamy <b>Next</b>. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy70O0Dkt_k8nKKJ6wIaTuSLEdTcanDep1PIBlb6ojqa0URw4yyyEhCj4WGNEgVo7aqfNN70S9q8Ks3IGPlbRuNuecSJh_DTQgFSjHhuJ1JRN3BMbcpn92laJErpdPdWQB9ESZuQYD3YAW/s1600/2.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="279" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy70O0Dkt_k8nKKJ6wIaTuSLEdTcanDep1PIBlb6ojqa0URw4yyyEhCj4WGNEgVo7aqfNN70S9q8Ks3IGPlbRuNuecSJh_DTQgFSjHhuJ1JRN3BMbcpn92laJErpdPdWQB9ESZuQYD3YAW/s320/2.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 2: Tworzenie nowej maszyny wirtualnej.</td></tr>
</tbody></table>
<span class="Apple-style-span">W dalszej kolejności możemy przydzielić miejsce na dysku przeznaczone dla danej maszyny - polecam pozostawić to pole uzupełnione domyślnie oraz opcję <b>Split virtual disc into multiple files</b>, klikamy <b>Next</b>. W następnym kroku mamy możliwość sprecyzować także ilość pamięci RAM przeznaczonej dla danego systemu, ale to też polecam pozostawić uzupełnione domyślnie, klikamy <b>Finish</b>.</span><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3BTUhrshkaiVBp7dU4gajW0rw3QEqikdYqFZsLi2jQqBeapFWAGapctZX9Thka6z7RdMLTKUKp5yPsmSNEb7GCP0vXxp0K6z930lf1KrQFT81n_6iEiS24Ca5UHz6OQpn1dJXYuSL3cGq/s1600/6.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3BTUhrshkaiVBp7dU4gajW0rw3QEqikdYqFZsLi2jQqBeapFWAGapctZX9Thka6z7RdMLTKUKp5yPsmSNEb7GCP0vXxp0K6z930lf1KrQFT81n_6iEiS24Ca5UHz6OQpn1dJXYuSL3cGq/s320/6.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 3: Właściwości maszyny wirtualnej.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
<b><span class="Apple-style-span" style="font-size: large;">Emulacja</span></b></div>
<div class="separator" style="clear: both; text-align: left;">
Naszym oczom powinien ukazać się proces odpalania maszyny. Na samym początku najprawdopodobniej wyskoczy komunikat o braku obsługi kamery, ale tym się teraz nie przejmujemy. </div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCj7iLPq8XgfGGjYDBM0tMKzin20NGCKaYqM6U7jE9xb5cJ4Hy3D8cE8_5eJ6z0VAaPqxX3T1UDWcxqx8bEhQwykeeGM2Ee36Uway21AlD8dLO6DJvnFHinOXXLlUCmdpVbaDDuW9sq4-/s1600/7.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLCj7iLPq8XgfGGjYDBM0tMKzin20NGCKaYqM6U7jE9xb5cJ4Hy3D8cE8_5eJ6z0VAaPqxX3T1UDWcxqx8bEhQwykeeGM2Ee36Uway21AlD8dLO6DJvnFHinOXXLlUCmdpVbaDDuW9sq4-/s320/7.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 4: Instalator Debiana.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Gdy zostaniemy zapytani o pobranie specjalnych narzędzi dla VMware Player, wspomagających emulowanie danego rodzaju systemu, zgadzamy się klikając na <b>Download and Install</b>.</div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQPG9mhMIiWenx6hLECw1fMLv-LIY38Vh6VqoehO18Qb85Fs6AMUoFM60RORPyjo9LWmEX0zp9YVne6A8bqFX-mtgjfHohweLOmVHyinDRmxYh4E64VKNMcYkVuAIYJpKN3wj5DRD0YZGt/s1600/8.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQPG9mhMIiWenx6hLECw1fMLv-LIY38Vh6VqoehO18Qb85Fs6AMUoFM60RORPyjo9LWmEX0zp9YVne6A8bqFX-mtgjfHohweLOmVHyinDRmxYh4E64VKNMcYkVuAIYJpKN3wj5DRD0YZGt/s320/8.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Screen 5: Uruchomiony na maszynie wirtualnej Debian.</td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: left;">
Przechodzimy teraz przez proces instalacji systemu - inny dla każdego typu oprogramowania. Po zakończonej instalacji, wybrany przez nas system operacyjny przywita nas pięknym ekranem powitalnym ;)</div>
<blockquote class="tr_bq">
*wskazówka: wyjście myszy z obszaru VMware Player'a jest umożliwione po przytrzymaniu <b>CTLR+ALT</b></blockquote>
<span class="Apple-style-span" style="font-size: large;"><b><br /></b></span>
<b><span style="font-size: large;">Zamykanie maszyny - kończenie emulacji</span></b><div>
Emulację możemy zakończyć poprzez standardowe zamknięcie systemu operacyjnego, który uruchomiliśmy lub używając krzyżyka (na górze ekranu) w panelu udostępnionym przez VMWare Player'a. Obie operacje różnią się tym, że korzystając z opcji krzyżyka VMware, maszyna zostanie zapamiętana w takim stanie, w jakim znajdowała się w danej chwili. Trwa to jednak dłużej, ponieważ na dysku muszą zostać zapisane informacje o stanie systemu. Przydaje się natomiast w chwili, gdy szybko chcemy powrócić do działającego systemu, bez przechodzenia przez proces uruchamiania.<br />
<br />
<b><span class="Apple-style-span" style="font-size: large;">Udostępnianie plików i folderów emulowanej maszynie</span></b><br />
Podczas konfiguracji systemu operacyjnego, który chcemy zaemulować, przeznaczamy dla niego przestrzeń dyskową, lecz jest to przestrzeń także do instalacji systemu. Gdy chcemy udostępnić folder lub partycję z 'zewnątrz' przechodzimy do menu głównego VMware Player, gdzie mamy listę naszych maszyn wirtualnych. Zaznaczamy interesujący nas system oraz klikamy w<b> Edit virtual machine settings</b>, zmieniamy zakładkę na Options i z listy opcji wybieramy <b>Shared folders</b>. Zaznaczenie <b>Disabled</b> zmieniamy na <b>Always enabled</b>, klikamy na <b>Add</b>, przeglądamy foldery i wybieramy ten, który chcemy udostępnić. Zapisujemy ustawienia. Tak dodany folder, będzie widziany w systemie jako oddzielna partycja dyskowa. Rozwiązanie jest dobre, gdy chcemy współdzielić pliki między naszym głównym systemem, a systemem emulowanym. Należy pamiętać, że nie możemy edytować ustawień maszyny wirtualnej, gdy ta wcześniej została wstrzymana(suspended), a nie wyłączona.</div>
Anonymoushttp://www.blogger.com/profile/13613457818102810583noreply@blogger.com10