Рубрика: lang

RegExp в Presto

Opera в своё время прославилась тем, что не поддерживала com­pile() у регулярных выражений. Дело было в движке Presto (которые почему-то не желает их копилировать). И вот случилось — Opera переехала на Blink. Теперь com­pile() поддерживается.… но не в Opera Mini, которая как была на Presto, там так и остаётся.

Показать в JavaScript alert без остановки таймера

Вообще, использовать стандартный JavaScript alert даже для отладки — плохая идея. Для сообщений есть отличные окошки из Boot­strap JS или jQueryUI, для отладочной информации — console.log. Но иногда нужно написать окошко очень-очень быстро. Например, сдать бета-версию приложения, а окошко потом переделать. В браузерах, основанных на WebKit (Chrome, Safari, JavaFX WebEngine) открытый alert считается чрезвычайным событием…

Прочитать статью целиком

SHA256 в Python

SHA256 в Python бывает и стандартный (из hash­lib), и сторонний (из PyCryp­to). Интересно, что при неосторожном использовании они дают разные результаты. Во-первых, SHA256.new() из PyCryp­to сразу после создания имеет digest. Это SHA от пустой строки — широко известное 0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855. Во-вторых, каждый update накладывается в нём на предыдущий, поэтому если digest используется на следующей итерации, то SHA256.new()…

Прочитать статью целиком

Тайна неуязвимости Человека с чемоданчиком

Раскрыт секрет неуязвимости Человека с чемоданчиком (он же G-Man) из первых версий Half-Life. Если заглянуть в исходники, становится ясно, почему в него высаживали целую обойму, а он всё равно живой: SetIm­pactEn­er­gyScale( 0.0f ); // no physics dam­age on the gman

Про offset в методу get у ByteBuffer

Что делает off­set в методе get() у Byte­Buffer? Даже help не вновит ясности. Вроде как смещение — но при попытке сместить и прочитать начинают сыпаться ошибки переполнения буфера. Справка написана не особо понятно, но, к счастью, есть исходник реализации. И, заглянув в него, мы узнаём, что это.… индекс, с которого надо начинать запись в массив!!…

Прочитать статью целиком

Получаем параметры GET из url

Оказывается, все параметры, передаваемые в URL get-запросом. лежат в свойстве location.search. Как-то так: “?foo=boo”. $.extend({ getUrl­Str : func­tion() { //used for unit test return location.search.substr(1); }, getUrl­Vars : func­tion(){ var vars = {}, hash­es = this.getUrlStr(); if(!hashes) return {}; hash­es = hashes.split(‘&’); for(var i = 0, len = hashes.length; i < len; i++) { var…

Прочитать статью целиком

Д. Босуэлл, Т. Фаучер — Читаемый код, или программирование как искусство

Небольшая книжка, в которой много полезных мелочей. Например, более точные варианты названий для типичных функций: send — deliv­er; dis­patch; announce; dis­trib­ute; route find — search; extract; locate;recover start — launch; cre­ate; begin; open make — cre­ate; set­up; build; gen­er­ate; com­pose; new Именованные интераторы для циклов (ui лучше, чем просто i). Дополнительные постфиксы — size_mb, html_utf…

Прочитать статью целиком

java: javacTask: source release 8 requires target release 1.8 в IntelliJ IDEA

Эта ошибка появляется внезапно и сразу же доводит до бешенства. Запускаешь компиляцию. а Idea в ответ: java: javac­Task: source release 8 requires tar­get release 1.8 в Intel­liJ IDEA Чтобы поправить, отправляемся в .idea/compiler.xml, и выставляем в разделе byte­code­Tar­getLev­el для этого модуля target=1.8