Search
Write a publication
Pull to refresh
1
0
bashor @bashor

User

Send message

Реализация механизма исключений средствами языка C

Reading time1 min
Views1.6K
Программисты C++, Java, C#… при написании кода на «чистом» C часто сталкиваются с проблемой отсутствия механизма исключений. Классический способ обработки ошибок в C — проверка кодов возврата. В сложных алгоритмах при глубокой вложенности это весьма неудобно. Приведенный ниже способ не нов, но, к сожалению, многие с ним не знакомы.

Итак, в POSIX есть пара полезных функций: setjmp и longjmp

#include <setjmp.h>

int setjmp(jmp_buf env);
void longjmp(jmp_buf evn, int val);


Рассмотрим пример:


#include <setjmp.h>
jmp_buf jbuf;

/* ...... */

/* Ставим обработчик */
int result = setjmp(jbuf);
switch(result) {
   case 0: /* это блок try */
   case 1: /* Один из блоков catch */
   case 2: /* Еще один catch */
};

/* .... */

/* Здесь мы хотим кинуть исключение */
longjmp(jbuf, КОД_ИСКЛЮЧЕНИЯ);


Вызов setjmp сохраняет состояние стека в переменную. При сохранении setjmp возвращает 0. Эту переменную необходимо сделать доступной для кода, который будет инициировать переход. После вывода longjmp всё будет выглядеть так, как будто setjmp вернул отличное от 0 значение.

Что стоит отметить:
1) longjmp никогда не возвращает управление. Либо будет откат к setjmp, либо, если jmp_buf битый — segmentation fault.
2) Второй параметр longjmp — то значение, которое вернет setjmp по восстановлении стека. 0 передать не получится (в этом случае вернется 1).
3) Описанный выше механизм ломает «нормальную логику» работы программы на C. При этом в некоторых случая может сделать программу более читаемой. К этому стоит относиться как к goto.

UPDATE-замечание от mraleph:
Строго говоря setjmp не сохраняет «состояние стека». Он сохраняет лишь значения регистров, поэтому в частности jmp_buf'ом нельзя пользоваться, если функция, в которой он был создан завершилась…

Заполнение пустого пространства плавающими блоками. Разбор 2-ух примеров реализации. От Яндекса и от студии Лебедева.

Reading time1 min
Views752
Недавно столкнулся с проблемой реализации плавающих блоков в одном интернет магазине. Суть в том, что товары выводятся в виде блоков. По задумке количество блоков по горизонтали должно меняться в зависимости от разрешения экрана. Использовать float в тупую не удалось из-за не фиксированой высоты блоков.
Немного погуглив я ничего не нашел. Зато вспомнил, что видел подобное на Яндексе и в магазине студии Лебедева.
Сообственно я выкладываю сюда для ознакомления то, что вы и сами можете найти в указанных источниках. Все, что я сделал это почистил от лишнего кода. Если-бы я нашел подобный пост раньше это сэкономило-бы мне время.

смотрим...

О программировании

Reading time3 min
Views864
В продолжение Об информатике вообще, О знаниях и умениях программиста, и О личных качествах программиста

Профессия программиста в наше время не редкость. Могут быть различные мнения об интересности, полезности (для здоровья и развития личности) и актуальности этой профессии. Я здесь представлю положительное мнение.
Читать дальше →

Искусственный интеллект и Web: Часть 0

Reading time13 min
Views27K

Привет Хабр.



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

Как меня учили работать. День первый.

Reading time2 min
Views721
Командировка — это всегда что то новое. В этот раз я буду постигать науку быстро и хорошо работать. Учителя шведы.

Кратко суть: «Think better — write faster». Очень хорошо подходит для небольших команд.

Читать дальше →

Создание настраиваемого профиля Default User в Windows XP

Reading time3 min
Views5.3K
При создании собственной сборки Windows XP с помощью nlite, мне понадобилось некоторые настройки, которые обычно хранятся в HKEY_CURRENT_USER, применить для всех будущих пользователей.

Логично было бы предположить, что ветка реестра HKEY_USERS\.DEFAULT хранит копию реестра для новых пользователей, но оказалось, что это далеко не так. Погуглив немного, я выяснил, что он хранит профиль пользователя Local System.

Дальнейшее изучение матчасти привело к нахождению двух способов:
Читать дальше →

Ссылки в Windows, символьные и не только

Reading time3 min
Views397K

Предыстория


В своём топике "Впечатления от Яндекс.Субботника" хабрачеловек absolvo высказал удивление, что один из докладчиков не знал о том, что символьные ссылки есть и в Windows. Честно говоря, не знал этого и я, поэтому поинтересовался об этих ссылках в комментариях.

Думаю, то, что удалось выяснить, может показаться кому-нибудь полезным.
Читать дальше →

Ускоренное выключение\включение Windows XP

Reading time3 min
Views20K
*Перенесено из песочницы, спасибо за инвайт :-)
Привет!
Я вот честно, искал в поиске подобную тему, но не нашёл. Сегодня я хочу рассказать вам про то, о чём я узнал случайно и даже немного возмутился. Оказывается у Microsoft есть куча полезных утилит которые творят чудеса! Мне даже непонятно почему они не включены стандартно в Windows.
1) Ускоренная выгрузка Windows XP.
Есть такая утилитка на сайте Microsoft: UPHClean (User Profile Hive Cleanup Service)
Microsoft.com/UPHClean
если по каким то причинам не удалось скачать, то можно отсюда:
Filehoster.ru.
Служба UPHClean контролирует компьютер в процессе выгрузки профиля пользователя и закрывает открытые ресурсы. Вот честно, с английским у меня не важно, но, насколько я понял, обычно после выгрузки пользователя, Windows начинает сканироваь реестр и что-то там согласовывать и завершать, а при установленной утилите вся эта работа будет выполняться сразу в реальном времени по мере надобности. Эта утилита себя зарегистрирует как сервис и будет висеть в памяти всегда (от 1 мб до 5 мб. у каждого по разному), и хотя я очень критичен к сервисам которые находятся в автозапуске, эта утилитка меня так поразила что я не смог ей отказать :-) у меня выключается за 5-7 секунд. раньше за 25
2) Ускоренная загрузка Windows XP.
Я понимаю, что этой теме выделенно не мало пространства в интернете, но тут я вам не расскажу как это сделать супер быстро, нажав одну кнопку.
BootVis Tool
Microsoft.com/BootVis
Читать дальше →

Все вебморды в одной. virtualhost и proxy_pass в nginx для дома.

Reading time4 min
Views4.4K
В этой статье я хотел бы поделиться опытом, как организовать доступ к Web-интерфейсам различных домашних качалок через один единственный проброшеный наружу порт. Делать будем под винду (на Win32 порту nginx), но точно также можно сделать под unix.

Где это может понадобиться? Очень простой пример, состоящий из двух условий:
— У меня дома стоит СТРИМ, который блокирует входящий 80 порт
— У меня на работе открыты наружу только порты 443, 80, 5190.
— Как итог: я могу достучаться домой только к 2 сервисам, один из которых у меня SSH, и один остается свободным. Задача сводится к тому, чтобы завернуть все WEB-морды в один сайт, ибо замучался я с SSH-туннелингом. Универсального интерфейса, конечно же, не получится, так что их надо логически разделить.
Читать дальше →

HPC: nVidia, AMD, Sony Cell, x86

Reading time5 min
Views7.5K
Многие слышали о мифических словах — nVidia CUDA, AMD Brook, IBM/Sony Cell… Ходят слухи, что одно лишь упоминание оных заставляет вашу программу работать в сотни раз быстрее. Попробуем разобраться, что они из себя представляют, как выглядит это магическое высокопроизводительное программирование в общих чертах, и какой выигрыш они могут обеспечить в сравнении со старыми добрыми процессорорами x86.

Читать дальше →

Бесплатные книги от MS Press

Reading time3 min
Views2.9K
В рамках празднования своего 25-летия издательство MS Press выставляет в бесплатный доступ электронные версии некоторых своих книг (на английском).

В настоящий момент выставлено 7 книг (3 из них выставлены частично), о которых речь пойдет ниже.

Читать дальше →

Сборник свободного и открытого ПО для Windows

Reading time3 min
Views7.8K
Многие преподаватели очень осторожно (а чаще негативно) относятся к Linux. В то-же время «Первая помощь» не вызывает восторга у преподавателей. Специально для учебных заведений и учащихся я собрал диск со свободным и открытым программным обеспечением под Windows XP и Vista.
Читать дальше →

Оптимизируем интерфейс Windows XP на нетбуках

Reading time2 min
Views18K
Оптимизированный интерфейс Windows XP

Сейчас пошла мода на так называемые нетбуки — ноутбуки, маленькие по размеру и с довольно слабой аппаратной начинкой, но зато — дешевые. Вот и я поддался соблазну и приобрел пару месяцев назад1 такую машинку: ASUS eee PC. Один из минусов компактности у этой машинки — маленький экран. Причем, мала как диагональ экрана, так и физическое разрешение: всего 800 х 480 точек. Из-за этого многие окна программ просто не влазят в экран и чтобы как-то оптимизировать работу, я стал настраивать графическое оформление системы. Во-первых, зачем нужны такие громоздкие заголовки окон, во-вторых, зачем оставлять в панельках инструментов столько свободного места? Незачем, посчитал я и принялся искать замену стандартному голубому оформлению Windows XP2.
Читать дальше →

20 критических уязвимостей в программе

Reading time1 min
Views539
Я думаю самая главная ошибка — между креслом и клавиатурой, но если разбирать больше чем «не заметил» и предположить что новички не совсем знают о критических ошибках которые могут вызвать серъёзные последствия типа потери данных, вызова инородного кода, недоступность сервиса или кражи данных, то чёрный список выстроится следующим образом:
  1. Неверная валидация ввода данных
  2. Неправильная кодировка или отсутсвие обработки данных вывода
  3. SQL-инъекция
  4. Cross-site scripting
  5. Неограниченность в консольном доступе (OS-инъекция)
  6. Передача личных данных по малозащищённому каналу
  7. Межсайтовый запрос как подделка внутреннего запроса
  8. Соревнование потоков использующих один ресурс и неверное закрытие его использования
  9. Слишком информативное содержание об ошибке
  10. Выход указателя программы за пределы отведённой памяти
  11. Внешнее управление внутренними переменными и файловыми путями
  12. Генерируемый код и его потенциальная инъекция
  13. Автообновление программы полученным кодом без подтверждения источника
  14. Грязная инициализация — доступны данные предыдущих инициализаций
  15. Математика с ограниченными числами
  16. Ненадёжная авторизация и за-hard-коденые пароли
  17. Использование подверженного риску или взломанному алгоритму криптографии
  18. Исполнение с повышенными привилегиями
  19. Использование недостаточно случайных чисел
  20. Валидация на стороне клиента но не на стороне сервера
Читать дальше →

Универсальный пароль для сайтов

Reading time1 min
Views10K
Не так давно на башорге пролетали призывы к регистрации на различных ресурсах под одинаковыми логином/паролем. В качестве образца предлагалось использовать

логин: BashOrgRu
пароль: Bash1234

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

Хоть я и негативно отношусь к оффтопикам на баше, но эта идея меня заинтересовала.

Были ли уже подобные инициативы? Может уже существует волшебный ключик habra / habr?

Запуск VMware Player, как Windows Service

Reading time5 min
Views7.6K
У вас есть желание запускать Vmware как фоновый процесс на компьютере с Windows?
Ничего из нижеописанного не одобрено VMware. Это руководство описывает только мой способ использования VMware Player.

  1. Создание виртуальной машины
  2. Установка VMware Player
  3. Создание службы VMware Player
  4. Запуск виртуальных машин при старте Windows


Переводчик: следующий абзац был добавлен после того, как в комментариях появились вопросы о том, зачем все это надо.
В чем может быть выигрыш такого способа? Не проверял, но думаю, что выигрыш в дисковом пространстве и системных ресурсах (дистрибутив второго сервера весит около 600 Мб, а последнего плейера — более чем в три раза меньше). Так же помним, что сервер до недавнего времени отставал по поддержке свежих поколений виртуальных машин.


Итак, по порядку.

Поиск функций в программах — концепт

Reading time1 min
Views537
Изучая SPSS, я подумал вот о чём.

На многих сайтах уже давно прижилась всплывающая по мере набора текста подсказка под полем поиска, так? Так. А вот в монстрообразных программах с огромным количеством вложенных менюшек типа SPSS такая функция очень бы даже пригодилась для поиска нужного пункта меню.

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

Читать дальше →

Виртуальная дебетовая карта

Reading time1 min
Views22K

Навеяно недавним топиком о мошенничестве. Хочу поделиться советом с теми, кто делает покупки в Интернете в сомнительных местах. (Точнее, этот совет первый сразу после совета таких покупок не делать). Заведите виртуальную дебетовую карту, например EntroPay. Процесс оформления немного муторный — придется подтвердить свою личнось и адрес проживания (с меня, например, потребовали скан национального и загранпаспорта, а также договора с банком), однако усилия стоят того. Данная карта обладает всеми аттрибутами кредитной карты Visa — шестнадцатизначным номером, сроком действия, CVC2 кодом, однако с нее нельзя снять больше, чем ее текущий баланс — например, 10 долл.

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

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

Re: Примитивная защита от фишинга

Reading time4 min
Views616
Пару ночей назад, пытаясь одолеть упущенные 1000+ в Google Reader, я наткунлся на топик «Примитивная защита от фишинга» хабраюзера hooey. И вдохновился.

Захотелось реализовать идею в виде расширения для Firefox, что я и попытался сделать.

Предупрежаю, это моё первое расширение для Firefox, оно было написано за пару вечеров, и я совершенно не пытаюсь сразу выдать какой-либо конечный продукт, а лишь хочу показать некий прототип.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity