среда, 30 мая 2012 г.

Уязвимости на сайтах

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

Вывод: если что-то может сломаться, оно обязательно сломается. Если что-то может пойти не так, это обязательно случится. Рассматривайте все детали.

воскресенье, 27 мая 2012 г.

Как завоевать мир?

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

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

На самом деле все просто - мы уже ничего сами не решаем. Мы привыкли делать то, что нам говорят вместо того, что нам нужно делать. Если мы не довольны, мы не пытаемся изменить ситуацию, мы недовольные подстраиваемся под нее.

- А почему выход из Ада не сторожат? 
- Здесь русские. Они сами друг друга не выпустят
Отрывок из анекдота

Простейший пример: человеку нужно делать стулья из материалов. Но у него неудобный рабочий инструмент. Работодатель недоумевает, почему у него такой маленький КПД. Но наш бравый человек молчит, выслушивает злобные ворчания, вместо того, чтобы получить нормальный инструмент и со скороcтью кролика создавать нужные ему айтемы из ничего. Он знает проблему - но не ищет пути выхода из нее.

Вернемся к нашему детству. Почему ребенок с завышенным ЧСВ считает, что у него все получится, что он станет тем, кто является для него примером и не видит преград в осуществлении своей мечты? Да потому что он верит, что ресурсы у него(ну и у родителей тоже) бесконечны, что у мамы есть бесконечное(в детстве эту величину еще можно было представить) количество денег на мороженое и единственная проблема - это договориться с людьми, которые тебя окружают, чтобы они тебя научили, объяснили, дали, подарили(вставить нужное слово). Так почему теперь мы начинаем оценивать себя приниженными, ставим себе глупые, а зачастую и материальные грани, и думаем, что наше счастье кто-то нам принесет? Надо счастья добиваться!

вторник, 27 марта 2012 г.

Два маленьких факта

Факт №1: с улыбающимися людьми легче разговаривать, идти на контакт.
Факт №2: выделенный текст бросается на глаза, следовательно, лучше запоминается

четверг, 9 февраля 2012 г.

Сначала думать, потом делать

Вчера я ужаснулся от кода, который я написал часом ранее. Не, если бы это была одна функция из сотни, которая не слишком часто вызывается, то я даже смотреть на это не смотрел. Но данный участок кода будет выполняться много раз на девайсе с ограниченными ресурсами(это я про мобильники).

среда, 8 февраля 2012 г.

работа со строками в objective c

Всем известно, что objective c является надмножеством старого доброго С.

Что это может значить для разработчика? Это значит, что язык взял свойства языка-предка, добавил туда свои фичи,  постарался исправить свои недочеты и вуаля! Новый мега-понтовый язык уже готов. Стойте, я сказал недочеты? Да, недочеты. Это, блин, все равно, что взять черную ладу, покрасить в белый свет, поставить туда значок мерседеса и надеяться, что он вдруг станет белым мерином.

Вот простейший пример: есть алфавит, преимущественно латинский, но с добавлением новых букв типа буквы ı (читается как русская ы). Есть правила преобразования, к примеру, предыдущая буква должна трансформироваться в старую добрую i. Дана строка, даны правила преобразования, нужно написать функцию, возвращающую преобразованную строку.

Казалось бы, что проще:

string ret = "";
for (int i = 0; i < str.length; ++i) {
  char ch = str[i];
//тут правила преобразования
  if (ch == 'ı') {
    ch = 'i';
  }
 ret += ch;
}

return ret;

ну... примерно так должна выглядеть функция на шарпах(почти символ в символ в джаве). Да, его нужно выписать в функцию, выписать правила преобразования в отдельную структуру данных, но дело не в этом.

Код вполне себе читабелен, не нужно писать поэму, чтобы объяснить компилятору, что ты хочешь сделать.


Строки в сях всегда таили в своих глубинах подводные камни, таким же образом они перекочевали в виде новых фич в objective c.
Перед тем, как я покажу код на языке яблочников, я объясню, в чем будет различие в плане реализации.

  1. Самое главное отличие - это юникодные char-ы. Если чары в джаве уже юникодные  и никаких проблем с сравниванием у нас нет, то в сях == мы уже не можем поставить. Хотя поставить-то поставим, только никакой гарантии, что будет работать, у нас нет.
  2. В objective С к NSMutableString можно добавлять только NSString! Чуваки, на дворе 21 век, почему я должен писать много кода, чтобы попросту работать со строками? Я как ленивый человек, стараюсь делать как можно телодвижений для достижения своей цели и никак не считаю это своим недостатком. Разве сложно предоставить хотя бы аналог stl-ных строк? Слава богу, хотя бы метод appendFormat оставили.
Ну соответсвено, сам код:

    NSMutableString* str = [[NSMutableString alloc] init];
    NSUInteger len = [word length];
    NSUInteger i;

    for (i = 0;i < len; ++i) {
        unichar ch = [word characterAtIndex:i];
          if (ch == 'i') // тут правила, я устал копипастить эту букву
           ch = 'i';
           [str appendFormat:@"%c", &ch];
        }

     return str;


Хотя согласен, переборщил с негативом. Код не так уж сильно и пахнет, надо только привыкнуть писать под него. Кто знает, как бороться с unicode char-ами?

вторник, 7 февраля 2012 г.

айфон или айпад

Очень часто(ну для меня ну очень часто) становится нужно определять, под айпад или айфон пишешь: заточить размеры гуи, контролы поменять и т.д. и т.п.

Сегодня натолкнулся на очень полезный дефайн:


#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

Скучаю по дефайнам и тайпдефам в джаве

А вообще, очень вредно писать код "для всего". Чем больше пишется кода, тем больше приходится делать хаков, чтобы это работало одинаково везде. Так что, compile once, run everywhere - всего лишь слоган астронавтов.

воскресенье, 6 февраля 2011 г.

что можно сделать с cd дисками? (выкидывать не хочется, а использовать по назначению все равно не буду)

что можно сделать с cd дисками? (выкидывать не хочется, а использовать по назначению все равно не буду)

Answer here