Продолжая историю с шаблонами у меня наконец дошли руки до давно мною купленной книги "Рефакторинг с использованием шаблонов" Джошуя Кериевски.
Книга очень сильна по своей структуре напоминает книгу Фаулера о рефакторинге - те же перечисление различных рефакторингов вместе с правилами их применения и примерами. Все примеры, кстати, на java.
Коротко говоря книга представляет собой смешивание идей уже упомянутого Фаулера и банды четырех: как наиболее правильно улучшать проект, применяя шаблоны, и делая эта с помощью инструментов рефакторинга. Идея интересная, и в большинстве случаев, работает - разве что надо постоянно себя контролировать и отдергивать за руку, что бы не терять чувства меры.
Из плюсов отметил бы не плохие примеры использования TDD при разработки, сами примеры взяты из реальной практики и книга не затянута. Так же книга содержит вполне умеренные дозы UML. Из недостатков: раздела "механика" зачастую тривиальны и просто занимают кучу места не неся какой-то реальной пользы (впрочем тогда их можно просто пропускать).
В общем отличная книга - после Фаулера и Гаммы с Ко обязательна к прочтению.
воскресенье, 18 ноября 2012 г.
воскресенье, 11 ноября 2012 г.
Опять double
Недавно занимался проблемой кластеризации наборов объектов из нескольких разных источников. После написания первой версии алгоритма решил проверить алгоритмы на вшивость класторизовав данные от одного источника с самими собой. Понятно, что я рассчитывал 100% совпадение всех объектов и какого же было мое удивление когда из ~250 тысяч объектов не класторизованными оказались примерно 7 тысяч объектов. Чудеса. Принялся копать и искать волшебника.
Изучение логов прояснило ситуацию.
Одним из факторов при кластеризации является дистанция между объектами, вычисленная на основе долготы и широты. Код для этого дела широко распространен в интернете и выглядит примерно так:
И о чудо - тест проваливается - и отладчик показывает что расстояние между object1 и object2 равно NaN. Приплыли. Проход в дебаггере показал, что брался арккосинус от значения едва больше единицы (что-то в вроде 1.00000000002) что оказалось фатальным. Добавление
Изучение логов прояснило ситуацию.
Одним из факторов при кластеризации является дистанция между объектами, вычисленная на основе долготы и широты. Код для этого дела широко распространен в интернете и выглядит примерно так:
static private double distance(double lat1, double lon1, double lat2, double lon2) { double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515 * 1.609344; return dist; }Расстояние возвращается в километрах. Функция работает вполне себе нормально в большинстве случаев. Но логи подсказали написать вот такой волшебный тест:
@Test public void testEqualDistance2() throws Exception { SomeObject object1 = new SomeObject(); SomeObject object2 = new SomeObject(); double lat = 51.4902008376945; double lon = 4.28921666956459; object1.setLatitude(lat); object1.setLongitude(lon); object2.setLatitude(lat); object2.setLongitude(lon); System.out.println("Distance between " + object1 + " and " + object2 + ": " + object1.distance(object2) + " reverse=" + object2.distance(object1)); assertEquals(object2.distance(object1), 0.0, 0.00000001); }
И о чудо - тест проваливается - и отладчик показывает что расстояние между object1 и object2 равно NaN. Приплыли. Проход в дебаггере показал, что брался арккосинус от значения едва больше единицы (что-то в вроде 1.00000000002) что оказалось фатальным. Добавление
dist = Math.min(dist, 1);
перед 4 строкой спасло отца русской демократии и чудеса закончились.
Вывод - не верьте коду из интернета - пишите лучше сами, а если лень/некогда/не хочется - то уж хотя бы сделайте себе одолжение и прочитайте то что вы скопировали внимательно.
Вывод - не верьте коду из интернета - пишите лучше сами, а если лень/некогда/не хочется - то уж хотя бы сделайте себе одолжение и прочитайте то что вы скопировали внимательно.
воскресенье, 30 сентября 2012 г.
На кухне крутых кодеров
Второй книгой которую я взял с собой в отпуск была Кодеры за работой от Сейбела. Книга содержит 15 интервью с известными и очень известными программистами, которые написали в своей жизни что-то по настоящему "крутое". В книге довольно много интервью с "заслуженными" программистами, и даже парочка из них сейчас вообще отошла от всякого программирования и, например, разводят овец.
В целом книга уж точно как минимум заслужила 4 или даже 5 с минусом. Каждому программисту задается некоторый набор общих так и уникальных вопросов. Из общих вопросов выделяются просьба о рекомендации литературы обязательной к прочтению (и некоторые даже не могли ничего предложить, так как очень мало читают). Так же интересен вопрос про отношение к партерном - некоторые считают это "отрыжкой плохих языков" )).
Вообще очень сильный уклон в сторону довольно возрастных программистов из молодых выделяется разве что Брэд Фицпатрик, создатель livejournal. Вообще читая его интервью (ему тогда было 28 лет) увидел как много у таких успешных программистов зависит от таких вещей как программирование в школе, отношения родителей к компьютерам, встреча с правильными людьми, правильный университет и т.п. Кажется что в этом месте очень многое было мной упущено (как впрочем и у очень многих детей из бывшего СССР), но тут уже ничего не поделаешь, остается только пытаться все догнать уже сейчас.
В целом книга уж точно как минимум заслужила 4 или даже 5 с минусом. Каждому программисту задается некоторый набор общих так и уникальных вопросов. Из общих вопросов выделяются просьба о рекомендации литературы обязательной к прочтению (и некоторые даже не могли ничего предложить, так как очень мало читают). Так же интересен вопрос про отношение к партерном - некоторые считают это "отрыжкой плохих языков" )).
Вообще очень сильный уклон в сторону довольно возрастных программистов из молодых выделяется разве что Брэд Фицпатрик, создатель livejournal. Вообще читая его интервью (ему тогда было 28 лет) увидел как много у таких успешных программистов зависит от таких вещей как программирование в школе, отношения родителей к компьютерам, встреча с правильными людьми, правильный университет и т.п. Кажется что в этом месте очень многое было мной упущено (как впрочем и у очень многих детей из бывшего СССР), но тут уже ничего не поделаешь, остается только пытаться все догнать уже сейчас.
Как наконец выучить все эти паттерны
В отпуске взял с собой пару книжек по программированию что бы, валяясь на пляже, можно было бы с толком провести время. Одной из этих книжек была Паттерны проектирования от Фрименов.
Брал я эту книгу с некоторым скепсисом, так как уже читал одну книгу из этой серии (по objective с) и остался несколько разочарован. Книга описывает самые популярные паттерны проектирования в развлекательной манере с повторением одного и того же по несколько раз. Довольно много сравниваются похожие паттерны (например Стратегию и Состояние) что бы подчеркнуть их различия, что вообще говоря выглядит достаточно эффективно, как способ обучения.
В общем при внимательном прочтении (и если делать упражнения хотя бы в уме) книга позволяет очень хорошо освоить базовые паттерны, знать которых просто необходимо в современных условиях. До этого я читал книгу банды четырех и даже очень внимательно ее изучив так и не смог окончательно выучить основные вещи. После этой книги в голове все уложилось очень хорошо и вообще впечатление после прочтения остались просто отличные. И вывод в конце очень правильный - читать Паттерны проектирования как учебник и банду четырех как справочник. В общем если вы плаваете в паттернах самое время взяться за эту книгу.
Брал я эту книгу с некоторым скепсисом, так как уже читал одну книгу из этой серии (по objective с) и остался несколько разочарован. Книга описывает самые популярные паттерны проектирования в развлекательной манере с повторением одного и того же по несколько раз. Довольно много сравниваются похожие паттерны (например Стратегию и Состояние) что бы подчеркнуть их различия, что вообще говоря выглядит достаточно эффективно, как способ обучения.
В общем при внимательном прочтении (и если делать упражнения хотя бы в уме) книга позволяет очень хорошо освоить базовые паттерны, знать которых просто необходимо в современных условиях. До этого я читал книгу банды четырех и даже очень внимательно ее изучив так и не смог окончательно выучить основные вещи. После этой книги в голове все уложилось очень хорошо и вообще впечатление после прочтения остались просто отличные. И вывод в конце очень правильный - читать Паттерны проектирования как учебник и банду четырех как справочник. В общем если вы плаваете в паттернах самое время взяться за эту книгу.
О двухтомнике Core Java
Недавно производственная необходимость и просто любопытство подтолкнуло меня к написания продакшен систем на Java. Знакомство с этим новым для меня языком я решил начать с довольно известного в узких кругах двухтомника Core Java от Кея Хорстманна и Гари Корнелла.
Если в двух словах то книга мне очень понравилась - написано очень толково без лишней воды и ненужных отступлений. Кроме описания самого языка, довольно живого и без лишнего формализма, есть еще очень хорошее описание библиотек java (собственно весь второй и посвящен в основном работе с библиотеками). Особый бонус этих книг - многочисленные отсылки, прежде всего в первом томе, к языку С++ с обсуждением параллелей, общих мест и различий. Мне как старому С++ программеру это было очень полезно.
Первый том содержит описание языка и самый основы работы с библиотеками, а второй том содержит описание остальных частей библиотеки и различные тонкие моменты работы с языком (например, такие как безопасность).
Полезно было почти все, разве что работа с UI пока мне абсолютно не нужно и солидную часть его описание во втором томе я просто пропустил.
Отлично описано многопоточное программирование, потоки, коллекции, работа с XML, сетевого программирования, работой с JDBC - в общем всего что надо для написания уже вполне серьезных приложений.
В общем надо быстро освоить Java если ты хорошо знаком с С++ - Core Java совсем неплохой выбор.
вторник, 4 сентября 2012 г.
Развращенные Iдеей
У нас много и со вкусом пишут на IntelliJ Idea да и на прочих продуктах jetbrains (типа WebStorm, PyCharm и т.п.), благо лицензия позволяет.
С недавнего времени и я вступил в клуб активных пользователей данных продуктов - ну прежде всего идеи, но и PyCharm с AppCode уже успел пощупать.
Да продукт крутой, спору нет. Его магия по предсказанию того что ты хочешь сказать иногда просто завораживает и кажется что так просто не может быть - и иногда проскакивает мыслишка: "а как он вообще смог догадаться!?".
Но, совершенно случайно, знакомясь с новым для меня языком программирования и задавая всякие наивные вопросы более опытным по этим делам коллегам, я выяснил, что же, черт побери, это интеллектуальная идея творит?!
Невинный вопрос: если передать String в функцию и там ее поменять, то вызвавший код увидит изменения - т.е. значения передаются по значению или по ссылке? Ответ: эээ, мы так не делаем - не в курсе.. Вопрос решился после написания коротенького теста.
Дальше: Как правильно, то писать параметры шаблона функции
Pair<A, T>.of или может Pair.of<A, T> или все-таки так Pair.<A, T>of?! Ответ: хм, не знаю - идея говорит, что это тут лишнее - значения и так выведутся из параметров функции. Но все таки, как правильно то писать? Хм, ну давай попробуем вставить во все возможные места и поймаем момент когда идея перестанет подсвечивать красным. WTF?!
А может не стоит начинать сразу с идеи?! Возьмите старый добрый mcedit или может даже vi - просто ручками попишите старый добрый жава код. Ручками откомпилируйте его и протестирует. Уверен тогда будут приобретены сокровища неведомых знаний. И уж в конце, когда все станет совсем ясно и понятно можно запустить идею что бы писать код на пару порядков быстрее. Именно в таком порядке надо учиться и именно так правильно.
С недавнего времени и я вступил в клуб активных пользователей данных продуктов - ну прежде всего идеи, но и PyCharm с AppCode уже успел пощупать.
Да продукт крутой, спору нет. Его магия по предсказанию того что ты хочешь сказать иногда просто завораживает и кажется что так просто не может быть - и иногда проскакивает мыслишка: "а как он вообще смог догадаться!?".
Но, совершенно случайно, знакомясь с новым для меня языком программирования и задавая всякие наивные вопросы более опытным по этим делам коллегам, я выяснил, что же, черт побери, это интеллектуальная идея творит?!
Невинный вопрос: если передать String в функцию и там ее поменять, то вызвавший код увидит изменения - т.е. значения передаются по значению или по ссылке? Ответ: эээ, мы так не делаем - не в курсе.. Вопрос решился после написания коротенького теста.
Дальше: Как правильно, то писать параметры шаблона функции
Pair<A, T>
А может не стоит начинать сразу с идеи?! Возьмите старый добрый mcedit или может даже vi - просто ручками попишите старый добрый жава код. Ручками откомпилируйте его и протестирует. Уверен тогда будут приобретены сокровища неведомых знаний. И уж в конце, когда все станет совсем ясно и понятно можно запустить идею что бы писать код на пару порядков быстрее. Именно в таком порядке надо учиться и именно так правильно.
воскресенье, 5 августа 2012 г.
Тайм менеджмент и "Правила Джобса" от Кармина Галло
Недавно наша компания организовала для нас курсы по тайм менеджменту на пару дней. Вообще было интересно:
- сформулировали свою миссию (хм, для меня она все равно пока остается достаточно абстрактной)
- построили планы на 20 лет вперед (и они оказались у нас удивительно похожи)))
- поговорили про планирование
- обсудили среднесрочное и краткосрочное планирование
- построили пинарик (очень стимулирует - рекомендую)
- и изучили еще кучу всего интересного.
По завершению неожиданно для себя стал вести трекинг своего времени, планировать каждый день (с помощью жестких и гибких задач), и занялся поеданием одного очень большого "слона".
Через некоторое время мне в руки попалась книга "Правила Джобса" Кармина Галло.
Сама по себе книга на троечку - очень много воды и сомнительных примеров. Книга разделена на 7 частей исходя из 7 принципов которые, как бы, были взяты у Стива Джобса:
1. Делайте то, что любите.
2. Оставьте след во вселенной.
3. Встряхните ваше сознание.
4. Продавайте мечты, а не продукты.
5. Скажите "нет" тысяче вещей.
6. Создайте безумно великий опыт.
7. Овладейте посланием.
Так вот - тайм менеджмент это во многом про то, как понять что вы любите и выстроить свою жизнь так, что бы именно этим и заниматься..
- сформулировали свою миссию (хм, для меня она все равно пока остается достаточно абстрактной)
- построили планы на 20 лет вперед (и они оказались у нас удивительно похожи)))
- поговорили про планирование
- обсудили среднесрочное и краткосрочное планирование
- построили пинарик (очень стимулирует - рекомендую)
- и изучили еще кучу всего интересного.
По завершению неожиданно для себя стал вести трекинг своего времени, планировать каждый день (с помощью жестких и гибких задач), и занялся поеданием одного очень большого "слона".
Через некоторое время мне в руки попалась книга "Правила Джобса" Кармина Галло.
Сама по себе книга на троечку - очень много воды и сомнительных примеров. Книга разделена на 7 частей исходя из 7 принципов которые, как бы, были взяты у Стива Джобса:
1. Делайте то, что любите.
2. Оставьте след во вселенной.
3. Встряхните ваше сознание.
4. Продавайте мечты, а не продукты.
5. Скажите "нет" тысяче вещей.
6. Создайте безумно великий опыт.
7. Овладейте посланием.
Так вот - тайм менеджмент это во многом про то, как понять что вы любите и выстроить свою жизнь так, что бы именно этим и заниматься..
суббота, 5 мая 2012 г.
Отличная книга по майнингу
Недавно закончил читать первое издание Web Data Mining от Bing Liu и спешу поделиться впечатлениями.
Если вкратце, то книга отличная как введение в область дата майнинга. В ней отлично гармонируют (почти во всех главах) как теоретическая состовляющая так и практическая.
Теперь поподробнее. В книге освещены следующие темы:
- ассоциативные правила (очень хорошо описано, особенно априорный алгоритм)
- машинное обучение (с учителем, без и половинчатая) - все алгоритмы описаны достаточно подробно
- основные части поиска (достаточно беглый обзор): ранжирование, сбор, анализ линков и пользовательских кликов
- извлечение структуритрованной информации из дикого веба (в частности wrapper induction, multiple alignment)
- извлечение мнения из текста (естественно английского)
Все алгоритмы приведены на удобном псевдоязыке так что нет необходимости знать какой-то определенный ЯП. Английский язык простой. В первых главах автор даже приводит какие-то теоремы с доказательствами )).
В общем книга предлагает отличные теоретические базовые знания в этой области - за практическими же знаниями добро пожаловать сюда.
Если вкратце, то книга отличная как введение в область дата майнинга. В ней отлично гармонируют (почти во всех главах) как теоретическая состовляющая так и практическая.
Теперь поподробнее. В книге освещены следующие темы:
- ассоциативные правила (очень хорошо описано, особенно априорный алгоритм)
- машинное обучение (с учителем, без и половинчатая) - все алгоритмы описаны достаточно подробно
- основные части поиска (достаточно беглый обзор): ранжирование, сбор, анализ линков и пользовательских кликов
- извлечение структуритрованной информации из дикого веба (в частности wrapper induction, multiple alignment)
- извлечение мнения из текста (естественно английского)
Все алгоритмы приведены на удобном псевдоязыке так что нет необходимости знать какой-то определенный ЯП. Английский язык простой. В первых главах автор даже приводит какие-то теоремы с доказательствами )).
В общем книга предлагает отличные теоретические базовые знания в этой области - за практическими же знаниями добро пожаловать сюда.
понедельник, 9 апреля 2012 г.
Программируем Коллективный разум.
- байесовский классификатор
- деревья решений
- нейронные сети
- метод опорных векторов
- k-ближайших соседей
- кластеризация - иерархическая и методом k-средних
- многомерное шкалирование
- неотрицательная матричная факторизация
- оптимизация методом отжига и генетическим алгоритмом
- генетическое программирование
Книга написано в достаточно интересном стиле - в начале дается короткое введение в проблему, затем небольшой теоретический экскурс, за ним пример решения конкретной задачи по шагам и параллельно пишется решение алгоритма, а в конце решение другой задачи (возможно побольше) с помощью уже построенных функций. Все примеры на Python с активным привлечением сторонних библиотек и API различных сайтов. Сами примеры подобраны максимально жизненно, что добавляет чтению определенного перца. Вообще книга может так же служить отличным примером, и даже учебником, по использованию python (и вообще дин. языков) для быстрого прототипирования решений.
В главе 12 дается отличный обзор всех алгоритмов в компактном виде - для обзора это просто идеально. В приложениях можно найти описания используемых библиотек и мат. формул (довольно тривиальных, но освежить никогда не помешает).
В целом книга отличная - если хотите быстро разобраться с машинным обучением - самое то. И неожиданно хороша в качестве примера быстрой разработки на python.
воскресенье, 29 января 2012 г.
Планы на ближайшие месяцы
Меня на работе попросили описать свои планы личного (около рабочего) развития. Обычно у меня довольно много всяких подобных планов (не все из которых, к сожалению, реализуются), но формализовать и рассказать их кому то еще кажется хорошей идеей. Итак начнем:
1. Расширить свои теоретические познания в области data mining. В списке сейчас 3 книги:
- Web Data Mining от Bing Liu (прочитано 70%). Отличное введение в майнинг и поисковые технологии
- Программируем коллективный разум отТоби Сегаран (просчитано 10%). Книга с практическим уклоном с периметрами на python.
- Введение в информационный поиск от Маннинга и компания. Чем то похоже на первую книгу - читать пока не начал.
2. Написать свое первое приложение для iOS и выложить в стор. Кажется что это будет очень интересно - во всяком случае первые впечатления от документации Apple оставили очень принятые впечатления. Objective C пока кажется несколько странным, но посмотрим...
3. Углубить знания в области Python. Все скрип ты писать исключительно на нем (вместо Perl) и изучить недавно купленный справочник по сему очень интересному языку.
Из планов которые находятся во второй очереди по приоритетам:
4. Продолжать изучать Java.
- дочитать двухтомник Хортсманна Java 2 (первый почитан на 80%)
- продолжить изучение IntellyJ IDE
- возможно достанется какой-то проект на нем что-бы по практиковаться
5. Попасть на конференцию по интересующим сейчас тематикам (C++, mining, high load computations, iOS).
6. Попробовать реанимировать изучение English - перед этим придется найти стимул для этого.
7. Дождаться ту пару книжек по boost которые я заказал и прочитать их.
Уф, ну вроде на ближайшие 3-4 месяца интересных занятий мне хватит.
понедельник, 23 января 2012 г.
wiki и производительность труда
Совершенно случайно открыл для себя удивительно продуктивный способ увеличить КПД на работе.
Небольшое вступление. У нас в процессе работы активно используется wiki для очень многих вещей - описание продуктов, процессов, задач, планов и т.п. Эта wiki достаточно продвинута - например можно написать:
с кем:логин
и в итоге это, при просмотре, преобразуется в
c Васей Пупкиным.
Или можно напсать номер тикета из jira:
MINIVERTIS-12
и он преобразуется в
MINIVERTIS-12[ --Создание очередной поделки-- ]( логин ).
Естественно поддерживаются всякие подсветки синтаксиса, списки, таблицы, автоматическое оглавление и т.п.
Так вот, все это очень удобно применять для протоколирования своей деятельности за день - какие тикеты закрыл, что почитал, с кем говорил, кому проиграл в настольный теннис ;). Например вот такой у меня получился лог за несколько дней:
(естественно все логины изменены). В результыте имею такую выдачу:
Небольшое вступление. У нас в процессе работы активно используется wiki для очень многих вещей - описание продуктов, процессов, задач, планов и т.п. Эта wiki достаточно продвинута - например можно написать:
с кем:логин
и в итоге это, при просмотре, преобразуется в
c Васей Пупкиным.
Или можно напсать номер тикета из jira:
MINIVERTIS-12
и он преобразуется в
MINIVERTIS-12[ --Создание очередной поделки-- ]( логин ).
Естественно поддерживаются всякие подсветки синтаксиса, списки, таблицы, автоматическое оглавление и т.п.
Так вот, все это очень удобно применять для протоколирования своей деятельности за день - какие тикеты закрыл, что почитал, с кем говорил, кому проиграл в настольный теннис ;). Например вот такой у меня получился лог за несколько дней:
=== 19* разбирался с проблемами индексации в работе. Такая конфигурация работает, но надо доп. проверки:%%common_title : job_name,company_name_ : _%%* работал над MINIVERTIS-12 - релевантность уже прокидывается в protobuf. Осталось получить неплохое число для него* помогал кому:логин с пакетом для тезауруса* совещался с кем:1, кем:2, кем:3 по поводу нового проекта спецсниппетов для законов. Пока больше вопросов чем ответов. Точно придутся поднимать бету среднего. Свой визард. Возможно даже базовый.=== 20* говорил с кем:логин1 - он будет помогать нам встраиваться в бленднер. Запросил для него права.* совещался с кем:1, кем:2, кем:3, кем:4, кем:5 по поводу законов. с меня json после получ. тикета от Лены. prewalrus сильно менять не надо будет.* хурал. скоро релиз дин. аттрибутов* говорыл с кем:6 - обещал все на след. недели* подготовил серп для постройки идеальной выдачи* почти готов MINIVERTIS-12 - остались мелкие штрихи=== 23* готов MINIVERTIS-12 - выкачен на сервер* консультировал кого:логин по поводу работы с dsindexer* подробоно отвечал на вопросы Сегаловича по сервису поиска по мобильным приложениям* переделал серп для идеальной выдачи
(естественно все логины изменены). В результыте имею такую выдачу:
Все получается очень быстро и красиво. И самое главное - это все позволяет мне теперь успевать в день сделать намного больше вещей чем я делал раньше. Так что все советую - наверняка можно найти кучу удобных инструментов для этого дела, даже если у вас на работе нет такой продвинутой вики.
понедельник, 16 января 2012 г.
Emacs и style guide
У нас на работе для части (основной) С++ кода поменялся style guide - добавлися pre-commit hook, который запрещает коммитить файлы, в которых есть пробелы в конце строки. Оказалось что в моем любимом emacs справиться с данной напастью оказалось очень легко. Помог отличный пакет
show-wspace, который уже был установлен. Осталось только добавить строку
и вуаля - все проблемные строки сразу подсвечиваются.
Все настройки для emacs можно найти тут:
emacs-configuration (сам файл для посдветки пробелов находится тут: ai/colorize.el
up.
Как мне напомнили в комментах (спасибо Ваня!) можно еще автоматически удалять пробелы при сохранении файла. Сделать это только для С/С++ режима можно так:
show-wspace, который уже был установлен. Осталось только добавить строку
(add-hook 'c-mode-common-hook 'show-ws-highlight-trailing-whitespace)
и вуаля - все проблемные строки сразу подсвечиваются.
Все настройки для emacs можно найти тут:
emacs-configuration (сам файл для посдветки пробелов находится тут: ai/colorize.el
up.
Как мне напомнили в комментах (спасибо Ваня!) можно еще автоматически удалять пробелы при сохранении файла. Сделать это только для С/С++ режима можно так:
(add-hook 'c-mode-common-hook(lambda()(add-hook 'local-write-file-hooks'(lambda()(save-excursion(delete-trailing-whitespace))))))
воскресенье, 15 января 2012 г.
Новый способ ведения блога
Купил BlogPress для iPad - вроде на первый взгляд удобно. Будем надеяться, что это поможет реанимировать блог - благо многое прочитал и многое написал - есть что рассказать. Всех с наступившим НГ!
Подписаться на:
Сообщения (Atom)