Ненормальное программирование → Загрузка динамической библиотеки из памяти в Linux
В одном моем кроссплатформенном проекте мне понадобилась возможность проверять цифровые подписи плагинов перед загрузкой. Ни один из вариантов с созданием файла не является безопасным, так как можно подменить файл между проверкой подписи и его загрузкой, так же нельзя проверить подпись после загрузки, так как уже выполнились статические конструкторы. Поэтому необходимо загружать плагин, не создавая файла.
Перехватить функции open, mmap и прочие невозможно, так как ld.so слинкован с библиотекой си статически, исполняемые файлы, загруженные же своим загрузчиком, «неполноценны» (даже с перехватом функций в libdl): они не регистрируются в списке загруженных библиотек и/или их символы не видны через dlsym. Следовательно, остается только перехват системных вызовов.
Перехватить функции open, mmap и прочие невозможно, так как ld.so слинкован с библиотекой си статически, исполняемые файлы, загруженные же своим загрузчиком, «неполноценны» (даже с перехватом функций в libdl): они не регистрируются в списке загруженных библиотек и/или их символы не видны через dlsym. Следовательно, остается только перехват системных вызовов.
Софт → Побеждаем ELMS Delivery Client
Сначала объясню, о чем речь.
Основная идея этой системы заключается о том, что пользователь скачивает специальное приложение, которое скачивает установщик лицензионного ПО и разархивирует его. Идея не так чтобы очень хорошая, но на первый взгляд терпимая. Но, как это часто бывает с продуктами Microsoft, всё пошло не так, как надо.
Что такое ELMS? ELMS (e-academy License Management System) — это веб-сайт для распространения ПО, который каждый администратор программы может настроить в соответствии с потребностями своего подразделения. Факультеты-подписчики MSDN Academic Alliance всего мира могут пользоваться ELMS бесплатно, так что ее использование не приведет к дополнительным затратам.Ссылка
Зачем нужна ELMS? ELMS — это основанная на веб-технологиях система управления, упрощающая распространение ПО среди студентов в соответствии с политикой лицензирования программы MSDN AA.
Основная идея этой системы заключается о том, что пользователь скачивает специальное приложение, которое скачивает установщик лицензионного ПО и разархивирует его. Идея не так чтобы очень хорошая, но на первый взгляд терпимая. Но, как это часто бывает с продуктами Microsoft, всё пошло не так, как надо.
Ненормальное программирование → Программируем в dc (desktop calculator) из песочницы
Я часто люблю отдыхать, изучая новые языки или технологии. И не важно, что я их, возможно, никогда и не применю на практике. Занимаюсь я этим преимущественно из простого любопытства и желания узнать что-то новое.
Отчасти, по этой же причине, возникли эзотерические языки программирования. Brainfuck, Befunge и прочие весьма хорошо разгружают мозг после умственной работы, да и просто позволяют интересно и с пользой провести время. Да, именно с пользой, ведь они развивают нестандартное программистское мышление, ставя его в сложное положение жестких ограничений возможностей языка, операторов, и, как правило, ужасного нечитабельного синтаксиса. Да, они неприменимы в реальной практике, но, тем не менее, большинство из них обладают тьюринговской полнотой, следовательно, вполне могут считаться полноценными языками программирования.
Кстати, в ближайшее время планируется серия постов по некоторым эзотерическим языкам.
Отчасти, по этой же причине, возникли эзотерические языки программирования. Brainfuck, Befunge и прочие весьма хорошо разгружают мозг после умственной работы, да и просто позволяют интересно и с пользой провести время. Да, именно с пользой, ведь они развивают нестандартное программистское мышление, ставя его в сложное положение жестких ограничений возможностей языка, операторов, и, как правило, ужасного нечитабельного синтаксиса. Да, они неприменимы в реальной практике, но, тем не менее, большинство из них обладают тьюринговской полнотой, следовательно, вполне могут считаться полноценными языками программирования.
Кстати, в ближайшее время планируется серия постов по некоторым эзотерическим языкам.
Каскадные Таблицы Стилей → Дрессируем box-shadow
Разработчики W3C сделали box-shadow очень гибким свойством. Благодаря этому можно получать весьма интересные результаты, если использовать это свойство нетривиальным образом. В этой статье я напишу о некоторых эффектах, которые мне удалось получить при помощи «теневых технологий».Пока я составлял примеры, я неожиданно обнаружил, что браузеры отображают их совсем неодинаково. В итоге, помимо простой демонстрации возможностей box-shadow, получился еще и маленький браузерный тест на поддержку CSS 3. Все примеры снабжены CSS-кодом и картинкой (общий объем всех PNG: 161 КБ). В статье я не стал прописывать свойства с вендорными префиксами -moz- и -webkit-, чтобы не ухудшать читабельность. В суммарной странице со всеми примерами эти префиксы есть (предупреждаю, что у Оперы есть баг с прорисовкой внешних box-shadow при прокрутке).
Персональные блоги → Толерантность к ЛГБТ?!
Украина стремится в евро союз. Одним из пунктов приема в евро союз это толерантность к ЛГБТ. А что подразумевается под толерантностью к ЛГБТ в рамках страны?
Существует законопроект по которому (если его примут) в школах должны ввести уроки толерантности, где будут объяснять, что ЛГБТ это нормально!!!
Лично меня это возмущает, так как я это нормальным не считаю! + почему моего ребенка будут пытаться научить тому, что я считаю аморальным! Кто имеет право вмешиваться в моральную сторону обучения моего ребенка?!!!
Что мы можем сделать? Если будет собрано миллион подписей против этого законопроекта то он не пройдет. Сейчас во всех городах идет сбор подписей. В Харькове сбор подписей будет проходить 23-24 августа (скорее всего на м. Университет). Все кому не безразлично придите и подпишитесь.
Больше инфы на сайте http://love-contra.org/
Существует законопроект по которому (если его примут) в школах должны ввести уроки толерантности, где будут объяснять, что ЛГБТ это нормально!!!
Лично меня это возмущает, так как я это нормальным не считаю! + почему моего ребенка будут пытаться научить тому, что я считаю аморальным! Кто имеет право вмешиваться в моральную сторону обучения моего ребенка?!!!
Что мы можем сделать? Если будет собрано миллион подписей против этого законопроекта то он не пройдет. Сейчас во всех городах идет сбор подписей. В Харькове сбор подписей будет проходить 23-24 августа (скорее всего на м. Университет). Все кому не безразлично придите и подпишитесь.
Больше инфы на сайте http://love-contra.org/
Веб-разработка → Как отправить форму по нажатию на ссылку?
Этот вопрос входит, наверное, в ТОП10 вопросов на форумах :) Скорей всего это требование дизайнера или заказчика.
Итак, решение, на первый взгляд, простое:
Но тут же возникает (как ни странно :) следующий вопрос это, а если JS будет у посетителя отключен?
Итак, решение, на первый взгляд, простое:
<a href="#" onclick="document.getElementById('myform').submit(); return false;">Отправить</a>
Но тут же возникает (как ни странно :) следующий вопрос это, а если JS будет у посетителя отключен?
Персональные блоги → 5 cпособов осуществить агрегацию строк в MS SQL
Иногда возникает необходимость осуществить агрегацию строк в SQL запросе, то есть, по такому набору данных:
получить примерно такой:
MySQL, например, для таких целей обладает встроенной функцией GROUP_CONCAT():
В MS SQL Server'e такой функции нету, поэтому приходится извращаться. Перед тем, как приступить, сделаем скрипт для создания тестовой таблицы:
Итак, начнем.
| GroupId | Item |
|---|---|
| 1 | AAA |
| 2 | IS |
| 5 | OMG |
| 2 | WHAT |
| 2 | THE |
| 1 | This |
| GroupId | ItemList |
|---|---|
| 1 | AAA,This |
| 2 | IS,WHAT,THE |
| 5 | OMG |
SELECT GroupId, GROUP_CONCAT(Item SEPARATOR ",") AS ItemList FROM Items
В MS SQL Server'e такой функции нету, поэтому приходится извращаться. Перед тем, как приступить, сделаем скрипт для создания тестовой таблицы:
CREATE TABLE Items(GroupId INT, Item NVARCHAR(10)) INSERT INTO Items(GroupId, Item) SELECT 1 AS GroupId, 'AAA' AS Item UNION ALL SELECT 2, 'IS' UNION ALL SELECT 5, 'OMG' UNION ALL SELECT 2, 'WHAT' UNION ALL SELECT 2, 'THE' UNION ALL SELECT 1, 'This'
Итак, начнем.
Персональные блоги → играем с логическими операторами
вот захотелось поиграться с логическими операторами, с присваиванием и сделать что-то реально полезное…
Персональные блоги → Брутально-элегантная верстка
Никогда я так раньше не делал, однако, все по порядку.
Случилось мне сверстать красиво оформленную поисковую форму со всякими PNG-фенечками и кнопкой картинкой. Все бы ничего, пару дней все работало как часы, отправлялось, искало и т.д. А тут мне менеджер проекта и говорит: "Форма не работает". Как так? Глянул в ФФ - работает, в Опере - Ок, в ИЕ7 - работает, на шестерке завал. Блин. Как будто disabled на <input type="image" src="картинка"> выставлен, ан нет - ничего подобного.
Пробую onclick="this.form.submit()" - Фиг вам.
Пробую onclick="document.forms['form_name'].submit()" - Фиг.
Думаю, а что, если дело не в кнопке, ставлю обычный Сабмит - срабатывает только при попадании в два крайних правых пиксела - Блин.
И тут уже пришлось извращаться:
Что характерно, работает везде... :)
UPD: Хотя можно было и просто картинку вставить...
Случилось мне сверстать красиво оформленную поисковую форму со всякими PNG-фенечками и кнопкой картинкой. Все бы ничего, пару дней все работало как часы, отправлялось, искало и т.д. А тут мне менеджер проекта и говорит: "Форма не работает". Как так? Глянул в ФФ - работает, в Опере - Ок, в ИЕ7 - работает, на шестерке завал. Блин. Как будто disabled на <input type="image" src="картинка"> выставлен, ан нет - ничего подобного.
Пробую onclick="this.form.submit()" - Фиг вам.
Пробую onclick="document.forms['form_name'].submit()" - Фиг.
Думаю, а что, если дело не в кнопке, ставлю обычный Сабмит - срабатывает только при попадании в два крайних правых пиксела - Блин.
И тут уже пришлось извращаться:
<form method="get" action="/search/" name="form_name">
<table cellpadding="0" cellspacing="0">
<tr>
<td><img src="/img/inner/spacer.gif" width="15" height="22"></td>
<td height="22"><input type="text" name="q" value="Поиск"></td>
<td width="27" height="22" onclick="document.forms['form_name'].submit()">
<input type="submit" value="" style="border-width: 0;
background-color: transparent;
background: url('/img/pretty_button.gif') 0px 3px no-repeat;
width: 27px; height: 22px;">
</td>
</tr>
</table>
</form>
Что характерно, работает везде... :)
UPD: Хотя можно было и просто картинку вставить...