воскресенье, 8 декабря 2019 г.

windows 10 брандмауэр

Используя Windows 10, иногда необходимо запустить какуб либо программу установки чего-нибудь через Интернет. Что бы любая программа могла выйти в Интернет, надо предоставить ей это право в вашем брандмауэре.

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

Выбираем его, нажмем мыщкой

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

нас интересует кнопка "Обзор". Нажимаем ее и на дисках находим нужную программу.
Выбираем мышкой программу и нажимаем открыть. После этого программа попадает в список разрешенных в брандмауэре.

В квадратиках справа по строке ставим галочки и жмем внизу кнопку ОК.
Ну вот и все.

понедельник, 28 октября 2019 г.

Robocopy это очень круто

Иногда, в Windows 10 home приходится копировать большое количество файлов, например 3000 или больше. Я обычно пользуюсь explore'ром. Для простоты. Но в данном случае он очень нудит. Да, при большом объеме этих файлов, операция копирования может аварийно закончится из-за нехватки ресурсов. Причина этого в том, что Windows хочет быть "взрослым" - он применяет транзакционность. Сначала копирует файлы в буфер, а потом уж на место. Если что-то не вышло, то откат и вы ничего не скопировали.

Что бы выполнить копирование без этих "танцев с бубном" можно использовать программу robocopy

robocopy директория-источник директория-цель [нужные-файлы|*.*] /MIR

Все файлы быстро скопированы. У этой программы море опций и режимов. При указании опции /MIR скопированы будут входящие директории.  
 
Пример копирования 9 Гигабайт на флэшку F:

C:\Users\User>robocopy H:\Downloads\Архивы  F:\ simHeaven_X-World-Europe-1.2-full.7z

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

  Начало: 10 ноября 2022 г. 17:22:16
  Источник : H:\Downloads\Архивы\
  Назначение : F:\

     Файлы: simHeaven_X-World-Europe-1.2-full.7z

 Параметры: /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

                           1    H:\Downloads\Архивы\
100%        Новый файл             9.0 g        simHeaven_X-World-Europe-1.2-full.7z

------------------------------------------------------------------------------

               ВсегоСкопировано ПропущеноНесоответствие      СБОЙДополнения
Каталогов :         1         0         1         0         0         0
    Файлов :         1         1         0         0         0         0
         Байт :   9.016 g   9.016 g         0         0         0         0
      Время :   0:23:27   0:23:27                       0:00:00   0:00:00


Скорость :             6877428 Байт/сек.
Скорость :             393.529 МБ/мин. 

Для копирования директории, включая пустые файлы:
 
robocopy директория-источник директория-цель /e

Для тех кто хочет покопаться в документации перевод от Google:

-----------------------------------

ROBOCOPY
Article
02/03/2023
Копирование файлов с данными с одного места на другое.

Синтаксис

  > robocopy <source> <destination> [<file>[ ...]] [<options>]

Например, чтобы скопировать файл с именем yearly-report.mov из c:\reports в общую папку \\marketing\videos с включением многопоточности для повышения производительности (с параметром /mt) и возможностью перезапуска передачи,  если он прерван (с параметром /z), введите:

> robocopy c:\reports "\\marketing\videos" yearly-report.mov /mt /z
 
Важно

Если какие-либо данные копируются из корня устройства, каталог назначения примет атрибут «скрытый» в процессе копирования.

Параметры

ПараметрОписание
<source>Задает путь к исходной директории.
<destination>Задает путь к конечной директории.
<file>Задает файл или файлы, которые нужно копировать. Символы замены поддерживаются (* or ?). Если вы не задаете эти параметры, используется *.*.
<options>Задает параметры для использования с командой robocopy, включая параметры копирования, файла, повторной попытки, ведения журнала и задания.
Параметры копирования
Параметр Описание
/s Копирует подкаталоги. Этот параметр автоматически исключает пустые каталоги.
/e Копирует подкаталоги. Этот параметр автоматически включает пустые каталоги.
/lev:<n> Копирует только верхние n уровней исходного дерева каталогов.
/z Копирует файлы в перезапускаемом режиме. В перезапускаемом режиме, если копирование файла будет прервано, Robocopy может продолжить с того места, где оно было остановлено, вместо повторного копирования всего файла.
/b Копирует файлы в режиме резервного копирования, позволяя Robocopy переопределять настройки прав доступа к файлам и папкам (ACL). Это позволяет копировать файлы, к которым у вас в противном случае не было бы доступа, при условии, что они запускаются под учетной записью с достаточными привилегиями.
/zb Копирует файлы в перезапускаемом режиме. Если доступ к файлу запрещен, переключается в режим резервного копирования.
/j Копирует с использованием небуферизованного ввода-вывода (рекомендуется для больших файлов).
/efsraw Копирует все зашифрованные файлы в режиме EFS RAW.
/copy:<copyflags> Указывает, какие свойства файла копировать. Допустимые значения для этого параметра:
D - Data
A - Attributes
T - Time stamps
X - Skip alt data streams
S - NTFS access control list (ACL)
O - Owner information
U - Auditing information
Значением по умолчанию для параметра /COPY является DAT (данные, атрибуты и метки времени). Флаг X будет игнорироваться, если используется /B или /ZB.
/dcopy:<copyflags> Указывает, что копировать в каталоги. Допустимые значения для этого параметра:
D - Data
A - Attributes
T - Time stamps
E - Extended attribute
X - Skip alt data streams
Значение по умолчанию для этого параметра — DA (данные и атрибуты).
/sec Копирует файлы с безопасностью (эквивалентно /copy:DATS).
/copyall Копирует всю информацию о файле (эквивалентно /copy:DATSOU).
/nocopy Не копирует информацию о файле (полезно с /purge).
/secfix Исправляет безопасность файлов для всех файлов, даже для пропущенных.
/timfix Исправляет время файла для всех файлов, даже пропущенных.
/purge Удаляет конечные файлы и каталоги, которых больше нет в источнике. Использование этого параметра с параметром /e и целевым каталогом позволяет не перезаписывать параметры безопасности целевого каталога.
/mir Отражает дерево каталогов (эквивалентно /e плюс /purge). Использование этого параметра с параметром /e и целевым каталогом перезаписывает параметры безопасности целевого каталога.
/mov Перемещает файлы и удаляет их из источника после копирования.
/move Перемещает файлы и каталоги и удаляет их из источника после копирования./a+:[RASHCNET] Добавляет указанные атрибуты к копируемым файлам. Допустимые значения для этой опции:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
/a-:[RASHCNETO] Удаляет указанные атрибуты из скопированных файлов. Допустимые значения для этой опции:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/create Создает только дерево каталогов и файлы нулевой длины.
/fat Создает целевые файлы, используя только имена файлов FAT длиной 8,3 символа.
/256 Отключает поддержку путей длиннее 256 символов.
/mon:<n> Отслеживает источник и запускается снова, когда обнаруживается более n изменений.
/mot:<m> Отслеживает источник и запускается снова через m минут, если обнаружены изменения.
/rh:hhmm-hhmm Указывает время выполнения, когда могут быть запущены новые копии.
/pf Проверяет время выполнения для каждого файла (не для каждого прохода).
/ipg:<n> Определяет интервал между пакетами для освобождения полосы пропускания на медленных линиях.
/sj Копирует соединения (мягкие ссылки) на путь назначения вместо целевых ссылок.
/sl Не переходите по символическим ссылкам, а вместо этого создайте копию ссылки.
/mt:<n> Создает многопоточные копии с n потоками. n должно быть целым числом от 1 до 128. Значение по умолчанию для n равно 8. Для повышения производительности перенаправьте вывод с помощью параметра /log.
Параметр /mt нельзя использовать с параметрами /ipg и /efsraw.

/nodcopy Не копирует информацию о каталоге (по умолчанию выполняется /dcopy:DA).
/nooffload Копирует файлы без использования механизма Windows Copy Offload.
/compress Запрашивает сжатие сети во время передачи файла, если применимо.
/sparse Включает сохранение разреженного состояния во время копирования.

 Важно

При использовании параметра копирования /secfix укажите тип информации о безопасности, которую вы хотите скопировать, с помощью одного из этих дополнительных параметров копирования:

/copyall
/copy:o
/copy:s
/copy:u
/sec

 Замечание

Параметр /mt появился в Windows Server 2008 R2, и его функциональные возможности применимы к текущим версиям Windows Server.

Скопируйте параметры регулирования файлов
Параметр Описание
/iomaxsize:<n>[kmg] Запрошенный максимальный размер ввода-вывода на цикл чтения/записи в n килобайтах, мегабайтах или гигабайтах.
/iorate:<n>[kmg] Запрошенная скорость ввода-вывода в n килобайт мегабайтах или гигабайтах в секунду.
/threshold:<n>[kmg] Пороговое значение размера файла для регулирования в n килобайтах, мегабайтах или гигабайтах (см. примечания).

Параметры выбора файла
Параметр Описание
/a Копирует только файлы, для которых установлен атрибут Архив.
/m Копирует только файлы, для которых установлен атрибут Архив, и сбрасывает атрибут Архив.
/ia:[RASHCNETO] Включает только файлы, для которых задан любой из указанных атрибутов. Допустимые значения для этой опции:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xa:[RASHCNETO] Исключает файлы, для которых задан любой из указанных атрибутов. Допустимые значения для этой опции:
R - Read only
A - Archive
S - System
H - Hidden
C - Compressed
N - Not content indexed
E - Encrypted
T - Temporary
O - Offline
/xf <filename>[ ...] Исключает файлы, соответствующие указанным именам или путям. Подстановочные знаки (* и ?) поддерживаются.
/xd <directory>[ ...] Исключает каталоги, соответствующие указанным именам и путям.
/xc Исключает существующие файлы с такой же отметкой времени, но с разными размерами.
/xn Файлы исходного каталога, более новые, чем место назначения, исключаются из копии.
/xo Файлы исходного каталога, которые старше целевого, исключаются из копии.
/xx Исключает дополнительные файлы и каталоги, присутствующие в месте назначения, но не в источнике. Исключение дополнительных файлов не приведет к удалению файлов из места назначения.
/xl Исключает «одинокие» файлы и каталоги, присутствующие в источнике, но не в месте назначения. Исключение одиночных файлов предотвращает добавление новых файлов в место назначения.
/im Включить измененные файлы (разное время изменения).
/is Включает в себя те же файлы. Одни и те же файлы идентичны по имени, размеру, времени и всем атрибутам.
/it Включает в себя "подправленные" файлы. Подправленные файлы имеют одинаковое имя, размер и время, но разные атрибуты.
/max:<n> Указывает максимальный размер файла (чтобы исключить файлы размером более n байтов).
/min:<n> Задает минимальный размер файла (чтобы исключить файлы размером менее n байт).
/maxage:<n> Указывает максимальный возраст файла (чтобы исключить файлы старше n дней или даты).
/minage:<n> Указывает минимальный возраст файла (исключая файлы старше n дней или даты).
/maxlad:<n> Указывает максимальную дату последнего доступа (исключая файлы, неиспользуемые с n).
/minlad:<n> Указывает минимальную дату последнего доступа (исключая файлы, используемые с n). Если n меньше 1900, n указывает количество дней. В противном случае n указывает дату в формате ГГГГММДД.
/xj Исключает точки соединения, которые обычно включаются по умолчанию.
/fft Предполагается время файла FAT (с точностью до двух секунд).
/dst Компенсирует часовую разницу во времени летнего времени.
/xjd Исключает точки соединения для каталогов.
/xjf Исключает точки соединения для файлов.
Параметры повтора
Параметр Описание
/r:<n> Указывает количество повторных попыток для неудачных копий. Значение по умолчанию n равно 1 000 000 (один миллион повторных попыток).
/w:<n> Указывает время ожидания между повторными попытками в секундах. Значение n по умолчанию равно 30 (время ожидания 30 секунд).
/reg Сохраняет значения, указанные в параметрах /r и /w, как параметры по умолчанию в реестре.
/tbd Указывает, что система будет ожидать определения имен общих ресурсов (повторная ошибка 67).
/lfsm Работа в режиме ограниченного свободного места, который позволяет копировать, приостанавливать и возобновлять (см. Примечания).
/lfsm:<n>[kmg] Задает минимальный размер в n килобайтах, мегабайтах или гигабайтах.

Параметры ведения журнала
Параметр Описание
/l Указывает, что файлы должны быть только перечислены (а не скопированы, удалены или проставлены метки времени).
/x Сообщает обо всех дополнительных файлах, а не только о выбранных.
/v Создает подробный вывод и показывает все пропущенные файлы.
/ts Включает временные метки исходного файла в выходные данные.
/fp Включает в вывод полные пути к файлам.
/bytes Печатает размеры в байтах.
/ns Указывает, что размеры файлов не должны регистрироваться.
/nc Указывает, что классы файлов не должны регистрироваться.
/nfl Указывает, что имена файлов не должны регистрироваться.
/ndl Указывает, что имена каталогов не должны регистрироваться.
/np Указывает, что ход операции копирования (количество файлов или каталогов, скопированных на данный момент) не будет отображаться.
/eta Показывает предполагаемое время прибытия (ETA) скопированных файлов.
/log:<logfile> Записывает вывод состояния в файл журнала (перезаписывает существующий файл журнала).
/log+:<logfile> Записывает вывод состояния в файл журнала (добавляет вывод в существующий файл журнала).
/unilog:<logfile> Записывает выходные данные о состоянии в файл журнала в виде текста в формате Unicode (перезаписывает существующий файл журнала).
/unilog+:<logfile> Записывает выходные данные о состоянии в файл журнала в виде текста Unicode (добавляет выходные данные в существующий файл журнала).
/tee Записывает вывод состояния в окно консоли и в файл журнала.
/njh Указывает, что заголовок задания отсутствует.
/njs Указывает, что сводка задания отсутствует.
/unicode Отображает вывод состояния в виде текста Unicode.
Параметры задания
Параметр Описание
/job:<jobname> Указывает, что параметры должны быть получены из указанного файла задания. Чтобы запустить /job:jobname, вы должны сначала запустить параметр /save:jobname, чтобы создать файл задания.
/save:<jobname> Указывает, что параметры должны быть сохранены в указанный файл задания. Это должно быть запущено перед запуском /job:jobname. Перед этим параметром должны быть указаны все параметры копирования, повтора и ведения журнала.
/quit Выходит после обработки командной строки (для просмотра параметров).
/nosd Указывает, что исходный каталог не указан.
/nodd Указывает, что каталог назначения не указан.
/if Включает указанные файлы.

Замечания

Использование /PURGE или /MIR в корневом каталоге тома ранее приводило к тому, что robocopy также применяла запрошенную операцию к файлам в каталоге System Volume Information. Это больше не так, поскольку если какой-либо из них указан, robocopy пропустит любые файлы или каталоги с таким именем в исходном и целевом каталогах верхнего уровня сеанса копирования.

Если указаны параметры /IoMaxSize или /IoRate, robocopy включит регулирование файлов копирования для снижения нагрузки на систему. Оба могут быть настроены на оптимальные значения и параметры копирования, но системе и robocopy разрешено настраивать их на допустимые значения по мере необходимости.

Если используется параметр /Threshold, он указывает минимальный размер файла для включения регулирования. Файлы меньше этого размера не будут регулироваться. За значениями всех трех параметров может следовать необязательный символ суффикса, такой как [KMG] (килограмм, мега, гига).

Использование /LFSM запрашивает robocopy для работы в «режиме с низким объемом свободного места». В этом режиме robocopy будет приостанавливаться всякий раз, когда копирование файла приведет к тому, что свободное пространство на целевом томе упадет ниже минимального значения. Это значение можно явно указать с помощью флага /LFSM:n[KMG].

Если параметр /LFSM указан без явного минимального значения, минимальное значение устанавливается равным 10 % размера целевого тома. Режим малого свободного места несовместим с /MT и /EFSRAW.

Коды выхода (return)
Значение Описание
0 Скопированных файлов нет. No failure was encountered. No files were mismatched. The files already exist in the destination directory; therefore, the copy operation was skipped.
1 Все файлы были успешно скопированы.
2 В директории копирования существуют файлы, которых нет в директории источника. Копирования файлов не было.
3 Некоторые файлы были скопированы. Присутствовали дополнительные файлы. Сбоев не встречалось.
5 Некоторые файлы были скопированы. Некоторые файлы не совпадают. Сбоев не встречалось.
6 Существуют дополнительные файлы и несоответствующие файлы. Никакие файлы не были скопированы, и не было обнаружено сбоев, что означает, что файлы уже существуют в целевом каталоге.
7 Файлы были скопированы, присутствовало несоответствие файлов и присутствовали дополнительные файлы.
8 Несколько файлов не было скопировано.
 Замечание

Любое значение равное или большее чем 8 означает, что была как минимум одна ошибка во время операции копирования.

© Microsoft 2023

четверг, 26 сентября 2019 г.

Обработка списка

У профессионалов популярен С++, у многих остальных популярен Python. Меня привлекла в них некоторая похожесть:
В Python использование списков просто и логично.
   Spisok = [“fam1”, “fam2”]
   for tmp in spisok:
       print(tmp)


В С++ есть похожие конструкции:
 
#include <iostream>
#include <list>
#include <string>

using namespace  std;

int main(){

std::list spisok = {"fam1", "fam2"};
for (string tmp : spisok) {
    cout << tmp << endl;
   }
return 0;
}

 
 
Результаты будут похожи.
В языке Python текст программы интерпретируется. Переменные просто указывают на объекты. При выполнении программы проверяется тип объекта и если он не подходит для выбранной операции, то возникает ошибка. Запустивший программу должен разбираться. В языке С++ каждая переменная связана с типом и если возникли проблемы, компилятор на этапе компиляции расскажет программисту об этом.

суббота, 17 августа 2019 г.

X-Plane Отображение пакетов сценариев - новые правила

X-Plane Отображение пакетов сценариев - новые правила
Опубликовано 21 сентября 2012

Ben Supnik

 https://developer.x-plane.com/2012/09/scenery-packs-the-new-rules/

Правила расстановки приоритетов для пакетов с пейзажами изменились! Пожалуйста, прочитайте это внимательно!
Правила

Старый: Пакеты декораций загружаются в алфавитном порядке по имени.

Новое: пакеты с декорациями загружаются в соответствии с файлом .ini в Custom Scenery

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

Если вам не нужны наши пейзажи, отключите их в файле .ini (заменив SCENERY_PACK на SCENERY_PACK_DISABLED). Установщик не будет перезагружать их.

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

Как пакеты добавляются

При запуске X-Plane все пакеты, найденные в Custom Scenery, но не в INI-файле, добавляются в начало INI-файла. Если найдено более одного «нового» пакета, новые пакеты добавляются в алфавитном порядке (но все же перед каждым старым пакетом).

Любой отсутствующий пакет пейзажей удаляется из INI-файла при запуске X-Plane.

Это означает несколько вещей:

Если наложение не имеет высокого приоритета, вы можете удалить его, запустить X-Plane, затем вернуть его обратно и запустить X-Plane. Это перемещает это к вершине списка. (Или просто отредактируйте файл .ini - что, вероятно, проще.)

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

суббота, 25 мая 2019 г.

Регулирование смеси двигателя в в симуляторе

EGT, ROP и LOP



Что такое индикатор EGT? EGT соответствует температуре выхлопных газов. Прибор, который у нас есть в кабине, является своего рода термометром, который показывает температуру выхлопных газов двигателя.
Все, что вам нужно знать, это то, что каждая маленькая отметка (деление) над шкалой указывает на 25 ° F по сравнению с предыдущей. Таким образом, большая метка указывает на 100 ° F по сравнению с предыдущей большой. 

EGT вместе с CHT (температура головки цилиндров) является полезным индикатором того, что происходит внутри двигателя.

Просто посмотрите на это так: внутри двигателя вы смешиваете воздух с топливом. Вам нужно около пятнадцати частей кислорода на каждое топливо для «идеального» сгорания (когда все части топлива в камере сжигаются, и после сгорания не остается ни кислорода, ни топлива).
Соотношение 15: 1 называется стехиометрическим соотношением.
Когда вы летите на уровне моря и выставляете богатую смесь, соотношение ниже стехиометрического, скажем, 14: 1. Это означает, что некоторое топливо не будет сгорать. Это просто охладит цилиндры, создав тем самым определенный ЭГТ.
Когда вы летите и медленно обедняете смесь, вы увеличиваете соотношение до 15: 1. Поскольку при обеднении смеси в двигатель поступает меньше топлива, вы видите, что индикатор EGT сообщает о повышении температуры. Чем больше вы обедняете, тем выше температура.
В определенный момент температура достигает максимума. Этот пик - пик EGT, означает что вы достигли управления двигателем в соотношении 15: 1.
С этого момента EGT начнет падать, если вы продолжите обеднять смесь. Это связано с тем, что воздуха станет больше, чем топлива, несгоревший воздух охлаждает цилиндры, создавая более низкую EGT.
Теперь ROP и LOP начинают что-то значить.
ROP расшифровывается как Rich of Peak, то есть более богатая смесь, чем та, что вам нужна для полета на пике EGT.
LOP означает Lean of Peak, то есть более бедную смесь, чем та, которая вам нужна для полета на пике EGT.

Правило большого пальца

Теперь, когда мы знаем, что означают ROP и LOP, мы можем определить простое правило, чтобы избежать каких-либо проблем во время полета.
Давайте разделим нашу «работу двигателя» на три части, исходя из процента выходной мощности двигателя. Чтобы узнать, в каком проценте от максимальной непрерывной мощности (MCP) вы находитесь, настройте параметры двигателя на справочных таблицах, которые вы найдете в контрольных списках (цифровых или печатных) вашего самолета REP.
Очень высокая мощность (более 80% MCP)
В этой ситуации EGT уже сам по себе высок. Двигатель находится в состоянии «стресса», поэтому чем меньше мы обедняем, тем лучше для двигателя. Обедняем больше, чем 60LOP или обогащаем больше, чем 200ROP.
Высокая мощность (более 75% MCP)
Правило не обеднять между 180ROP и 40 LOP.
Если обогатите больше 180ROP, двигатель будет достаточно охлажден за счет топлива. Если вы идете более 40LOP, двигатель будет охлаждаться воздухом. В середине между ними вы повредите двигатель.
Следование LOP может привести к ухудшению характеристик двигателя, и к высокому быстродействию, но сэкономим много топлива.
Средняя мощность (более 70% MCP)
Обедняйте менее 25 LOP или богаче, чем 125ROP. Причины те же, что и выше. Интервал между ограничениями только что сузился, потому что внутреннее давление в двигателе ниже, чем раньше.
Средняя мощность (более 65% MCP)
Обедняйте меньше, чем пик или богаче, чем 100ROP.
Низкое энергопотребление (менее 65% MCP)
Вы свободны. Обедняете, сколько хотите.

 

 

понедельник, 8 апреля 2019 г.

Солнечная система в цифрах

Охотно допускаю, что приведенные цифры могут не совпадать ни с чем. Привел я их для сравнения. Ну например: Если поделить значения в таблице на миллион, то получится, что Солнце это шар размером 1 метр 40 см, а Земля это "шар" размером с виноградину (12 миллиметров) летит по кругу на расстоянии 150 метров. Людей на миллион делить не будем, иначе глубоко уйдем в микромир. Возникает вопрос а зачем это все сделали? Или что-то пошло не так?
Астрономическая единица равна расстоянию от Земли до Солнца: 149 597 870 700 метрам
Значения указаны в км
Название Диаметр Перигелий Афелий Вращение вокруг Солнца вокруг оси
Солнце 1 392 000 25,4 суток
Меркурий 4 879 46 001 009 69 817 445 87,97 суток 58 суток
Венера 12 104 107 476 259 108 942 109 224,7 суток 243 суток
Земля 12 742 147 098 290 152 098 232 год сутки
Марс 6 792 206 655 000 249 232 000 687 суток 24часа 37мин
Юпитер 139 822 740 573 600 816 520 800 11,87 лет 9часов 55мин
Сатурн 116 464 1 353 572 956 1 513 325 783 29,46 лет 10часов 14мин
Уран 50 724 2 748 938 461 3 004 419 704 84,02 года 17часов 14мин
Нептун 49 244 4 452 940 833 4 553 946 490 164,78 лет 16часов 7мин
Плутон 2374 4 438 120 009 7 376 670 969 248,09 лет 6,387 суток
С 2006 года Плутон за планету не признается. А вы говорите справедливость!?

суббота, 2 марта 2019 г.

Форматируемые строковые литералы в Python 3.6

2.4.3. Форматируемые строковые литералы

Новое в версии 3.6.
Форматируемые строковые литералы или f-строки это строковые литералы, перед которыми стоят буквы 'f' или 'F'. Эти строки могут содержать заменяемые поля, которые представляют из себя выражения ограниченные фигурными скобками {}. В то время как обычные строковые литералы всегда имеют постоянные значения, форматируемые строки это настоящие выражения, вычисляемые во время выполнения программы, а именно в момент активизации f-строки.
Эскейп последовательности декодируются так же как в обычных строковых литералах (за исключением случаев, когда литерал помечается как сырая строка(raw), символом r). После декодирования грамматика для содержимого строки может быть представлена так:
f_string ::= (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::=  "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression      ::=  (conditional_expression | "*" or_expr)
                         ("," conditional_expression | "," "*" or_expr)* [","]
                       | yield_expression
conversion        ::=  "s" | "r" | "a"
format_spec ::= (literal_char | NULL | replacement_field)*
literal_char ::=
Части строки вне фигурных скобок воспринимаются как литералы, за исключением двойных фигурных скобок '{{' или '}}', которые замещаются соответствующими одинарными фигурными скобками. Одиночная открывающая фигурная скобка '{' отмечает поле замены, которое начинается с питоновского выражения. После этого выражения может следовать поле преобразования, начинающееся символом восклицательный знак '!'. Может быть добавлен спецификатор форматирования, начинающийся символом двоеточие ':'. Поле замены заканчивается закрывающей фигурной скобкой '}'.
Выражения в форматируемых строковых литералах трактуется как питоновское регулярное выражение окруженное скобками, за несколькими исключениями. Не позволяется пустое выражение, и выражение типа lambda должно быть окружено явными скобками. Выражение замены может содержать разрыв строки (также как в строках внутри тройных кавычек), но не может включать комментарии. Каждое выражение вычисляется слева на право в том контексте, в котором появился форматируемый строковый литерал.
Если преобразование задано, то результат вычисления выражения перед форматированием преобразуется. Преобразование '!s' вызывает функцию str(), '!r' вызывает repr(), а '!a' вызывает ascii().
Результат затем форматируется при помощи протокола format(). Указатель форматирования передается в метод __format__() из выражения или из результата преобразования. Если указатель форматирования опущен, то передается пустая строка. Результат форматирования затем включается в финальное значение целой строки.
Указатель форматирования верхнего уровня может включать вложенные в друг друга поля замены. Эти вложенные поля могут включать свои собственные поля преобразования и указатели форматирования, но не могут включать более глубоко вложенные поля замены.
Форматируемые строковые литералы могут сцепляться, но поля замены не могут быть разделены через литералы.
Некоторые примеры форматируемых строковых литералов:
>>> name = "Fred"
>>> f"He said his name is {name!r}."
"He said his name is 'Fred'."
>>> f"He said his name is {repr(name)}."  # repr() is equivalent to !r
"He said his name is 'Fred'."
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
'result:      12.35'
Следствием использования того же синтаксиса, что и в обычных строковых литералах является условие: символы в полях замены не должны конфликтовать с кавычками, окружающими форматируемый строковый литерал:
f"abc {a["x"]} def" # ошибка: весь строковый литерал заканчивается проеждевременно
f"abc {a['x']} def"    # решение проблемы: использовать разные кавычки
Обратная косая черта в выражениях форматирования не допускается и вызывает ошибку:
f"newline: {ord('\n')}"  # вызывет ошибку SyntaxError
Чтобы включить значение с обратной чертой, созлайте временную переменную.
>>> newline = ord('\n')
>>> f"newline: {newline}"
'newline: 10'
Форматируемые строковые литералы не могут использоваться как строки документы (docstrings), даже если они и не содержат выражений.
>>> def foo():
...     f"Not a docstring"
...
>>> foo.__doc__ is None
True
Смотрите страницу PEP 498 для ознакомления с предложением, которое добавило форматированные строковые литералы и метод str.format(), который использует связанный механизм форматирования строк.

суббота, 23 февраля 2019 г.

Сопрограммы в языке Python

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

 В языке Python на идеях сопрограмм реализованы конструкции генераторов-итераторов. Эти функции при первом обращении организуют сопрограмму, а запускают обработку командой .next(). Возврат из сопрограммы промежуточных результатов выполняется оператором yield. Когда итерация закончена, сопрограмма выполняет оператор return. Построенная подобным способом сопрограмма может выполняться в циклах языка Python.

Подробнее этот алгоритм описан в PEP 255. Далее я привожу перевод части этого документа.


Определение: Yield

Вводится новое предложение:
yield_stmt:    "yield" expression_list
Предложение yield можно использовать только внутри функций. Функция, содержащая предложение yield называется функцией генератором. Функция генератор во всех отношениях является обычной функцией, но в члене кодового объекта co_flags этой функции, установлен новый флаг CO_GENERATOR.
Когда функция генератор вызывается, актуальные аргументы как обычно связываются с именами формальных аргументов локальной функции, но код в теле этой функции не выполняется. Вместо этого возвращается объект типа генератор-итератор; это соответствует протоколу итератора, поэтому, в частности, может использоваться в циклах for естественным образом. Обратите внимание, что когда намерение ясно из контекста, безоговорочное имя «генератор» может использоваться для ссылки либо на функцию-генератор, либо на генератор-итератор.

Каждый раз, когда вызывается метод .next() генератора-итератора, начинает выполняться код в теле функции-генератора до тех пор пока не встретятся предложения yield или return, или пока не будет достигнут конеч тела процедуры.

Если встречается предложение yield, статус функции замораживается и значение expression_list возвращается вызвавшему .next(). Под "замораживанием" мы подразумеваем что сохраняется все локальное состояние, включая указатели на локальные переменные, указатели на инструкции, и внутренний стэк: сохраняется достаточно информации для того чтобы при следующем вызове .next(), функция могла бы действовать точно так же, как если бы оператор yield был просто еще одним внешним вызовом..
Ограничение: Предложение yield нельзя использовать в выражении try из конструкции try/finally. Сложность состоит в том, что нет никакой гарантии, что генератор когда-либо будет возобновлен, следовательно, нет никакой гарантии, что блок finally когда-либо будет выполнен.
Ограничение: генератор не может быть возобновлен во время его активной работы:
>>> def g():
...     i = me.next()
...     yield i
>>> me = g()
>>> me.next()
Traceback (most recent call last):
 ...
 File "", line 2, in g
ValueError: generator already executing

Определение: Return

Функция-генератор может содержать предложения возврата в виде:
return
Обратите внимание на то, что список-выражений(expression_list) нельзя указывать в предложениях return в теле генераторов (хотя, конечно, их можно указывать в теле функций не-генераторов, которые находятся внутри функций-генераторов).
Когда встречается предложение return, управление происходит как и в любой другой функции. Сначала выполняются соответствующие завершающие выражения (finally clauses) (если они есть). Затем инициируется исклбчение StopIteration, сигнализируя что итератор закончен. Исключение StopIteration инициализируется и в случае если генератор закончил свою работу без явного предложения return.
Обратите внимание, что return не всегда эквивалентен инициализации StopIteration: разница заключается в том, как обрабатываются включающие конструкции try/except. Например,:
>>> def f1():
...     try:
...         return
...     except:
...        yield 1
>>> print list(f1())
[]
потому, что здесь как в любой функции return это просто возврат, но:
>>> def f2():
...     try:
...         raise StopIteration
...     except:
...         yield 42
>>> print list(f2())
[42]
А здесь исключение StopIteration как любое исключение заставляет выполниться выражение в правиле except.

понедельник, 21 января 2019 г.

Пространство имен (namespace) в языке Tcl

Что такое Пространство имен?

Пространство имен (namespace) это коллекция команд и переменных. Оно (Пространство имен) включает в себя те команды и переменные, о которых должна быть уверенность, что они не пересекутся с командами и переменными из других пространств имен. Язык Tcl имеет всегда хотя бы одно такое пространство имен, к которому мы ссылаться как глобальному пространству имен (global namespace). Глобальное пространство имен содержит все глобальные переменные и команды. Команда namespace eval позволяет вам создать новое пространство имен. Например,

namespace eval Counter {
namespace export bump
variable num 0

proc bump {} {
variable num
incr num
}
}
создает новое пространство имен, содержащее переменную num и процедуру bump. Команды и переменные в этом пространстве имен отделены от других команд и переменных в этой программе. Если существует команда с именем bump в глобальном пространстве имен, она отличается от команды bump в пространстве имен Counter.

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

Существуют пространства имен динамически. Вы можете добавлять и удалять команды и переменные в любое время, так что вы можете строить контекст пространства имен в течение времени существования скрипта используя серию команд namespace eval. Например, следующая серия команд имеет тот же эффект, что и предыдущие команды:

namespace eval Counter {
variable num 0

proc bump {} {
variable num
return [incr num]
}
}
namespace eval Counter {
proc test {args} {
return $args
}
}
namespace eval Counter {
rename test ""
}

Обратите внимание, что процедура test первоначально добавлена к пространству имен Counter, а потом удалена командой rename.

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

Уточненные имена

Каждое пространство имен имеет имя такое как history или ::safe::interp. Так как пространства имен могут быть вложенными друг в друга, уточненные имена используются для ссылки к командам, переменным и пространствам имен входящим в данное пространство имен. Уточненные имена похожи на иерархические цепочки имен для указания файлов в системе Unix или виджетов в Tk, за исключением того, что символы :: используются как разделители вместо / или .. Самое верхнее или глобальное пространство имен имеет имя “” (т.е., пустая строка), хотя :: это синоним. Например, имя ::safe::interp::create ссылается к команде созданной в пространстве имен с именем interp которое является дочерним от пространства имен ::safe, которое в свою очередь является дочерним от глобального пространства имен ::.

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

Counter::bump 5
Counter::Reset

Мы можем получить доступ к текущему счету примерно так:

puts "count = $Counter::num"

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

Foo::Counter::bump 3

Также вы можете использовать уточненные имена когда создаете и переименовываете команды. Например, вы можете добавить процедуру к пространству имен с именем Foo следующим образом:

proc Foo::Test {args} {return $args}

А вот так вы можете переместить эту же процедуру в другое пространство имен:

rename Foo::Test Bar::Test

Еще несколько слов об уточненных именах. Все пространства имен должны иметь не пустое имя кроме глобального пространства имен. Символ :: не допускается ни в команде, ни в переменных, ни в пространстве имен, за исключением использования символа как разделитель имен пространств имен. Лишние двоеточия в любом месте разделителя части имени пространства имен игнорируются; т. е. Два или более двоеточия рассматриваются как разделитель. Символ :: в конце уточненного имени переменной или команды ссылается к переменной или команде с именем {}. Кроме того, символы :: в конце уточненного имени пространства имен игнорируется.

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога