...

суббота, 15 мая 2021 г.

Дисульфид молибдена назвали ключом в уменьшении двумерных транзисторов

Международная команда исследователей заявила о создании новых двумерных транзисторов из полуметалла дисульфида молибдена. Толщина элементов составляет от одного до нескольких атомов. 

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

Двумерные транзисторы от Университета Юты. Фото: Дан Хиксон
Двумерные транзисторы от Университета Юты. Фото: Дан Хиксон

Среди всех перспективных технических изысков в последние годы оборот набирают 2D-транзисторы, которые уменьшают толщину электронных устройств. В 2016 году в Университете Юты в США прошли испытания первых двумерных транзисторов на основе монооксида олова. Использование этого полуметалла снизило стоимость схемы и уменьшило высоту транзистора до размера атома. Кроме того, новые транзисторы быстрее кремниевых и меньше нагреваются при работе.

12 мая этого года международная команда исследователей заявила о создании нового способа изготовления 2D-транзисторов из дисульфида молибдена — химического соединения серы и металла молибдена из семейства дихалькогенидов. 

Интерфейс между металлами и полупроводниковыми материалами создает состояние зазора, вызванное металлом, что приводит к образованию барьера Шоттки. Полуметалл в сочетании с выравниванием энергии между двумя материалами устранил эту проблему.

Двумерный дисульфид молибдена снижает длину канала с 5—10 нанометров в современных передовых чипах до субнанометрового масштаба. Это ключевой параметр для минимизации электронных устройств. 

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

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

Материалы о создании транзисторов из дисульфида молибдена опубликованы в статье «Ultralow contact resistance between semimetal and monolayer semiconductors» на сайте Nature. DOI: 10.1038/s41586-021-03472-9

Adblock test (Why?)

[Перевод] Изучаем атмосферу Венеры: получены новые данные с зонда «Паркер»

Снимок Венеры, полученный зондом Parker в июле 2020 года

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

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

Во время третьего пролета в пределах 833 км над Венерой 11 июля 2020 года зонд «Паркер» зарегистрировал естественное радиоизлучение из ее атмосферы. Это открытие подтверждает, что верхние слои атмосферы планеты находятся в стадии изменений, которые соответствуют 11-летнему циклу Солнца.

Что именно узнали ученые


Для ученых и по сей день остается загадкой, почему при схожих условиях начального развития Земля и Венера так радикально отличаются друг от друга. Почему на одной планете есть жизнь, а на другой, по крайней мере, на поверхности, она не может существовать?

Они предполагают, что разгадка кроется в защитном магнитном поле Земли. У Венеры нет такого «защитного колпака». Если это предположение верно, то и у Венеры должна быть атмосфера, но которая не задерживается у поверхности, а уходит в космос. Особенно в периоды повышенной солнечной активности. Однако, наблюдения с наземных телескопов показывают обратное. Был замечен слой ионосферы, самая верхушка атмосферы, в периоды, когда Солнце наименее активно.

Строение планеты Венера

Во время третьего пролета зонд в течение 7 минут измерял верхние слои атмосферы Венеры. И в итоге получил новые данные которые сравнили с полученными при дистанционном изучении планеты. Это первое прямое измерение атмосферы Венеры за почти 30 лет.

Но это еще не все. Радиоизлучения помогли ученым вычислить плотность части ионосферы Венеры. В итоге полученную информацию сравнили с данными от зонда NASA программы «Пионер».

Не Паркером единым


В 1992 году зонд «Пионер-Венера» посетил планету. В тот момент Солнце было около точки максимальной активности в 11-летнем солнечном цикле. В то время, как зонд «Паркер» пролетал через 6 месяцев после солнечного минимума.

После анализа данных ученые математически доказали наличие важных отличий между собранными об атмосфере Венеры данными сегодня и теми данными, которые зонд «Пионер» собрал много лет назад.

Какая же атмосфера на Венере сейчас? Она стала значительно тоньше по сравнению с предыдущими измерениями, сделанными во время солнечного максимума. Ученые измерили частоты излучения, рассчитали плотность ионосферы вокруг зонда. Новые измерения показали, что атмосфера стала менее плотной. Эти факты подтверждают догадки ученых, что ионосфера Венеры существенно изменилась за 11-летний солнечный цикл.

Две сестры: Венера и Земля

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

Немного о Венере


Венеру называют «сестрой Земли», потому что обе планеты похожи размерами и составом. Однако условия на поверхности двух планет кардинально разные. Атмосфера Венеры, самая плотная среди землеподобных планет, состоит главным образом из углекислого газа (около 96,5% CO2). Поверхность планеты полностью скрывают облака серной кислоты, непрозрачные в видимом свете. Венера не имеет естественных спутников. Венера — самая горячая планета в Солнечной системе: средняя температура её поверхности — 462 °C. Полагают, что в глубокой древности планета так разогрелась, что подобные земным океаны, которыми она обладала, полностью испарились. После себя они оставили пустынный пейзаж со множеством плитоподобных скал.

Что же дальше? Сейчас зонд «Паркер» совершает четвертый пролет мимо Венеры на пути к солнцу. На расстоянии 2 тыс. км он сделал новые снимки. Теперь остается ждать новых интересных фактов о Венере, на основании последних исследований.

Adblock test (Why?)

[Перевод] Пришло время и тебе встать на защиту Sci-hub

image
  • Быстрый старт спасения Sci-Hub: загрузите 1 случайный торрент (100 ГБ) из коллекции scimag и скачайте его. Оставайтесь на раздаче навсегда.
  • Трекер успеха миссии, спасибо phillm
  • Участвуйте в проектах Sci-Hub с открытым исходным кодом: freereadorg/awesome-libgen
  • Присоединяйтесь к /r/scihub, чтобы оставаться в курсе

Спасательная миссия для Sci-Hub и Open Science


Elsevier и USDOJ объявили войну Sci-Hub и Open Science. Эпоха Sci-Hub и Александры, сражающихся в одиночку, должна закончиться. Мы должны встать на её сторону.

7 мая Александра Элбакян из Sci-Hub сообщила, что ФБР прослушивает ее аккаунты более двух лет. Эта новость появилась после того, как Twitter заставил замолчать официальный аккаунт Sci_Hub в Твиттере, потому что индийские ученые и Elsevier организовались против неё.

Сам Sci-Hub в настоящее время заморожен и не загружал никаких новых статей с декабря 2020 года. Эта спасательная миссия сосредоточена на поддержке раздач (seeding) коллекции статей, чтобы подготовиться к потенциальному закрытию Sci-Hub.

Александра Элбакян из Sci-Hub, книжный воитель Library Genesis, Аарон Шварц и бесчисленное множество других неназванных боролись за то, чтобы освободить науку от хватки коммерческих издателей. Сегодня они делают это скрытно, в одиночку, без ведома, опасаясь тюремного заключения, и даже сейчас их прослушивает ФБР. Они жертвуют всем ради одного видения: Open Science.
Почему они это делают? Они делают это для того, чтобы скромные ученые на другой стороне планеты могли практиковать медицину, создавать науку, бороться за демократию, учить и учиться. Такие люди, как Александра Элбакян, пожертвовали бы своей личной свободой ради единственной цели: освободить знания. Но Elsevier Corp (RELX, рыночная капитализация: 50 миллиардов) хочет заставить ее замолчать, хочет видеть ее в тюрьме и хочет закрыть Sci-Hub.

Пришло время отправить Elsevier и USDOJ более четкое сообщение о судьбе Sci-Hub и Open Science: мы — библиотека, нас не заставят замолчать, мы не выключим наши компьютеры, и нас много.

Если вы следили за этой историей, то знаете, что это не первая наша спасательная операция.

Цель


Несколько сидеров Library Genesis в настоящее время раздают торренты Sci-Hub. Существует 850 торрентов scihub, каждый из которых содержит 100 000 научных статей, в общей сложности 85 миллионов научных статей: 77 ТБ. Это полная база данных Sci-Hub. Нам нужно это защитить.

Спасательная команда


Первая волна: нам нужно 85 сборщиков данных (datahoarders) для хранения и раздачи 1 ТБ статей каждый, всего 10 торрентов. Загрузите 10 случайных торрентов из коллекции scimag, затем загрузите торренты на свой клиент и храните столько, сколько сможете. Статьи кодируются DOI и в zip-файлах.

Вторая волна: обратитесь к 10 хорошим друзьям и попросите их скачать только 1 случайный торрент (100 ГБ). Это 850 сидов. Теперь мы библиотека.

Заключительная волна: разработка для Sci-Hub с открытым исходным кодом. freereadorg/awesome-libgen — это коллекция достижений с открытым исходным кодом, основанная на базах данных Sci-Hub и Library Genesis. Конечная цель здесь — децентрализация Sci-Hub с открытым исходным кодом, и она начинается с данных, но потребуются годы тяжкой работы разработчика, чтобы перенести эти библиотеки в будущее.

Сердечно благодарим сообщества /r/datahoarder и /r/seedboxes, seedbox.io и NFOrce за вашу поддержку предыдущих миссий и вашу любовь к науке.

Adblock test (Why?)

GitHub включил выгрузку видео

13 мая 2021 года GitHub объявил, что включил опцию выгрузки видео на платформу для всех пользователей. Разработчики могут загружать видеофайлы форматов mp4 и mov как в веб-версии сервиса, так и в мобильных приложениях GitHub для Android и iOS.
Цель нововведения — позволить разработчикам делиться проблемными моментами при программировании и выявлении ошибок в работе приложений, расшаривать контекст проекта, предоставлять отзывы о проверке кода, делиться обновлениями, передать сквозные рабочие процессы и визуально взаимодействовать с другими членами команды проекта.

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

GitHub пояснил, что новая функция будет особенно удобна для мобильных разработчиков, которые теперь могут записывать видео об ошибке на мобильном устройстве и сразу выгружать ролик в issue, в pull request или для обсуждения с одного и того же устройства.

Пример загрузки видеоролика на платформу с помощью мобильного приложения.


В планах GitHub добавить функцию развертывания видео по ссылкам и видеоаннотации в коде с помощью Loom, Vimeo и других сервисов.

Adblock test (Why?)

[Перевод] Отслеживание и визуализация положения МКС с помощью 30 строк JavaScript-кода

Предлагаю вашему вниманию перевод этой замечательной статьи.

В этом туториале мы создадим веб-приложение, визуализирующее положение любого спутника, например, Международной Космической Станции (далее — МКС), в режиме реального времени (ну, почти).

Мы создадим приложение с нуля и примерим на себя роль настоящего ученого в области ракетостроения.

  • Мы узнаем, где найти данные для отдельного спутника, известные как двухстрочный набор элементов (two-line element set, TLE) (далее — ДНЭ)
  • Мы используем библиотеку ”satellite-js” для предсказания орбиты спутника по ДНЭ (это часть напрямую связана с ракетостроением)
  • Мы используем библиотеку ”CesiumJS” для визуализации результата, однако, вы можете использовать любую библиотеку/движок, которые умеют работать с долготой, широтой и высотой

Превью конечного результата:
Здесь мы видим движение МКС по орбите со скоростью, увеличенной в 40 раз. Для того, чтобы увидеть текущее положение МКС, нажмите на иконку часов в верхнем левом углу панели управления.

1. Получение ДНЭ


ДНЭ — это формат данных, описывающий движение объекта, вращающегося по орбите вокруг Земли. Он был создан Командованием воздушно-космической обороны Северной Америки (North American Aerospace Defense Command, NORAD). Подробнее об истории его создания можно прочитать здесь.

Имея описание орбиты, мы можем предсказывать локацию, в которой будет находиться спутник, в любой момент времени (см. ниже).

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

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

Мы можем найти ДНЭ на сайте Space Track, который является реестром Космического командования Вооруженных сил США.

Другой ресурс — этот список на CeleStrak (прим. пер.: для доступа к сайту требуется VPN), поддерживаемый доктором T.S. Kelso.

Мы будем использовать последний, поскольку он не требует регистрации. Для того, чтобы найти ДНЭ для МКС, нажмите на ссылку Space Stations.

Первой в списке будет МКС:

ISS (ZARYA)
1 25544U 98067A   21122.75616700  .00027980  00000-0  51432-3 0  9994
2 25544  51.6442 207.4449 0002769 310.1189 193.6568 15.48993527281553

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

На указанном ресурсе можно найти ДНЭ для метеорологических спутников, спутников GPS и даже для глобальной спутниковой системы Starlink, разворачиваемой SpaceX.

2. Предсказание орбиты спутника


Следующим нашим шагом является преобразование ДНЭ в определенную позицию во времени.

Для этого мы будем использовать satellite-js.

Подключаем библиотеку из CDN:

<script src="https://cdnjs.cloudflare.com/ajax/libs/satellite.js/4.0.0/satellite.min.js"></script>

Затем передаем ей ДНЭ и время:
const ISS_TLE =
    `1 25544U 98067A   21122.75616700  .00027980  00000-0  51432-3 0  9994
     2 25544  51.6442 207.4449 0002769 310.1189 193.6568 15.48993527281553`;
// Инициализируем запись о спутнике с помощью ДНЭ
const satrec = satellite.twoline2satrec(
  ISS_TLE.split('\n')[0].trim(),
  ISS_TLE.split('\n')[1].trim()
);
// Получаем текущую позицию спутника
const date = new Date();
const positionAndVelocity = satellite.propagate(satrec, date);
const gmst = satellite.gstime(date);
const position = satellite.eciToGeodetic(positionAndVelocity.position, gmst);

console.log(position.longitude); // в радианах
console.log(position.latitude); // в радианах
console.log(position.height); // в км

Теперь у нас имеется текущее положение спутника (new Date()).

Данное положение является результатом построения определенной модели движения спутника. Эта модель называется SGP4/SDP4. Все ДНЭ следуют этой модели.

Если вас интересует, насколько точной является указанная модель, то короткий ответ звучит так: это зависит от нескольких факторов.

Точность ДНЭ зависит от нескольких факторов. Эти факторы включают в себя сенсоры, которые использовались для сбора данных, количество собранных данных о данном типе орбит, условия космической среды и т.д. К сожалению, поскольку названные факторы являются очень разными для каждого элемента набора, точность является не очень высокой. Несмотря на то, что NORAD проводит эксперименты по повышению точности предсказания движения спутников, ни один из методов не является идеальным.

3. Визуализация результата


Теперь у нас имеется возможность получать позицию спутника в заданный момент времени. Мы можем использовать это для анимирования пути спутника.

Но сначала давайте посмотрим, как анимировать отдельную точку в космосе с помощью CesiumJS.

Подключаем библиотеку вместе со стилями:

<script src="https://cesium.com/downloads/cesiumjs/releases/1.81/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.81/Build/Cesium/Widgets/widgets.css" rel="stylesheet">

Создаем контейнер:
<div id="cesiumContainer"></div>

Дальше нам нужно инициализировать так называемого обозревателя (viewer). Мы передаем ему несколько дополнительных настроек для отключения функциональности, которая требует наличия токена доступа:
const viewer = new Cesium.Viewer('cesiumContainer', {
  imageryProvider: new Cesium.TileMapServiceImageryProvider({
    url: Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"),
  }),
  baseLayerPicker: false, geocoder: false, homeButton: false, infoBox: false,
  navigationHelpButton: false, sceneModePicker: false
});
viewer.scene.globe.enableLighting = true;

Наконец, мы можем визуализировать положение спутника в виде красной точки в космосе:
const satellitePoint = viewer.entities.add({
  position: Cesium.Cartesian3.fromRadians(
    position.longitude, position.latitude, position.height * 1000
  ),
  point: { pixelSize: 5, color: Cesium.Color.RED }
});

Вот полный код данного шага на Glitch.

4. Анимируем путь


Для анимирования пути нам всего лишь нужно получить еще несколько будущих позиций спутника. CesiumJS поддерживает интерполяцию (переход) между позициями в течение времени из коробки.

Реализация анимации несколько многословна. Вот соответствующий код на Glitch. Ниже описаны самые важные концепции.

Мы создаем SampledPositionProperty. Это объект, содержащий позиции во времени, между которыми осуществляется переход:

const positionsOverTime = new Cesium.SampledPositionProperty();

Мы перебираем позиции в любом количестве, и для каждой позиции создаем объект со временем, который называется JulianDate в CesiumJS, а также саму позицию и добавляем их в качестве образца (sample):
for (let i = 0; i < totalSeconds; i+= timestepInSeconds) {
  const time = Cesium.JulianDate.addSeconds(start, i, new Cesium.JulianDate());
  // Получаем позицию с помощью satellite-js
  const position = Cesium.Cartesian3.fromRadians(p.longitude, p.latitude, p.height * 1000);
  positionsOverTime.addSample(time, position);
}

Наконец, мы передаем positionsOverTime в нашу точку:
const satellitePoint = viewer.entities.add({
  position: positionsOverTime,
  point: { pixelSize: 5, color: Cesium.Color.RED }
});

Точка будет двигаться вместе с временной шкалой. Для прикрепления камеры к движущейся точке делаем следующее:
viewer.trackedEntity = satellitePoint;

Заключение


Надеюсь, вам было интересно немного узнать о том, как создаются программы для отслеживания спутников. Конечно, многие вопросы остались без ответа, например, что означает каждый параметр ДНЭ? Как часто они обновляются? Каким именно образом происходит их обновление?

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

Вот парочка идей о том, что еще можно с этим сделать:

  • Визуализация нескольких спутников, например, спутниковой системы Starlink. В качестве источника для вдохновения можно использовать Celestrak viewer, показывающий каждый спутник из каталога. Можно, например, визуализировать рост количества спутников Starlink в течение времени
  • Отслеживание и визуализация положения спутника на уровне городской улицы. Можно добавить поиск здания или высоты с наилучшими условиями для наблюдения за спутником

Вот прототип второй идеи на Glitch. Демо: .

Также советую взглянуть на приложение «See a satellite tonight», разработанное James Darpinian, в котором используется комбинация CesiumJS и Google улиц.

Кроме того, те, кто разбирается/увлекается 3D-моделированием, могут представить спутники не в виде точек, а в реальном масштабе для демонстрации того, насколько близко друг к другу они находятся в космосе.

Прим. пер.: мой вариант приложения выглядит так:


Благодарю за внимание и хорошего дня!

Облачные серверы от Маклауд быстрые и безопасные.

Зарегистрируйтесь по ссылке выше или кликнув на баннер и получите 10% скидку на первый месяц аренды сервера любой конфигурации!

Adblock test (Why?)

[Перевод] Рассказ о том, почему в 2021 году лучше выбирать TypeScript, а не JavaScript

Недавно я, используя React Native, занимался разработкой мобильного приложения для медитации Atomic Meditation. Эта программа помогает тем, кто ей пользуется, выработать привычку медитировать, ежедневно уделяя этому занятию какое-то время. В ходе работы у меня появились серьёзные причины приступить к изучению TypeScript и начать пользоваться им вместо JavaScript в проектах среднего и крупного размера.

Прежде чем я начну свой рассказ, мне хотелось бы отметить, что вы сможете разобраться в этой статье, даже если никогда не пользовались React Native. Я буду всё подробно объяснять. А если вы делали какие-нибудь проекты на React, то, читая эту статью, можете считать, что React и React Native — это одно и то же.

А теперь расскажу о том, как обычный JavaScript втянул меня в неприятности.

День 1: всё идёт как надо


В React Native есть объект AsyncStorage, который представляет собой хранилище данных типа ключ/значение с асинхронным доступом к значениям по ключам. Он даёт разработчику очень простой механизм для организации постоянного хранения данных на мобильном устройстве пользователя.

Например, воспользоваться им можно так:

AsyncStorage.setItem("@key", value)

AsyncStorage позволяет хранить лишь строковые данные. Поэтому для того чтобы поместить в это хранилище число — это число сначала надо конвертировать в строку.

Ниже показано применение React-хука useState для объявления переменной sessionCount и для установки её начального значения в 0. Тут же имеется и функция setSessionCount, которая позволяет менять состояние sessionCount:

const [sessionCount, setSessionCount] = useState(0)

Предположим, пользователь завершил сеанс медитации (я, напомню, занимался разработкой приложения для медитации). В sessionCount хранится общее количество сеансов медитации, завершённых пользователем (я буду теперь называть этого пользователя «Anxious Andy» — «беспокойный Энди»). Это значит, что нам надо прибавить 1 к значению, хранящемуся в sessionCount. Для этого вызывается функция setSessionCount, в которой и выполняется прибавление 1 к предыдущему значению sessionCount. А потом количество завершённых медитаций нужно сохранить в AsyncStorage в виде строки.

Всё это надо сделать в некоей функции, которую я предлагаю назвать saveData:

// Пользователь завершил сеанс медитации…
const saveData = () => {
  setSessionCount(prev => {
    const newSessionCount = prev + 1

    AsyncStorage.setItem("@my_number", newSessionCount.toString())

    return newSessionCount
  })
}

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

День 2: затишье перед бурей


Беспокойный Энди получает уведомление, которое напоминает ему о том, что через 5 минут начинается его медитация. Но он не только беспокойный, но ещё и нетерпеливый. Поэтому он тут же идёт к себе в комнату, находит своё рабочее кресло, удобно (но при этом — сохраняя ясное сознание) в него садится и открывает программу.

Теперь, когда программа загружается, данные сессии Энди нужно прочитать из хранилища. В React хук useEffect позволяет выполнять функцию-коллбэк при монтировании компонента.

В коллбэке мы асинхронно получаем данные из хранилища, а после этого вызываем функцию setSessionCount(), передавая ей эти данные, то есть — «1»:

useEffect(() => {
  AsyncStorage.getItem("@my_number").then(data => setSessionCount(data))
}, [])

Беспокойный Энди успешно справляется с ещё одной медитацией. Поэтому к sessionCount надо добавить 1, что позволит сохранить общее число завершённых сеансов медитации.

Новое значение, как и прежде, мы записываем в хранилище:

// Пользователь завершил сеанс медитации…
const saveData = () => {
  setSessionCount(prev => {
    const newSessionCount = prev + 1

    AsyncStorage.setItem("@my_number", newSessionCount.toString())

    return newSessionCount
  })
}

К настоящему моменту пользователь завершил 2 сеанса медитации.

День 3: буря


Энди, теперь — уже вовсе не беспокойный, достаёт телефон и открывает приложение для того чтобы в третий раз подряд устроить сеанс медитации (и дела у него идут хорошо).

Он хочет узнать о том, как далеко продвинулся в деле выработки полезной привычки. Поэтому он открывает экран статистики. «О, да тут много всего интересного», — приговаривает он. «Отличная программа!».

Но его любовь к этой программе быстро сходит на нет…

Программа сообщает ему о том, что он провёл 11 сеансов медитации. А он-то медитировал всего два раза!


Неправильная статистика по сеансам медитации

Что пошло не так?


В первый день мы записали в sessionCount начальное значение — число 0.

Пользователь завершил сеанс медитации — поэтому мы добавили к sessionCount 1. Затем мы преобразовали то, что получилось, в строку — в «1», после чего записали это в асинхронное хранилище (вспомните — оно может хранить только строковые данные).

Во второй день мы загружаем данные из хранилища и записываем в sessionCount загруженное значение. То есть — «1» (строку, а не число).

Пользователь завершает сеанс медитации и мы прибавляем к sessionCount 1. А в JavaScript «1» + 1 равняется «11», а не 2.

Мы забыли преобразовать строковые данные, считанные из хранилища, в число.

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

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

Решить эту и другие подобные проблемы можно с помощью TypeScript.

Что такое TypeScript?


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

Браузеры не могут выполнять TypeScript-код. Поэтому TypeScript-файлы проекта надо транспилировать в JavaScript. На выходе получится несколько JavaScript-файлов (или один большой «бандл» с JS-кодом проекта).

Использование TypeScript в React Native-проектах


Добавить поддержку TypeScript в существующий React Native-проект очень просто. А именно, надо будет кое-что установить из npm и сделать пару настроек.

Теперь нужно будет лишь переименовать файлы с кодом, например — App.js в App.tsx, после чего заработает автоматическая система контроля типов.

После того, как изменено расширение файла, TypeScript разразится гневной тирадой о том, что аргумент типа 'string | null' нельзя назначить параметру типа 'SetStateAction<number>'.


TypeScript предупреждает разработчика о том, что с типами данных что-то не так

Это значит, что мне тут, чтобы избавиться от сообщения об ошибке, надо, во-первых, проверить data на null, а во-вторых — преобразовать из строки в число (воспользовавшись parseInt()):

useEffect(() => {
  AsyncStorage.getItem("@my_number").then(data => {
    if (data) {
      setSessionCount(parseInt(data))
    }
  })
}, [])

Использование TypeScript подталкивает разработчика к написанию более качественного и надёжного кода. Это просто замечательно!

По каким материалам изучать TypeScript?


Я изучал TypeScript по этому видеокурсу канала Net Ninja. И если бы мне надо было бы что-нибудь изучить, то я в первую очередь поинтересовался бы тем, нет ли на этом канале курса по тому, что мне нужно.

Кроме того, официальная документация по TypeScript очень даже хороша.

Итоги


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

Да, не могу не отметить, что JavaScript хорошо подходит для маленьких проектов. Но при работе над средними и большими проектами, а так же — над маленькими проектами, которые вполне могут вырасти, лучше, пожалуй, прибегнуть к TypeScript, даже если для этого придётся потратить время на его изучение. А если вы знаете JavaScript, то и TypeScript освоите без особого труда.

Используете ли вы TypeScript в своих React-проектах?


Adblock test (Why?)

[Перевод] Не начинайте учиться кодингу с Python, начните с языка C

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

Python — язык программирования по умолчанию для «самой сексуальной профессии 21-го века». Да, громкие слова о данных по-прежнему сохраняют за data science репутацию «сексуальной работы», хотя современные обстоятельства уже не полностью поддерживают это утверждение. Языку Python удалось добиться того, что он позволяет решать большинство проблем data science.

Кроме того, Python также популярен в блокчейне, DevOps и кибербезопасности.

Ажиотаж вокруг Python постоянно растёт. Этот язык используется как средство кодинга в бесчисленном количестве онлайн-курсов и учебных программ.

Несмотря на всё это и вопреки всей привлекательности Python, он не подходит для начинающих в программировании. Лучшим вариантом является C.

В этой статье я расскажу о том, почему в качестве опорной точки вместо Python следует использовать C.


Мой научный руководитель однажды сказал мне: «Всегда начинай с самого сильного. Первый удар определяет судьбу боя».

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

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

Любопытно, что преимущества Python одновременно являются и его недостатками. Такой подход культивирует ментальность, поощряющую нетерпеливость и лень.

С другой стороны, язык C — это язык программирования среднего уровня. Он находится между низкоуровневыми (ассемблер, машинные языки) и высокоуровневыми (Python, Ruby и т.д.) языками. С практической точки зрения из-за этого на C писать сложнее, чем на Python. Однако усилия того стоят.

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

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

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


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

Например, недавно в одной группе в Facebook я наткнулся на пост семилетнего ребёнка, ищущего фриланс-работу в сфере data science. Как доказательство своего опыта программирования он приложил сертификат онлайн-курса по Python.

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

Увидев это, я понял, что ситуация на рынке технологий значительно изменилась. Сегодня каждый хочет освоить Python, чтобы получить обещанную прибыльную должность.

Я не говорю, что в этом вина Python. Это наша собственная вина.

Это наша вина, потому что мы обычно ставим планку слишком высоко и ведём себя так, как будто Python — это альфа и омега. Если подходить реалистично, что для успеха в современном непредсказуемом мире требуется больше, чем желание и язык программирования.

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

Да, всё так просто!

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


Python — это всего-навсего набор правил.

Правила, управляющие Python, можно реализовать в некоторых языках. Обычно название конкретной реализации состоит из аббревиатуры использованного языка и слова Python.

Например, для C есть CPython, а для Java — Jython.

Самая популярная реализация Python написана на C. Поэтому определённые знания C точно пригодятся при расшифровке кода на Python.

Кроме того, довольно многие пакеты Python, допустим, NumPy, написаны на C и его младшем брате C++ для устранения недостатков эффективности, потому что по сравнению с ними Python ужасно медленный.

Когда человек привыкает к быстрому коду, он начинает болезненно воспринимать медленно выполняемые программы. Это ведёт к стремлению создавать эффективный код, как на Python, так и на других языках программирования.


За свою жизнь я поработал более чем с пятью языками программирования, первым был C, а последним — Python.

Хотя я благодарен тому фундаменту, который приобрёл благодаря старомодному C, я совершенно точно не пристрастен к этому языку. Мои сомнения в обоснованности изучения Python в качестве первого языка программирования обрели основу, когда я поработал с разработчиками, начавшими с Python.

Я заметил, что многим (не всем) разработчикам, с которыми я общался, не хватало навыков рефакторинга. Они редко воспринимали серьёзно проблемы с исполнением программ и их волновало только создание работающего кода. На самом деле, кодинг — это нечто большее.

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

В конечном итоге, путь к мастерскому освоению Python становится менее трудным, если есть фундамент в виде знания C.



На правах рекламы


Эпичные серверы — это VPS на Linux или Windows с мощными процессорами семейства AMD EPYC и очень быстрыми NVMe дисками Intel. Расходятся, как горячие пирожки!

Подписывайтесь на наш чат в Telegram.

Adblock test (Why?)

ФБР предположительно получило доступ к Apple-аккаунту Александры Элбакян, основателя Sci-Hub


Фото с личной страницы ВК Александры Элбакян

Сайт Sci-Hub предоставляет всем желающим бесплатный доступ к десяткам миллионов научных статей. С 2015 года он стал объектом судебного преследования и главным врагом научного издательского лобби. Против него поданы и удовлетворены иски от научного издательства Elsevier (на $15 млн) и Американского химического общества ($4,7 млн). Основатель сайта Александра Элбакян вынуждена скрываться от западного правосудия. Она скрывает том числе своё местонахождение.
8 мая 2021 года Александра получила на адрес Gmail письмо от службы поддержки Apple следующего содержания:

Письмо похоже на спам, но обратный адрес настоящий адрес Apple, говорит Элбакян.

Как следует из письма, ещё 6 февраля 2019 года Apple получила запрос ФБР на доступ к данным из учётной записи Элбакян. По причинам юридического характера компания только сейчас смогла сообщить пользователю о получении этого запроса.

Из письма остаётся неясным, к каким конкретно данным получило данные ФБР. Хотя ещё более реальный вопрос — действительно ли письмо подлинное или это фейк?

Элбакян изучила метаданные и пришла к выводу, что их «было бы слишком сложно и бесполезно подделывать». Основатель Sci-Hub опубликовала заголовки писем. На первый взгляд похоже, что письмо подлинное.

Конечно, это не стопроцентные доказательства. Мошенники могут подделать DKIM и DMARC, которые служат для аутентификации домена. Но Элбакян права в том, что если это искусная поддержка, то какой в ней смысл? Обычно злоумышленники ставят перед собой конкретные выполнимые задачи, а не присылают простые угрозы от Apple с упоминанием ФБР, это было бы крайне непрофессионально с точки зрения настоящих спецслужб. Тут никаких попыток фишинга иди других вредоносных действий. Просто сообщение из техподдержки Apple о факте, что ФБР получило доступ к её аккаунту.

Кроме того, электронное письмо выполнено точно в таком же формате, что и другие аналогичные сообщения, когда Apple информирует пользователей о деятельности правоохранительных органов в их аккаунтах (1, 2). Конечно, скопипастить такое письмо ничего не стоит. Но сам факт, что это просто уведомление без попыток фишинга, склоняет чашу весов в пользу его подлинности.

По словам Элбакян, её аккаунт Gmail связанный с учётной записью Apple, был зарегистрирован «давным-давно», когда она «была в школе».

Если к охоте за Александрой Элбакян подключилось ФБР, то это уже новый уровень преследования. В декабре 2019 года газета The Washington Post писала, что американский минюст расследует дело Элбакян по «подозрению в шпионаже в пользу Российской Федерации с целью кражи американских военных секретов у оборонных подрядчиков».

Никаких доказательств в поддержку этого утверждения опубликовано не было, кроме утверждений о том, что она собирала учётные данных подписчиков научных журналов, чтобы получить доступ к академической литературе для публикации на Sci-Hub. Со своей стороны, Элбакян опровергла обвинения: «Я знаю, что есть некоторые причины подозревать меня: в конце концов, у меня образование в области компьютерной безопасности а в подростковом возрасте я был хакером-любителем, — сказал Элбакян в комментарии газете Washington Post. — Но хакерство — не моя профессия, и у меня нет никакой работы в какой-либо разведке, будь то российской или какой-либо другой». Она добавила, что подозрение в связях с Россией выглядит «логично», однако Sci-Hub всегда был её личным проектом и не связан ни с чем гнусным.

Вся история немного напоминает охоту на ведьм времён Джозефа Маккарти (конец 40-х — 1957), когда известных учёных, писателей, актёров подозревали в связях с «красными» (reds), а шпионов разоблачали десятками во всех сферах деятельности.

Adblock test (Why?)

Китайская посадочная платформа с марсоходом совершила успешную посадку на Марсе


Рендеринг момента после посадки марсохода.

15 мая 2021 года посадочная платформа космического аппарата «Тяньвэнь-1» совершила успешную посадку, доставив на Марс первый китайский марсоход «Чжучжун». Китайское национальное космическое управление подтвердило факт посадки платформы в районе равнины Утопия в северном полушарии планеты.
Китай стал третьей страной после СССР (Марс-3 в 1971 году) и США (Викинг-1 в 1976 году), которая доставила к планете и высадила на поверхность Марса наземный управляемый научно-исследовательский аппарат.

Компьютерная реконструкция процесса посадки.


Описание элементов марсохода «Чжучжун».

Запланированный китайскими учеными срок работы марсохода составляет 90 марсианских суток (солов). Его электропитание обеспечивают четыре лепестка солнечных панелей. Скорость передвижения «Чжучжун» может достигать 200 метров в час. Шестиколесный марсоход обладает массой 240 килограммов.

Марсоход оснащен мультиспектральными камерами для навигации и топографической съемки, радиолокационной станцией подповерхностного зондирования для исследования геологического строения Марса до 10-метровой глубины, прибором для анализа химического состава грунта и поиска биомолекул, а также детекторами магнитного поля и метеостанцией.

Китайский ЦУП сообщил, что специалисты миссии начали проверку состояния бортовых систем и научной аппаратуры посадочного модуля и марсохода после посадки. После окончания тестов они начнут подготовку к спуску «Чжучжун» на поверхность и проверку его ходовых возможностей.

Марсоход будет съезжать с платформы на поверхность планеты по специальным направляющим.

Менее года назад 23 июля 2020 года тяжелая ракета-носитель «Чанчжэн-5» (CZ-5) вывела на заданную орбиту космические аппараты проекта «Тяньвэнь-1» для исследования Марса. «Тяньвэнь-1» (в переводе это означает «вопросы к небу») состоит из орбитального аппарата и посадочной платформы с первым китайским марсоходом, у нее на борту находятся 13 научных приборов.

Китайская космическая станция в полете к Марсу сделала селфи в дальнем космосе отстрелив камеру ради нескольких фото

Adblock test (Why?)

Роскомнадзор заблокировал портал и форум 4PDA

14 мая операторы связи РФ по указанию Роскомнадзора и решению Мосгорсуда на «КлаудФлэр, Инк» за нарушении авторских прав заблокировали доступ к порталу и форуму 4PDA.
На портале «черных» списков РКН указано, что доступ к ресурсу ограничен по статье 15.6 закона «Об информации» 149-ФЗ.

Администрация 4PDA в курсе проблемы и уже занимается ее решением в правовом поле РФ. Ресурс не имеет претензий к работе регулятора и провайдеров. Фактическая причина блокировки 4PDA — размещение пользователями форума плейлистов, содержащих один из спортивных телеканалов («Футбол 1»). Это нарушало авторские права на трансляции владельца федерального канала «Матч ТВ».

Жалоба в суд была отправлена от ООО «Национальный спортивный телеканал», иск относился к компании «КлаудФлэр, Инк» по части нарушения зарубежной компанией авторских и смежных прав. В документах суда истец требовал обязать ответчика прекратить создание технических условий, обеспечивающих размещение, распространение и использование на сайте 4PDA передач, вещаемых телеканалом «Футбол 1». Он также требовал на постоянной основе ограничить доступ к сайту 4PDA.ru — не к отдельным страницам ресурса, а именно ко всему ресурсу целиком. Это было отражено в решении суда.

В решении суда уточнено, что, согласно системе проверки владельца адреса в интернете Whois, провайдером хостинга сайта 4pda.ru было «КлаудФлэр, Инк», поэтому именно он выступает ответчиком по этому делу. Суд отметил, что истец в качестве доказательства нарушения своих прав предоставил скриншоты страниц, на которых были размещены ссылки на видеопередачи.

Технически компания «КлаудФлэр, Инк» могла обжаловать это решение суда в апелляционном порядке в течение месяца до 26 апреля, но это не было сделано. Владелец сайта 4PDA не наделен правом обжалования, поскольку не был стороной в данном деле, поэтому ресурс сражается за доступ пользователей самостоятельно и после уже всего произошедшего.

Пояснение PDA: «… в качестве ответчика по прошедшему делу были указаны не мы, а КлаудФлэр, Инк, соответственно у нас не было никакой информации об этой ситуации. То есть решение мы получили «по факту» и возможности повлиять на происходящее отсутствовала».

В настоящее время ресурс доступен по адресу 4pda.to, для доступа на форум там нужно перелогониться.

Adblock test (Why?)

[Перевод] Когда не было спутниковой связи: SOS-антенны, запускаемые воздушными змеями


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

Речь сейчас о военных США и Великобритании, которые взяли идею у немцев (прим. перев. — если в то время у СССР было нечто подобное — напишите в комментариях, пожалуйста). Несмотря на то, что этим системам чуть не век, мы все же можем видеть, как разработчики того времени старались решать возникающие проблемы. Как, например, сидя в той же лодке, можно развернуть антенную длиной в 90 метров? Ответ — при помощи воздушного змея. Ну или шара с водородом.

Зачем такая длинная антенна?


В те дни аварийной частотой была радиочастота в 500 кГц. Это решение позволяло размещать простые передатчики с искровым разрядником на спасательных шлюпках даже в 1920-х годах. Но вот длина волны такого диапазона составляла около 600 метров. Четвертьволновая антенна, способная работать с таким диапазонам, имела длину 150 метров.

После гибели «Титаника» аварийная частота в 500 кГц стала стандартом. Даже после того, как вышли из массового употребления искровые разрядники их продолжили оставлять в инвентаре спасательных шлюпок — просто в силу их простейшей конструкции. К началу войны именно частота 500 кГц стала аварийной.

Немного истории



Немецкая система NS2 (или NSG2) представляла собой двухламповый передатчик на 500 кГц с кварцевым генератором. Уже после начала Второй мировой войны англичанам удалось захватить один из них. Изучив NS2, военные Великобритании создали собственный передатчик, который получил название Т-1333. Американцы получили второй экземпляр той же системы примерно в то же время. Они разработали на базе немецкого устройства SCR-578 и его «потомка» — BC-778. И вот как раз у 578-й модели был специальный металлический каркас для подготовки коробчатого воздушного змея. Более того, американцы добавили еще и специальный воздушный шар, с генератором водорода для него.

Коробчатый воздушный змей, используемый немецкими военными для подъема антенны на необходимую высоту
Генератор позволял получить водород прямо из воды — об этом чуть ниже. Водородом наполняли шар, тот поднимался и за собой тянул антенну. Радиус действия передатчика мощностью 4,8W с антенной длиной 90 метров составлял 320 км. Для того, чтобы передатчик работал хоть как-то, достаточно было антенны длиной в 53 метра.

Змей и шар были единственным возможным решением для подъема антенны на высоту почти в 100 метров. Антенна наматывалась на катушку, она же служила инструментом для управления воздушным змеем. Все было отлично продумано — очевидно, что разработчики этой системы неоднократно ее испытывали, представляя себе, в каких условиях оказывается человек в покачивающейся на волнах шлюпке. Форма корпуса радиопередатчиков была такой, чтобы девайс можно было зажать между коленями во время работы — она напоминала песочные часы. У системы благодаря такой форме было даже собственное имя «Девушка Гибсона». Более того, устройства были водонепроницаемыми и держались на воде, а не тонули при попадании в нее.

Варианты систем были разными. Так, NSG2 выдавал 8 Вт с помощью кварцевого генератора. А вот версия от военных США не имела кристалла и, соответственно, была маломощной. Британская модель T1333 имела специальную сигнальную ракету в комплекте для первоначального запуска змея. Она поднималась на высоту примерно в 60-70 метров, где раскладывался змей. Воздушного шара у этой модели не было.

Весило все это удовольствие немало — около 15 кг. Но, как и говорилось выше, радиопередатчики не тонули. В комплекте у передатчиков США была сигнальная лампа, два воздушных шара, два водородных генератора, два комплекта антенн и парашют, чтобы все это можно было сбросить с самолета.


Надежно, как швейцарские часы


Разработчики систем старались предусмотреть все. Понятно, что военный, попавший в аварию и вынужденный как-то выживать в открытом море, был бы очень расстроен тем фактом, что батареи радиопередатчика сели. По этой простой причине там не было батарей, зато был генератор электричества — достаточно было покрутить рукоятку, чтобы «завести» девайс. Если сил хватало для кручения рукояти, можно было подать сигнал бедствия.

Кстати, генератор работал не на электролизе. В нем был гидрид лития, который реагировал с водой с выделением водорода в качестве продукта химической реакции. Система также передавала SOS в автоматическом режиме, причем, естественно, без какой-либо электроники или микроконтроллеров, до изобретения которых было еще много десятков лет.

Конструкция получилась настолько надежной и прочной, что военные и гражданские самолеты оснащались SCR-578 или его прямым потомком AN / CRT-3 вплоть до 1970-х годов. Новая модель умела работать с частотой в 8364 кГц.

Все для пользователя


Радиосистема, которая описывается в этой статье, была практически идеальной — в ней было продумано все, до мелочей. К сожалению, неизвестно, кто именно из немецких инженеров разработал оригинальный NS2, но это был человек или команда, разбиравшиеся в практических вопросах использования подобных систем. Форма устройства позволяет без проблем удерживать его на шаткой шлюпке, рукоятка генератора позволяет получать энергию, радиосистема действует безукоризненна. Интересно, какие еще были варианты для подъема антенны, прежде, чем разработчики остановились на комбинации воздушного шара и воздушного змея. Кроме того, интересно, почему британские военные решили остановиться на сигнальной ракете и ракетнице.

Можно сказать, что NS2 был одной из наиболее продуманных систем своего времени. К слову, предтеча NS2, система которая называлась NS1, оснащалась неудобной антенной, которой предполагалось пользоваться без вспомогательных инструментов. Кроме того, она получала энергию от батарей. Скорее всего, разработчики NS1 получили отзывы о своей системе и после этого смогли спроектировать NS2, которая является примером практичности и в наше время.

Adblock test (Why?)

Twitter проинформировала Роскомнадзор об удалении публикаций с запрещенным в России контентом

14 мая, согласно информации Роскомнадзора, Twitter проинформировала регулятора об удалении администраторами соцсети публикаций с запрещенным в России контентом и выполнении большинства требований РКН.
Представитель соцсети пояснил, по заявлению ведомства, что платформа с начала марта в приоритетном порядке начала удалить или блокировать противоправную информацию, выявленную Роскомнадзором, включая детскую порнографию, сообщения с пронаркотическим и суицидальным контентом, а также материалы экстремистского толка.

Надзорный орган после 15 мая проведет проверку платформы и примет решение о продлении действующих мер против соцсети (замедления), полного освобождения ресурса от ограничений в России или принятии по отношению к Twitter более значительных мер — блокировки.

10 марта Роскомнадзор начал замедлять работу соцсети Twitter в России, поскольку компания систематически не исполняла требования российского регулятора.

2 апреля 2021 года суд назначил сервису микроблогов Twitter подряд три штрафа на основе протоколов Роскомнадзора в общей сложности на 8,9 млн рублей за неудаление запрещенного в России контента по требованию регулятора.

5 апреля 2021 года Роскомнадзор объявил, что ведомство продлило замедление Twitter до 15 мая. Ранее РКН пообещал заблокировать Twitter с 16 апреля.

На Хабре опубликована полная хроника продолжающегося противостояния Роскомнадзора и Twitter.

Adblock test (Why?)

пятница, 14 мая 2021 г.

Ученые объяснили, почему крошатся бетон и асфальт

Снимки компьютерной томографии, демонстрирующие трещины в бетоне; GBS, GHY, TMS, MS TSS и GR обозначают различные типы заполнителей в бетонном растворе
Снимки компьютерной томографии, демонстрирующие трещины в бетоне; GBS, GHY, TMS, MS TSS и GR обозначают различные типы заполнителей в бетонном растворе

Команда ученых во главе с профессором Университета Хоккайдо Акихиро Мориеси выяснила, что ухудшение состояния асфальта и бетона происходит из-за присутствия в них органических веществ. Результаты исследования опубликованы в журнале PLOS ONE.

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

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

Они протестировали множество образцов асфальта с 1960 годов, а также несколько образцов бетона со всего мира. Бетон возрастом 120 лет был использован в качестве эталона.

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

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

Adblock test (Why?)

Шаблон удостоверяющей печати, когда нужно правильно и не как у всех

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

Началось всё в 2009 году, когда вместо того, чтобы, для документов в электронном виде, отсканировать печать (как это обычно делается), я, по разным причинам (включая уже заметную на тот момент деформацию полимера действующей печати), запланировал отрисовать её заново. Но перед этим решил проверить: не была ли она сделана при помощи одного из популярных генераторов. Моё предположение оказалось верным и, через несколько минут, печать, со 100% точностью, я получил просто, выбрав подходящий шрифт и введя нужные данные в поля программы. Результат выглядел примерно так:

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

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

Флэш технологию часто называют новой, что не совсем верно: первые серийные образцы оборудования для производства красконаполненных печатей по флэш технологии появились в 1964 году в Японии. Создаваемые по этой технологии печати могут иметь элементы разного цвета в полях произвольной формы. Вокруг полей разного цвета выдерживается определенное, зависящее от оборудования, минимальное расстояние. Такие печати имеют хорошую разрешающую способность, а их оснастки компактны и бесшумны при проставлении оттисков. Заполняются они краской устойчивой, после высыхания, к воздействию воды и спирта.

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

На следующем этапе нужно было определить минимально допустимую толщину линий и размер элементов микротеста для печати, но не найдя ничего конкретного, пришлось ориентироваться на ГОСТ Р 51511-2001, относящийся к печатям с воспроизведением государственного герба Российской Федерации, а именно на п. 6.2.3: «Наличие линий толщиной 0,08+0,01 мм.», и п. 6.2.1, 6.2.2: «Размер элементов микротекста от 0,5 до 0,8 мм.»

Помимо микротекстов типа «белый текст на черном фоне» и «черный текст на белом фоне», хотелось повторить еще один защитный приём: правильную геометрию букв текста, вписанного в окружность:

Но, не смотря на все попытки сделать это при помощи эффекта арки (arc) в Photoshop, желаемого эффекта добиться не удалось, пришлось спешно знакомиться с Illustrator и, попутно, регистрироваться на профильных форумах в поисках решения. И найдено оно было далеко не сразу, кажущаяся простой задача сопротивлялась не один день.

Изрядно намучившись с текстом, шрифт которого я создал с нуля (его можно видеть на последней работе) и, до этого, с переплетающимися волнистыми линиями – еще одним защитным элементом (реализация которого векторными масками в Photoshop была, пожалуй, самой сложной частью работы), я начал думать над тем, что должно быть в середине шаблона. Воображение рисовало красивые сцены с мифическими животными, но отсутствие художественных навыков вынуждало искать решение проще, времени на работу почти не оставалось. В итоге пришлось просто заполнить середину точками, сдвинуть некоторых из них и немного изменить размер (имитировать дефекты). В законченном виде шаблон выглядел примерно так:

В целом результатом я был доволен, заказ оформлен, оплачен и, спустя какое-то время, получен. Пробные оттиски впечатляли (тот шаблон, к слову, используется до сих пор). Однако я не учёл особенности зрительного восприятия человеком объектов, когда они могу казаться больше или меньше, чем есть на самом деле.

То же самое изображение:

Так это выглядит на самом деле (одинаковый размер печатей):

Таким образом, при одинаковых оснастках (обычно 40 мм.), оттиск по моему шаблону визуально кажется меньше, чем оттиск обычной круглой печати. Избежать этого эффекта, в моем случае, можно было заказав печать на оснастке 42-45 мм.

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

Наигравшись, я забыл о нём еще на несколько лет, до тех пор, пока, всё-таки, не захотел нормально освоить Illustrator, знакомство с которым, на тот момент, ограничивалось опытом работы над одним единственным элементом. Тогда, ожидаемо, очередные размышления на тему того, как бы сейчас выглядел шаблон, привели меня к следующей работе. В этот раз всё было по-другому: я продумывал каждый микрон, каждый элемент многократно переделывался. Иногда проходило несколько дней, прежде, чем он начинал меня полностью устраивать. Если я в чём-то сомневался, то откладывал работу, чтобы потом посмотреть на неё «свежим» взглядом. Примерно через год, был закончен первый вариант и меня он устраивал всем, кроме казавшейся не достаточной устойчивостью к секторному копированию (как я это назвал), когда для того, чтобы воссоздать «тело» печати достаточно отрисовать только небольшую её часть. Дальнейшую работу я продолжил в надежде исправить этот недостаток и, спустя какое-то время, сделать это мне удалось в полном объеме от задуманного.

Печать не чувствительна к пространственно ориентации. В середине находится читаемый двухмерный штриховой код
Печать не чувствительна к пространственно ориентации. В середине находится читаемый двухмерный штриховой код

Как работает защита от секторного копирования в моей реализации можно понять, по следующим кадрам:

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

Оставалось разобраться только с шаблоном под ультрафиолетовую краску, однако создавать что-то принципиально новое, учитывая количество уже потраченного времени, было бы полным безумием, и за его основу я взял этот же шаблон. Убрав штриховой код, я добавил еще 2 варианта оформления центральной части. Таким образом, при необходимости, можно обрезать шаблон до нужного размера, или использовать целиком как отдельную печать.

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

Adblock test (Why?)

Роскомнадзор: вниманию компаний, использующих в работе VPN-сервисы

image

14 мая 2021 года в пятницу вечером в 19:15 мск Роскомнадзор объявилкапсом в теме заявления), что «в соответствии с требованиями регламента реагирования об информировании о планируемом введении централизованного управления в отношении средств обхода ограничения запрещенной в силу закона информации в ведомства направлен запрос с просьбой информировать Центр мониторинга и управления сетью связи общего пользования (ЦМУ ССОП) об использовании сервисов VPN (VyprVPN и Opera VPN) для обеспечения работы технологических процессов предприятий и организаций».

Регулятор пояснил, что эти «сведения могут быть направлены уполномоченными сотрудниками компаний на электронный адрес sc@rkn.gov.ru и должны включать в себя название организации и контактную информацию».
18 апреля в сети появился якобы список сервисов туннелирования трафика, для которых РКН разрабатывает меры блокировок.


Такой список от Роскомнадзора рассылался внутри «Сбера» для ознакомления и проработки техрешений в случае его инициации.

1 апреля представитель Госдумы рассказал про суверенный Рунет, ситуацию с Twitter, возможную блокировку других сервисов и VPN.

Adblock test (Why?)

[Перевод] Заметки о Unix: надёжная работа с API C-библиотеки Unix возможна только из программ, написанных на C

Для того чтобы полностью реализовать требования системы верификации источника системных вызовов, разработчики OpenBSD хотят, чтобы Go выполнял бы системные вызовы через C-библиотеку, а не напрямую, из собственной среды выполнения (а у Go есть некоторые причины поступать именно так). На первый взгляд это кажется не особенно серьёзной проблемой. Это, конечно, немного неудобно, но у языка вроде Go должна быть возможность просто выполнять вызовы обычных функций из C-библиотеки, вроде open() (и использовать ABI вызова C-функций). К сожалению, не так всё просто, так как очень часто фрагменты обычного API C-библиотеки, на самом деле, реализованы в препроцессоре C. Из-за этого API C-библиотеки нельзя надёжно использовать для решения обычных задач без написания собственного связующего кода на C.


Звучит это, пожалуй, дико, поэтому позвольте мне проиллюстрировать это на примере всеми любимого значения errno, к которому обращаются для получения кода ошибки в том случае, если системный вызов даёт сбой (им же пользуются и для получения кодов ошибок от некоторых библиотечных вызовов). В этом материале я рассказывал о том, что в современных условиях механизм errno должен быть реализован так, чтобы у разных потоков были бы разные значения errno, так как они могут в одно и то же время выполнять различные системные вызовы. Это требует наличия у потоков собственных локальных хранилищ, а к такому хранилищу нельзя обратиться так же, как к простой переменной. Доступ к нему должен быть организован через специальный механизм, поддерживаемый средой выполнения C. Вот объявления errno из OpenBSD 6.6 и из текущей версии Fedora Linux с glibc:

/* OpenBSD */
int *__errno(void);
#define errno (*__errno())

/* Fedora glibc */
extern int *__errno_location (void) __THROW __attribute_const__;
# define errno (*__errno_location ())

В обоих этих случаях переменная errno, на самом деле, представлена определением препроцессора. Это определение ссылается на внутренние недокументированные функции C-библиотеки (на что указывают два символа подчёркивания в их именах), которые не входят в состав общедоступного API. Если скомпилировать код, написанный на C, рассчитанный на работу с этим API errno (включив в код errno.h), то он будет работать, но это — единственный официальный способ работы с errno. Нет некоей обычной переменной errno, которую можно загрузить в среде выполнения своего языка, например, после вызова функции open(). А если вызвать __errno или ____errno_location в своей среде выполнения, то это будет означать использование внутреннего API, который в будущем вполне может измениться (хотя он, вероятно, не изменится). Для того чтобы создавать надёжные среды выполнения языков программирования, которые ориентированы на общедоступный API С-библиотеки, недостаточно просто вызвать экспортированную функцию вроде open(); нужно ещё написать и скомпилировать собственную маленькую C-функцию, которая просто возвращает среде выполнения errno.

(Тут, помимо errno, могут быть и другие важные моменты; я предлагаю самостоятельно поискать их тем, кому интересна эта тема.)

Это, конечно, не какая-то новая проблема Unix. С первых дней stdio в V7 некоторые из «функций» stdio были реализованы в stdio.h в виде макросов препроцессора. Но в течение долгого времени никто не настаивал на том, чтобы единственным официально поддерживаемым способом выполнения системных вызовов было бы их выполнение из C-библиотеки, что позволяло обойти нечто вроде того, что представляет собой современный механизм errno, в тех случаях, когда не нужна совместимость с C-кодом.

(До того, как в Unix появилась многопоточность, сущность errno была представлена простой переменной и, в целом, выглядела как хороший, хотя и не идеальный интерфейс.)

Пользовались ли вы когда-нибудь недокументированными API?


Adblock test (Why?)