Search
Write a publication
Pull to refresh
4
0.1
Send message

Загадка о файле-невидимке

Reading time9 min
Views45K
image

Не так давно, закончив работу над очередной статьёй для Хабра, я решил оптравить её на ревью своему знакомому. Сохранив HTML-страницу со всем окружением (картинки, стили etc), я запаковал её в ZIP-архив и отправил адресату. Уже через пять минут я получил фидбек, который, вопреки моим ожиданиям, был связан вовсе не с самой статьёй, а с тем, что архив был абсолютно пустой. Почесав голову и решив, что я затупил с архивированием, я повторил процедуру, убедившись, что выделил все необходимые для запаковывания файлы. Спустя несколько минут знакомый снова разразился удивлённым «Ты что, шутишь?», в то время как я совсем не шутил.

Я начал собирать воедино все элементы паззла. Во-первых, я выяснил, чем он пытается открыть архив. Вдруг, в качестве viewer'а он использует какую-нибудь третьесортную фигню не пойми от какого разработчика? Однако им оказался дефолтный explorer.exe. Я же пользовался Total Commander'ом как для запаковки, так и для просмотра получившегося архива, и в моём случае он вовсе не был пустым:

image

Что, неужели это сборочка xxxWindowsUltimateEditionxxx подкачала? Я попытался открыть тот же самый архив на моём компьютере при помощи explorer.exe и наконец поверил своему знакомому — архив действительно выглядел пустым:

image

Кто же виноват в таком поведении? Давайте разберёмся.

Как протекал процесс, и что из этого вышло, читайте под катом (осторожно, много скриншотов). Перед прочтением данной статьи также настоятельно рекомендую ознакомиться с предыдущими.
Читать дальше →

«Прокачиваем» notepad.exe

Reading time8 min
Views46K
image

Какая ассоциация связана у Вас с клавишей F5? Обновление страницы в браузере? Копирование файла из одной директории в другую? Запуск приложения из Visual Studio? А вот авторы notepad.exe подошли к этому вопросу довольно оригинально — по нажатию клавиши F5 происходит добавление текущей даты и времени в место, куда в этот момент указывает курсор. Всё было бы круто, если бы в notepad.exe была такая популярная и вполне естественная для большинства текстовых редакторов фича, как перечитывание содержимого текущего файла, которая, казалось бы, и должна быть назначена на F5 / Ctrl-R или ещё какой-нибудь общепринятый хоткей.

Мы можем ждать, пока её реализуют Microsoft, выбрать другой текстовый редактор (ведь это не единственное ограничение по функционалу стандартного notepad.exe) или… Взять в руки дизассемблер, отладчик и редактор PE-файлов.

Как протекал процесс, и что из этого вышло, читайте под катом (осторожно, много скриншотов). Перед прочтением данной статьи также настоятельно рекомендую ознакомиться с предыдущими.
Читать дальше →

8 ресурсов для бесплатного образования на русском языке

Reading time3 min
Views63K
Как выглядит процесс обучения? Детсад, школа, университет и эпизодические курсы повышения квалификации, да и то не у всех. До конца жизни человек идет на том багаже знаний, который набрал в начале. Сейчас есть запрос на то, чтобы процесс обучения стал постоянным. Нужно поменять специализацию – пожалуйста. Нужно усилиться – пожалуйста. Делать это виртуально может быть проще и удобнее, ведь нет никаких барьеров. При этом качественные знания можно получить бесплатно. Представляю 8 платформ, на которых можно учиться на русском языке без бюджета.
Читать дальше →

Полиморфные связи для самых маленьких

Reading time5 min
Views68K
Недавно, делая очередной функционал на одном из проектов, я столкнулся с немного необычными связями в реляционных СУБД, у которых, как оказалась позже, есть замысловатое название — Полиморфные связи. Что это такое, как и где их применять, я попытаюсь объяснить в данной статье.

Тема полиморфных связей уже поднималась не раз на Хабре («Rails и полиморфные связи», «Полиморфные сквозные ассоциации в Ruby on Rails», «Полиморфные связи»), но поднималась она в контексте Ruby, и для тех, кто уже имеет какой-то опыт в проектировании БД. Новичкам же (мне было), мало что понятно из тех статей, поэтому в данной статье я попытаюсь рассказать всё на пальцах, абстрагируясь от языка, разве что немного задену ORM популярных фреймворков в вебе.
Читать дальше →

$500 млн за строчку кода или стоимость ошибок ПО в космосе

Reading time12 min
Views37K
Пару месяцев назад на edx.org закончился курс «Введение в космические технологии: Космонавтика и пилотируемые полеты (Introduction to Aerospace Engineering: Astronautics and Human Spaceflight)». Курс вел американский космонавт, на данный момент профессор MIT — Джеффри Алан Хоффман. Как следует из названия, курс довольно простой и общий, тем не менее мне он показался довольно интересным и познавательным.

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

Mars Polar Lander


Mars Polar Lander (MPL) 290 килограммовый космический аппарат, запущенный NASA 3 Января 1999 г. для изучения почвы и климата в районе южного полюса Марса. 3 Декабря 1999 г. во время посадки центр управления не смог возобновить с аппаратом связь.


MPL в лаборатории NASA
Читать дальше →

C++ в 2015-м году

Reading time3 min
Views38K
Год только начинается, так что давайте посмотрим, что язык С++ ожидает в 2015-м, как мы уже делали это в 2013-м и 2014-м.

Прошлый год принёс много изменений, главным из которых, безусловно, является стандарт С++14. Что важно, С++14 сегодня существует не только в виде стандарта, но и частично поддерживается GCC и Clang. Visual Studio также поддерживает некоторые (хотя и далеко не все) возможности С++14 и почти все (хотя опять таки не 100%) возможности С++11. Компилятор от Intel стал совместим с С++11 полностью. Таким образом, современные стандарты С++ доступны под все платформы — было бы только желание их использовать!
Читать дальше →

Именованные параметры в современном C++

Reading time14 min
Views30K
Из Википедии: "Именованные параметры в языках программирования означают поддержку указания явных имен параметров в вызове функции. Вызов функции, принимающей именованные параметры, отличается от обычного вызова функции, в котором передаваемые аргументы ассоциируются с параметрами функции лишь только по их порядку в вызове функции"

Давайте посмотрим на пример:

createArray(10, 20); // Что это значит? Что за "10" ? Что за "20" ?
createArray(length=10, capacity=20); // О, вот теперь понятнее!
createArray(capacity=20, length=10); // И наоборот тоже работает.


И еще один пример на выдуманном псевдо-языке:
window = new Window {
   xPosition = 10,
   yPosition = 20,
   width = 100,
   height = 50
};


Этот подход особенно полезен для функций с большим количеством опциональных параметров, при вызове которых нужно изменить лишь некоторую часть дефолтных значений. Некоторые языки программирования поддерживают именованные параметры (C#, Objective-C, ...), но не С++. В этом посте мы рассмотрим пару классических способов эмуляции именованных параметров в С++, ну и попробуем придумать что-то новое.
Читать дальше →

Рефакторинг C++ кода в Visual Studio 2015

Reading time3 min
Views25K
Hello C++ World!

В прошлую пятницу вышел релиз Visual Studio 2015 Preview, в котором были представлены новые возможности увеличения продуктивности разработки, в том числе рефакторинг кода на С++. В значительной мере на реализацию этого функционала повлияли отзывы комьюнити, которые были получены в ходе тестирования Visual Studio «14» CTPs, так что спасибо всем поучаствовавшим.

В этой статье мы рассмотрим такие возможности Visual Studio 2015 Preview по работе над С++ кодом, как:
  • Переименование (Rename)
  • Извлечение функции (Extract Function)
  • Генерация заглушек чисто виртуальных методов (Implement Pure Virtuals)
  • Генерация объявлений/заглушек методов (Create Declaration/Definition)
  • Перемещение объявлений функций (Move Function Definition)
  • Преобразование в Raw-String (Convert to Raw-String Literal)

Читать дальше →

Использование монад в С++. Часть 1: монада списка

Reading time10 min
Views34K
Часть 1
Часть 2

Иногда программисты на С++ просят привести пример задачи, которая не может быть решена без использования монад. Начнём с того, что этот вопрос неверен сам по себе — это всё-равно, что спрашивать, существует ли задача, которая не может быть решена без циклов. Очевидно, если в вашем языке есть поддержка оператора goto, вы можете обойтись без использования операторов цикла. Что монады (и циклы) могут сделать для вас, это упростить ваш код и помочь лучше его структурировать. Как использование циклов превращает спагетти-код в нормальный, так и использование монад может превратить ваш код в императивном стиле в декларативный. Эта трансформация может помочь легче писать, понимать, поддерживать и расширять ваш код.

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

  s e n d
+ m o r e
---------
m o n e y


Каждая буква соответствует цифре от 0 до 9. Нужно написать программу, которая подберёт такие соответствия, чтобы написанная операция сложения была верной. Перед тем, как продолжить чтение статьи — подумайте минутку, как бы вы решили эту задачу?
Читать дальше →

Как за вами следят, пока вы ходите по торговому центру

Reading time3 min
Views26K
Ранее я уже публиковал статью о системах подсчета посетителей. Теперь же хочу рассказать о системе, которая позволяет посчитать:
  • Сколько людей прошло мимо, так и не зайдя в магазин;
  • Сколько зашло повторно;
  • Сколько в среднем покупатель проводит времени в магазине и не только…


Читать дальше →

Миллиардер, сделавший себя сам, рассказывает о простой методике принятия решений

Reading time2 min
Views33K
Первая глава книги канадского миллиардера Сеймура Шулича «Умнейте: уроки жизни и бизнеса» предлагает инструмент, расширяющий возможности того списка «за и против», который многие из нас используют для принятия решений.

«Я узнал об этом на курсе практической математики более 50 лет назад, и использовал этот метод практически для каждого важного решения в жизни. Он меня никогда не подводил».

Знаете, как делать списки «за и против»? Делите страницу пополам, и пишете все «за» и «против». Но описываемый инструмент добавляет одну важную деталь:

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

На другом листе перечислите все отрицательные моменты, и оцените их также по шкале от нуля до десяти – где „десять“ означает очень сильный недостаток».

Дальше надо сложить очки, но для этого есть одно условие:
Читать дальше →

9 признаков того, что собеседование прошло хорошо

Reading time2 min
Views40K
Даже если ваше собеседование не окончилось вопросом “Итак, когда вы сможете приступить к работе?”, по словам экспертов, существуют определённые “индикаторы”, подтверждающие, что оно прошло успешно.



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

Как пройти стресс-интервью и не сорваться: что нужно знать об «экстремальном» найме

Reading time8 min
Views22K
Представьте себе «прокаченную»игру в «кошки-мышки», где кошка намеревается съесть мышку, а мышка должна сохранять спокойствие, делать вид, что они с «усатой» лучшие друзья, и обхитрить хищницу. В конце этой игры и кошка, и мышка должны выиграть. Странно, не правда ли?



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


Читать дальше →

52 вопроса, которые вы должны задать на собеседовании

Reading time4 min
Views76K
Вы, наверное, уже знаете, что интервью — это не просто очередной этап при устройстве на работу, это также ваша возможность разобраться, подходит ли вам эта работа. Для этого важно задать некоторые вопросы. Что вы хотите знать об этой должности? О компании? О подразделении? О команде? О корпоративной культуре?



Задавать вопросы бывает сложно. Мы это знаем. Для того, чтобы упростить вам это задание, мы приводим список ключевых вопросов для интервью. Мы определённо не рекомендуем задавать их все. Пожалейте рекрутера!
Читать дальше →

Как самому собрать аналоговый левитрон

Reading time6 min
Views84K

0.Предисловие


Начитался тут всяких интернетов и решил сваять свой собственный левитрон, без всяких цифровых глупостей. Сказано – сделано. Выкладываю муки творчества на всеобщее обозрение.

1.Краткое описание


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

Получилось вот что:


Читать дальше →

Исключения для хардкорщиков. Особенности обработки эксепшенов в динамически размещаемом коде

Reading time13 min
Views23K
image

Современные версии ОС налагают на исполняемый код ограничения, связанные с требованиями безопасности. В таких условиях использование механизма исключений в инжектированном коде или, скажем, во вручную спроецированном образе может стать нетривиальной задачей, если не быть в курсе некоторых нюансов. В этой статье речь пойдет о внутреннем устройстве юзермодного диспетчера исключений ОС Windows для платформ x86/x64/IA64, а также будут рассмотрены варианты реализации обхода системных ограничений.
Читать дальше →

PowerShell, кто Вы и что Вам нужно?

Reading time7 min
Views55K


PowerShell — простое синее окно, преобразившее мир администрирования Windows от классического GUI интерфейса, который удобен неподготовленным пользователям, до сценариев, которые автоматизируют все, предоставляют ротацию логов, управление жизненным циклом идентификаций, а также распределением обновлений по серверам.
Читать дальше →

Будущее влияет на прошлое? Учёные подтвердили мысленный квантовый эксперимент Уилера на примере отдельных атомов

Reading time5 min
Views125K
image
Профессор Эндрю Траскот и студент Роман Хакимов отважно заглядывают в квантовый мир

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

Этот принцип — один из фундаментальных законов, который мало кто оспаривает. Хотя многие физические величины и явления не меняются, если мы обратим время вспять (являются Т-чётными), существует фундаментальный эмпирически установленный принцип: событие А может влиять на событие Б, только если событие Б произошло позже. С точки зрения классической физики — просто позже, с точки зрения СТО — позже в любой системе отсчёта, т.е., находится в световом конусе с вершиной в А.

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

Кроме одного момента — квантовой физики. Там вообще много странного. Вот, например, классический эксперимент с двумя щелями. Если мы поместим препятствие со щелью на пути источника частиц (например, фотонов), а за ним поставим экран, то на экране мы увидим полоску. Логично. Но если мы сделаем в препятствии две щели, то на экране мы увидим не две полоски, а картину интерференции. Частицы, проходя сквозь щели, начинают вести себя, как волны, и интерферируют друг с другом.
Читать дальше →

Мягкое приземление капсулы «Союза» больше похоже на взрыв, но это не проблема

Reading time1 min
Views19K


Путешествие в космос и обратно — это не самая простая «прогулка». Сложно вырваться за пределы атмосферы, сложно и вернуться. Команда космонавтов, вернувшаяся с МКС на днях, знает об этом больше других. Во всех новостях сообщают, что капсула «Союза» совершила мягкую посадку в степях Казахстана.

На самом деле, приземление действительно удачное, проблем никаких не возникло, но сверху оно выглядит, как взрыв. Объяснение простое — приземление капсулы сопровождается срабатыванием тормозных двигателей, которые и обеспечивают мягкую посадку, помимо парашюта, на котором спускается капсула. Как говорит нам Вики, «Спускаемые пилотируемые аппараты космических кораблей серии «Союз», предназначенные для приземления на сушу, также имеют твёрдотопливные тормозные двигатели, включающиеся за несколько секунд до касания земли, чтобы обеспечить более безопасную и комфортную посадку».
Читать дальше →

Спросите Итана №91: Нужна ли теория струн для квантовой гравитации?

Reading time7 min
Views28K
Мне кажется, в теории струн произошло столько разных интересных вещей, что она не может быть неправильной. Люди её плохо понимают, но я не верю, что есть какой-то космический заговор, сотворивший такую штуку, которая не имеет ничего общего с реальным миром.

Эдвард Уиттен

image

Нет сомнения, что с математической точки зрения у нас нет недостатков во всяческих красивых и элегантных математических аппаратах. Но не все они имеют смысл в физической вселенной. На каждую гениальную идею, описывающую то, что мы можем увидеть и измерить, найдётся ещё одна гениальная, которая попытается описать то же самое, но окажется неправильной. Обсуждая на прошлой неделе вопросы, касающиеся альтернатив струнной теории, я нашёл следующее высказывание:
Надеюсь, у вас будет время, чтобы сделать статью о квантовой гравитации. Точнее, мне интересно, есть ли прогресс в этой области за последние 5-10 лет. С моей непрофессиональной точки зрения кажется, что дело застряло с тех пор, когда теория струн начала терять доверие из-за проблем с её проверками и из-за наличия 10500 различных вариантов решений. Действительно ли это так?

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

Начнём с нашей дорогой вселенной. Есть общая теория относительности – наша теория гравитации. Она постулирует, что вся система работает несколько хитрее, нежели простое «дальнодействие», которое придумал Ньютон, у которого все массы во всех местах вселенной испускали силы, действующие друг на друга, обратно пропорциональные квадрату расстояния между ними.

Масса, как объяснил Эйнштейн при помощи принципа эквивалентности E = mc2 в 1907, есть лишь одна из форм энергии. Эта энергия заворачивает самую ткань пространства-времени, изменяя путь, по которому движутся тела, и изгибая то, что наблюдатель увидел бы как декартовскую решётку. Объекты не ускоряются невидимой силой, а просто путешествуют по пути, искривлённому различными формами энергии, присутствующими во вселенной.

Это гравитация.
Читать дальше →

Information

Rating
7,032-nd
Registered
Activity