С некоторых пор я начал покупать электронные книги на литресе, когда перед Новым годом в Макдональдсе выиграл бесплатную книгу. Про эксперименты с краудфандингом литературы читал и ранее, Лукьяненко так делал с одним из дозоров, но разочаровался, потому как мало собрал, и призвал взамен покупать в магазинах типа того же литреса. Хоть они и гребут себе немало, но так авторам перепадает хоть что-то, а это лучше, чем ноль.
Тем не менее, я придерживаюсь правила проверять, жив ли ещё автор, потому как если не, то всё вознаграждение уходит либо в карман правоторговцам, либо наследникам автора, которые, по моему глубокому, хоть и, возможно, непопулярному убеждению, не имеют права почивать на лаврах талантливого предка. Так что если автор в состоянии получить процент от моего платежа, и если бесплатный фрагмент (25% книги обычно) интересен, я покупаю. Кроме очистки совести это даёт ещё и некоторую гарантию того, что книга будет дочитана, а не удалена.
Водород располагается в той же первой группе, что и щелочные металлы (литий, натрий, калий и т.д.), поэтому при большом давлении он проявляет те же металлические свойства. А гелий, будучи всего на один протон тяжелее, наоборот, занимает последнюю 18-ю группу, где находятся инертные газы. Такой парадокс.
Легковесные клиенты есть и для биткоина, они работают по SPV протоколу. Например, MultibitHD, Electrum или Simple Bitcoin Wallet. Мобильный клиент тоже работает по SPV, проверяются только хэши блоков, а содержимое загружается только для тех, где есть транзакции с вашими адресами. Выборка анонимизируется с помощью фильтра Блума, т.е. клиент не отсылает напрямую адреса, в которых заинтересован, а просит присылать транзакции, подходящие под фильтр, что даёт небольшой процент лишних транзакций. На планшете/телефоне блокчейн синхронизируется за считанные минуты после установки клиента. На десктопе это может занять сутки запросто, но может, SSD даст некоторый ощутимый выигрыш.
Ещё бывает, что надо посчитать сумму чего-либо. Посчитал, положил в переменную sum. Позже выяснилось™, что таких сумм может быть несколько, и их общая сумма тоже нужна. Ну ладно, вот вам переменная total. После третьего уровня суммирования становится несмешно, и появляется необходимость упорядочить этот зоопарк сложения, и здесь будет, наверно, правильным переименовать безликие переменные во что-то определённое, типа totalWares, totalInvoices и прочее.
Но всё же, если архитектура подожмёт, лучше иметь такое средство, чем не иметь, не так ли? Бывают и другие случаи. Например, поскольку английский язык мне не родной, я могу неправильно выбрать слово для названия переменной или функции. Особенно, когда речь идёт о бухгалтерских приложениях и прочем матучёте. Живой пример: как назвать уволенного работника? Exempted? Fired off? Discharged? Dismissed? Released? Масса вариантов. В большой команде наверняка есть специально обученные люди, которые дадут однозначный и верный ответ на этот вопрос, и ответ будет записан в глоссарий, которым потом другие будут пользоваться. Так получилось, что я пишу софт один, с недавнего времени, вдвоём. Когда кода много, можно запросто в одном месте использовать одно слово, а в другом другое, и всё это будет выглядеть запутанно и плохо. Или же наступит такой день, когда сей вопрос для меня полностью прояснится, и тогда будет правильно переименовать все функции и переменные как положено. Когда в проекте 10-15к строк, провернуть такую операцию без особого риска причинить collateral damage в коде не так-то легко, даже если используется IDE. Но она, по крайней мере, может сильно уменьшить количество ручных правок.
По-моему, это уже более фундаментальная проблема индустрии, смешивание разнородных технологий и платформ. Некоторые называют это «каждой задаче свой инструмент», но если под задачей понимать слишком маленький юнит работы, получается вот такая солянка из пяти разных языков и парадигм. Зато если во всём этом разбираться, можно стать незаменимым и ценным сотрудником…
Для себя, как уже написал выше, я решил проблему использованием GWT, но понятно, что чаще всего, в случае коммерческой разработки в более-менее долгоживущей компании, выбор уже сделали за вас.
Да, набор возможностей выглядит неплохо. Но отсутствие коммитов с марта настораживает, да и рефакторинг возможен лишь на уровне переименования и вытаскивания классов. Тем не менее, инициатива хорошая, и получилось что-то явно более продвинутое, чем обычный плагин для подсветки синтаксиса.
Бывает, функция оказалась названа неудачно. Банальная малозаметная опечатка, либо же функциональность немного изменилась/расширилась в процессе разработки. Такое случается, и лазить с грепом по всему коду не всегда оказывается продуктивно. Или были две функции с одинаковым именем (например, add), но разными аргументами, на какой-то стадии разработки стало ясно, что их поведение теперь значительно отличается (одна стала более интуитивно понятна как insert). Переименовать одну, не затронув другую, без IDE затруднительно.
Похоже, этот плагин:
1) Windows-only. http://insenvim.sourceforge.net/portlinux.htm — тут, в сломанном HTML, можно прочитать: «We don't have for Linux, but want to port. It
may be tough, but any help is appreciated.». Увы.
2) Не обновлялся с 2006 года, уже 10 лет.
Боюсь, даже если он заведётся и будет работать с современным вимом, вряд ли там будет поддержка возможностей языков, которые они получили за последние 10 лет. А у Java уже две версии как минимум вышли…
Не пишу на JS, использую GWT, он пишет за меня. Разумеется, всё это очень субъективно. Например, в JS провести рефакторинг автоматически вряд ли возможно в принципе, так что тут и обычного редактора хватит. Слишком уж динамический язык. Зато поддержка удобного и быстрого деплоя и хорошая работа с DVCS будет плюсом. Хотя опять же, я ничего более функционального, чем EGit в Eclipse, пока не встречал. Git-Cola больше всех к нему приблизилась, но возможности ручного редактирования индекса в ней нет, к сожалению, да и push часто виснет намертво. Изредка бывает надо закоммитить что-то, чего нет в рабочей копии.
В целом же, после обвешивания плагинами Vim/Sublime/Emacs получится та же IDE. Не факт даже, что более быстрая при той же функциональности, а скорее всего, менее функциональная, и причины этого я уже описал. Так что стоит ли овчинка выделки, каждый решает сам.
На мой взгляд, основная проблема использования Vim/Emacs вместо IDE в том, что они не понимают язык, с которым работает программист. Для редактора это всего лишь текст, он не понимает функции, не понимает синтаксис, не может вывести типы и подсказать параметры для конструктора или метода. Один этот печальный факт для меня перечёркивает все остальные достоинства. Да, Vim быстрый, удобный (если привыкнуть), есть масса плагинов для всего на свете, как и у емакса, подсветка синтаксиса и прочее. Но когда поработаешь достаточно долго в Eclipse или Qt Creator, понимаешь, сколько времени и сил может сэкономить умная IDE.
Например, помимо уже упомянутого переименования с учётом контекста (переменная i превращается в counter только в текущей области видимости, а не по всему коду), и в Eclipse CDT, и в Qt Creator можно выделить фрагмент кода и вырезать его в отдельную функцию. При этом IDE автоматически выведет необходимые параметры для функции и даст им имена, а также выведет тип возвращаемого значения, на месте же фрагмента кода появится вызов новой функции со всеми нужными параметрами. Ваш редактор такое может? (смайлик) На самом деле, редактор такое и не обязан уметь по определению, он всего лишь работает с текстом и не разбирается в том, что в каких-то языках есть строгая типизация, в каких-то нет, и в некоторых случаях можно попытаться угадать, что в данном месте можно написать, учитывая информацию из стандартной библиотеки, синтаксиса языка и видимости функций, переменных и классов в данной точке кода. Простая подсказка по аргументам функции сама по себе здорово экономит время и нервы, т.к. в хорошем коде по именам параметров и их типу уже ясно, что функция хочет. В документацию лезть приходится в разы реже.
Конечно, тут можно привести много контраргументов, например, можно выдавать подсказки по javadoc/jsdoc/phpdoc/etc., а если таковой док не написали, значит, программа/программист плохи, код не документирован и вообще, ваша проблема не в этом. Тем не менее, к хорошему быстро привыкаешь, как вы сами заметили, и хочется носить свой комфорт с собой. Как бы ни тормозили IDE, они тормозят с благой целью. Постоянно поддерживать актуальные знания о всём коде — не самое дешёвое занятие. Поэтому лучше проапгрейдить железо, переехать на SSD, но сохранить удобство понятливой IDE, чем мириться с отсутствием рефакторинга и банального поиска по коду с учётом языка. Например, нужно найти все вызовы метода run() у объектов класса SomeDataProcessor и только у них. Таких методов может быть масса у самых разных классов, включая системные, и редактор для этой задачи бессилен.
Так что я использую Vim по его первоначальному прямому назначению — для быстрого редактирования текстовых файлов, обычно конфигов. И с этим он справляется просто замечательно.
>Поверьте, аудитории хабра можно написать так, чтобы ей было интересно и чтобы она читала ваши посты. Даже про конверсию, рекламу, маркетинг.
Пожалуй, тут стоит упомянуть блог МосИгры (https://habrahabr.ru/company/mosigra/) как эталон интересных рассказов про постройку бизнеса с нуля и связанные с этим перипетии. Они охватывают довольно широкий круг тем, но при этом не публикуют ничего из рандомного научпопа. Так что рассказам про маркетинг, дизайн, интерфейсы и игры почитать-поучиться стоит.
Обычного TOTP хватит бы всем™, а реализацию уже можно выбирать, главное, стандарт открыт и доступен. Кого-то устроит гугловский аутентификатор, кто-то купит брелок, да и на Pebble есть QuickAuth, с часов удобно коды вводить.
Видимо, потому что это слишком сложно для среднестатистического пользователя. Тем более, сохранение пароля в браузере перестанет работать (точнее, станет отчасти бесполезным/неудобным). У очень большого числа людей вообще один и тот же пароль везде, а тут не просто потребуется заводить разные пароли на разные ресурсы, но и помнить, где и как они меняются…
Если иметь достаточно большой словарь, не всё так плохо. Допустим, генератор использует словарь из тысячи слов, тогда 10 случайных слов оттуда дадут пространство в 10^30 вариантов или почти 100 бит (это если считать, что регистр не учитывается), что примерно эквивалентно случайному 16-символьному буквенно-цифровому паролю (английские буквы обоих регистров). Но со словами следует учитывать, что частота букв не играет никакой роли, ведь единицей пароля является слово, а не буква.
Физику тоже сначала на дискретной железке считали, потом перевели на видеокарту. Похоже, со звуком будет то же самое, хотя обсчитывать звук на видеокарте несколько иронично. Но сейчас ведь большинство игр cpu-bound, т. е. видеокарта все равно недогружена, а с приходом вулкана с его многопоточностью открываются интересные перспективы.
karpathy.github.io/neuralnets — вот самое лучшее объяснение на пальцах, без трёхэтажных формул (есть двухэтажные, но они разжёваны до уровня школьной арифметики), прямо с основ, с примерами из реальности и с кодом. Требуется знание арифметики и понимание JS, ну или любого C-подобного кода, просто примеры на JS. Ничего лучше не читал по теме, жаль, что автор не написал книгу в таком стиле, я бы купил.
Тем не менее, я придерживаюсь правила проверять, жив ли ещё автор, потому как если не, то всё вознаграждение уходит либо в карман правоторговцам, либо наследникам автора, которые, по моему глубокому, хоть и, возможно, непопулярному убеждению, не имеют права почивать на лаврах талантливого предка. Так что если автор в состоянии получить процент от моего платежа, и если бесплатный фрагмент (25% книги обычно) интересен, я покупаю. Кроме очистки совести это даёт ещё и некоторую гарантию того, что книга будет дочитана, а не удалена.
Для себя, как уже написал выше, я решил проблему использованием GWT, но понятно, что чаще всего, в случае коммерческой разработки в более-менее долгоживущей компании, выбор уже сделали за вас.
1) Windows-only. http://insenvim.sourceforge.net/portlinux.htm — тут, в сломанном HTML, можно прочитать: «We don't have for Linux, but want to port. It
may be tough, but any help is appreciated.». Увы.
2) Не обновлялся с 2006 года, уже 10 лет.
Боюсь, даже если он заведётся и будет работать с современным вимом, вряд ли там будет поддержка возможностей языков, которые они получили за последние 10 лет. А у Java уже две версии как минимум вышли…
В целом же, после обвешивания плагинами Vim/Sublime/Emacs получится та же IDE. Не факт даже, что более быстрая при той же функциональности, а скорее всего, менее функциональная, и причины этого я уже описал. Так что стоит ли овчинка выделки, каждый решает сам.
Например, помимо уже упомянутого переименования с учётом контекста (переменная i превращается в counter только в текущей области видимости, а не по всему коду), и в Eclipse CDT, и в Qt Creator можно выделить фрагмент кода и вырезать его в отдельную функцию. При этом IDE автоматически выведет необходимые параметры для функции и даст им имена, а также выведет тип возвращаемого значения, на месте же фрагмента кода появится вызов новой функции со всеми нужными параметрами. Ваш редактор такое может? (смайлик) На самом деле, редактор такое и не обязан уметь по определению, он всего лишь работает с текстом и не разбирается в том, что в каких-то языках есть строгая типизация, в каких-то нет, и в некоторых случаях можно попытаться угадать, что в данном месте можно написать, учитывая информацию из стандартной библиотеки, синтаксиса языка и видимости функций, переменных и классов в данной точке кода. Простая подсказка по аргументам функции сама по себе здорово экономит время и нервы, т.к. в хорошем коде по именам параметров и их типу уже ясно, что функция хочет. В документацию лезть приходится в разы реже.
Конечно, тут можно привести много контраргументов, например, можно выдавать подсказки по javadoc/jsdoc/phpdoc/etc., а если таковой док не написали, значит, программа/программист плохи, код не документирован и вообще, ваша проблема не в этом. Тем не менее, к хорошему быстро привыкаешь, как вы сами заметили, и хочется носить свой комфорт с собой. Как бы ни тормозили IDE, они тормозят с благой целью. Постоянно поддерживать актуальные знания о всём коде — не самое дешёвое занятие. Поэтому лучше проапгрейдить железо, переехать на SSD, но сохранить удобство понятливой IDE, чем мириться с отсутствием рефакторинга и банального поиска по коду с учётом языка. Например, нужно найти все вызовы метода run() у объектов класса SomeDataProcessor и только у них. Таких методов может быть масса у самых разных классов, включая системные, и редактор для этой задачи бессилен.
Так что я использую Vim по его первоначальному прямому назначению — для быстрого редактирования текстовых файлов, обычно конфигов. И с этим он справляется просто замечательно.
Пожалуй, тут стоит упомянуть блог МосИгры (https://habrahabr.ru/company/mosigra/) как эталон интересных рассказов про постройку бизнеса с нуля и связанные с этим перипетии. Они охватывают довольно широкий круг тем, но при этом не публикуют ничего из рандомного научпопа. Так что рассказам про маркетинг, дизайн, интерфейсы и игры почитать-поучиться стоит.