3 апреля 2012 г.

Ликвидация ЧП - Фонды

Для того, чтобы пройти проверку в Пенсионном фонде - необходимо получить справки из следующих фондов:
1. Фонд социального страхования по временной утрате трудоспособности.
2. Фонд страхования от несчастных случаев.
3. Цент занятости.

Прошу учитывать, что в моем случае предприятие не вело никакой деятельности и сотрудников у предприятия не было. Поэтому набор необходимых документов может отличаться.
Приведены адреса и телефоны фондов для Дарницкого района, г. Киева.


Фонд соц. страхования по временной утрате трудоспособности

метро "Дарница", 02094, ул. Попудренко 34.
тел.: 566-67-92, 566-22-08, 566-49-79.

Необходимо написать заявление в свободной форме (я писал его непосредственно в фонде, мне подсказали, как его писать). Заявление в кабинет № 210.
Через неделю сказали прийти за справкой в кабинет № 204.

Общие впечатления очень положительные. Старались помочь, все подсказывали, все сделали быстро.
С данным фондом проблем не было вообще. Люди работают, это радует.

Центр занятости

ул. Симферопольская 3/2 (возле Дарницкого вокзала).
тел.: 567-60-71

Необходимые документы: справка о закрытии счета; справка о том, что не было движений на счете; копии приказов о назначении директора; печать. Заявление писал тоже на месте.

Через неделю сказали прийти за справкой.

Общие впечатления опять, очень положительные. Добрые люди, хорошие работники. Проблем не возникло вообще.

Фонд страхования от несчастных случаев

Это самый интересный случай. Мало того, что найти адрес этого фонда практически нереально, так он еще и неправильный. Ощущение такое, что они специально шифруются, будто бы секретный объект особой важности. Ну да ладно, это прелюдия, дальше больше.

ул. Магнитогорская 1 (наиболее близкая станция метро - "Черниговская").
На самом деле это оказалась не улица Магнитогорская, а переулок Магнитогорский.

Пришлось побегать, пока удалось найти этот переулок.

тел.: 362-88-32, 362-88-34, 362-88-35, 362-88-94.

Необходимые документы: заявление (пример есть в фонде), справка из Центра занятости (см. выше), копия "Опису" (который дают в администрации).

Сначала мне сказали, что необходимо только заявление. Я написал заявление и понес его в начальнице фонда. На месте ее не оказалось, мне сказали, что она болеет, когда будет не известно, поэтому ждите и все.
Меня это очень поразило, т.к. я совсем не понимаю, нахер нужны заместители, если мне блин все равно нужно ждать начальницу. Это бред.

Потом, все таки, одна из женщин взяла мое заявление и дальше я вообще ничего не понял.
Мне сказали, что нужна справка из Центра занятости, что-то там еще, и вообще, какого хера я к ним приперся и "пошел вон отсюда".

В общем кроме как "бурыми коняками" я этих теть никак больше назвать не могу. Они реально чувствуют какую-то власть в своих руках, и ведут себя соответственно. Короче зажравшиеся сучки.

Но т.к. справки из ЦЗ у меня не было, я решил временно по тихому удалиться.


В целом, пока, везде кроме этого фонда отношение ко мне было более чем нормальное. Изначально я ожидал другого. А это радует.

На днях собираюсь ехать в ЦЗ, заберу справку и опять в этот фонд. Посмотрим, что будет дальше.


Кстати, если вы читаете этот пост, и знаете, что за "Архив" (из него нужно тоже взять какую-то справку) нужно посетить при ликвидации и где он находится в Дарницком районе, напишите пожалуйста в комментариях. А то с этим архивом я вообще не могу концов найти.


26 марта 2012 г.

Личное - PHP

ООП

Объектно-ориентированное программирование — это новый подход к созданию программ. ООП использует лучшие идеи, воплощенные в структурном программировании, и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовывать ваши программы. Объектно-ориентированное программирование позволяет вам разложить проблему на составные части. Каждая составляющая становится самостоятельным объектом, содержащим свои собственные коды и данные, которые относятся к этому объекту. Все языки ООП, основаны на трех основополагающих концепциях, называемых инкапсуляцией, полиморфизмом и наследованием.

ООП позволяет оперировать объектами как в реальной жизни.

Инкапсуляция

Инкапсуляция позволяет скрыть внутреннюю реализацию объекта, что делает API для работы с объектами понятным и неизбыточным.

При использовании инкапсуляции любой класс рассматривается как «черный ящик» - пользователь класса видит только объявленные свойства и методы класса, но не видит реализацию.

Принцип инкапсуляции при правильном использовании позволяет уменьшить число связей между классами, что позволяет поддерживать независимую реализацию классов.

Наследование

Наследование позволяет строить иерархии объектов, в которых производные классы наследуют данные и поведение классов-предков.

Наследование — это процесс, посредством которого один объект может приобретать свойства другого. Объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него.

Полиморфизм

Полиморфизм добавляет общность при работе с наборами однотипных объектов. Он позволяет работать с этими объектами в унифицированной манере, при этом поведение объектов может различаться.

Позволяет создавать однотипные объекты (и объекты с одинаковыми методами)но различным поведением.

Полиморфизм — это механизм, который позволяет использовать одно и то же имя для реализации различных задач.

Смысл полиморфизма можно описать одной фразой: «Один интерфейс, множество методов». Реализация полиморфизма заключается в том, что в производном классе переопределяют метод базового класса, при этом сохраняя описание метода. Такой подход позволяет связать название метода с разными классами и вызывать метод того класса, объект которого в данный момент используется.

Класс, Объект

Класс — это механизм для создания объектов, определяющий их общее поведение. Можно сказать, что это определение или описание, в то время как объект — это реализация этого определения. Если провести аналогию, то фигура будет являться классом, а треугольник — объектом.

Класс - это описание объекта, объект - реализация (экземпляр класса).

Модификаторы уровня доступа

Public — открытый. Все методы и свойства , объявленные после этого модификатора доступны из любой части программы.
Private — закрытый. Методы и свойства, уровня доступа private разрешено использовать только внутри класса, запрещено использование в производных классах.
Protected — защищенный. Эквивалентен модификатору private с единственным исключением: разрешено использование методов и свойств в производных классах

Абстрактный класс (!)

Абстрактный класс — это базовый класс, в котором содержится хотя бы один чистый виртуальный метод, у которого нет реализации в базовом классе. Поскольку в абстрактном классе содержится хотя бы один виртуальный метод, не имеющий реализации, технически этот класс неполон, и ни одного экземпляра этого класса создать нельзя.

Класс, который содержит по крайней мере один абстрактный метод, должен быть определен как абстрактный. Следует помнить, что нельзя создать экземпляр абстрактного класса. Методы, объявленные абстрактными, несут, по существу, лишь описательный смысл и не могут включать реализации.
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе, должны быть определены в классе-потомке; кроме того, область видимости этих методов должна совпадать (или быть менее строгой). Например, если абстрактный метод объявлен как protected, то реализация этого метода должна быть либо protected либо public, но никак не private. Более того, сигнатуры методов должны совпадать, т.е. контроль типов (type hint) и количество обязательных аргументов должно быть одинаковым. Это правило также применяется к конструкторам начиная с версии PHP 5.4, ранее сигнатуры конструкторов могли отличаться.

Интерфейс

Интерфейс - такой же абстрактный класс,только в нем не может быть свойств и не определены тела у методов.

Интерфейс - реализуется, абстрактный класс - наследуется.

При реализации интерфейса, необходимо реализовать все его методы, этого можно избежать, сделав метод абстрактным (abstract).

MVC (!)

MVC (Model, View, Controller; Модель, Представление, Контроллер) – паттерн, представляющий объектно-ориентированный метод для разделения логики представления, бизнес-логики и модели данных.

MVC состоит из объектов трех видов:
Модель - это объект приложения, а вид - экранное представление. Контроллер описывает, как интерфейс реагирует на управляющие воздействия пользователя.

Модель - содержит бизнес-логику, Представление - формы, Контроллер - связующее звено между моделью и контроллером.

Иными словами:
Представление (вид) отвечает за отображение информации, поступающей из системы или в систему. Модель является "сутью" системы и отвечает за непосредственные алгоритмы, расчёты и тому подобное внутреннее устройство системы. Контроллер является связующим звеном между представлением и моделью системы, посредством которого и существует возможность произвести разделение между ними. Контроллер получает данные от пользователя и передаёт их в модель. Кроме того, он получает сообщения от модели, и передаёт их в представление.
За счет использования MVC повышается гибкость и улучшаются возможности повторного использования.

singleton

Паттерн проектирования.
Гарантирует создание только одного экземпляра класса и предоставляет к нему глобальную точку доступа.

Для реализации singleton в классе:
1) задается приватное статичное свойство, в котором хранится объект экземпляра класса;
2) методы __construct() и __clone() делаются приватными;
3) для создания экземпляра класса объявляется статичный метод, который при вызове проверяет, хранится ли в приватном свойстве объект данного класса. Если нет, создает объект данного класса, сохраняет в приватном свойстве и возвращает его. Если хранится, то просто возвращает свойство с сохраненным в нем объектом.

SQL

Представление (View)

Представление — это заранее определенный запрос, результаты выполнения которого сохранены в базе данных, имеют вид обычной таблицы и проявляющие себя подобно таблице, но не требующие дополнительного места для хранения.
View - виртуальная таблица, представляющая данные одной или более таблиц альтернативным образом.
В действительности представление – всего лишь результат выполнения оператора SELECT, который хранится в структуре памяти, напоминающей SQL таблицу. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных.
Представления значительно расширяют управление данными. Это способ дать публичный доступ к некоторой (но не всей) информации в таблице.

Having

HAVING задает условие на группу строк сгруппированной таблицы. Т.е. HAVING подобен WHERE, но выполняется после группировки.

WHERE - это ограничивающее выражение. Оно выполняется до того, как будет получен результат операции.

HAVING - фильтрующее выражение. Оно применяется к результату операции и выполняется уже после того как этот результат будет получен, в отличии от where.
Выражения WHERE используются вместе с операциями SELECT, UPDATE, DELETE, в то время как HAVING только с SELECT и предложением GROUP BY.

Например, WHERE нельзя использовать таким образом:
SELECT nameSUM(salaryFROM Employees WHERE SUM(salary) > 1000 GROUP BY name
В данном случае больше подходит HAVING:
SELECT nameSUM(salaryFROM Employees GROUP BY name HAVING SUM(salary) > 1000

MyIsam vs InnoDb

В InnoDB реализованы блокировки на уровне строк, что увеличивает скорость работы в приложениях, выполняющих и интенсивное чтение, и интенсивное добавление/изменение данных.
InnoDB поддерживает транзакции и внешние ключи.
MyISAM поддерживает полнотекстовый поиск.

Денормализация

Денормализация — это процесс осознанного приведения базы данных к виду, в котором она не будет соответствовать правилам нормализации. Обычно это необходимо для повышения производительности и скорости извлечения данных, за счет увеличения избыточности данных.

Денормализация (англ. denormalization) — намеренное приведение структуры базы данных в состояние, не соответствующее критериям нормализации, обычно проводимое с целью ускорения операций чтения из базы за счет добавления избыточных данных.

Нормализация

Процесс приведения базы данных к виду, в котором она будет соответствовать правилам нормальных форм, называется нормализацией базы данных.

Нормализация базы данных сводит к минимуму количество избыточной информации. Ее целью является сохранять данные только один раз, но в нужном месте.
Нормализованная база данных исключает дублирование и многократное обслуживание данных, а также появление проблем с целостностью данных, возникающих при повторном вводе одинаковых данных.
Первоначально доктором Эдгаром Коддом были определены только 3 нормальные формы. Дальнейшая разработка реляционной теории привела к появлению еще нескольких форм и на данный момент их насчитывается 6.

Нормализацией схемы базы данных называется процедура, производимая над базой данных с целью удаления в ней избыточности в данных, которая в свою очередь потенциально приводит к различным аномалиям и нарушениям целостности данных.

В теории баз данных говорится о том, что схема базы данных должна быть полностью нормализована. При работе с полностью нормализованными базами данных необходимо применять весьма сложные SQL-запросы, что приводит к обратному эффекту - замедлению работы базы данных. Поэтому иногда для упрощения запросов даже прибегают к обратной процедуре - денормализации.

JOIN, LEFT JOIN, RIGHT JOIN (!!)

Основное различие в том, как соединяются таблицы, если нет общих записей.

Простой JOIN - тоже самое что INNER JOIN и означает показывать только общие записи обоих таблиц. Каким образом записи считаются общими определяется полями в join-выражении. Например следующая запись
FROM t1 JOIN t2 on t1.id = t2.id
означает что будут показаны записи с одинаковыми id, существующие в обоих таблицах.

LEFT JOIN (или LEFT OUTER JOIN) означает показывать все записи из левой таблицы (той, которая идет первой в join-выражении) независимо от наличия соответствующих записей в правой таблице.

RIGHT JOIN (или RIGHT OUTER JOIN) действует в противоположность LEFT JOIN - показывает все записи из правой (второй) таблицы и только совпавшие из левой (первой) таблицы.

SQL JOIN - используются для запроса данных из двух или нескольких таблиц связанных между собой ключами.
JOIN: Возвращает строки, когда есть хотя бы одно совпадение в обеих таблицах.
LEFT JOIN: Возвращает строки из левой таблицы, даже если их нет правой таблице.
RIGHT JOIN: Возвращает строки из правой таблицы, даже если их нет левой таблице.
FULL JOIN: Возвращает строки, когда есть хоть одно совпадение в любой из таблиц.

С JOIN необходимо хорошо разобраться, чтобы по тексту запроса понимать, что он должен вывести.

Триггер

Триггер - это SQL процедура, которая срабатывает при каком-нибудь событии (INSERT, DELETE или UPDATE). Триггеры хранятся и управляются СУБД. Триггеры используются для поддержания ссылочной целостности данных в одинаковый манер реагируя на события изменения этих данных. Триггер не может быть вызван или выполнен вручную, СУБД автоматически вызывает его после модификации данных в соответствующей таблице. В этом и есть его отличие от хранимых процедур, которые нужно выполнять вручную вызовом CALL. Также триггер может вызывать другие процедуры.

Триггер также может содержать вызовы INSERT, DELETE и UPDATE внутри себя, таким образом вызывая другой триггер. Такие триггеры называются вложенными (nested).

Использование индексов

1. Более быстрые выборки, но более медленные изменения. (При изменениях тратиться время на перестройку индекса).
2. Для хранения индексов необходимо дополнительное дисковое пространство.

Потенциальный (candidate), альтернативный (alternate) и составной (composite) ключ

Простой ключ состоит из одного атрибута (поля). Составной - из двух и более.
Потенциальный ключ - простой или составной ключ, который уникально идентифицирует каждую запись таблицы. При этом потенциальный ключ должен обладать критерием неизбыточности: при удалении любого из полей набор полей перестает уникально идентифицировать запись.
Из множества всех потенциальных ключей таблицы выбирают первичный ключ, все остальные ключи называют альтернативными.

Primary и unique

Ограничения primary и unique призваны обеспечить уникальность значений столбца, на котором они определены. Но по умолчанию ограничение primary создает кластерный индекс на столбце, а unique - некластерный. Другим отличием является то, что primary не разрешает NULL записей, в то время как unique разрешает только одну NULL запись.

Операторы SQL

INSERT, SELECT, UPDATE, DELETE, DISTINCT, AND, OR, ORDER BY, WHERE, JOIN

Способы хранения деревьев в БД (!!)


Запросы

1. Имеется таблица пользователей следующей структуры:
CREATE TABLE users (
    id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    username CHAR(16) NOT NULL,
    city_id INT(11) NOT NULL
);

Необходимо выбрать города, в которых проживает не менее n пользователей

SELECT `city_id`, COUNT(`city_id`) AS total FROM users GROUP BY `city_id` HAVING total>5

2. Имеется таблица для хранения информации о посещениях страниц пользователями
CREATE TABLE `page_visit` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_id` int(11) NOT NULL,
    `page` varchar(200) NOT NULL,
    `date` datetime DEFAULT NULL,
    PRIMARY KEY (`id`)
);

Необходимо вывести:
  a) последних 10 пользователей, посетивших страницу «/about/»
  b) всех пользователей, посетивших страницу «/about/», с указанием следующих данных:
  • ID пользователя 
  • Количество посещений страницы 
  • Время первого посещения страницы 
  • Время последнего посещения страницы

Выводим 10 последних польз. посетивших страницу «/about/»
SELECT * FROM `page_visit` WHERE `page` = '/about/' ORDER BY date DESC LIMIT 10

Выводим всех пользователей с условиями
SELECT user_id, COUNT(user_id) AS view , MIN(date) AS first, MAX(date) AS last FROM `page_visit` WHERE `page`='/about/' GROUP BY user_id


3. Есть 2 таблицы:
CREATE TABLE users ( 
    id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username CHAR(16) NOT NULL 
);
CREATE TABLE user_email (
    id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id INT( 11 ) NOT NULL,
    email CHAR(16) NOT NULL
);

Необходимо вывести все email'ы пользователей, а также их логины.
SELECT * FROM `user_email` LEFT JOIN users ON user_email.user_id=users.id 
 мы вывели все email-адреса и пользователей.
Допустим у нас есть пользователи без email-адресов и их необходимо вывести тоже. Это будет делать следующий запрос
SELECT * FROM `user_email` RIGHT JOIN users ON user_email.user_id=users.id



PHP

PHP web-сервис (!!)

Web-сервисы применяются для обмена данными между сервером и клиентом; формат XML используется для "упаковывания" запросов и данных в целях взаимопонимания между обоими участниками общения. И сервер и клиент могут быть web-серверами или любыми другими электронными устройствами, которые вам понадобятся.
С точки зрения работы сети обмен данными с web-сервисами проходит по TCP через 80 порт и с использованием стандартного метода POST протокола http. Иными словами, работа web-сервисов - это почти отправка html-форм из браузера (методом POST) и получение странички в ответ. Единственная существенная разница - это то, что вместо HTML web-сервисы используют XML. А это всё означает, что web-сервисы доступны по всей Сети и через firewall-ы проходят так же, как обычные web-странички. Обмен данными проходит на уровне пакетирования.
Стандарты: SOAP, XML-RPC.

REST — это не стандарт и не спецификация, а архитектурный стиль, выстроенный на существующих, хорошо известных и контролируемых консорциумом W3C стандартах, таких, как HTTP, URI (Uniform Resource Identifier), XML и RDF (Resource Description Format). В REST-сервисах акцент сделан на доступ к ресурсам, а не на исполнение удаленных сервисов; в этом их кардинальное отличие от SOAP-сервисов. Если SOAP-клиенты запрашивают выполнение действия на сервере, то REST-клиенты попросту требуют сам ресурс. Например, вместо то-го чтобы запрашивать удаленное исполнение функции для нахождения нужного вам формуляра заказа, вы просто запрашиваете этот формуляр, примерно так же, как статичную Web-страницу. 
Архитектура в стиле REST состоит из клиентов и серверов. Клиенты инициируют запросы к серверам; серверы обрабатывают запросы и возвращают подходящие ответы. Запросы и ответы создаются на базе передачи представлений ресурсов. Ресурс может являться практически любым понятным и значимым адресуемым объектом. Представление ресурса — это обычно документ, отражающий текущее или требуемое состояние ресурса.

XSLT, xPath, DOMDocument

DOMDocument - Представляет все содержимое HTML или XML документа; служит в качестве корня дерева документа.

XSLT (eXtensible Stylesheet Language Transformations) — язык преобразования XML-документов.

При применении таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу (исходное дерево) образуется конечное дерево, которое может быть сериализовано в виде XML-документа, XHTML-документа (только для XSLT 2.0), HTML-документа или простого текстового файла. Правила выбора (и, отчасти, преобразования) данных из исходного дерева пишутся на языке запросов XPath.

В процессе выполнения XSLT-преобразования задействованы:
  • один или несколько входных XML-документов;
  • одна или несколько таблиц cтилей XSLT;
  • XSLT-процессор;
  • один или несколько выходных документов.
В простейшем случае XSLT-процессор получает на входе два документа — входной XML-документ и таблицу стилей XSLT — и создает на их основе выходной документ.

Язык XSLT является декларативным, а не процедурным. Вместо определения последовательности исполняемых операторов, этот язык определяет правила, которые будут применяться во время преобразования. Само преобразование ведется по фиксированному алгоритму.
В первую очередь XSLT процессор разбирает файл преобразования и строит XML дерево входного файла. Затем он ищет шаблон, который лучше всего подходит для корневого узла и вычисляет содержимое найденного шаблона. Инструкции в каждом шаблоне могут либо напрямую говорить XSLT процессору "создай здесь такой-то тег", либо говорить "обработай другие узлы по тому же правилу, что и корневой узел".
http://citforum.ru/internet/xmlxslt/xmlxslt.shtml

"Магические" методы (!!)

__construct () — Конструктор класса. Вызывается при создании объекта.
__destruct () — Деструктор класса. Вызывается при удалении объекта.
__clone () — Вызывается при клонировании объекта.
__sleep () — Вызывается при сериализации объекта.
__wakeup () — Вызывается при десериализации объекта.
__toString () — Задает поведение класса при конвертировании его в строку.
__set_state () — Статический метод срабатывает при вызове var_export().

Методы-перехватчики:
__get ( $property ) — Перехватчик запроса к не существующему свойству.
__isset ( $property ) — Перехватчик запроса на вызове метода isset() для не существующего свойства.
__set ( $property, $value ) — Перехватчик запроса на присвоение некоторого значения не существующему свойству.
__unset ( $property ) — Перехватчик запроса на вызов метода unset() для не существующего свойства.
__call ( $method, $arg_array ) — Перехватчик запроса на вызов не существующего метода.
__callStatic () — Перехватчик запроса на вызов не существующего статического метода (появился в PHP 5.3).
__invoke () — Срабатывает при попытке вызова объекта как функции (появился в PHP 5.3).

Загрузка файлов методом $_POST (!)

В атрибутах формы необходимо указать enctype="multipart/form-data", в противном случае загрузка файлов на сервер выполняться не будет.

Информацию о загруженных файлах сохраняется в массиве $_FILES.

По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке.

По окончанию работы скрипта, в случае, если принятый файл не был переименован или перемещен, он будет автоматически удален из временной папки.

Функции работы с массивами (!!)

  • array_combine — Создает новый массив, используя один массив в качестве ключей, а другой в качестве соответствующих значений
  • array_count_values — Подсчитывает количество всех значений массива
  • array_diff — Вычислить расхождение массивов
  • array_key_exists — Проверяет, присутствует ли в массиве указанный ключ или индекс
  • array_keys — Возвращает все или некоторое подмножество ключей массива
  •  array_merge — Сливает один или большее количество массивов
  • array_multisort — Сортирует несколько массивов или многомерные массивы
  • array_pop — Извлекает последний элемент массива
  • array_push — Добавляет один или несколько элеметов в конец массива
  • array_rand — Выбирает одно или несколько случайных значений из массива
  •  array_search — Осуществляет поиск данного значения в массиве и возвращает соответствующий ключ в случае удачи
  • array_values — Выбирает все значения массива
  • arsort — Сортирует массив в обратном порядке, сохраняя ключи
  • asort — Сортирует массив, сохраняя ключи
  • count — Подсчитывает количество элементов массива или что-то в объекте
  • current — Возвращает текущий элемент массива
  •  each — Возвращает текущую пару ключ/значение из массива и смещает его указатель
  • end — Устанавливает внутренний указатель массива на его последний элемент
  • extract — Импортирует переменные из массива в текущую таблицу символов
  • in_array — Проверяет, присутствует ли в массиве значение
  • key — Выбирает ключ из массива
  • krsort — Сортирует массив по ключам в обратном порядке
  • ksort — Сортирует массив по ключам
  • list — Присваивает переменным из списка значения подобно массиву
  • next — Передвигает внутренний указатель массива на одну позицию вперёд
  • prev — Передвигает внутренний указатель массива на одну позицию назад
  • sort — Сортирует массив

Функции для работы со строками (!!)

  • addcslashes — Экранирует cтроку слэшами в стиле языка C
  • addslashes — Экранирует строку с помощью слэшей
  • count_chars — Возвращает информацию о символах, входящих в строку
  • echo — Выводит одну или более строк
  • explode — Разбивает строку с помощью разделителя
  • html_entity_decode — Преобразует все HTML-сущности в соответствующие символы
  • htmlentities — Преобразует все возможные символы в соответствующие HTML-сущности
  • htmlspecialchars_decode — Преобразует специальные HTML-сущности обратно в соответствующие символы
  • htmlspecialchars — Преобразует специальные символы в HTML-сущности
  • implode — Объединяет элементы массива в строку
  • ltrim — Удаляет пробелы (или другие символы) из начала строки
  • md5_file — Возвращает MD5-хэш файла
  • md5 — Возвращает MD5-хэш строки
  • nl2br — Вставляет HTML-код разрыва строки перед каждым переводом строки
  • parse_str — Разбирает строку в переменные
  • print — Выводит строку
  • printf — Выводит отформатированную строку
  • rtrim — Удаляет пробелы (или другие символы) из конца строки
  • str_repeat — Возвращает повторяющуюся строку
  • str_replace — Заменяет все вхождения строки поиска на строку замены
  • str_split — Преобразует строку в массив
  • strip_tags — Удаляет HTML и PHP-теги из строки
  • stripcslashes — Удаляет экранирование символов, произведенное функцией addcslashes
  • stripos — Возвращает позицию первого вхождения подстроки без учета регистра
  • stripslashes — Удаляет экранирование символов
  • stristr — Регистро-независимый вариант функции strstr
  • strlen — Возвращает длину строки
  • strpos — Возвращает позицию первого вхождения подстроки
  • strrpos — Возвращает позицию последнего вхождения подстроки в строке
  • strstr — Находит первое вхождение подстроки
  • strtolower — Преобразует строку в нижний регистр
  • strtoupper — Преобразует строку в верхний регистр
  • strtr — Преобразует заданные символы или заменяет подстроки
  • substr_replace — Заменяет часть строки
  • substr — Возвращает подстроку
  • trim — Удаляет пробелы (или другие символы) из начала и конца строки
  • ucfirst — Преобразует первый символ строки в верхний регистр
Так же нужно знать работе с мультибайтовыми строками.

Сериализация

Функция serialize() возвращает строковое представление любого значения, которое может быть сохранено в PHP. Функция unserialize() использует эту строку для востановления исходного значения переменной.
Использование serialize для сериализации объекта сохранит имя класса и все его свойства, однако методы не сохраняются.
Для того, чтобы иметь возможность сделать unserialize() для объекта нужно чтобы класс этого объекта был определен заранее. То есть, если у вас есть экземпляр класса А, и вы сделаете его сериализацию, вы получите его строковое представление, которое содержит значение всех переменных описанных в нем. Для того, чтобы востановить объект из строки в другом PHP файле класс A должен быть определен заранее. Это можно сделать сохранив определение класса A в отдельный файл и подключить этот файл или использовать функцию spl_autoload_register() для автоматического подключения.




JavaScript

null и undefined

Разные типы.

var

В пределах функции переменная видна только внутри функции. Без var переменная в глобальной области видимости.

innerHTML и outerHTML

Свойство любого DOM элемента innerHTML содержит HTML код, который находится внутри этого элемента. При установке нового значения этого свойства, внутренний HTML код рендерится браузером заново.
outerHTML почти аналогичен innerHTML, разница в том, что он возвращает полный HTML элемента.

Также, важно отметить, что innerHTML поддерживается всеми современными браузерами, а outerHTML поддерживается в IE (с некоторыми отличиями от остальных браузеров), в последних версиях Opera, и в браузерах на основе последних WebKit (Safari, Chrome), но не поддерживается в Firefox.

методы класса Array, появившиеся в JavaScript 1.6

indexOf(element[, from]) и lastIndexOf(element[, from]) находит в массиве первое вхождение element, начиная с индекса from, и возвращает его индекс, если такого элемента нет - возвратится -1. indexOf просматривает массив с индекса from до конца, lastIndexOf - наоборот, от индекса from к началу.
forEach(callback) выполняет функцию callback над каждым элементом массива.
map(callback) возвращает массив, составленный из результатов работы callback на каждом элементе исходного массива.
filter(callback) возвращает только те элементы исходного массива, где функция callback возвратила true.
every(callback) возвращает true, если callback для всех элементов массива вернул true.
some(callback) возвращает true, если хотя бы для одного элемента массива callback вернул true.

Дочерние элементы

var children = document.body.children;
      for(vari=0; i < children.length; i++) {
           alert(children[i]);
  }

Псевдо-массив childNodes хранит все дочерние элементы, включая текстовые.
Свойство children, которое перечисляет только дочерние узлы, соответствующие тегам.

JQuery

Селекторы (!!)

$('#sidebar');    // выбор элемента с id = sidebar
$('.post');       // выбор элементов с class = post
$('div#sidebar'); // выбор элемента div с id = sidebar
$('div.post');    // выбор элементов div с class = post
$('div span');            // выбор всех span элементов в элементах div
$('div').find('span');    // выбор всех span элементов в элементах div
$('div > span');          // выбор всех span элементов в элементах div, где span является прямым потомком div'a
$('div, span');          // выбор всех div и span элементов

Поиск по соседям:
$('span + img');         // выбор всех img элементов перед которыми идут span элементы
$('span ~ img');         // выбор всех img элементов после первого элемента span
$('#banner').prev();     // выбор предыдущего элемента от найденого
$('#banner').next();     // выбор следующего элемента от найденого

Выбор всех элементов, всех предков, всех потомков
$('*');                // выбор всех элементов
$('p > *');         // выбор всех потомков элементов p
$('p').children();     // --
$('p').parent();       // выбор всех прямых предков элементов p
$('* > p');         // выбор всех предков элементов p (скорей всего Вам не понадобится)
$('p').parents();      // --
$('p').parents('div'); // выбор всех предков элемента p которые есть div (parents принимает в качестве параметра селектор

Фильтры

$('div:first');     // выбираем первый div в доме
$('div:last');      // выбираем последний div в доме
$('div:not(.red)'); // выбираем div'ы у которых нету класса red
$('div:even');      // выбираем четные div'ы
$('div:odd');       // выбираем нечетные div'ы
$('div:eq(N)');     // выбираем div идущим под номером N в DOMe
$('div:gt(N)');     // выбираем div'ы, индекс которых больше чем N в DOMe
$('div:lt(N)');     // выбираем div'ы, индекс которых меньше чем N в DOMe
$(':header');       // выбо заголовоков h1, h2, h3 и т.д.
$('div:animated');  // выбор элементов с активной анимацией

Фильтры по контенту и видимости:
$('div:contains(text)'); // выбираем div'ы содержащие текст
$('div:empty');          // выбираем пустые div'ы
$('div:has(p)');         // выбираем div'ы которые содержат p
$('div.red').filter('.bold') // выбираем div'ы которые содержат класс red и класс bold
$('div:hidden');         // выбираем скрытые div'ы
$('div:visible');        // выбираем видимые div'ы

Фильтры по атрибутам:
$("div[id]");           // выбор всех div с атрибутом id
$("div[title='my']");   // выбор всех div с атрибутом title=my
$("div[title!='my']");  // выбор всех div с атрибутом title не равного my
$("div[title^='my']");  // выбор всех div с атрибутом title начинающихся с my
$("div[title$='my']");  // выбор всех div с атрибутом title заканчивающихся на my
$("div[title*='my']");  // выбор всех div с атрибутом title содержащим my

Задачи

1. Есть таблица с id="tt". Выбрать все ячейки таблицы и раскрасить их в красный цвет.
$('#tt td').css('background-color', 'red');
2. Что значит селектор DIV + P

Выбирает все элементы P перед которыми идут элементы DIV
3. Что значит селектор DIV * P
Этого я пока не знаю


YII

ACL (!)

http://www.larryullman.com/2010/01/14/yii-framework-access-control-lists/

Последовательность работы приложения YII (!)

  1. Пользователь осуществляет запрос посредством URL http://www.example.com/index.php?r=post/show&id=1, а веб-сервер обрабатывает его, запуская выполнение скрипта инициализации index.php;
  2. Скрипт инициализации создает экземпляр приложения и запускает его на выполнение;
  3. Приложение получает подробную информацию о запросе пользователя от компонента приложения request;
  4. Приложение определяет запрошенные контроллер и действие при помощи компонента urlManager. В данном примере контроллером будет post, относящийся к классу PostController, а действием — show, суть которого определяется контроллером;
  5. Приложение создает экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет соответствие действия show методу actionShow в классе контроллера. Далее создаются и применяются фильтры (например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется;
  6. Действие считывает из базы данных модель Post с ID равным 1;
  7. Действие формирует представление show с данными модели Post;
  8. Представление получает и отображает атрибуты модели Post;
  9. Представление выполняет некоторые виджеты;
  10. Сформированное представление добавляется в макет страницы;
  11. Действие завершает формирование представления и выводит результат пользователю.

HTML, XHML

Разница между HTML и XHTML

HTML – это стандртный язык разметки документов во Всемирной паутине, так же HTML является приложением SGML (стандартного обобщённого языка разметки).
А XHTML в свою очередь - это расширяемый язык разметки гипертекста, созданный на базе XML. Главное их различие состоит в том, что XHTML в отличие от HTML использует синтаксис XML. То есть XHTML требует более строгих синтаксических правил разметки нежели HTML.
Преимущество XHTML в том, что анализ документа XHTML проще и быстрее из-за использования строгих правил синтаксиса, обработка XHTML возможна даже на мобильных телефонах с небольшими ресурсами.

  • Все элементы должны быть закрыты. Теги, которые не имеют закрывающего тега (например, или
    ) должны иметь на конце / (например, ).
  • Булевы атрибуты записываются в развёрнутой форме. Например, следует писать или .
  • Имена тегов и атрибутов должны быть записаны строчными буквами (например, вместо ).
  • XHTML гораздо строже относится к ошибкам в коде; < и & везде, даже в URL, должны замещаться < и & соответственно. По рекомендации W3C браузеры, встретив ошибку в XHTML, должны сообщить о ней и не обрабатывать документ. Для HTML браузеры должны были попытаться понять, что хотел сказать автор.
  • Кодировкой по умолчанию является UTF-8 (в отличие от HTML, где кодировкой по умолчанию является ISO 8859-1).
Существует три типа документов XHTML: strict, transitional и frameset. Наиболее употребительной и универсальной из версий XHTML является переходная (англ. transitional), поскольку она позволяет использовать iframe (включение содержимого одной веб-страницы в другую) и атрибут target у ссылок (для указания того, например, что ссылке необходимо открываться в новом окне). Фреймовая версия (англ. frameset) представляет собой расширенный вариант transitional и добавляет к нему, как следует из названия, возможность установки frameset вместо body. DTD строгой версии XHTML (англ. strict) не содержит многих тегов и атрибутов, описанных в DTD transitional, и признанных устаревшими.









20 марта 2012 г.

Ликвидация ЧП - заявление на аудит в налоговой

Сегодня был в ГНИ. Подавал заявление на проведение аудиторской проверки по ликвидации ЧП.

В принципе, здесь все просто.
Все документы, которые необходимы я указал в предыдущем посте.
Заявление (не форма 8-ОПП) пишется от руки, в свободной форме.

И еще заполнил отчет о прибыли предприятия в форме годового отчета.

Вот это и все. Документы в налоговой приняли быстро.
В документах еще указывал номер телефона, т.к. сказали, что на него будут звонить, вызывать на проверку.

Пока работа налоговой мне нравится. Они не тянут, стараются помочь и делают все быстро. Посмотрим, как обстоит дело непосредственно с проверкой.

16 марта 2012 г.

Ликвидация ЧП (Киев)

В блоге буду  описывать процедуру ликвидации ЧП (юр. лицо). Возможно кому-то эта информация окажется полезной.

В моем случае ЧП не вело деятельности весь период своего существования. В налоговую я сдавал пустые отчеты, в ПФУ вообще не появлялся.


Процесс ликвидации начался с того, что необходимо было подать решение владельца о ликвидации гос. регистратору.



Я обращался к гос. регистратору в дарницком районе г. Киева.
Находятся они по адресу: ул. Степана Олейника 21.
Принимает там 4 гос. регистратора. Прием начинается в 9:30 (пн.-пт. вроде еще каждую вторую субботу месяца работают).

Чтобы быть в очереди в первых рядах, необходимо сходить по указанному выше адресу где-то около 6 утра и записаться в список. Так можно быть одним из первых в очереди. Если записываться часов в 9, то это где-то около 80 номера в списке.

Ниже приведена ссылка на образец "Решения владельца о ликвидации"

https://docs.google.com/document/d/1mNlRkRv8CFNR_ZgnBFpRwVUlUdcbIWMIgWc4kGqUPIQ/edit

Вот именно в таком виде у меня приняли документ. Хоть в законе и написано, что заявление подается в свободной форме, но мне два раза отказывали.

В администрации мне  дали список документов, которые нужно им подать для окончательной ликвидации.
Администрация:
1. Регистрационная карта (форма №7).
2. 22-ОПП из налоговой (действует два месяца).
3. Справка из ПФУ об отсутствии задолженности (действует месяц).
4. Справка из архива.
5. Устав.
6. Паспорт.

После подачи заявления администратору я отправился в налоговую, где мне дали список документов, которые необходимо собрать для ликвидации. Привожу этот список ниже:

ГНИИ:
1. 8-ОПП (есть на сайте налоговой)
2. Заявление на проведение аудиторской проверки (пока у меня нет образца)
3. 4-ОПП оригинал и копия.
4. Протокол о ликвидации и назначении ликвидатора (2 экземпляра). Это тот протокол, который я сдавал гос. регистратору.
5. Ликвидационный баланс в форме годового отчета на момент принятия решения о ликвидации (2 экземпляра).

После этого пошел в ПФУ, там мне сказали собрать следующие документы:
ПФУ
1. Копии всех регистрационных документов.
2. Справка из банка о том, что я не получал средства на начисление заработной платы.
3. Протокол ликвидации (2 экземпляра).

После этого я отправился в банк, за справкой. Это было самое неприятное посещение  в этот день. За справку взяли с меня 100 грн., при этом я еще прождал полтора часа. Очень неприятные впечатления остались поле этого. Я понимаю, что порядки и правила, но в тех же ГНИИ и ПФУ, на которые все сетуют, со мной обращались очень вежливо и обходительно.
УкрСибБанк, отделение недалеко от ТЦ Пирамида.
Не знаю как банк в целом, но конкретно это отделение ужасное.

Собственно это пока все. Как вы можете видеть, самое интересное только начинается. Постараюсь не забывать и описать весь процесс ликвидации.