Pull to refresh
35
-2

Пользователь

Приватные методы для отладки

Reading time 13 min
Views 8.5K
Наверняка уже все знают, что у UIView есть полезный метод recursiveDescription.
Вызов которого, вернет строку с описанием всей иерархии вью.

(lldb) po [[self view] recursiveDescription]
<UIView: 0x6a107c0; frame = (0 20; 320 460); autoresize = W+H; layer = […]
   | <UIRoundedRectButton: 0x6a103e0; frame = (124 196; 72 37); opaque = NO; […]
   |    | <UIButtonLabel: 0x6a117b0; frame = (19 8; 34 21); text = 'Test'; […]
   .....

Еще многие знают, что при помощи рантайма, можно получить список переменных/методов/свойств/протоколов/… класса. И обычно для этих целей пишут вспомогательный код. Но оказывается, все уже давно написано сотрудниками Apple. В UIKit.framework реализована категория с именем IvarDescription.

@interface NSObject (IvarDescription)
- (id)_shortMethodDescription;
- (id)_methodDescription;
- (id)__methodDescriptionForClass:(Class)arg1;
- (id)_ivarDescription;
- (id)__ivarDescriptionForClass:(Class)arg1;
@end

Названия метдов говорят за себя. Но давайте посмотрим, что же они возвращают.
Читать дальше →
Total votes 26: ↑20 and ↓6 +14
Comments 1

10 отличий между хорошим и нормальным программистом

Reading time 4 min
Views 38K
Предположим, у нас есть 1 нормальный программист и 1 хороший программист (в 2 раза опытнее и с зарплатой в 2 раза больше). Значит ли это, что хороший программист напишет туже самую программу в 2 раза быстрее? Или что имея бюджет в 1000 долларов, не важно какому программисту мы отдадим работу, мы получим такую же программу? А может быть, если мы наймем 2 нормальных программистов, то они будут работать так же качественно и быстро, как 1 хороший программист? Нет — к сожалению, линейная алгебра не применима к программистам. В этой статье я попытаюсь рассказать почему нельзя складывать и вычитать линейно опыт программистов.
Читать дальше →
Total votes 45: ↑35 and ↓10 +25
Comments 41

Разоблачение 12 юридических заблуждений о программах для ЭВМ

Reading time 7 min
Views 182K


Заблуждение / опасная привычка На самом деле … Наш совет прост:
1. Мы создали программу и автоматически стали ее авторами и правообладателями. Для охраны и продажи программы никаких документов оформлять не нужно, ведь она охраняется авторским правом — ©! Действительно: программа для ЭВМ охраняется авторским правом как литературное произведение (п.1 ст. 1259, ст. 1261 ГК РФ).

Но то, что для возникновения авторских прав не требуется регистрация или соблюдение каких-либо иных формальностей (п.4 ст. 1259 ГК РФ), ни в коем случае не освобождает:
− от соблюдения набора критериев, установленных законом;
− от необходимости документально доказать факт создания программы и свои права на них.

Неоформленный SOFT закон не охраняет.

Всё просто: если у вас спор о правах на программу, то без документов вы не сможете доказать, что (1) у вас были права и (2) ваши права нарушены, (3) что сама эта совокупность данных и команд на языке программирования является интеллектуальной собственностью (ведь различные версии и релизы никакой новой интеллектуальной собственности не создают).
То же самое – при постановке на бухгалтерский учёт и оформлении бухгалтерских проводок.

Коротко говоря: нет документов = нет интеллектуальной собственности = нет нарушений прав = нет компенсации за нарушение прав.
Оформляйте много хороших и разных документов при создании программ для ЭВМ:
— договоры с авторами;
— договоры с подрядчиками;
— технические задания;
— протоколы совещаний и тестов;
— соглашения между соавторами;
— авторское свидетельство;
— сертификат признания интеллектуальной собственности;
— спецификация РИД;
— свидетельство о регистрации программы для ЭВМ (Роспатент).
Читать дальше →
Total votes 149: ↑119 and ↓30 +89
Comments 210

Разработка привлекательных реалистичных пользовательских интерфейсов

Reading time 4 min
Views 15K
Cекрет разработки привлекательных интерфейсов заключается в реализме. Ваша задача — придать плоским элементам объём, используя свойства реальных объектов, вроде неровностей и шероховатостей, бликов и теней, различных текстур поверхностей. В идеале они должны выглядеть как предметы на вашем столе. Создавая классный интерфейс, в первую очередь нужно думать не «как», а «почему».
Читать дальше →
Total votes 212: ↑205 and ↓7 +198
Comments 49

Работа для программиста в США: 5 простых шагов

Reading time 5 min
Views 291K
image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

Мой опыт несколько отличается от нижеописанного (я попала на работу в США после стажировки). Но за 4 года в США пообщалась с людьми, которые попали сюда разными путями и набрала кое-какой опыт. Так что если бы я очень хотела найти работу в США сегодня, то я бы действовала примерно так, как описано ниже.

Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
Читать дальше →
Total votes 166: ↑152 and ↓14 +138
Comments 138

У вас много денег? Перестаньте быть снобами

Reading time 3 min
Views 91K
В последние два дня Хабр захлестнули очередные возмущенные посты про уровень претензий и ожиданий. Ходят, мол, тут всякие, ничего не знают, хотят миллионы.

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

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

Возможно, вы сами слишком давно не искали работу и подзабыли уже, как это бывает.

Я искал работу. И приходил на собеседование в мейл.ру, например. Да, меня в итоге не взяли и, наверное, так же смеялись между собой (хотя врядли, ребята очень позитивные) — пришел тут с претензиями, а сам вообще нифига! Может и статью разгромную могли бы написать.
Но есть много факторов которые влияют на то, как ты себя покажешь на собеседовании. Все может банально просто не складываться. Конечно, я сам потом смеялся про себя над тем как я тупил, и в голову мне приходили гениальные ответы на вопросы, которые мне задавали. Потом. А там на вопрос «напишите на листочке программу на любом языке программирования, которая находит простые числа от 1 до миллиона» ее-то ты, как и я, напишешь в три строки перебором. А потом на вопрос «а ускорьте ее в два раза» станешь, как я, вспоминать курс высшей математики, морщить лоб и мямлить, что не совсем помнишь алгоритм поиска простых чисел. Про то, что можно просто выбросить из перебора четные числа вспомнишь только вечером. А рекрутер будет сидеть и вздыхать про себя. А потом статью напишет про уровнь претензий.
Много было потом еще интересных и смешных моментов. И предложили мне в итоге зарплату в половину того что я попросил, явно чтобы просто избавиться. Показать, так сказать, свое место.

Читать дальше →
Total votes 364: ↑290 and ↓74 +216
Comments 247

У вас много денег? Мы все равно к вам не пойдем!

Reading time 2 min
Views 33K
Это ответ на статью У Вас много денег? Тогда мы идем к Вам!

Хотел бы разобрать ситуацию с поиском и наймом персонала более подробно, возможно это для кого то эта информация будет новой.
Для начала попробуем сформулировать основную проблему (см. исходную статью): «Нужно найти грамотных, профессиональных и лояльных разработчиков PHP, с глубоким знанием, ну или хотя бы пониманием работы приложений и СУБД в условиях высоких нагрузок в Днепропетровске. Сумма вознаграждения ограничена 2,5 К $».
Как вам такая задача? По силам?
Читать дальше →
Total votes 96: ↑63 and ↓33 +30
Comments 45

Некоторые аспекты логирования ASP.NET-сайта

Reading time 16 min
Views 20K
Здравствуйте!

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

Сайт написан на ASP.NET MVC 5 и Web API 4, для логирования используется библиотека NLog, сайт хостится в облаке Амазона. Записи лога пишутся в три места (target по терминологии NLog): в файловую систему (подпапку Logs папки App_Data, в которую разрешается доступ на запись при стандартных настройках деплоя Amazon Elastic Beanstalk), на сервис logentries и в БД. Записи лога за день ведутся в отдельный файл, в названии которого указывается текущая дата.
Читать дальше →
Total votes 23: ↑20 and ↓3 +17
Comments 19

Хроническая усталость, апатия, сезонная «депрессия» и многое другое: тривиальная причина

Reading time 8 min
Views 683K
На хабре часто публикуют статьи о самоорганизации — нам всем хочется меньше прокрастинировать, и делать больше полезного. Но что если делать полезное мешает дичайшая усталость? Никакая организация задач усталость не уберет.

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

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

1) Летом все ок, а зимой — апатия, ничего не хочется делать. Это любят называть сезонной «депрессией».
2) Утром все ок, а к вечеру на работе — мозги «не варят», ничего не хочется делать — только хабр и reddit листать. Приходите домой — и с дичайшей усталостью падаете в кресло. Сил хватает только лазить в интернете до ночи. Этот пункт — касается и работодателей, есть шанс, что люди вечером перестают работать не из-за своей лени.
3) Даже если вы просыпаетесь без будильника — вы не высыпаетесь.
4) Кофе и прочие стимуляторы — не дают бодрости, лишь делают вас злее.
5) Даже если вы спите «сколько влезет» — сны короткие и не запоминающиеся, или их нет вообще.
6) Вы замечаете, что даже 1 вещь вам иногда трудно удержать в голове. Мы можете забыть что вы сейчас хотели сделать.
7) Вы просыпаетесь уже с дичайшей усталостью
8) Вам кажется, что в комнате темно и все несколько не резкое.
Читать дальше →
Total votes 336: ↑320 and ↓16 +304
Comments 374

Джентльменский набор тестировщика по версии ZeptoLab

Reading time 4 min
Views 55K

Вступление


Как-то раз мы съездили на конференцию SQA days, где мне довелось попасть на доклад «Джентельменский набор тестировщика». Хотелось бы продолжить эту тему и рассказать о своих тулзах, облегчающих жизнь тестировщика.

Справедливости ради стоит отметить, что у нас, в Zeptolab, работает всего несколько QA Lead’ов, а всю основную работу проделывают аутсорсеры. Тем не менее, на нашу долю приходится обширный список обязанностей, требующий глубоких знаний о продукте, работе различных sdk и методов диагностики работы приложений.

Чтобы сильно не раздувать статью, я ограничусь лишь небольшим описанием работы инструментов. Если у вас возникнут вопросы — можем обсудить их в комментариях.
Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Comments 19

Решение проблемы с циклическими ссылками в блоках ObjC

Reading time 12 min
Views 29K
О блоках в ObjC и правильной работе с ними написано очень много, в том числе и на хабре. Вопрос о том, как правильно работать с self в блоках, чтобы избежать циклических ссылок, регулярно задается на собеседованиях. При использовании таких фреймворков, как ReactiveCocoa количество блоков в коде сильно возрастает, при этом увеличивается шанс допустить ошибку и потерять в памяти объекты. Про попытку окончательно решить эту проблему, метапрограммирование для с99 с экстеншнами и блоками + хипстерсткие макросы с @ под катом.
Читать дальше →
Total votes 30: ↑27 and ↓3 +24
Comments 16

StackOverflow: 560 млн показов в месяц, 25 серверов

Reading time 1 min
Views 19K
StackOverflow опубликовал статистику посещаемости по всем сайтам StackExchange. На данный момент StackExchange занимает 54-е место в интернете по аудитории. На сайте зарегистрировано 4 млн пользователей, опубликовано 8 млн вопросов и 40 млн ответов. Посещаемость составляет 560 млн просмотров в месяц.

Что удивительно, для работы StackOverflow хватает всего 25 серверов. Но поскольку нагрузка на ЦП составляет около 10-15%, то всю работу могли бы выполнять и 5 серверов.
Читать дальше →
Total votes 40: ↑32 and ↓8 +24
Comments 42

Один крутой Gist: whiteboardCleaner

Reading time 1 min
Views 30K
Доброго времени суток уважаемые хабравчане. На просторах интернета мне повстречался один миниатюрный и очень интересный Bash скрипт. С помощью ImageMagick он потрясающим образом обрабатывает фотографии белой учебной доски, очищая «содержимое» от всего лишнего:

#!/bin/bash
convert $1 -morphology Convolve DoG:15,100,0 -negate -normalize -blur 0x1 -channel RBG -level 60%,91%,0.1 $2


До:


image

После:


image
Читать дальше →
Total votes 137: ↑122 and ↓15 +107
Comments 42

Не наживайтесь на ошибках клиентов

Reading time 2 min
Views 37K
Хочу поделиться двумя примерами того, как западные компании уважительно относятся к деньгам клиентов и не стараются их оставить себе в случае очевидных ошибок клиентов. Этого очень не хватает русским компаниям, особенно сотовым операторам, которые дошли уже до того, что при неправильном вводе USSD-команды показывают «анекдот» и списывают от 30 рублей.
Читать дальше →
Total votes 112: ↑109 and ↓3 +106
Comments 42

45% веб-ресурсов крупнейших российских компаний содержат критические уязвимости

Reading time 3 min
Views 11K
Веб-приложения давно стали неотъемлемой частью корпоративной информационной системы любой современной организации вне зависимости от рода ее деятельности. Собственные веб-ресурсы создают не только коммерческие компании, но и государственные учреждения, которые развивают веб-сервисы для предоставления онлайн-услуг.

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

Предметом исследования стали 67 ресурсов крупнейших российских организаций государственной и промышленной отраслей, сферы телекоммуникаций и IT (банковским системам посвящена отдельная работа).
Читать дальше →
Total votes 20: ↑13 and ↓7 +6
Comments 6

Инфраструктура и жизненный цикл разработки веб-проекта

Reading time 11 min
Views 56K
Когда проект маленький, особых проблем с ним не возникает. Список задач можно вести в текстовом файле (TODO), систему контроля версий, по большому счёту, можно и не использовать, для раскладки файлов на живой сервер их можно просто скопировать (cp/scp/rsync) в нужную директорию, а ошибки всегда можно посмотреть в лог-файле. Глупо было бы, например, для простенького сервиса с двумя скриптами и тремя посетителями в день поднимать полноценную систему управления конфигурациями серверов.

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

На примере нашего сервиса "Календарь Mail.ru" я хочу рассказать о типичной инфраструктуре и жизненном цикле разработки среднего по размерам веб-проекта в крупной интернет-компании.

Срыв покровов
Total votes 102: ↑93 and ↓9 +84
Comments 46

Как перестать бояться и полюбить шопинг на Amazon

Reading time 2 min
Views 179K
image

Разбор полетов


По итогам прошлого поста мы выяснили, что:

  • доставка происходит в обход Почты РФ через UPS/DHL;
  • в Москву посылка приходит за 5 дней;
  • для РФ Киндл продается только в версии «без встроенной рекламы» и без аксессуаров в отдельном лоте. Поэтому чехлы, к примеру, можно взять тут.
  • Amazon оплачивает услуги таможенного брокера;
  • заказывая доставку на рабочий адрес, никак не упоминайте название компании, иначе получателем будет компания, а не вы, со всеми последствиями;
  • если ваша покупка дешевле 200 евро, включая стоимость доставки, вам не о чем переживать;
  • если вы хотите сделать покупку весом до 31 кг. и стоимостью до 1000 евро, включая стоимость доставки, то вам желательно заказывать ее на адрес в одном из городов списка (Москва, Санкт-Петербург, Краснодар, Владивосток, Ставрополь, Новороссийск и Нижний Новгород). В этом случае доступны следующие варианты развития событий:
    1. скорее всего, вам не о чем переживать, и покупку вам доставят без лишних проблем;
    2. возможно, вам позвонят\ напишут из UPS и попросят прислать им отсканированную распечатку электронной квитанции заказа из Amazon, подписанный договор оказания услуг перевозки груза и копию паспорта.
    3. самый маловероятный и худший вариант — квест по самостоятельному прохождению таможни. Не переживайте, с этой инструкцией процесс займет не больше 2 часов времени и будет не сложнее похода в библиотеку.
  • это же Amazon! При возникновении любых проблем — задержка, потеря посылки, дополнительные таможенные сборы, повреждение товара — служба поддержки придет вам на помощь вплоть до полного возмещения стоимости.


Теперь о том, что же все-таки можно купить.

Читать дальше →
Total votes 69: ↑63 and ↓6 +57
Comments 91

О чем молчит диаграмма Ганта или почему проекты всегда опаздывают

Reading time 4 min
Views 93K
Каждый раз, когда я смотрю на диаграммы Ганта [1], меня мучает один и тот же вопрос. Как? Вот как можно быть уверенным, что ресурс А, выполнит задачу Б за 5 дней? Нет, я понимаю, что есть исторические данные, есть, не побоюсь этого слова, статистика. Но вот как можно на основе всего этого делать уверенные прогнозы? Я не понимаю.
Если для вас термины «взаимозависимость событий» и «статистические отклонения» говорят что-то не только по отдельности, но и в совокупности, то статья вас вряд ли заинтересует. А вот если эти термины, употребленные в одном контексте, не говорят вам в чем проблема диаграмм Ганта, то приглашаю под кат, где на простом примере мы это и обсудим.
Читать дальше →
Total votes 55: ↑51 and ↓4 +47
Comments 46

Разбор регулярных выражений

Reading time 1 min
Views 99K


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

Читать дальше →
Total votes 99: ↑94 and ↓5 +89
Comments 53

Локализация проектов на .NET с интерпретатором функций

Reading time 8 min
Views 15K

Пролог


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

  1. Сложность внедрения в существующий проект.
  2. Отсутствие средств форматирования локализованных сообщений (за исключением стандартного string.Format).
  3. Невозможность встраивания культурно-зависимых функций. Например, типичную задачу, — подстановку нужной формы слова в зависимости от значения числа, — одними словарями значений не разрешить.


Проанализировав эти проблемы, я пришел к выводу о необходимости создания собственной библиотеки для локализации проектов, которая будет лишена перечисленных выше недостатков. В этой статье я расскажу о принципах ее работы с примерами кода на C#.

Состав библиотеки


Ссылка на проект SourceForge: https://sourceforge.net/projects/open-genesis/?source=navbar

Пример: LocalizationViewer

В сборку входят следующие проекты:

  • Genesis.Localization — основная библиотека локализации.
  • Ru — реализация русской локализации (пример).
  • En — реализация английской локализации (пример).
  • LocalizationViewer — программа для демонстрации возможностей библиотеки с возможностью редактирования локализаций.

    image
Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 14

Information

Rating
Does not participate
Registered
Activity