Базы данных иногда пропадают. Человеческий фактор и всё-такое… Если вы не делали бекапов (а надо бы) или они уже устарели, не отчаивайтесь, — есть ещё возможность восстановить утерянную информацию.
dkrnl @dkrnl
User
Представления (VIEW) в MySQL
10 min
466KВ комментариях Хабра упоминались вопросы по использованию представлений. Данный топик является обзором представлений, появившихся в MySQL версии 5.0. В нем рассмотрены вопросы создания, преимущества и ограничения представлений.
Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
Что такое представление?
Представление (VIEW) — объект базы данных, являющийся результатом выполнения запроса к базе данных, определенного с помощью оператора SELECT, в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Такое название связано с тем, что представление доступно для пользователя как таблица, но само оно не содержит данных, а извлекает их из таблиц в момент обращения к нему. Если данные изменены в базовой таблице, то пользователь получит актуальные данные при обращении к представлению, использующему данную таблицу; кэширования результатов выборки из таблицы при работе представлений не производится. При этом, механизм кэширования запросов (query cache) работает на уровне запросов пользователя безотносительно к тому, обращается ли пользователь к таблицам или представлениям.
+103
Полиглоты
5 min
4.3KЕсть люди-полиглоты, которые отличаются тем, что знают несколько языков. А есть программы-полиглоты, исходный код которых интерпретируется или компилируется независимо от языка.
Вся прелесть полиглота в том, что один и тот же исходный код можно сохранить как сишный файл, скомпилировать его, и порадоваться результату работы. А можно этот же файл запустить как bash-скрипт и увидеть точно такой же результат работы!
Вся прелесть полиглота в том, что один и тот же исходный код можно сохранить как сишный файл, скомпилировать его, и порадоваться результату работы. А можно этот же файл запустить как bash-скрипт и увидеть точно такой же результат работы!
+123
Добавляем Sphinx к Денверу
2 min
4.3KВсем привет!
Сделал небольшой аддон к Денверу. Решил поделиться. Теперь при старте он запускает Sphinx, а при стопе выключает его. Версия: Денвер-3 2008-01-13.
Можно было добавить в denwer/scripts/main/start/ файл.bat, где просто написать пару команд для его запуска. Правда, чуть сложнее с остановкой. Но хочется, чтобы было все красиво. Со словами «Запускаем… Ждем 2 секунды… Готово...» Красота!
Итак.
Сделал небольшой аддон к Денверу. Решил поделиться. Теперь при старте он запускает Sphinx, а при стопе выключает его. Версия: Денвер-3 2008-01-13.
Можно было добавить в denwer/scripts/main/start/ файл.bat, где просто написать пару команд для его запуска. Правда, чуть сложнее с остановкой. Но хочется, чтобы было все красиво. Со словами «Запускаем… Ждем 2 секунды… Готово...» Красота!
Итак.
+5
jQuery Tools v1.0.1
1 min
3.9KjQuery Tools v1.0.1 — это инструмент/библиотека представляет собой файл весом в 5,8 кб включающий в себя наиболее важные компоненты для вебдванольных сайтов, а именно: табы, всплывающие подсказки, плавные переходы, прокрутки, всплывающие окна и т.д.
Не буду тянуть резину, лучше, как говориться, один раз увидеть, чем сто раз услышать!
Переходим по ссылке и смотрим более 50 (!) демок:
Несколько понравившихся мне демонстраций. Очень рекомендую!
Маскируем фоновое изображение;
AJAX-табы с поддержкой истории переходов;
Неколько всплывающих окошек на одной странице.
+146
Работа с временными зонами в PHP
8 min
87KКак только проект перестает быть завязан на ограниченное количество потребителей и растет география его применения, встает вопрос о применении временных зон. Когда я работал в одной известной интернет компании внедрение в работу временных зон (как в интерфейс отображения статистики, так и в программу анализа) было достаточно серьезным шагом.
Далее перевод :-)
Далее перевод :-)
+44
TurboGears 2.0
1 min
3.7K27 Мая 2009 года вышла новая версия фреймворка для разработки веб-приложений на языке Python.
TurboGears 2 построен на основе опыта и тенденций современных фреймворков, включая TurboGears 1, Django, Rails. Все эти фреймворки имели ограничения, что вызывало когнитивный диссонанс и TG2, пытается разрешить эти проблемы.
TurboGears 2 построен на основе опыта и тенденций современных фреймворков, включая TurboGears 1, Django, Rails. Все эти фреймворки имели ограничения, что вызывало когнитивный диссонанс и TG2, пытается разрешить эти проблемы.
+11
0! = 1? или почему факториал нуля равен единице
2 min
234KДавным давно, еще в классе 10-ом (лет 8 назад) я случайно обнаружил довольно нехитрое объяснение того, почему факториал нуля равен единице.
Я рассказывал про это многим учителям, но никого не торкнуло. Поэтому я просто выложу это знание здесь, а то вдруг кому-то пригодится или наведет на определенные мысли. Сразу скажу я не математик, наткнулся на это случайно, когда игрался с числами. Я тогда даже не знал что такое факториал :)
Я рассказывал про это многим учителям, но никого не торкнуло. Поэтому я просто выложу это знание здесь, а то вдруг кому-то пригодится или наведет на определенные мысли. Сразу скажу я не математик, наткнулся на это случайно, когда игрался с числами. Я тогда даже не знал что такое факториал :)
+95
Совершенный код
4 min
19KAlways code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
Damian Conway, co-designer of Perl 6
Хороший программный код определяется как минимум тремя признаками: однозначность, эффективность и сопровождаемость.
Однозначность – это в первую очередь стиль кодирования. Однозначность определяется тем, какие имена переменных и функций выбирает программист, как форматирует код, как обрабатывает ошибки и формирует структуру кода.
Эффективный код — это код, состоящий из эффективных алгоритмов. Эффективный не значит хрупкий, сложный или трудно сопровождаемый. Эффективность кода достигается путем использования сильных сторон языка и в то же время избеганием его слабостей.
Сопровождаемость заключается в том, что код пишется в первую очередь для тех, кто будет его сопровождать. Сопровождаемость – легкость использования написанного кода, минимизация возможности появления ошибок при его изменении.
+52
Mantis :: Автоматизация скриншотов
2 min
3.4KЗадался вопросом о том, как себе облегчить жизнь при работе с Mantis. Так повелось, что исторически работа проходит именно с ним, поэтому далее рецепт для коллег по цеху.
Процесс установки займет около получаса при внимательном выполнении действий.
Установка проходила на:
Mantis 1.1.6
Windows XP
Для тех кто не знаком с продуктом поясню: сам Mantis работает в стреде *nix, а кропалка работает в среде windows. В статье объясняется, как связать два полезных инструмента воедино для продуктивной работы.
Процесс установки займет около получаса при внимательном выполнении действий.
Установка проходила на:
Mantis 1.1.6
Windows XP
Для тех кто не знаком с продуктом поясню: сам Mantis работает в стреде *nix, а кропалка работает в среде windows. В статье объясняется, как связать два полезных инструмента воедино для продуктивной работы.
+21
Кризис (не финансовый) программиста
2 min
3.8KЯ много писАл о том, как же прекрасна эта игра, под названием программирование! Мне, и я уверен, что многим из вас, программирование заменяет все существующие логические игры, дает постоянный разогрев мозгам, не давая им засохнуть, и приносит дикое моральное удовлетворение, отличающееся от оргазма только отсутствием физических ощущений.
Так уж получилось, что много лет назад, я забросил c++ и Delphi, и чувствуя потребности IT рынка, начал осваивать php. Так что все, о чем я буду писать, касается конкретно web-программирования, и косвенно любой другой области программирования.
Признаюсь честно, хотя работы хватает, мои мозги, все равно, начинают сохнуть. Я уже писал раньше, что момент, когда программист становится профессионалом, обусловлен, прежде всего, выдвижением на первый план качества и сроков реализации проекта. А значит приходиться использовать готовые продукты (я имею ввиду различные cms), которые обеспечивают должное качество, отсутствие уязвимостей и багов, гибкость, и короткие сроки реализации.
Так уж получилось, что много лет назад, я забросил c++ и Delphi, и чувствуя потребности IT рынка, начал осваивать php. Так что все, о чем я буду писать, касается конкретно web-программирования, и косвенно любой другой области программирования.
Признаюсь честно, хотя работы хватает, мои мозги, все равно, начинают сохнуть. Я уже писал раньше, что момент, когда программист становится профессионалом, обусловлен, прежде всего, выдвижением на первый план качества и сроков реализации проекта. А значит приходиться использовать готовые продукты (я имею ввиду различные cms), которые обеспечивают должное качество, отсутствие уязвимостей и багов, гибкость, и короткие сроки реализации.
+45
Палка о двух концах или ещё раз о хрупкости кода
9 min
1.5KЯ пишу этот топик, как ответ на недавнюю статью «10 приемов, разрушающих хрупкую красоту кода», в которой разгорелось множество споров.
Многое уже написано в комментариях, многое не написано. Я лишь хочу здесь показать реальные примеры, что есть множество ситуаций, где Автор не прав, где предлагаеммые им решения будут мешать.
Автор во многом прав, но он слишком категоричен в убеждениях. Профессия программиста заключается в том, чтобы думать и описывать решение задачи оптимальным способом. Как и в любом искусстве, если программист будет решать все задачи «подставляя лишь шаблоны», то все его решения — будут полнейшей ерундой. Программист — человек умеющий думать, а языки программирования предоставляют охрененно гибкий интерфейс для реализаций алгоритмов решений. По этому не стоит отказываться от особенностей языка — потому что в шаблоне написано не пользоваться — уж разработчики языков за вас уже продумали всё 100 раз, чтобы оставить эти методы и уверен, что в документации вы можете найти наиболее подходящие методы использования.
То, что Автор рассказал, хорошие советы. Но он показал лишь одну сторону медали. Я сейчас покажу другую.
Многое уже написано в комментариях, многое не написано. Я лишь хочу здесь показать реальные примеры, что есть множество ситуаций, где Автор не прав, где предлагаеммые им решения будут мешать.
Автор во многом прав, но он слишком категоричен в убеждениях. Профессия программиста заключается в том, чтобы думать и описывать решение задачи оптимальным способом. Как и в любом искусстве, если программист будет решать все задачи «подставляя лишь шаблоны», то все его решения — будут полнейшей ерундой. Программист — человек умеющий думать, а языки программирования предоставляют охрененно гибкий интерфейс для реализаций алгоритмов решений. По этому не стоит отказываться от особенностей языка — потому что в шаблоне написано не пользоваться — уж разработчики языков за вас уже продумали всё 100 раз, чтобы оставить эти методы и уверен, что в документации вы можете найти наиболее подходящие методы использования.
То, что Автор рассказал, хорошие советы. Но он показал лишь одну сторону медали. Я сейчас покажу другую.
+87
Улучшаем формы или Веб-Восемь-Ноль-Сто-Три
13 min
1.4KИтак, мы выбрали браузер вместо отдельно стоящего толстого клиента. Пользователь очень хочет вводить данные. Однако, обычные формы плохие. Потому, что:
+19
10 приемов, разрушающих хрупкую красоту кода
19 min
102KСтатья приводится в сокращении из-за ограничения на объем материала.
Для меня программирование — это не только технология, но и, во многом — искусство. И, поэтому, большое значение имеет красота кода.
Последние несколько лет я собирал приемы программирования, разрушающие в программном коде его утонченную красоту:
- Объявление всех переменных в начале программы;
- Возврат результата функции через ее параметр;
- Отсутствие локальных функций;
- Отсутствие
else if
; - Использование параллельных массивов;
- Хранение размера массива в отдельной переменной;
- Доступ к свойствам объекта через
obj.getProperty()
иobj.setProperty(value)
; - Использование рекурсии для вычисления факториалов и Чисел Фибоначчи;
- Отсутствие именованных параметров функции;
- Невозможность объявления объектов «на лету».
Объявление всех переменных в начале программы
В двух словах:
Переменные должны объявляться в начале логического блока, в котором они используются, а НЕ в начале функции или программы.
+246
Версия 1.0.5
2 min
600Дождались. С некоторой задержкой (до этого релизы выходили сразу в начале месяца), но релиз 1.0.5 увидел мир.
Итак, какие приятности ожидают нас на сей раз?
Итак, какие приятности ожидают нас на сей раз?
+16
Что такое анти-паттерны?
9 min
145KАнти-паттерны — полная противоположность паттернам. Если паттерны проектирования —
это примеры практик хорошего программирования, то есть шаблоны решения определённых задач. То анти-паттерны — их полная противоположность, это — шаблоны ошибок, которые совершаются при решении различных задач. Частью практик хорошего программирования является именно избежание анти-паттернов. Не надо думать, что это такая непонятная теоретическая фигня — это конкретные проблемы, с которыми сталкивался практически каждый разработчик. Кто осведомлен, тот и вооружён! Рассмотрим же несколько расрпотранённых анти-паттернов в программировании.
это примеры практик хорошего программирования, то есть шаблоны решения определённых задач. То анти-паттерны — их полная противоположность, это — шаблоны ошибок, которые совершаются при решении различных задач. Частью практик хорошего программирования является именно избежание анти-паттернов. Не надо думать, что это такая непонятная теоретическая фигня — это конкретные проблемы, с которыми сталкивался практически каждый разработчик. Кто осведомлен, тот и вооружён! Рассмотрим же несколько расрпотранённых анти-паттернов в программировании.
+137
Dklab_Cache: тэги в memcached, namespaces, статистика
6 min
4.7KMemcached community предприняло немало попыток написать «родные» патчи для кода memcached, добавляющие в него поддержку тэгов. Наиболее известный из таких патчей — проект memcached-tag. К сожалению, memcached-tag все еще очень далек от стабильной версии: нетрудно написать скрипт, приводящий к зависанию пропатченного memcached-сервера. Похоже, на момент написания данной статьи не существует ни одного надежного решения проблемы тэгирования на уровне самого memcached-сервера.
Dklab_Cache — это (в основном) библиотека поддержки тэгирования ключей для memcached, использующая интерфейсы Zend Framework. Сама библиотека написана на чистом PHP. Вот полный список возможностей библиотеки:
TagEmuWrapper реализует стандартный backend-интерфейс Zend_Cache_Backend_Interface, поэтому с точки зрения вызывающей системы он сам является кэш-backend'ом. Вообще, Zend Framework хорош тем, что на уровне интерфейса он поддерживает тэги с самого начала! Например, в методе save() уже имеется параметр, позволяющий снабдить ключ тэгами. Однако ни один из backend-ов в составе Zend Framework тэги не поддерживает: попытка добавить тэг к некоторому ключу вызывает исключение (в частности, для Zend_Cache_Backend_Memcached).
Технические подробности, документацию, а также примеры использования можно посмотреть тут: dklab.ru/lib/Dklab_Cache
Работа с типичной кэширующей системой (в том числе с memcached) заключается в выполнении трех основных операций:
Библиотека Dklab_Cache
Dklab_Cache — это (в основном) библиотека поддержки тэгирования ключей для memcached, использующая интерфейсы Zend Framework. Сама библиотека написана на чистом PHP. Вот полный список возможностей библиотеки:
- Backend_TagEmuWrapper: тэги для memcached и любых других backend-систем кэширования Zend Framework;
- Backend_NamespaceWrapper: поддержка пространств имен для memcached и др.;
- Backend_Profiler: подсчет статистики по использованию memcached и др. backend-ов;
- Frontend_Slot, Frontent_Tag: каркас для высокоуровневого построения систем кэшиирования в сложных проектах.
TagEmuWrapper реализует стандартный backend-интерфейс Zend_Cache_Backend_Interface, поэтому с точки зрения вызывающей системы он сам является кэш-backend'ом. Вообще, Zend Framework хорош тем, что на уровне интерфейса он поддерживает тэги с самого начала! Например, в методе save() уже имеется параметр, позволяющий снабдить ключ тэгами. Однако ни один из backend-ов в составе Zend Framework тэги не поддерживает: попытка добавить тэг к некоторому ключу вызывает исключение (в частности, для Zend_Cache_Backend_Memcached).
Технические подробности, документацию, а также примеры использования можно посмотреть тут: dklab.ru/lib/Dklab_Cache
Что такое тэги?
Работа с типичной кэширующей системой (в том числе с memcached) заключается в выполнении трех основных операций:
- save($data, $id, $lifetime): сохранить данные $data в ячейке кэша с ключом $id. Можно указать «время жизни» ключа $lifetime; спустя это время данные в кэше «протухнут» и удалятся.
- load($id): загрузить данные из ячейки с ключом $id. Если данные недоступны, возвращается false.
- remove($id): очистить ячейку кэша с ключом $id.
+45
Пример (бюджетного) Managed VPS: недо-VPS или мега-VPS
5 min
5.3KВ последнее время много пишется о таком удобном инструменте как VPS (VDS, ROOTDS и иже с ними), о преимуществах и недостатках по сравнению с хостингом и выделенными серверами, но как-то в стороне обсуждения остались попытки разных компаний совместить лучшее или хотябы исправить грешки трёх центральных парадигм организации хостинга — shared, virtual и dedicated. Потому хотелось бы обратить внимание общественности на интересные гибриды, как правило маркируемые Managed VPS
+24
Flexify плагин для выравнивания чего бы то ни было
2 min
1.9KНаверное каждый верстальщик, хотя бы раз в жизни сталкивался с версткой двух- или трех-колоночного макета. Хотя, сам макет сверстать несложно, если конечно колонки не различаются цветом фона, как например на хабре. А вот с разноцветными придется помучаться, потому что они имеют свойство тянуться по содержимому, а содержимое у соседних колонок, как правило, разной высоты.
Мне известны два способа решения этой проблемы:
— заключить обе колонки в контейнер, и поставить в фон двухцветную картинку;
— выставить колонкам одновременно вниз отрицательный марджин и положительный паддинг.
Оба способа имеют свои достоинства и недостатки, но сегодня я хочу рассказать выравнивании колонок с помощью плагина к JQuery — Flexify.
Мне известны два способа решения этой проблемы:
— заключить обе колонки в контейнер, и поставить в фон двухцветную картинку;
— выставить колонкам одновременно вниз отрицательный марджин и положительный паддинг.
Оба способа имеют свои достоинства и недостатки, но сегодня я хочу рассказать выравнивании колонок с помощью плагина к JQuery — Flexify.
+20
JavaFX — «пластилиновая ворона»
2 min
3.4KКак уже известно Java программистам (и не только) на днях состоялся официальный релиз JavaFX. Я периодически проявлял интерес к данному направлению. Пришло время конкретно пощупать что ж это за «зверь» такой с модными буквами FX. Программировать что попало (т.е. тренироваться на кошках) конечно не интересно. Соответственно с пользой для дела написал компонент для веб сервиса загрузки файлов
+35
Information
- Rating
- Does not participate
- Location
- Красноярск, Красноярский край, Россия
- Date of birth
- Registered
- Activity