+3.41
8 читателей, 60 топиков

Кое-что об исключениях в C++

Эта статья рассчитана прежде всего на начинаюцих программистов, но и профессионалам не мешало бы освежить свою память.
Итак,

вступление.

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

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

«Именованные параметры» в Delphi

Иногда возникает ситуация, когда в функцию требуется передавать много различных параметров, но при этом необходимый набор этих параметров может сильно различаться. В таких случаях, для Delphi, как правило, есть несколько путей решения:
  1. Просто забить все возможные параметры в интерфейс функции.
  2. Сделать множество перегрузок функции на все случаи жизни.
  3. Передать параметры массивом.
  4. Воспользоваться обходным путём. Например, вынести параметры в класс и проставлять их перед вызовом функции.
Всё эти способы получаются довольно громоздкими в реализации и имеют массу недостатков. А самое главное, что над их реализацией необходимо думать в каждом конкретном случае отдельно — не существует простого общего решения.

В некоторых языках (Scala, Python, Ruby...) такой проблемы не стоит в принципе — там есть такая замечательная вещь как именованные параметры. В Delphi же приходится всегда следовать установленному порядку аргументов. Не спасают даже значения по-умолчанию (их не всегда можно применить из-за конфликта типов, к тому же их использование нередко приводит к путанице).

Однако, используя небольшую хитрость, в Delphi вполне можно написать, к примеру, вот так:

ProcessParams(Par('Param1', 'test') + Par('Param2', 38) + Par('Param3', 3.2));

При этом в функцию ProcessParams придёт массив из трёх записей, содержащих пару «имя — значение». Такая запись становится возможной благодаря модулю объёмом всего 40 строк:


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

GUI: Рекомендации по названию пунктов меню

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

Назначение меню программы заключается в следующем: пользователь не должен помнить все команды программы, потому что он всегда знает откуда можно вызвать любую команду. По-сути меню — это справка по всем доступным действиям программы. Хороший способ ознакомиться с возможностями программы — это пройтись по всем пунктам меню.

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

Задачка для программистов

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

На эту тему и будет задачка — решить задачу об избыточном кодировании, но на микро-условиях, и в жестко заданных рамках. Бывает что мне лезут в голову задачки, это одна из них.

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

Программирование под Samsung BadaOS глазами “чайника”

image

Здравствуйте!

Хочу поделиться с Вами опытом написания приложения для телефона Samsung Wave 525. Как выглядит процесс разработки глазами не специалиста в данной области. И на сколько просто и быстро освоить технологию дилетанту.


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

Tcp Ping или проверка доступности удаленного сервиса

Понадобилось мне недавно какая-нибудь утилита, для проверки доступности удаленного сервера. Вроде все просто, запусти ping и все, но оказалось не так просто, на удаленной машине отключен ответ на ICMP запросы.

Немного поискав в сети понял, что мне нужен tcpping, но ничего подходящего не нашлось. Решил писать сам, в качестве среды разработки выбран MS Visual Studio 2010 Express.

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

LINQ 'em all!

Иногда технологии развиваются. Иногда они развиваются быстро. Гораздо быстрее, чем система образования. Гораздо быстрее, чем пишутся книги. Слишком быстро.

Когда-то программист без знания ассемблера не являлся программистом. Потом, таковой программист уже не считался программистом (в кругу тех, кто ассемблер знал). Потом знание ассемблера уже перестало быть необходимым для того, чтобы считаться (и по факту являться) программистом. Теперь, с развитии кроссплатформенных технологий, на ассемблерах реализуется лишь очень узкий (сравнительно с оставшимся набором задач) круг задач, связанных с железом.

Это нормально. Время меняется. Автомобили сменяют кэбы, гребной винт вытеснил парус, патрон похоронил стрелу. Устаревшие технологии становятся уделом энтузиастов и узких профессионалов в тех немногих сферах, где без них нельзя. Кто следующий?

В ИТ — это подход к программированию через написание алгоритмов. Т.е., те многочисленные умные слова и бесчисленные задачи, которые мы с вами решали на первых курсах университетов, и которыми нашим студентам до сих пор усиленно забивают голову. Почему пришел их черед уходить в небытие? Да просто потому что задачи, решаемые с помощью циклов, условий, рекурсии и прочих алгоритмических трюков, расписанных Д.Кнутом в знаменитом трехтомнике, в их большинстве можно решить с помощью современных средств разработки без собственно алгоритмов. Грамотное владение ООП (т.е. то, чему надо учить студентов в программистских ВУЗах прежде всего) в сочетании с современными технологиями позволяет красиво и эффективно избавиться от огромного количества кодострочек. Как?

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


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

Меню для Arduino

Мне всегда нравились микроконтроллеры и компьютеры. С компьютером проще, были бы деньги, а вот с микроконтроллерами немного сложнее. Моделей много глаза разбегаются, да и в свободной продаже у нас долгое время не встречалось. Раньше были попытки научится с ними работать, но как то не сложилось. И ATtiny12L отправилась в дальний яшик. Встречались мне новости по конструкторам на микроконтроллерах но на тот момент заказать было его невозможно, да и дорого. Гдето на глаза попалась Arduino и он ли она меня заинтересовала. Немного подумав решил заказать сие чудо и шилд для него в виде ЖК экрана с кнопочками, потому как моргать светодиодами было скучно, а делать что то свое лень.

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

NodeJS vs PHP. Тест на производительность

Недавно очень заинтересовался NodeJS. Чем больше с ним разбирался – тем больше он мне нравился, вплоть до идеи «отныне пишу все на NodeJS». Но перед переходом мне стало интересно, на сколько серверный js выигрывает в производительности, в сравнении с php.


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

Разработка приложений для сенсорных экранов

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

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