Советы

Advice for new programmers?

сен 25, 17:28

Иногда на реддите появляются отличные комментарии:

Want to learn programming, kids? Read a fucking manual. Read some fucking source code. Type on a fucking keyboard. Read ANOTHER fucking manual. Use a fucking search engine. Solve problems!!! Lots of them! Anybody in any engineering discipline loves to solve problems just as much as they love to fuck, or they’re in the wrong line of work. If that sounds too hard, here’s a shovel – ditch-digging is a growing employment opportunity.

Комментарии [1]

---

про полезные привычки (vim, firefox и по жизни)

фев 21, 18:16

Посмотрел недавно видео с Google TechTalk. Видео было про эффективное пользование текстовым редактором. Если быть точнее, редактором Vim. Это такой маньяческий редактор. Если вы не знаете, что это такое, не читайте дальше, выключите компьютер и ложитесь спать.

Суть выступления сводилась к тому, что мы очень часто пользуемся текстовым редактором. И очень часто пользуемся им не совсем эффективно. Всегда существует какая вещь, которая отнимает у нас время. Это может быть поиск слова, исправление опечаток, набор одного и того же длинного слова и так далее. Автор предлагает избавляться от таких вещей. И для этого приводит простой алгоритм:

  1. Найти узкое место — те моменты, на которые мы тратим больше всего времени.
  2. Задать себе вопрос, как я могу делать это быстрее, проще и с меньшим нажатием клавиш? И найти на него ответ. Да, такое бывает. Другими словами, открыть интернет, почитать форумы, спросить у друга и найти этот чертов ответ.
  3. Сделать из ответа привычку, и пользоваться ей.

Первый пример (всего их в презентации было семь, но я ограничусь одним) касался проблемы поиска слова. Допустим нам нужно найти все места, где встречается какая-нибудь переменная «argc». Разберем этот случай по вышеприведенному алгоритму.

Для начала, что мы обычно в этом случае делаем?

Я пишу «/argc» и нажимаю «n» нужное мне количество раз, как и большинство других пользователей.

Какие проблемы с этим могут возникнуть?

Я должен вводить имя переменной. А оно не всегда бывает коротким. К тому же я могу это имя неправильно напечатать. И тогда мне придется исправлять ошибку или печатать заново. Плюс мне еще нужно нажимать некоторое количество раз «n» или «Shift-n», чтобы пройтись по всем найденным словам.

Как это можно сделать быстрее?

Для этого естественно нужно просмотреть справочное руководство или заглянуть в книгу, но оно того стоит. Допустим, мы спросили у друга и он нам подсказал:

  1. Cделать «:set hlsearch». Эта опция подсвечивает все найденные слова или фразы.
  2. Вместо того, чтобы вводить слово для поиска, можно навести на необходимое слово курсор и нажать *. Команда * («звездочка») ищет по слову, которое находиться под курсором (за подробностями «:help *»).

Как это сделать привычкой?

  1. Вынести «set hlsearch» в свой конфигурационный файл. Это значит не полениться, а открыть /usr/share/vim/vimrc и сделать это.
  2. Использовать команду «звездочка» всегда и везде. Так использовать, что если вам придется искать что-либо в Ворде, ваша рука должна сама истерически бить по этой самой «звездочке» пока Ворд не повиснет от очередного memory leak или какого-нибудь stack overflow.

На этом все. Такой вот небольшой и поучительный пример. И таких примеров очень много. И дело не ограничивается только Вимом. Взять тот же Firefox.

Сколько раз вы тянулись мышкой в угол экрана, чтобы найти что-нибудь в Гугле? Ctrl+K и этого можно больше не делать.

А чтобы ввести новый адрес? Ctrl+L там же рядом находится.

А сколько раз тянулись мышкой на кнопку «Назад» или «Вперед»? Alt-«Cтрелка влево» и Alt-«Cтрелка вправо».

Сколько раз мышкой вы разворачивали на полный экран открытое терминальное окно с Midnight Commander. F11.

Таких примеров много. И, в конце концов, это some sort of fun. Насколько быстро ты можешь сделать то, что у большинства отнимает лишнее время. Попробуйте, может и вам понравится.

P.S. Кстати, та презентация называлась «Семь полезных привычек по эффективному использованию Vim». И седьмой привычкой была некоторая мета-привычка по вырабатыванию полезных привычек. Ага, представьте себе, таки-да. В общем, ищите, учитесь и получайте от этого удовольствие)

Комментарии [2]

---

Почему читать Гугл Ридер каждый день вредно?

дек 13, 12:44

“Мудрый человек слушает смысл, а дурак — только шум”
(Нассим Талеб)

“…поглощение бессмысленной информации сокращает жизнь — я имею в виду не количество прожитых лет, а ее субъективную протяженность” (Виктор Пелевин)

Начало начал

Толчком к написанию этого поста стал мой твит со следующим содержанием:

Читать Гугл Ридер каждый день вредно. Есть математическое доказательство.

Пользователь @pzskc383 попросил его привести:

@iobit покажи или не было

Что же делать – нужно показывать.

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

Да, кстати, я не буду выдавать чужие мысли за свои. И по-этому честно признаюсь, что до этого додумался довольно умным математик и финансовый трейдер по совместительству Нассим Талеб в своей книге “Одураченные случайностью” (если кому-нибудь нужно, могу выложить в свободный доступ электронный вариант).

Show is started

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

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

Мы, проанализировав его инвестиции, может с высоты птичьего полета сказать, что они соответствуют таким вероятностям делания денег за определенный период:

  • 93% — 1 год
  • 77% — 1 квартал
  • 67% — 1 месяц
  • 54% — 1 день
  • 51% — 1 час
  • 50.17% — 1 минута
  • 50.02% — 1 секунда

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

Но человек не может чувствовать радость или горе в процентах. Если вам скажут, что вероятность того, что вы умрете приблизительно равна 30%, то вы не будете чувствовать себе в безопасности на 70%, и боятся за свою жизнь на 30%. Либо одно, либо другое в каждую секунду времени. То же самое происходит и с нашим дантистом:

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

Если проводить поминутную экспертизу каждый день по 8 часов наш человек будет иметь 241 радостную минуту против 239 нерадостных. В год 60.688 и 60.271 соответственно. Но нерадостная минута эмоционально хуже, и следовательно дантист с течением времени будут испытывать эмоциональный дефицит.

Если же рассматривать помесячную проверку, результат будет не таким плохим. Так как 67% положительны, мы имеем муки боли только 4 раза в годи и 8 раз – удовлетворение.

Это – тот же cамый дантист, следующий той же самой cтратегии.

Если брать период в один год, то получим, что за 20 лет своей жизни, этот человек испытает 19 раз приятные переживание на одно неприятное.

Выводы этой истории

  1. По короткому периоду времени можно видеть изменение, но не сам результат. В лучшем случае комбинацию изменения и результат, но не сам результат.
  2. Наши эмоции не предназначены, чтобы понимать предмет. Для нашего дантиста было бы лучше, если бы он ограничивал себя ежегодными отчетами, но чаще всего он этого не понимает.

Идем дальше

Тот же метод может показать нам почему читать еженедельный журнал полезнее, чем открывать газету каждый день. Коэффициент шума, который содержит в себе ежедневные издания газеты “Правда” за 10 летный период значительно больше, чем несколько глав из учебника истории, посвященному этому периоду. Это лежит на поверхности и очевидно.

Та же самая история происходит и с Гугл Ридером. РСС-подписки на новостные сайты – это идеальные тайм-киллеры. К тому же и идеальные источники эмоционального истощения. Попытки следить за ними каждый день не приносят ничего кроме расстройства при виде 1000+ рядом с названием подписки.

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

Выход

Конечно, я вред ли откажусь от того же Хабра или девелоперс.орг.уа, но я против чтения этих сайтов каждый день по РСС. Это и по причинам, описанным выше, но также и потому что посещения новостного ресурса в браузере – гораздо приятнее, разнообразнее и красивее (хотя бы по сравнению с тем же Гугл Ридером). За одно такое посещение можно составить мнение о материалах на этом сайте за несколько недель (если материалы интересны, естественно).

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

Комментарии [4]

---

Tips 5: как грамотно заливать музыку на ipod touch с помощью itunes

ноя 24, 21:49

Все знают, что на ИПод заливать музыку нужно только через прекрасную программу iTunes. Не будем вспоминать про красноглазных линуксоидов, пока.

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

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

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

Точнее не придумал. Это все было давно реализовано умными людьми.

В общем-то, здесь все 3 момента, которые нужно запомнить при создание плейлиста:

  1. Нужно добавить одно поле, которые будет определяющим. Здесь можно выбрать по жанру. Для меня было удобно создать отдельный простой плейлист с названием “ipod touch”, в который вручную добавлять песенки. В смарт-листе я говорю, что мне нужны все песенки из этого списка.
  2. Сделать ограничение. Для этого чекнуть “Макс”, в текстовом поле ввести определенный для музыки размер пространства, выбрать Гб или Мб. Так мы будем точно уверены, что на наш Ипод все влезет.
  3. Поставить галку на “Оперативное обновление”. Чтобы список обновлялся автоматически по мере появления новых песен.

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

Комментарии

---

Tips 4 (загрузить сайт полностью с помощью wget)

ноя 9, 13:34

Иногда хочется просмотреть какой-нибудь сайт офлайн. Например, тоже ководство Лебедева.

Под Виндовсом в этом случае пользуются сторонними программами. Самая популярная из них – Teleport Pro, которая, кстати, платная.

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


wget --recursive --no-clobber --page-requisites --html-extension
--convert-links --restrict-file-names=windows --domains example.com
--no-parent www.example.com/site

где

  • recursive — загружать рекурсивно весь сайт
  • no-clobber — не перезаписывать существующие файлы
  • page-requisites — загружать изображения, CSS и так далее
  • html-extension — сохранять файлы с расширением .html
  • convert-links — изменять ссылки таким образом, чтобы по ним можно было пройтись локально
  • restrict-file-names=windows — имена файлы должны быть совместимы с Виндовс
  • domains example.com — загружаемые страницы принадлежат домену example.com
  • no-parent — не загружать родительские страницы
  • www.example.com/site — имя ресурса в сети

Комментарии

---

Tips 3 (redirect в PHP trick)

ноя 4, 09:08

Для того, чтобы перенаправить пользователя на другой URL следует вызвать функцию header() и передать туда Location примерно таким образом:


<?php
  header("Location: http://www.php.net");    
?>

Иногда за такие дела можно получить ошибку Warning: Cannot modify header information – headers already sent by тра-та-та. Это значит, что уже были посланы кое-какие данные и хедеры слать теперь поздно.

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


<?php
 ob_start();
 echo "Test";
 header("Location: http://www.php.net");
 ob_flush();
?>

завершится без ошибки и все будет Ок.

Комментарии

---

про лайфхак

ноя 3, 09:32

Сначала про Чака Паланика. Не буду говорить, про то хорошо или плохо у него там написано. Я о другом. Есть у него роман “Уцелевший”, в котором спокойно повествуется про одного задрота.

Хотя нет. Для начала нужно вставить любую картинку. Пусть это будет Игги Поп:

Итак про задрота. Этот задрод рос в какой-то сельской общине. И смыслом его существования было выучиться на хаус-кипера, чтобы убирать, стирать, выводить пятна, чистить камины и так далее. И по всей книги разбросаны советы, такие себе короткие howto по делам домоводства. Что-то похожее на:

Чтобы удалить кровь с клавиш пианино, почисти их порошком талька или сухим молоком.

Спроси, как быстро скрыть пулевые отверстия в стене гостиной. Ответ: зубная паста. Для отверстий большего калибра добавь к пасте в равных долях крахмал и соль.

И в таком духе. В общем, вот это для меня почему-то и всегда было лайфхаком. А про то, что пишут Lifehacker почему-то нет.

И вот с ходу несколько таких лайфхаков, которые понравились лично мне:

  • Встретил в книге Ричарда Феймана:

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

  • Не помню кто сказал. Чтобы заставить себе не смеятся, нужно прижать язык к вернему небу. В таком положении смех не возможен.
  • Из статьи про бритье. Наносить крем для бритья следует с подбородка, где растет самая жесткая щетина. За время когда вы побреете обе щеки, крем успеет лучше смягчить жесткие волосы и бриться станет не так неприятно.

Что-то наверное все равно забыл. Но как-то вот так.

Комментарии

---

как нанести рисунок на футболку

окт 28, 16:50

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

Нашел ссылку, по которой можно посмотреть (возможно и самому попробовать) как нанести рисунок на футболку.

Когда-то я подумал, что мне это пригодиться. Время сказало нет. А может быть все еще изменится. Не знаю, не знаю.

Комментарии

---

Tips 2 (501 5.0.0 HELO requires domain address - JavaMail exp)

окт 27, 15:20

Продолжу начатое .

Проблема возникла при использовании JavaMail. Как бы все замечательно. У нас есть прекрасное API для отправки и приема почты, но однажды ваш компилятор сообщает вам: “501 5.0.0 HELO requires domain address” и все тут.

Ошибка чаще всего возникает на машинах под Линуксом и связана она с трансляции IP вашего компьютера в доменное имя.

Лечется элементарно. Следует лишь добавить соответствующую строку в файл /etc/hosts

Выглядит эта строка примерно так:

127.0.0.1 localhost

где localhost – ваш хостнейм, узнать которой можно комадной сat /etc/hostname

Запускаете проект и все работает.

PS: Кстати, добавление правильного хостнейма в файл hosts лечит и другую ошибку: Unknow hostname или Can’t resolve host for xxx.com, не помню. Причиной такой беды может быть апдейт Убунты, как в моем случае.

Комментарии

---

Tips 1 (response.sendRedirect() в jsp)

окт 22, 11:48

Короткое предисловие

Бывают такие ситуации, когда что-то (чаща всего простая мелочь) отказывается работать. В таком случае можно биться головой об стену, листать прошлогодние учебники, но в наше время люди поголовно лезут в интернет. Как тут не вспомнить “Don’t google, Moss. Don’t google, Moss” из сериала “IT Crowd”.

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

Содержание

Первый такая проблема: “response.sendRedirect() не работает в jsp”.

Ситуация такова – есть у нас следующей пример псевдо-jsp кода:


<%
if (!isLoged) {
   response.sendRedirect("login.jsp");
}
User user = session.getAttribute("id");
user.setEmail = (bla-bla-bla);
(bla-bla-bla)
(дальше пошли куски кода в скриплете)
...
%>

В случае если строка с редеректом будет последней в скриплете, все будет нормально. Но из-за того, что дальше идет код, никакого return не происходит (такое возможно, кстати, и в случае всяких проверок if-else) sendRedirect() ничего не делает и вы остаетесь со своей любимой страницей наедине.

Выход из этой ситуации – сделать return вручную. Т.е. пишем:


<%
if (!isLoged) {
   response.sendRedirect("login.jsp");
   return; //Вот оно
}
User user = session.getAttribute("id");
user.setEmail = (bla-bla-bla);
(bla-bla-bla)
(дальше пошли куски кода в скриплете)
...
%>

И все работает.

Комментарии

---