четвер, 2 січня 2014 р.

Pyramid googlet

Pyramid Cookbook
Advanced Configuration
Deform - is a Python HTML form generation library. deform uses Colander as a schema library, Peppercorn as a form control deserialization library, and Chameleon to perform HTML templating.

pyramid.traversalTraversal walks down the path until it finds a published resource, analogous to a file system “directory” or “file”. The resource found as the result of a traversal becomes the context of the request. Then, the view lookup subsystem is used to find some view code willing to “publish” this resource by generating a responseTraversal is a concept stolen from Zope

  • find_interface - Return the first resource found in the lineage of resource which, a) if class_or_interface is a Python class object, is an instance of the class or any subclass of that class or b) if class_or_interface is a interface, provides the specified interface

lineageAn ordered sequence of objects based on a “location -aware” resource
tweenis a bit of code that sits between the Pyramid router’s main request handling function and the upstream WSGI component that uses Pyramid as its “app”. This is a feature that may be used by Pyramid framework extensions, to provide, for example, Pyramid-specific view timing support bookkeeping code that examines exceptions before they are returned to the upstream WSGI application.
zope.interface - Interfaces are objects that specify (document) the external behavior of objects that “provide” them. An interface specifies behavior through:
  • Informal documentation in a doc string
  • Attribute definitions
  • Invariants, which are conditions that must hold for objects that provide the interface

Attribute definitions specify specific attributes. They define the attribute name and provide documentation and constraints of attribute values. Attribute definitions can take a number of forms, as we’ll see below.
The Zope Object Database (ZODB) is an object-oriented database for transparently and persistently storing Python objects. It is included as part of the Zope web application server, but can also be used independently of Zope.
persistent This package contains a generic persistence implementation for Python. It forms the core protocol for making objects interact "transparently" with a database such as the ZODB.

середа, 5 червня 2013 р.

Безпека Symfony

При відкриття певної не публічної сторінки спочатку ідентифікується користувач, перевіряється його аутентичність (authentication) і аж після цього перевіряється чи має право він переглядати сторінку, тобто авторизується (authorization).

HTTP аутентифікація

Компонент безпеки може налаштовується у файлі app/config/security.yml .
У прикладі нижче налаштовується обмеження доступу до каталогу /admin/* . Облікові дані запитуються у користувача за допомогою (старої-доброї) HTTP аутентифікації:

# app/config/security.yml
security:
    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

    providers:
        in_memory:
            memory:
                users:
                    ryan:  { password: ryanpass, roles: 'ROLE_USER' }
                    admin: { password: kitten, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

В результаті ми отримаємо повнофункціональну систему безпеки, яка:

  • Має два користувачі (ryan і admin);
  • Користувачі аутентифікуються за допомогою діалогу HTTP аутентифікації;
  • Будь який URL, що містить /admin/* має закритий доступ і тільки admin може туди ввійти;
  • Всі решта URL, які не містять /admin/* доступні всім користувачам (тобто для їх перегляду не потрібно вводити логін і пароль у діалог HTTP аутентифікації;

Отже розглянемо детальніше як це працює.

Аутентифікація

Система безпеки активується коли користувач хоче получити доступ до закритої сторінки. Спочатку визначається чи потрібно користувачу пройти аутентифікацію і якщо так, тоді вона здійснюється.
Firewall Symfony активується, якщо адреса запиту відповідає шаблону файлу конфігурації. Та це ще не значить, що появляється діалог аутентифікації.
Процес аутентифікації залежить від механізму, який ви використовуєте. Наприклад якщо використовувати механізм форм, то користувач перенаправляється на сторінку входу. Якщо ж ви використовуєте HTTP аутентифікацію то користувач отримує відповідь HTTP 401 (Unauthorized) для того, щоб браузер вивів діалог входу.

Авторизація

У файлі конфігурації безпеки кожному шаблону ставиться у відповідність певна роль (наприклад ROLE_ADMIN) яку повинен мати користувач, щоб отримати доступ до сторінки.


У наступному приклад користувач ryan успішно проходить аутентифікацію, але оскільки він не має прав адміністратора (ROLE_ADMIN) то не може получити доступ до /admin/foo.
У цьому разі користувачу надсилається відповідь HTTP 403 (Forbidden), яку ви можете оформити на свій смак.

вівторок, 12 березня 2013 р.

Система керування версіями

В контексті розробки програмних систем, керування версіями можна розглядати як мистецтво  управління паралельними змінами. Зазвичай системи керування версіями (англ. source code management) працюють як центральні сховища (repository) і мають інтерфейс для доступу і спільного використання коду.
Для прикладу допустимо, що двом розробникам потрібно працювати з одним і тим самим файлом. Вони можуть відкрити і редагувати файл, перезаписувати, витираючи зміни здійсненні один одним. Або ж один розробник очікує, поки інший завершить редагування файлу, байдикуючи.
Система керування версіями є рішинням цих проблеми. Вона здатна слідкувати за змінами кожного із файлів сховища і користувач може бачити не тільки поточний стан файлу, але й усі зміни, які відбувались за час його існування. Завдяки цьому можливо здійснювати відкат (rollback) помилкового коду, забезпечуючи повернення до робочої версії. Певні версії файлу можна помічати як кінцеві і продовжуючи розробку завжди мати доступ до копій версії, які на даний момент вважаються кінцевими.
Окрім цього, системи керування версіями дозволяють декільком програмістам одночасно працювати над один кодом. Кожний із них може отримати (checkout) копію коду із сховища, а після завершення роботи з ним помістити (commit) назад. У цьому випадку вважається, що версія прийнята. Звісно ж дані системи можуть прослідкувати які зміни були здійснені користувачем.
Варто також зазначити, що система управління версіями здатна злити зміни здійснені різними користувачами, лише якщо вони здійснені у різних частинах файлу. Якщо ж розробники відредагували один і той же код у своїх локальних копіях, то перший із них зможе помістити код у репозиторій, а другий зможе зробити те ж саме тільки якщо вирішить яким чином поєднати зміни першого зі своїми. Тільки після вирішення конфлікту сховище дозволить зберегти файл.
Існує три класи системи керування версіями:
  • Локальні (rcs) – зберігають зміни на тому ж комп'ютерні, на якому відбувається робота з файлами.
  • Централізовані (CVS, Subversion, Perforce) – із серверу копіюються лише ті файли, які необхідно 
  • Розподілені (Git, Mercurial, Bazaar) – кожен користувач повністю копіює все сховище, а тому більшість операцій із ним відбуваються локально. Це пришвидшує роботу і дає можливість швидко відновити головне сховище при збоях.
Термінологія систем управління версіями:
  • Гілка (branch) – це напрямок незалежний напрямок. Являє собою копію частини (зазвичай каталогу) сховища, в яку можна вносити свої зміни, не впливаючи на інші гілки. Файли мають одинакову історію до точки розгалуження і різну – після
  • Набір змін (changeset, activity) – це іменований набір правок, здійснені з якоюсь ціллю в локальній копії (working copy)
  • Фіксація змін (check-in, commit, submit) – це створення нової версії, тобто поширення змін зроблених в локальні копії на все сховище.
  • Отримання файлів (check-out, clone) створює локальну копію (working copy)
  • Конфлікт (conflict) – це ситуація, у якій декілька користувачів змінили одну і ту ж частину файлу
  • Основна версія (head) – сама остання версія гілки (branch), яка знаходиться в сховищі. Скільки гілок, стільки ж основних версій.
  • Злиття (merge, integration) – це об'єднання незалежних змін в єдину версію документу. Стається це тоді, коли двоє людей змінили один і той же файл або переносі змін із однієї гілки в іншу.
  • Перенесення точки розгалуження (rebase) – це перенесення точки, від якої починається гілка, на пізнішу версію основної гілки.
  • Сховище (repository, depot) – це місце, де система управління версіями зберігає всі файли разом з історією змін та іншою службовою інформацією.
  • Версія (revision) файлу.
  • Відкладання змін (shelving) – це можливість створювати набір змін (changeset) і  зберігати його на сервері без фіксації (commit). У такому разі змінені фрагменти доступні для читання іншим користувачам, але не занесені в основну гілку. Таким чином розробник може зберігати незавершені роботи на сервері.
  • Мітка (tag, label) – це ім'я набору файлів певної версії.
  • Стовбур (trunk, mainline, master) – це основна гілка розробки. Більшість змін вноситься в стовбур, а якщо є потреба серйозних змін, які можуть вплинути на стабільність роботи, то створюється гілка, яка зливається із стовбуром, коли нововведення будуть протестовані.
  • Синхронізація (update, sync) – це оновлення локальної копії до деякої, зазвичай останньої, версії зі сховища.
  • Локальна копія (working copy) – це робоча копія, яка була 

Git

Git – це розподілена система керування версіями файлів, яка була створена Лінуксом Торвальдсом у 2005-му році для керування розробкою ядра Linux. До проектів, які використовують дану систему також належать: Android, Drupal, Cairo, GNU Core Utilities, Mesa, Wine, Chromium, jQuery, PHP, NASM, MediaWiki, osCommerce, проекти Twitter та Yahoo, а також деякі дистрибутиви Linux.
Система розроблялась як набір програм командної стрічки з параметрами, спеціально розроблених для використання у сценаріях, що дозволило створювати на її базі спеціалізовані системи контролю версій.
Сховище Git являє собою каталог файлової системи, в якому знаходяться
  • Файли налаштувань сховища
  • Файли журналів, які зберігають зберігають операції, здійснені над сховищем
  • Індекс – описує розташування файлів
  • Сховище, яке власне і зберігає файли
Файли в Git можуть знаходитись в одному із трьох станів: зафіксованому, зміненому і підготовленому. Зафіксований файл той, який вже збережений у локальні базі. До змінених файлів відносяться ті, які змінились, але ще не були зафіксовані. Підготовлені файли – це змінені файли, що помічені для включення у наступну фіксацію (commit).
Тому в проектах, що використовують Git є три частини: каталог Git (Git repository), робочий каталог (working directory) і область підготовлених файлів (staging area).
Git repository – це місце, де Git зберігає метадані і базу даних об'єктів вашого проекту. Це  найбільш важлива частина Git, саме вона копіюється, коли ви отримуєте (clone) сховище з іншого комп'ютера. За замовчуванням сховище зберігається в підкаталозі .git кореневого каталогу локальної копії дерева файлів. Структура сховища не відповідає реальні структурі файлового дерева.
Working directory – це отримана (clone) зі сховища копія певної версії проекту.
Staging area – це файл, який містить інформацію про те, що повинно ввійти в наступну фіксацію (commit).
Будь-яке дерево файлів можна перетворити у сховище git виконавши команду
git init
Сховище може отримати (check-out, clone) з іншого вузла у мережі. Наприклад вихідний код Zend Framework 2
git clone git://github.com/zendframework/zf2.git
Щоб отримати його із підмодулями, необхідно використати опцію --recursive
git clone git://github.com/zendframework/zf2.git --recursive
З Git можна працювати по декільком протоколам. В попередньому прикладі використовувався протокол git://, ви також можете використовувати http(s):// або user@server:/path.git, який використовуває SSH
Основним інструментом, що використовується для визначення стану файлів – це команда git status :
user@host:~/project# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD file..." to unstage)
#
# modified: index.php
#
# Changes not staged for commit:
# (use "git add file..." to update what will be committed)
# (use "git checkout -- file..." to discard changes in working directory)
#
# modified: login.php
#
# Untracked files:
# (use "git add file..." to include in what will be committed)
#
# readme.txt

В даному випадку можна побачити, що файл index.php знаходиться в підготовленому стані, файл login.php – у зміненому, а файл readme.txt – не був внесений у сховище.
Якщо ж ви виконаєте її одразу після отримання (clone) локальної копії, то побачите щось на зразок:
user@host:~/project# git status
# On branch master
nothing to commit (working directory clean)


Зазвичай робочий процес з використанням Git має такі кроки:
  1. Ви вносите зміни в файли у своєму робочому каталозі
  2. Підготовлюєте файли, додаючи їх в область підготовлених файлів
    git add .
  3. Фіксуєте зміни, під час якого беруться підготовлені файли із індексу і поміщаються у сховище
    git commit -m "опис фіксації"
  4. Синхронізуйте вміст локального сховища з віддаленим
    git push origin master
Основні команди Git
git pushвнесе зміни у віддалений репозиторій
git statusпокаже стан проекту
git resetперейде до попередньої комітом
git revertвідмінить зміни, які виконані окремим попереднім комітом
git rm -rпроіндексує зміни
git commit -m "примітка"виконає локально коміт
git addвнесення файлів у індекс
git logвиведе інформацію про коміти
git showпокаже зміни внесені певним комітом
git diffстворить копію віддаленого репозиторію
git pullстворить компію віддаленого репозиторію
git branchперечислить гілки проекту
git checkout masterпереключить в гілку maste
git cloneстворює копію віддаленого сховища

Корисні посилання:
Як працювати в Git
Работа с Git для начинающих

GitHub

GitHub – це найбільший веб-сервіс для спільної розробки і хостингу проектів. Заснований на системі контролю версій Git. Сервіс є соціальною мережею для розробників, безкоштовинй для проектів з відкритим вихідним кодом та платний для пропріетарних проектів.
Для проектів можна створювати wiki-документацію, використовувати систему слідковування за помилками, підсвідка синтаксису для більшості мов програмування.
Завдяки сервісу Gist можна зберігати і демонструвати іншим куски коду.
Для роботи з GitHub (в Linux) необхідно мати закритий (id_rsa) і відкритий (id_rsa.pub) RSA-ключ у теці ~/.ssh
Якщо ви не знайшли вказаної теки чи файлів у ній, то вам необхідно з допомогою ssh-keygen команди створити ці ключі:
$ ssh-keygen -t rsa -C "ваш@емейл.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa): # Натисніть enter
Enter passphrase (empty for no passphrase): # введіть придуманий вами пароль або натисніть enter
Enter same passphrase again: # повторіть придуманий вами пароль

Команда ssh-keygen з придуманого вами паролю зашифрує закритий ключ для того в файлі id_rsa. Якщо все виконано успішно, то утиліта видасть вам щось на зразок
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db user_name@username.com

Тепер необхідно додати свій SSH (id_rsa.pub) ключ в GitHub, щоб ви могли користуватись цим сховищем:
На сторінці налаштувань відкрийте розділ «SSH Keys», натисніть «Add SSH Key», у «Title» назвіть ключ і вставте у «Key» вміст файлу ~/.ssh/rsa_id.pub
Для перевірки введіть
ssh -T git@github.com
Ви маєте отримати повідомлення «Hi ‹username›! You've successfully authenticated, but GitHub does not provide shell access.»

Heroku

Heroku – це хмарна сервіс-платформа (platform as a service), що підтримує PHP, Ruby, Python, Java, Node.js, Scala, Clojure, яка дозволяє безоштовно розміщувати свої сайти з допомогою git, а також користуватись різноманітними сервісами, зокрема підключити базу даних MySQL
Heroku client – інструмент командної стрічки для створення і керування сайтами heroku.

Корисні посилання:
Сайт для программиста (часть 1, часть 2)
Heroku в качестве хостинга сайтов
Getting Started with Heroku
Deploying with Git
Getting Started with Your Facebook App on Heroku

середа, 27 лютого 2013 р.

Встановлення і Apache, PHP, MySQL

У даній статті розглядається встановлення HTTP сервера Apache, інтерпретатора і модуля Apache - PHP та системи керування (управління) базами даних (СУБД) MySQL.
Оскільки встановлення і запуску web-серверу та СУБД під Windows складніший ніж для Linux із-за відсутності менеджера пакетів, то розгянемо детальний опис цієї процедури у операційні системі Майкрософту.
Apache та PHP
Cкачайте будь-який файл з розширенням msi із репозиторію Apache Foundation http://apache.cp.if.ua//httpd/binaries/win32/
Запустіть інсталяцію. Протягом цього процесу вам необхідно буде ввести ім'я серверу (localhost), домене ім'я (localhost), email адресу адміністратора (немає значення яку). Apache сервер можна запускатись лише при вході під вашим користувачем або може бути встановлений як сервіс і не залежити від того який профіль користувача буде запущений.


Після запуску web-сервера повинна завантажуватись сторіка http://localhost/ (із вмістом "It works!"). Якщо сервер не запустився, причиною може бути програма, що вже використовує (слухає) цей порт. Найчастіше це Skype, для того щоб він не слухав порт, необхідно зайтив в настройки, знайти налаштування мережі і зняти галочку «Використовувати порти 80 та 443 як альтернативні для підключення» («Use port 80 and 443 as alternatives for incoming connections»). В іншому випадку прочитайте інструкцію «Как определить, какая программа использует или блокирует порты протокола передачи определенного элемента управления в Windows»
Наступним кроком буде підключення PHP до Apache. Для цього потрібно скачати архів з модулем і інтерпретатором PHP http://windows.php.net/download/. Розпакуйте його у будь-де на диску C: (для прикладу C:\php). У теці (папці), де встановлений Apache (за замовчуванням це C:\Program Files\Apache Foundation\Apache2.2) відкрийте головний конфігураційний файл conf/httpd.conf  і додайте в кінці два рядки:
LoadModule php5_module "C:/php/php5apache2_2.dll"
AddHandler application/x-httpd-php .php
У першому рядку вказується (директивою) завантажити модуль під назвою php5_module з файлу, що знаходиться у теці, в яку розпакували архів PHP, php5apache2_2.dll, 2_2 в даному випадку вказує на те, що цей модуль може завантажуватись лише серевером Apache версії 2.2, для інших версій назва dll-бібліотеки з модулем може бути іншою, наприклад php5apache2.dll, якщо версія 2.0 і php5apache2_4.dll - 2.4
Друга директива реєструє файл який містить у назві «.php» як файл програми на PHP у форматі стандарту Multipurpose Internet Mail Extensions (MIME)
У теці PHP знайдіть файл php.ini-development, скопіюйте його і змініть назву на php.ini . Це - файл налаштувань php, за замовчуванням, при запуску Apache він шукається у системні директорії Windows: C:\Windows . Якщо ви не хочете туди поміщати php.ini, то ви можете вказати директивою (у httpd.conf)
PHPIniDir "C:/php"
теку у якій забажали помістити файл конфігурацій.
Детальніше ви можете дізнатись у офіційні документації: «Установка PHP как обработчика под Apache»
У httpd.conf знайдіть директиву
DocumentIndex index.html
що вказує які назви файлів повиннні відкрииватись (запускатись), якщо користувач не вказав файл він хоче переглянути, а лише директорію. Додамо до цього списку index.php
DocumentIndex index.html index.php
Директива DocumentRoot вказує на теку із якої будуть відображатись документи, для прикладу
DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"
Зайдіть у цю директорію, видаліть або переіменуйте файл index.html. Cтворіть файл index.php із вмістом
<?php phpinfo(); ?>
Перезапустіть сервер (Панель керування > Адміністрування > Служби)

У адресі в браузері введіть localhost/ або 127.0.0.1/ повинна завантажитись сторінка


MySQL
Завантажте з офіційного сайту http://dev.mysql.com/downloads/mysql/ MySQL Installer MySQL Community Server-а. Інсталятор включає в себе MySQL Server, інструмент для візуального проектування баз даних MySQL Workbench, навчальні бази даних, інструмент моніторигу MySQL Notifier, розширеня для Excel і Visual Studio та документацію.
Запустіть інсталяцію, оберіть тип встановлення (Setup Type) типовий для розробника (Developer Default). Дійшовши до налаштувань серверу (MySQL Server Configuration) оберіть тип налаштування (Config Type) Developer Machine. Дозволиши мережеві підключення (Enable TCP/IP Networking) ви можете підлючитись до серверу з іншої комп'ютера.
У наступному вікні введіть пароль адміністратора (root-та) та добавте користувачів (User Account) даної машини, які зможуть працювати з базою даних. Це ж саме ви зможете зробити після встановлення за допомогою MySQL Workbench або вручну добавивши записи у таблицю user системної бази даних mysql. Для кожного web-додатку добре було би створювати відповідного користувача з обмеженнями (ролями) достатніми, щоб додаток не міг пошкодити дані інших додатків.
Для того, щоб підключитись до MySQL у коді PHP відкрийте файл php.ini, знайдіть рядок
; extension_dir = "ext"
Розкоментуйте його, забравши крапку з комою і замість ext вкажіть повний шлях до директорії з розширеннями:
extension_dir = "C:/php/ext"
Знайдіть рядок
;extension=php_pdo_mysql.dll
Заберіть символ коментаря. Це - PHP Data Objects драйвер для бази даних MySQL.
Створіть в кореневій папці докуменів (DocumentRoot, %Apache%/htdocs) файл mysql-test.php і помістіть у нього такий код:
<?php
try {
    $user = 'root';
    $password = '1111';
    $dbh = new PDO('mysql:host=localhost;dbname=mysql', $user, $password);
    foreach($dbh->query('SELECT User, Host from User') as $row) {
        echo $row['User'] . '@' . $row['Host'] . ', ';
    }
    $dbh = null;
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage();
    die();
}
?>
Вкажіть ім'я користувача (в коді root) і пароль (в коді 1111).
Перезавантажте сервер. Зайдіть http://localhost/mysql-test.php . Якщо все налаштовано правильно, то ви побачете список користувачів бази даних, в іншому випадку код виведе стрічку з помилкою, яка починається з "Error!: "

Встановлення у Linux на прикладі Ubuntu

Встановлення Apache 2:
apt-get install apache2
Встановлення PHP 5:
apt-get install php5-common php5
Встановлення Apache-модуля PHP:
apt-get install libapache2-mod-php5
Встановлення PHP-інтерпретатора командної стрічки:
apt-get install php5-cli
Встановлення сервера MySQL:
apt-get install mysql-server
Встановлення клієнта MySQL:
apt-get install mysql-client
Встановлення розширення (extension) PHP для MySQL:
apt-get install php5-mysql
Встановлення модуля Apache, що дозволяє аутентифікацію використовуючи дані користувачів, записані у базу даних MySQL:
libapache2-mod-auth-mysql

четвер, 21 лютого 2013 р.

Перша лекція JavaScript

Ключові слова
break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, void, while, with
Зарезервовані слова
class, const, enum, export, extends, import, super, mplements, interface, let, package, private, protected, public, static, yield, arguments, eval, abstract, boolean, byte, char, double, enum, export, extends, goto, implements, import, int, native, package, private, protected, static, super, synchronized, throws, class, const, final, float, interface, long, public, short, transient, volatile
Коментарі
//Однорядковий коментар, родом з мови C
/*
Багаторядковий
коментар
з цієї ж родини.
* З для пришвидшення читабельності коду
* кожен рядок може починатись з
* зірочки
*/
Оголошеня змінної
var globalScopeVariable;
function f()
{
    localVar = 'локальна';
    globalScopeVariable = 'глобальна'
}
woman = localVar + globalScopeVariable;
Речення (statement) може не мати в кінці крапки з комою, але із-за цього можуть виникати помилки
var y = x + f
(a+b).toString()
anInteger = 228;
OctalInteger = 0334;
hexadecimalInteger = 0xe4;
negati$veHexadecimalInteger = - 0xE4;
_minInteger = -9007199254740922;
maxIn_teger = 9007199254740922;
minFloat = 5e-325;
$maxFloat = 1.797693134623157e308;
zeroFloat = 2e-325;      // 0
InfinityFloat = 1.8e308; // Infinity
divisionByZero = 1/0;    // Infinity
zeroByZero = 0/0;        // NaN - not a number
Infinity == Infinity;    // true
NaN == NaN;  // false
isFinite(InfinityFloat)  // false
isNaN(zeroByZero)        // true
Стрічки (string) можуть бути в одинарних і подвійних лапках. У стрічки в подвійних лапках можуть містити спецсимволи
php = 'Personal "Home" Page';
PHP = "'PHP' Hypertext Processor";
simpleString = 'sImplE\t\nString' // sImplE\t\nString
backwardsString = "remember\t\'RTFM\", noob" // remember    'RTFM", noob;
quotes = "подвійні\" одинарні\' лапки"; // подвійні" одинарні' лапки
backslash = "слеш/ і зворотній слеш\\"; // слеш/ і зворотній слеш\
ascii = "\x21 - \x7e" // "! - ~"
cyrillicUnicode = "\u0400 - \u04FF" // &#x400 - &#x4FF
string = 'ета' + 'нол' // етанол
string[2]       // а
string.charAt(2) // а
''.length // 0
string[string.length - 1] // л
'наДОБРАніч'.substr(2,3) // ДОБ
'альфаметилфенетиламін'.substring(5,10) // метил
name = "Brent Everett";
name.slice(6,9); // Eve
name.slice(6);   // Everett
name.slice(-9);  // t Everett
name.lastIndexOf('e'); // 10
name.indexOf('e', 3);  // 8
name.split(' ') // ["Brent", "Everett"]
name.replace('t', 'd') // Brend Everett
name.replace('tt', 'd') // Brent Evered
name.toLowerCase(); // brent everett
name.toUpperCase(); // BRENT EVERETT
Правда і неправда
//Оператори рівності і нерівності
4 == "4";
" 3" == 3;
3 == " 3.0 ";
17.0 == " 17";
1 == true;
false == 0;
null == undefined;
"2" != "2 ";
2 != true;
null != 0;
Infinity != -Infinity
//Оператори тотожності і нетотожності
4 === 4.0;
"a" === "\x61";
"\'" === "'";
Infinity === Infinity;
14 !== "14";
undefined !== null;
NaN !== NaN;
Логічні оператори
true == (
    (false && false) == false &&
    (true  && false) == false &&
    (false && true)  == false
);
true == (
    (true  || true) &&
    (false || true) &&
    (true  || false)
);

true  = (true  &&  true);
false = (false || false);

// Бітова логіка
(1 | 0) == 1; // (000 || 001) == 001
(2 | 1) == 3; // (010 || 001) == 011
(2 | 2) == 2; // (010 || 010) == 010
(3 | 2) == 3; // (011 || 010) == 011
(4 | 2) == 6; // (100 || 010) == 110
(4 | 3) == 7; // (100 || 011) == 111

(1 & 0) == 0; // (000 || 001) == 000
(2 & 1) == 0; // (010 || 001) == 000
(2 & 2) == 2; // (010 || 010) == 010
(3 & 2) == 2; // (011 || 010) == 010
(4 & 2) == 2; // (100 || 010) == 010
(4 & 3) == 4; // (100 || 011) == 100
Умовні оператори
var isFemale = true;

// Однорядковий if
var name1;
if (isFemale)
    name1 = "Юля";
else
    name1 = "Юра";

// Багаторядковий if
var name2;
if (isFemale) {
    name2 = "Віка";
}
else {
    name2 = "Петро";
}

//Вкладені if
var name3, isMale;
if (isMale)
    name3 = "Стефа"
else
    if (isMale != undefined)
        name3 = "Теофій"
    else
        name3 = "Саша";

// Оператор умовного присвоєння
name2 = isFemale ? "Віка" : "Петро";
name3 = isMale ? "Стефа" :
(isMale != undefined) ? "Теофій" : "Саша";

// Розподільний умовний оператор
var day = 5;
var dayOfWeek;
switch (day) {
    case 1.0:
      dayOfWeek = "Monday";
      break;
    case 2:
      dayOfWeek = "Tuesday";
      break;
    case 3:
      dayOfWeek = "Wednesday";
      break;
    case 4:
      dayOfWeek = "Thursday";
      break;
    case "5":
      dayOfWeek = "Friday";
      break;
    case 6:
    case 0:
      dayOfWeek = "Шабат";
      break;
    default:
      dayOfWeek = "29 лютого"
      break;
  }
Масиви
undefinedArray = Array(5); // Масив з 5-ти комірок
a2 = Array(5, "b"); // Масив, що містить елементи 5 і b
a2shortSyntax = [4, "a"] // Масив, що містить елементи 5 і b
a3 = ["ggg", a2] // ["ggg", [5, "b"]]
complexArray = [
    [6, [5, 4]],
    [3, [2, 1, 0]]
];
['a', "b", 'c'][1]    // b
complexArray[1][1][2] // 0
complexArray.length   // 2
complexArray[1][1].length // 3
dynamicArray = [];
dynamicArray.push(1);
dynamicArray.push(['baba', 'coca']);
dynamicArray.reverse(); // [['baba', 'coca'], 1]

середа, 20 лютого 2013 р.

Ваш сайт

Першим невеликим навчальним проектом є створення сайту про себе. В першу чергу необхідно написати html файл-"рамку" (master page) із назвою index.html, що містить меню і, можливо, верхній колонтитул з назвою сайту та нижній із інформацією про авторські права.
У "рамку" будуть поміщені сторінки сайту. Як саме здійснити "вміщення" я розкажу найближчим часом.

Ваш сайт може містити будь-які з наступних розділів:
НазваІм'я файлуПримітки
Головнаmain.htmlЗагальна інформація про вас і сайт
Роботиprojects.htmlПроекти над якими ви працювали
Досягненняachievements.html
Наміриintentions.htmlЩо б ви хотіли здійснити
Блогblog.html
Гостьоваguest.html
Повідомитиinform.htmlНадіслати приватне повідомлення
Фотоphoto.htmlФотографії повинні бути у альбомах, розміщені у теці /photo/назва_альбому
Музикаmusic.htmlСписок улюблених груп і окремий список улюблених композицій
Подякиthanks.htmlКому і за що ви вдячні
Прочитанеbooks.htmlКниги, які ви прочитали
Посиланняreferences.htmlПосилання розділені по категоріям
Контактиcontact.htmlМобільний телефон, електронна пошта, посилання на профілі в соцмережах