Search
Write a publication
Pull to refresh
10
0.2

JavaScript-разработчик

Send message

Проклятие мракобесия над отечественной генетикой. Update: Кудрявцева уволили

Level of difficultyEasy
Reading time7 min
Views47K

Генетика - одна из самых динамично развивающихся наук. Мало какая другая дисциплина может поспорить с ней по степени воздействия на качество нашей жизни. И мало какой науке доставалось так сильно, как генетике, за последние сто лет. Больше всего ее корили за евгенику, развитию которой она могла здорово поспособствовать. Сейчас во всем мире действует мораторий на клонирование человека и редактирование его генома. До сих пор не утихла ГМО-истерия.

Но тяжелее всего ей пришлось в СССР и РФ. 

Науку, которая только начала зарождаться, почти полностью уничтожил Трофим Лысенко - безграмотный мерзавец, сгноивший в ГУЛАге самых талантливых ученых-генетиков, чтобы они не мешали продвигать нео-ламаркизм, который принес ему ложную славу и высокий пост. Фактически, он отбросил нашу науку на десятилетия назад. Тяжелейшая потеря, от которой генетика очень долго приходила в себя.

Много десятилетий спустя, уже в РФ, науке снова нанесли жестокий удар - запрет на выращивание ГМО. Это лишило всякого смысла коммерческие разработки ГМО и снова отбросило нас на десятилетия, по сравнению с иностранными успехами. Российские ученые-генетики или уехали за границу, или глобально переквалифицировались.

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

По сути, ведущий российский генетик — отрицает генетику.

Читать далее

R — движок для биоинформатики и датасайнс

Level of difficultyEasy
Reading time3 min
Views3.8K

R — это не просто язык программирования, это лингва-франка для многомиллионного сообщества статистиков, биоинформатиков, датасаентистов. Обсудим несколько знаковых инструментов в R: их историю и зачем они нужны.

Читать далее

TESSERAE — предыстория орбитального улья

Reading time8 min
Views4K

В этом блоге я неоднократно обращался к теме астроинженерных сооружений, чрезвычайно интересующей Хабр. Навскидку вспоминаются материалы о сфере Дайсона (91 комментарий), космическом лифте (124 комментария) и обустройстве космической станции внутри астероида (212 комментариев). Все подобные идеи кажутся осуществимыми в обозримом будущем, так как мы привыкли экстраполировать успехи, уже достигнутые при сборке космических станций. Эпоха обитаемых космических орбитальных станций начинается в 1971 году и хронологически выглядит так:

Читать далее

Будущее (и прошлое) веба — это рендеринг на стороне сервера

Reading time11 min
Views14K

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

Теперь же веб-страница может быть полноценным приложением, которое получает данные из различных источников, выполняет манипуляции «на лету» и предоставляет полную интерактивность. Это значительно повысило полезность интернета, но ценой размера, пропускной способности и скорости. За последние 10 лет средний размер веб-страниц для десктопа увеличился с 468 КБ до 2284 КБ, что составляет рост на 388,3%. У мобильных устройств скачок еще более впечатляющий — от 145 КБ до 2010 КБ, то есть больше на 1288,1%.

Читать далее

Встраиваем JS- скрипты в PDF для социальной инженерии — пошаговое руководство

Reading time7 min
Views18K

Введение

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

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

Мы, Маргарита Белоусова, аналитик аналитического центра и Анастасия Прядко, специалист по анализу защищенности компании УЦСБ написали пошаговую инструкцию, как сделать фишинговый документ: детали и примеры кода. Кроме того, мы кратко рассмотрели структуру PDF-файла, как и куда в него внедрять JavaScript, а также способы маскировки факта внедрения скрипта. Наш опыт пригодится безопасникам, системным администраторам и всем, кто связан с ИБ.

Структура PDF

Организация данных в памяти

PDF способен на большее, чем просто отображать текст. Он может также включать в себя изображения и другие мультимедийные элементы, может быть защищён паролем, выполнять JavaScript и многое другое. Вне зависимости от версии структура PDF документа неизменна:

Читать далее

Код: маленький и ненужный

Level of difficultyMedium
Reading time12 min
Views8.7K

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

Читать далее

Угнали все мои телеграм каналы на 50к+ подписчиков. Вернул спустя месяц. План действий

Level of difficultyEasy
Reading time4 min
Views14K

Привет, чемпион!

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

Будем считать, что читатель этой статьи столкнулся с кражей своих доступов к телеграм каналу. Кратко расскажу мою историю и далее пошаговый план действий.

Читать далее

Генерация 2D мира с помощью клеточного автомата на Python

Level of difficultyEasy
Reading time8 min
Views13K

Всем привет! На написание этой статьи меня вдохновил автор YouTube канала PeaAshMeter. В своем видео автор показывает простейший генератор 2D мира, который основан на простейшем правиле клеточного автомата. Что такое клеточный автомат? Какие клеточные автоматы бывают? На эти и многие другие вопросы я попробую ответить.

Читать далее

Вариант реализации DSL (domain-specific language) с помощью макросов

Level of difficultyMedium
Reading time8 min
Views4.2K

image


Близится релиз языка NewLang с принципиальной новой «фишкой», переделанным вариантом препроцессора, который позволяет расширять синтаксиса языка для создания различных диалектов DSL за счет макросов.


И, как всегда, используя ранее найденный лайфхак Хабр — ума палата, хотелось бы получить от читателей обратную связь насчет предлагаемого ниже подхода, который планируется к реализации в новом препроцессоре NewLang.


О чем идет речь?


DSL (Предметно-ориентированный язык) — язык программирования, специализированный для конкретной области применения. Считается, что использование DSL существенно повышает уровень абстрактности кода, а это позволяет вести разработку более быстро и эффективно и существенно упрощает решение многих задач.

Условно, можно выделить два подхода к реализации DSL:


  • Разработка независимых трансляторов синтаксиса с помощью генераторов лексеров и парсеров для определения грамматики целевого языка посредством БНФ и регулярных выражений (Lex, Yacc, ANTLR и т. д.) и последующей компиляцией полученной грамматики в машинный код.
  • Разработка или встраивание диалекта DSL на языке (метаязыке) общего назначения, в том числе за счет применения различных библиотек или специальных парсеров / препроцессоров.

Далее речь пойдет о втором варианте, а именно, о реализации DSL на базе языков (метаязыков) общего назначения и новом варианте реализации макросов в NewLang как основы для разработки DSL.

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

Идеальное рабочее место программиста. История. Часть 3. Положение рук

Reading time8 min
Views21K

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

Разберём особенности положений тела при работе полулежа и лежа. Расскажу про два совершенно разных подхода и их реализацию в существующих рабочих станциях, подсвечу достоинства и недостатки. Объясню, какой вариант выбрал я и почему.

Читать далее

Эксплойтинг браузера Chrome, часть 2: знакомство с Ignition, Sparkplug и компиляцией JIT в TurboFan

Level of difficultyHard
Reading time50 min
Views8.1K

В моём предыдущем посте мы впервые погрузились в мир эксплойтинга браузеров, рассмотрев несколько сложных тем, которые были необходимы для освоения фундаментальных знаний. В основном мы изучили внутреннюю работу JavaScript и V8, разобравшись, что такое объекты map и shape, как эти объекты структурированы в памяти; мы рассмотрели базовые оптимизации памяти наподобие маркировки указателей и сжатия указателей. Также мы затронули тему конвейера компилятора, интерпретатора байт-кода и оптимизации кода.

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

В сегодняшнем посте мы вернёмся к конвейеру компилятора и ещё глубже разберём некоторые из рассмотренных ранее концепций: байт-код V8, компиляцию кода и оптимизацию кода. В целом, мы рассмотрим происходящее внутри Ignition, Sparkplug и TurboFan, поскольку они критически важны для понимания того, как определённые «фичи» могут привести к появлению багов, которые можно эксплойтить.
Читать дальше →

Вы любите играть в Герои 3, а ваша половинка вас: 6 карт для свиданий

Level of difficultyEasy
Reading time7 min
Views23K


После прошлого поста с подборкой хадкорных карт(Вы не умеете играть в Героев 3: 13 карт S-размера, которые вы не пройдете за вечер), из комментов узнала, что некоторые любят поиграть в альянсе со своей половинкой.

У меня в Героях 3 было идеальное свидание. Мы с 8 вечера до 8 утра сидели у меня в офисе, ели пиццу и рубились в альянсе на большой карте против злобного ИИ, который нашел себе Крылья Ангела и прятался за горным перевалом, а мы вылавливали его с Оковами Войны. Сложных боев там не было, но чувство «родства душ» от решения общей задачи возникло потрясающее.

Однако время беспощадно, сидеть всю ночь за монитором с красными глазами и кофеином вместо крови уже сомнительно. А поиграть иногда хочется. Ко дню влюбленных я отобрала себе карты «для будущих свиданий», которые

  • отличаются от автосгенерированных (потому что просто надоело, хочется крафта/лора/разнообразия);
  • маленького [S] или среднего [M] размера (потому что хочется играть один вечер, а не весь вечер, всю ночь, всё утро, и ещё пару дней «чинить» режим дня);
  • с альянсом для двоих игроков (потому что разводиться после каждого PvP — так себе квест).

Я веду ламповый Telegram-канал GameDEVils и блог на Substack . Заглядывайте в гости, я делюсь там материалами про геймдизайн, разработку и историю игр ^__^
Читать дальше →

Что может быть проще (сложнее), чем упорядочивание чисел?

Reading time9 min
Views7.2K

Предположим, вы программист и у вас есть два числа. Вы хотите узнать, какое из чисел больше. Если оба числа имеют одинаковый тип, то почти в любом языке программирования решение будет тривиальным. Для этой операции обычно даже есть специальный оператор <=. Вот пример на Python:

>>> "120" <= "1132"
False

Сравнение двух чисел на Brainfuck оставим в качестве упражнения для читателя.

Ой. Ну, строго говоря, это строки, а не числа, а строки обычно сортируются лексикографически. Но это всё-таки числа, хотя и представленные в виде строк. Это может показаться глупым, но такая проблема очень распространена в интерфейсах пользователя, например, в списках файлов. Именно поэтому нужно отбивать числовые имена файлов нулями (frame-00001.png) или использовать описания, сохраняющие лексикографический порядок, например, ISO 8601 для дат.

Впрочем, я отклонился от темы. Предположим, числа действительно представлены числовыми типами. Тогда всё просто и <= отлично работает:

>>> 120 <= 1132
True

Но так ли это?
Читать дальше →

Как найти часть суши, окруженную водой

Reading time5 min
Views2.4K

Уже очень давно создана и работает программа, отображающая космонавтам движение МКС на карте земной поверхности.

МКС, конечно, двигается вовсе не по земной поверхности, а по орбите. Но если соединить станцию и центр Земли прямой, то точка пересечения этой прямой с земной поверхностью будет являться т.н. «подспутниковой» точкой. Совокупность этих точек составляет «трассу» полета. Другими словами, трасса – это проекция на земную поверхность плоскости орбиты. Если земная поверхность представлена схематичным изображением континентов в цилиндрической проекции, то трасса МКС (наклонение ее орбиты 51,8°) отобразится кривой, напоминающей синусоиду. И где-то на этой «синусоиде» обычно красным кружочком отображается текущее положение МКС...

Читать далее

Рекурсивные регулярные выражения

Reading time3 min
Views7.6K

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

Стал делать и подумал, а почему бы мне не добавить туда своих тараканов. Я решил добавить две конструкции:

{namesubexpression} - вызов под выражения по имени "namesubexpression",
($namesubexpression:BodyExpression) - описание под выражения с именем "namesubexpression".

Само описание под выражения может встречаться в любом месте структуры регулярного выражения и игнорируется при поиске, подобно закоментированым: (#MeComment).
Сразу же возникает проблема бесконечной рекурсии.
Вот пример рекурсивного регулярного выражения, который недопустим: ($E:{E}){E}

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

Вот пример текста, который можно спарсить рекурсивным регулярным выражением (РРВ): [[[[[A]]]]]
А вот его РРВ: ($RRE:\[({RRE}|A)\]){RRE}

Я также решил добавить три зарезервированные конструкции:
{:String} соответствует выражению: (("(\\.|[^"])*")|('(\\.|[^'])*'))
{:Digit} соответствует выражению: (-?[0-9]+.?[0-9]*[Ee]?-?[0-9]*)
{:Name} соответствует выражению: ([A-Za-z][A-Za-z0-9]*)
Но их поисковая система не использует структурные элементы аналогичных выражений, а организованна встроенным машинным поиском, который работает значительно быстрее и возвращает одну целую строку текста, в которой содержится всё тело найденного соответствия а не части для каждого компонента в аналогичных регулярных выражениях.

Читать далее

Почему для открытия меню «Пуск» иногда требуется несколько секунд

Reading time7 min
Views23K

Обычно я запускаю большинство программ на своём ноутбуке с Windows 10, нажимая клавишу <Win>, после чего ввожу несколько букв имени программы, а затем жму Enter. На моём мощном ноутбуке (SSD и 32 ГБ ОЗУ) этот процесс обычно занимает лишь время, необходимое мне для ввода символов, то есть считанные доли секунды.

Обычно.

Однако иногда он занимает больше, намного больше. Порядка десятков секунд. Торможения непредсказуемы, но недавно мне удалось записать трассировку Event Tracing for Windows (ETW) одной из таких задержек. При помощи людей в Twitter я смог проанализировать трассировку и понять, почему на запуск «Блокнота» требуется примерно минута.

Прежде чем приступать к описанию анализа, мне нужно сделать два заявления: 1) у меня есть достаточное понимание проблемы, но нет решения, и 2) если вы наблюдаете аналогичные симптомы, это не значит, что их причина та же, но я дам советы о том, как понять, в ней ли дело.
Читать дальше →

Суммирующая машина Сполдинга — компьютер 149-летней выдержки

Reading time4 min
Views4.1K
image

История компьютерных технологий насчитывает множество интересных страниц, перелистывая которые, порой можно обнаружить весьма неожиданные находки. Ровно 149 лет назад, 13 января 1874 года патентное бюро США зарегистрировало патент №146407 на Spalding Adding Machine — суммирующую машину Сполдинга, один из первых механических калькуляторов, получивших распространение в Северной Америке.
Читать дальше →

Считывание контроллера nes (dendy) на ассемблере

Reading time3 min
Views3.7K

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

Читать далее

Делаем ядерную люстру на 100'000 люмен

Reading time4 min
Views285K
Существует стереотип, что «IT»-шник должен сидеть в полумраке, освещаемый лишь светом монитора. Не знаю как вам, а мне всегда было комфортнее при ярком освещении. Сначала это было 3x100W обычных лампочек, потом 250W люминесцентных ламп, после последнего переезда — одна 500W галогенка… Но этого все-же было недостаточно. Всегда хотелось иметь такое освещение, чтобы не хотелось свет сделать ярче. О создании такой люстры я сейчас и расскажу.
Читать дальше →

Алгоритм построения набора нетранзитивных игральных костей

Reading time5 min
Views3.7K

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

Остались вопросы. Можно ли построить набор кубиков "с нуля"? Как построить набор костей с другим количеством граней? Будут ли там решения с равными вероятностями выигрыша? Я попытался найти общий алгоритм со следующими условиями:
1. Алгоритм должен работать для любого количества костей с любым количеством граней (равным для всех костей в наборе).
2. Все кости выигрывают у своего соседа в наборе с равной вероятностью.
3. Алгоритм должен создавать набор для любой заданной вероятности выигрыша.

Читать далее

Information

Rating
3,484-th
Location
Москва, Москва и Московская обл., Россия
Registered
Activity