Блог Віталія Яреги
Про знання та їх застосування
Субота, 24 жовтня 2009 р.
10 кроків до швидкого вивчення нової мови програмування
1. Встановіть часові зобов'язання у навчанні
Дуже часто ми думаємо, що зможемо вивчити нову мову, приділяючи на це півгодини на день протягом тижня. Незважаючи на те, що це в кінцевому результаті все-таки спрацює, це далеко не так ефективно, як повністю приділити день або два, протягом яких ви не будете робити нічого іншого, крім вивчення мови. Вивчення великими, нерозділеними блоками - це найкращий спосіб щоб дійсно поринути у мову.
Заняття невеликої тривалості не дуже продуктивні для вивчення мови, тому що більша частина часу витрачається на повернення до того темпу, який ви набрали під час минулого заняття. Повторення само по собі може зайняти половину часу, відведеного на день.
2. Заведіть шпаргалки
Шпаргалки можуть виявитися більш цінними, ніж це може здатися на перший погляд. Шпаргалки - це один із найбільш корисних джерел інформації, які є в нашому розпорядженні при вивченні мови. Шпаргалки - це не тільки корисні нагадування, вони також надають швидкий огляд зразків і команд, які допомагають визначити мову. Просто глянувши на шпаргалки, ви можете швидко схопити синтаксис мови, що робить його розуміння набагато простішим.
3. Зберіть всі необхідні матеріали
Є безліч ресурсів для вивчення мов. Одні вам підійдуть, інші не дуже. Збір великої кількості інформації - це хороший спосіб використання «холістичного» підходу до мов, це допоможе вам швидко розпізнавати стилі написання і джерела, що ви розумієте краще за інші. Знайти пристойний підручник з програмування - теж гарна ідея, але в багатьох випадках, коли ви намагаєтеся знайти початкову інформацію про мову, найкращим кроком для вас буде зайти в Гугл і почати збирати інформацію. Ви можете зібрати таку інформацію:
• Керівництва
• Статті-підказки
• Кращі прийоми
... І будь-який інший матеріал, пов'язаний зі вступними темами.
Відмінне джерело, хоч і платне, це членство в онлайн біблиотеці O'Reilly, що надає доступ до всіх відмінних посібників та книг O'Reilly в міріаді тем з програмування.
Одну річ можна сказати напевно: вам необхідно розраховувати на людей, які вважаються експертами в тій мові, який ви вивчаєте. У цьому випадку ви можете бути впевнені, що вивчаєте кращі прийоми з самого початку, і не підхоплює ніякі погані звички.
4. По-справжньому, чесно розумійте документацію
Занадто часто люди намагаються швиденько пройти інформацію, представлену в документації для початківців. За мною теж є цей гріх. Я намагаюся швидко пробігти основи мови програмування і відразу ж перескочити до вказівкок і прикладів застосування. Керівництва - це відмінна допомога в розумінні мови, але вони не готують до розвитку, розвиток в мові, як це роблять основи. Перед тим як почати ходити, треба поповзати.
Перечитуйте інформацію. Переконайтеся, що ви повністю зрозуміли основи мови, перед тим, як поринати в роботу з прикладами. Розуміння основ дозволяє вчитися швидше, так як у вас є твердий фундамент перед тим, як ви почнете будувати на цих засадах.
5. Дайте інформації устоятися і зробіть перерву
Після того, як ви зібрали матеріали, прочитали і зрозуміли основи, здається природнім - ринутись прямо до створення пробних програм. Але все-таки, щоб відбувалося належне навчання, необхідно, щоб інформація «замаринувалась» у вашій голові протягом кількох годин. Відпочиньте, розважтесь, робіть щось абсолютно не пов'язане з мовою програмування, щоб дозволити своєму мозку підсвідомо систематизувати вивчене.
Відмінний прийом - присвятити день вивченню основ мови, потім дати інформації устоятись у вашій голові протягом доби, і почати працювати над пробними додатками на наступний день.
6. Створіть спробну програму з базою даних
Після того, як ви зібрали всі матеріали і присвятили достатній час вивченню будови блоків мови, настає етап створення пробної програми.
У більшості мов є навчальні приклади, які ви можете використовувати для створення чогось робочого, щоб зрозуміти основи того, як складаються програми. Спробуйте знайти прості програми, які мають інтерфейс з базою даних, такі як блог або списки todo. Ці типи програм дозволяють зрозуміти, яка різниця між мовами, і інформують вас з приводу нюансів.
7. Боріться з багами
Розуміння того, як виправляти помилки - це суттєва частина вивчення нової мови. А їх ви точно зустрінете під час навчання. Деякі новачки кидаються в сльози, коли знаходять помилки в своєму коді, і не досить борються, щоб з'ясувати, що змусило код дати збій.
Дізнаватися, що ви не можете зробити, так само важливо, як і дізнаватися, що ви можете зробити за допомогою цієї мови.
Провали - це неминучий і корисний аспект вивчення. Вінстон Черчіль одного разу сказав, що «успіх - це шлях від провалу до провалу без втрати ентузіазму». Не здавайтеся перед мовою програмування, якщо ви не можете моментально змусити її працювати.
Навряд чи якась мова настільки легка у вивченні. Якщо ви дійсно застрягли, наступні кроки послужать вам допомогою.
8. Розраховуйте на реальних людей
Вивчення мови не повинно бути одиночною спробою. Є багато людей, які вчинили ті ж самі помилки, що і ви, так що прохання про допомогу - це відмінний спосіб пробитися крізь найжорсткіші баги. Якщо ви не можете отримати відповідь на форумах, які присвячені мові програмування, чи на IRC каналах, використовуйте також такі ресурси:
• Webmasterworld
• Форуми, присвячені вивченню мов програмування
• IRC - один з найбільш цінних ресурсів, які надають більшість проектів з мов програмування. Тільки подумайте: на IRC повно активних гуру, які швидше за все, із захопленням дадуть відповідь на будь-які ваші питання. Навіть якщо вам вдасться поставити в безвихідь цих неймовірно розумних людей, як правило, вони зі шкіри вилізуть, щоб допомогти вам знайти відповідь.
У IRC груп з мов програмування іноді погана репутація «снобіської еліти», яка не спілкується з новачками. Я ніколи в цьому не переконувався. Я вірю, що якщо ви поважаєте час цих гуру та формулюєте ваше запитання чемно, ви отримаєте ввічливу відповідь. Потрібно пам'ятати, що ці люди викликаються витратити їх цінний час на допомогу таким новачкам, як ми, у вивченні мови, що вони знають досконало.
* Twitter - готовий посперечатися, ви не думали, що Twitter може бути хорошим джерелом для програмування. А Twitter - дійсно чудовий ресурс, щоб запитати у друзів поради.
9. Повторюйте
Тепер, коли ви пробралися через пробні програми, і відчули ейфорію від створення чогось дійсно робочого, дуже важливо переглянути, що ви вивчили. Це допоможе закріпитися у вашому мозку того, що потрібно для створення програми. Наступного разу вам не знадобиться вчитися так багато, що довелося робити для створення цієї програми.
10. Дайте зобов'язання практикуватися
І нарешті, коли ви успішно вивчили нову мову програмування, важливо дати собі зобов'язання практикуватися і розширювати вивчене. Практика - ключ до вивчення, так що важливо регулярно виділяти час для застосування нових знань. Інакше через деякий час ви втратите більшість того, що вже вивчили.
Чим більше мов ви навчаєте, тим простіше стає вчити нові. Виникають образи, і процес стає дуже знайомим. Незважаючи на відмінності в тому, як кожна з мов працює і веде себе, у всіх є спільна фундаментальна база.
Оригінал: 10 Steps to Learn a New Coding Language Fast
Субота, 2 травня 2009 р.
PHP. Такі знайомі незнайомі цикли. for
for (початкове значення; кінцеве значення; зміна лічильника)
Оператор
Приклад 1
Піднесемо до степеня 3 число 2 за допомогою циклу:
$sum = 1;
for ($i=1; $i<=3; $i=$i+1)
$sum = $sum * 2;
print($i);
В цьому прикладі запускається цикл з початковим значення змінної $i, що рівне 1. Цикл буде виконуватися, поки значення змінної менше або рівне 3. Щойно значення змінної перевищить це число, цикл припиниться і результат буде виведено на екран за допомогою функції print(), яка йде після циклу. На кожному кроці циклу значення змінної збільшується на одиницю $i($i=$i+1).
На кожному кроці циклу виконується код: $sum = $sum * 2. Оскільки наш цикл виконується від 1 до 3, то рядок буде виконуватися 3 рази.
Після оператора for виконується тільки один рядок коду. Якщо необхідно виконати два і більше оператора, потрібно помітити їх у фігурні дужки. Наприклад:
$sum = 1;
for ($i=1; $i<=3; $i=$i+1)
{
$sum = $sum * 2;
print("Сума = $sum, Лічильник = $i <br>");
}
Після виконання цього коду ми побачимо на екрані наступний текст:
Сума = 2, Лічильник = 1
Сума = 4, Лічильник = 2
Сума = 8, Лічильник = 3
Таким чином ми піднесли число 2 у третю степінь. У якості початкових значень можуть виступати декілька змінних. Наприклад, тут ми можемо перенести оголошену змінну$sum в дужки оператора for наступним чином:
for ($sum = 1, $i=1; $i<=3; $i=$i+1)
{
$sum = $sum * 2;
print("Сума = $sum, Лічильник = $i <br>");
}
Всі початкові значення перераховуються через кому. Аналогічним чином можна реалізувати будь-яку кількість перевірок. Наприклад, нам потрібно виконувати цикл, поки значення змінної $i не буде більше за 3 або сума менша 10. Для цього можна написати цикл у такому вигляді:
for ($sum=1, $i=1; $i<=3, $sum<10; $i=$i+1)
{
$sum = $sum * 2;
print("Сума = $sum, Лічильник = $i <br>");
}
В обмеженні циклу через кому перевіряються дві умови $i=1 і $i<=3. Кома рівносильна порівнянню «або» (or) і відповідає запису:
for ($sum=1, $i=1; $i<=3 or $sum<10; $i=$i+1)Якщо необхідно виконувати цикл до тих пір, поки одна з умов виконається, то можна написати так:
for ($sum=1, $i=1; $i<=3 and $sum<10; $i=$i+1)Але в цьому випадку є один недолік. Якщо виконати цей код, то можна побачити, що сума перевищить 10. Чому? Перевірка відбувається раніше, ніж відбувається чергове піднесення до степеня. Число 2 в 4-ій степені рівне 16. Це менше за 10, тому виконується наступний крок (ще одне піднесення до степеня), і результат буде 32, що і виводиться на екран. Тільки наступна перевірка побачить, що число перевищує допустиме значення. Щоб позбавитися від цього ефекту, піднесення до степеню потрібно перенести в область збільшення лічильника, тобто так:
for ($sum=1, $i=1; $i<=3, $sum<10; i="$i+1," sum ="">
print("Сума = $sum, Лічильник = $i <br>");
Тепер на кожному кроці циклу збільшується не тільки $i, але і $sum. Результат піднесення до степеня буде виведено на екран тільки в тому випадку, якщо він відповідає обом умовам, і сума ніколи не перевищить 10.
Цикл for може бути нескінченним. Це робиться наступним чином:
for (;;)
{
}
Тут нема жодних умов і лічильників, тому цикл буде виконуватись нескінченну кількість разів.
Увага! Не раджу вам використовувати нескінченні цикли: вони створюють велике навантаження на систему, а їх не коректне застосування може призвести до зависання чи інших непередбачених результатів.
Понеділок, 2 лютого 2009 р.
Заокруглені кути на сайтах
Які є взагалі методи побудови блоків із заокругленими кутами?- За допомогою графіки (Photoshop там чи шось простіше).
- З використанням HTML + CSS.
- За допомогою JavaScript.
- В принципі можна застосувати і інші технології, та їх комбінації. Наприклад PHP+HTML. Варіантів безліч.
Велика кількість наведених методів вирішують завдання наполовину - будують потрібний блок, але без рамки. Інші ґрунтуються на бібліотеках чи навіть цілих фреймворках, які для такої роботи досить заважкі (особливо, якщо сайт не використовує їх для іншої роботи). Ті, що залишилися використовують графіку - знов не те.
І тоді я звернувся до своєї пам'яті - архівів. Все, що бачу цікавого - зберігаю в архів і вам раджу, навіть, якщо здається, що воно вам ніколи не знадобиться.
Знайшов!
Знайшов цікавий варіант і не дуже громіздкий і використовує HTML+CSS.
Власне файл для скачування: round_corners.html
А це результат його роботи:
Користуйтесь!Неділя, 25 січня 2009 р.
Сайти українською мовою
Чому так відбувається?
Як ви зрозуміли, "не українська мова" - це російська.
Розглянемо основні причини, за якими розробники основною мовою інтерфейсу вибирають російську:
- бажання замовника
як правило, розробник в повній мірі володіє російською мовою і переконувати клієнта в доцільності чи недоцільності такого вибору ніхто не збирається: як ми знаємо - клієнт завжди правий;
- більшість потенційних відвідувачів сайту є російськомовними
мабуть так і є, але "мовити" та сайтах, як правило, не потрібно. Потрібно читати, сприймати інформацію і розуміти. Незважаючи на небажання великої частини російськомовних українців спілкуватися на українській мові (це їх власна справа), переважна їх частина прекрасно володіє мовою, принаймні на рівні сприйняття інформації і її розуміння;
- відсутність українського контенту
серйозна проблема: що було скоріше - курка чи яйце. Нема сайтів нема контенту. Є групи сайтів, в яких неоригінальний (запозичений) контент складає значну частину його наповнення. В такому випадку без джерела інформації обійтись практично неможливо. А переклад часто не вписується у заплановані витрати. До таких сайтів належать: Інтернет-магазини із описанням товарів, стрічки новин із джерелами тих самих новин та ін.
Про об'єктивність причин судити вам, шановні читачі.
P.S. Оскільки державні мужі не дуже переймаються проблемою освіченості населення (мабуть через відсутність своєї), то цим займаються громадські та приватні установи. До прикладу наведу декілька з них:
- Гуртом;
- Закладка;
- Портал українця;
- Портал українізації програмного забезпечення;
- Yarega WebStudio - пропонує знижку 10% для замовників із України, які основною мовою інтерфейсу виберуть українську;
- Мова;
- та ін.
Не знаю з яких мотивів кнопку зробили саме червоною (мабуть через яскравість кольору), але червоних сайтів є не дуже багато )), і мені довелось відмовитися, оскільки не міг собі дозволити на комерційного характеру сайт поставити елемент, який категорично не вписується в дизайн. Інших варіантів кнопки, на жаль, не знайшлося.
Неділя, 18 січня 2009 р.
Кодування символів UTF-8. Доцільність переходу.
Таке питання як "кодування символів" перенесу із площини ідеологічної в площину практичну. Оскільки деякі програмери навідріз відмовляються використовувати "буржуйську" таблицю символів UTF, а перевагу віддають Windows-1251 чи KOI8-R, не пояснюючи причин, а стверджуючи, що вони наші, рідні.
Нагадаю про основних конкурентів:
Windows-1251 (також вживаються назви Win1251, CP1251) — кодування, що є стандартним 8-бітовим кодуванням для всіх локалізованих українських і російських версій Microsoft Windows. Користується досить великою популярністю. Була створена на базі кодувань, що використалися в ранніх «самопальних» русифікаторах Windows в 1990—1991 рр. спільно представниками «Параграфа», «Діалогу» і російського відділення Microsoft. Початковий варіант кодування помітно відрізнявся від сучасного, преведеного нижче в таблиці (зокрема, там було значне число «білих плям»).
Windows-1251 вигідно відрізняється від інших кириличних кодувань наявністю практично всіх символів, що використовуються в слов'янській кириличній типографіці для звичайного тексту (відсутній тільки значок наголосу); вона містить всі символи для російської, української, білоруської, сербської і болгарської мов.
Має три недоліки:
- мала (рядкова) буква «я» має код 0xFF (255 в 10-чній системі). Вона є «винуватицею» ряду несподіваних проблем в програмах без підтримки чистого 8-го біту.
- відсутні символи псевдографіки.
- при сортуванні в алфавітному порядку літери не йдуть підряд, оскільки між літерами ўЎіІєЄЇґҐёЁ і основним блоком літер йдуть спецсимволи.
Нижня частина таблиці кодування (латиниця) повністю відповідає кодуванню ASCII. Числа під буквами позначають 16-чний код букви в Юнікоді.
КОІ-8 (код обміну інформацією, 8 бітів), рос. КОИ-8 — восьмибітова ASCII-сумісна кодова таблиця, розроблена для кодування букв кирилічних алфавітів.Існує також семибітова версія кодування, не повністю сумісна з ASCII — КОІ-7. КОІ-7 і КОІ-8 описані в ГОСТ 19768-74 (зараз недійсний).
Існує декілька варіантів кодування КОІ-8 для різних кирилічних алфавітів. Російський алфавіт описується в кодуванні KOI8-R, український — в KOI8-U. KOI8-R став фактично стандартом для російської кирилиці в юнікс-подобних операційних системах і електронній пошті.
В деяких країнах СЕВ були створені модифікації КОІ-8 для національних варіантів латиниці. Базова ідея була та ж сама — при тому, що «зрізає» восьмого біта текст мав лишатися більш менш зрозумілим. Наприклад, в чеському варіанті КОІ-8 букви Čč повинні перетворюватися на cC, Žž — в zZ тощо. В даний час ці кодування не використовуються.
А тепер про UTF:
Юніко́д, (англ. Unicode) — це промисловий стандарт розроблений, щоб зробити можливим для текстів і символів (графічних знаків) всіх писемних систем світу узгоджене представлення (репрезентацію) і обробку комп’ютерами. Удосконалений сумісно з стандартом Універсальний Набір Символів (Universal Character Set - UCS) і опублікований в формі книги Стандарт Юнікод, Юнікод складається з асортименту символів, методології кодування і комплекту (набору) стандартів кодування символів, комплекту кодових таблиць для посилань на зображення символів, списку властивостей символів таких, наприклад, як верхній і нижній регістр, комплект довідкових даних комп’ютерних файлів, правил нормалізації, декомпозиції, співставлення і зображення (рендерингу).
Стандарт запропонувала в 1991 році організація Консорціум Юнікоду (англ. Unicode Consortium), яка об’єднує найбільші ІТ-компанії (корпорації). Консорціум Юнікоду — неприбуткова (некомерційна) організація, яка координує розвиток Юнікоду, має амбітну мету замінити в кінцевому підсумку існуючі системи кодування символів Юнікодом і його системою стандартів Формат Перетворень Юнікоду (UTF, Unicode Transformation Format), тому що багато існуючих систем кодування є обмеженими в розмірі й можливостях і несумісними з багатомовними середовищами. Успіхи Юнікоду в уніфікації наборів символів призвели до його розповсюдження і домінуючого використання в інтернаціоналізації і локалізації програмного забезпечення комп’ютерів. Стандарт був використаний в багатьох новітніх технологіях, включаючи XML, мову програмування Java і сучасні операційні системи.
Юнікод переступає старе обмеження кодування символів одним байтом. Замість того використовує 17 просторів, кожен з яких визначає 65,536 кодів і дає можливість описати максимум 1 114 112 (17 * 216) різних символів. Basic Multilingual Plane (BMP) — Основна Багатомовна Площина, містить майже всі символи, що Ви будете коли-небудь використовувати.
Юнікод має декілька реалізацій, але найпоширенішими є дві: UTF (Unicode Transformation Format) — Формат Перетворення Юнікоду та UCS (Universal Character Set) — Універсальна Таблиця Символів. Число після UTF визначає кількість біт виділених під один юніт, а число після UCS визначає кількість байтів. Універсальний набір символів задає однозначну відповідність символів кодам — елементам кодового простору, тобто невід’ємним цілим числам. UTF-8 став найпоширенішим для інтернаціональних кодувань.
UTF-8 є системою кодування з змінною довжиною кодування символів, це означає що для кодування символів він використовує від 1 до 4 байт на символ. Так перший байт UTF-8 використовується для кодування ASCII, що дає повну сумісність з ASCII. Перекодування ASCII кодом UTF-8 для латинських символів дуже незначно збільшить розмір даних, бо використовується тільки перший байт. В східних мовах де мусять для кодування використовувати вищі байти це кодування збільшує розмір даних на 50 %.
UTF-8 дозволяє Вам працювати в стандартизованому міжнародно прийнятому багатомовному середовищі, з порівняно незначним збільшенням обсягу даних. UTF-8 являє собою ідеальний спосіб передачі не ASCII кодованих символів через Інтернет, електронну пошту, чат, тощо.
Коди в стандарті Unicode поділені на декілька областей. Область з кодами від U+0000 до U+007F (про запис виду «U+xxxx» дивись нижче в розділі «Кодовий простір») містить символи набору ASCII. Далі розміщені області знаків різних писемностей, знаки пунктуації і технічні символи. Частина кодів зарезервована для використання в майбутньому. Для символів кирилиці виділені коди від U+0400 до U+052F.
Отже, оцінюємо доцільність застосування UTF:
"ЗА"
- Міжнародний стандарт (UTF-8 дозволяє Вам працювати в стандартизованому міжнародно прийнятому багатомовному середовищі).
- Багатомовність (UTF-8 дозволить без значних затрат реалізувати багатомовність на ремурсі, включаючи всі екзотичні мови, які людина собі забажає та спеціальні символи).
- Розширення набору інструментів для роботи із текстом. (Всі розробники ПЗ підтримують кодування UTF-8 у своїх продуктах, щоб розширити ринок їх збуту).
- Безпосередньо саме розширення ринку збуту для Вашого рішення. (через реалізацію багатомовності, Ваш продукт отримає нових клієнтів).
- Стандартизація продукту (звідси випливають багато переваг, серед яких: спрощення підтримки, документування, інтеграція та ін.).
- Підтримка всіх операційних систем, СУБД та браузерів. (навіть тих, що ще не з'явилися:) ).
- Збільшення розміру файлу. (Хоч і незначне, але збільшення розміру файлу даних, через те, що багато символів будуть кодуватися не 1-им байтом (Win-1251), а 2-ма, 4-ма байтами).
- Освоєння нових інструментів та застосування нових бібліотек функцій чи переписування вже робочих для нового кодування, звідси додаткова витрата часу (читай: грошей).
P.S. Але у будь-якому випадку у будь-якій справі об'єктивно оцінюйте свої можливості та знання. Щоб інновації не зашкодили результату. Бо, якщо продукт не вийде вчасно на ринок, то він нікому не потрібен, який би він не був універсальний чи стандартизований.