Search
Write a publication
Pull to refresh
90
0
Сергей Шашков @ShashkovS

Менеджер продукта, методист, разработчик

Send message

Ох уж эти ценители стюардесс

Если серьёзно, то когда-то давно ~25 лет назад Pascal был моим вторым языком программирования после года с basiс и каким-то учебником. И тогда мне требовалось полгода, чтобы на Pascal сделать что-то интересное и красивое.
Может быть, PascalABC и вправду чем-то хорош как учебный язык. Но я как преподаватель не хочу связываться с подобными учебными языками: ученики может и поймут какие-то концепции лучше, но в большинстве своём никогда в своей жизни ни для какой своей потребности им не воспользуются. То есть обучение пройдёт только ради обучения.

Классная идея и реализация!
Было бы любопытно сравнить этот результат с каким-нибудь Javascript-движком.

Слово должно быть другое. Например, «Передохнуть»

А что в итоге с производительностью? Я как-то в надежде на ускорение от перехода на python3.11 обновил версию sanic'а и обвязки и... получил ощутимое ухудшение производительности плюс непонятные покебания по памяти. Пришлось откатить всё назад, так как необходимости в обновлении версии не было. Но у нас было 100-200prs.

Чтобы на этой странице было побольше полезно, то приведу два примера как быстро считать числа Фибоначчи при помощи матриц 2×2 и чисел вида a+b√5.
Мы реализуем класс матриц с операцией умножения и возведения в степень.
И класс чисел вида a+b√5 с основной арифметикой.

По формуле Бине $$F_n = \dfrac{ \frac{1+\sqrt5}{2}^n - \frac{1-\sqrt5}{2}^n }{\sqrt{5}}$$
А с матрицами Фибоначчи лезет при возведении матрицы (1 1) (1 0) в степень. А в степень можно возводить быстро.

class Mat2x2:
    __slots__ = ['a', 'b', 'c', 'd']

    def __init__(self, a, b, c, d):
        self.a = a
        self.b = b
        self.c = c
        self.d = d

    def __matmul__(x, y):
        ans = x.copy()
        ans @= y
        return ans

    def __imatmul__(x, y):
        x.a, x.b, x.c, x.d = x.a * y.a + x.b * y.c, x.a * y.b + x.b * y.d, x.c * y.a + x.d * y.c, x.c * y.b + x.d * y.d
        return x

    def __pow__(self, exp):
        cur = Mat2x2(1, 0, 0, 1)
        base = self.copy()
        while exp:
            if exp & 1:
                exp -= 1
                cur @= base
            else:
                exp >>= 1
                base @= base
        return cur

    def copy(self):
        return Mat2x2(self.a, self.b, self.c, self.d)

    def __repr__(self):
        return f'{self.__class__.__name__}({self.a}, {self.b}, {self.c}, {self.d})'


class R5:
    def __init__(self, a=0, b=0):
        self.a = a
        self.b = b

    def __repr__(self):
        return f'R5({self.a}, {self.b})'

    def __str__(self):
        if self.a and self.b:
            return f'({self.a}{self.b:+}√5)'
        elif self.b:
            return f'{self.b}√5'
        else:
            return f'{self.a}'

    def __add__(x, y):
        return R5(x.a + y.a, x.b + y.b)

    def __sub__(x, y):
        return R5(x.a - y.a, x.b - y.b)

    def __mul__(x, y):
        return R5(x.a * y.a + x.b * y.b * 5, x.a * y.b + x.b * y.a)

    def __pow__(x, power):
        if power == 0:
            return R5(1, 0)
        elif power % 2 == 1:
            return x * (x ** (power - 1))
        else:
            sq = x ** (power // 2)
            return sq * sq

    def __floordiv__(x, n):
        return R5(x.a // n, x.b // n)


def fib_stupid(n):
    c, p = 0, 1
    for _ in range(n):
        c, p = c + p, c
    return c


def fib_bine(n):
    return (R5(1, 1) ** n - R5(1, -1) ** n).b // 2 ** n


def fib_matrix(n, *, fib_mat=Mat2x2(0, 1, 1, 1)):
    if n == 0:
        return 0
    fib_pow = fib_mat ** (n - 1)
    return fib_pow.d


# Проверка корректности
for i in range(0, 100):
    assert fib_bine(i) == fib_stupid(i) == fib_matrix(i)

print(fib_matrix(100))

Вместо длинного и уникального для каждой таблицы

# Преобразуем результаты в список словарей
users_list = []
for user in users:
  user_dict = {
    'id': user[0],
    'username': user[1],
    'email': user[2],
    'age': user[3]
  }
users_list.append(user_dict)

можно писать короткое и универсальное

connection.row_factory = sqlite3.Row

Тогда все fetch'и будут возвращать не кортежи, а словаре-кортежи — можно обращаться к полям и по индексу, и по имени.

Справедливости ради mutable default, который определяется в момент создания функции, позволяет коротко писать функции, которым нужно что-то хранить между вызовами:

def do_some(x, *, _counter=[0]):
    _counter[0] += 1
    return x, _counter[0]

print(do_some('foo'))  # ('foo', 1)
print(do_some('boo'))  # ('boo', 2)
const do_some = (() => {
    let _counter = 0;
    return (x) => {
        _counter += 1;
        return [x, _counter];
    };
})();

console.log(do_some('foo'));  // ['foo', 1]
console.log(do_some('boo'));  // ['boo', 2],

Без этого нужно либо делать глобальную переменную, либо делать «фабрику», замыкание, класс или ещё что-то подобное.

Мне вот в питоне больше всего не хватает удобных распаковок словарей. То, что в js коротко:

const d = {foo: 1, boo: 2, zoo: 3};
const {foo, zoo} = d;

в питоне это громоздкое

d = {'foo': 1, 'boo': 2, 'zoo': 3}
foo, zoo = d['foo'], d['zoo']

Это не важно, асимптотически-то O(1), поэтому на большом количестве добавлений будет норм.

Но вообще O(n²) в [...prev] — это очень распространённая в js штука. Отчасти она обусловлена в желании делать «чистые» функции, которые не мутируют входные аргументы. Чистая функция — не нужно думать. Но бездумные копирования всего и вся при любом «чихе» стоит ресурсов...

Дожили: государство принудительно внедряет ВК в школы...
Ну то есть формально-то регаться во вконтакте не нужно, нужен только ВК ID...

Вроде уже очень давно работают имена в духе en_рус_???±2².txt
И даже windows terminal с такими именами отлично работает.

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

В таких местах прямо боль-боль.

Я имею в виду последовательности пусков без единой аварии. Вчера был 218-й успешный пуск. Последняя авария при посадке — 108-й пуск. Последняя авария самой РН — кажется, 19-й запуск.

Интересно, что этого видео здесь до сих пор нет.
Хотел бы напомнить, как «взлетал» и садился Falcon по началу.

А сейчас больше 100 успешных запуск+посадка подряд (не учитывая тех запусков, где посадка первой ступени не планировалась), а если считать просто пуски — то их под 200 уже.

Я тоже смотрел и радовался :)
5000 тонн стартует и поднимается почти на 40км.
До последнего надеялся, что они проведут расстыковку: уже понятно, что в космос не долетит, но запуск двигателей и планирование самого старшипа можно было бы и потестировать. По идее ему должно быть пофиг: отцепился, ну пролетел 5-10 километров вниз, выровнялся, включил движки — полетел. Ну да, уже не на орбиту, но управление там потестировать :)

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

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

(Простите за токсичный комментарий, не удержался)

Так, этот — js'ник, роботам такие не нужны, его забирайте первым!

Код внутри спойлера не работает.
Снаружи работает, внутри:

Заголовок спойлера

Код: `code` ``` много кода ```

<spoiler title="Заголовок спойлера">
Код: `code`
</spoiler>

Когда знаешь, что искать, то вполне сносно.

Вот полный список

$mol, nix, .NET, 1С, 1С-Битрикс, 3D-принтер, API, AR и V, ASP, Accessibility, Action Script, Adobe Flas, Agile, Ajax, Amazon Web Services, Angular, Apache, Apache Flex, Assembler, Asterisk, Atlassian, Big Data, Brainfuck, C, C#, C++, CAD/CAM, CGI (графика), CMS, CRM-системы, CSS, CTF, CakePHP, Canvas, Cisco, Clojure, Cobol, Cocoa, CodeIgniter, CoffeeScript, Creative Commons, Cubrid, D, DIY или Сделай са, DNS, Dart, Data Engineering, Data Mining, Delphi, Derby.js, DevOps, Django, Doctrine ORM, Drupal, ECM/СЭД, ERP-системы, Eclipse, Elixir/Phoenix, Elm, Emacs, Email-маркетинг, Ember.js, Erlang/OTP, F#, FPGA, Facebook API, Fidonet, Firebird/Interbase, Firefo, Flask, Flutter, Forth, Fortran, GPGPU, GTD, GTK+, Git, GitHub, Go, Godot, Google API, Google App Engine, Google Chrom, Google Cloud Platform, Google Cloud Vision API, Google Web Toolkit, Gradle, GreaseMonkey, Groovy & Grails, Growth Hacking, HTML, Hab, Hadoop, Haskell, Haxe, Help Desk Software, I2P, IIS, INFOLUST, IPFS, IPTV, IPv6, IT-инфраструктура, IT-компани, IT-стандарты, IT-эмиграци, Internet Explore, Java, JavaScript, Joomla, Julia, Kohana, Kotlin, Kubernetes, LaTeX, LabVIEW, Laravel, Lisp, LiveStree, Lua, MODX, Magento, Maps API, Matlab, Mercurial, Mesh-сети, Meteor.JS, Microsoft Access, Microsoft Azure, Microsoft Edg, Microsoft SQL Server, MongoDB, Mono и Moonlight, MooTools, MySQL, Natural Language Processing, Nginx, NoSQL, Node.JS, Objective C, Open source, OpenStreetMap, Openshift, Oper, Oracle, PD, PHP, Perl, Phalcon, PostgreSQL, PowerShell, Processing, Prolog, Puppet, Python, Qt, R, ReactJS, Ruby, Ruby on Rails, Rust, SAN, SCADA, SQL, SQLite, SaaS / S+S, Safar, Scala, Serverless, Service Desk, SharePoint, Silverlight, Small Basic, Smalltalk, Solidity, Sphinx, SvelteJS, Swift, Symfony, TDD, TYPO3, Tarantool, TensorFlow, Twisted, Twitter API, TypeScript, UEFI, UML Design, Unity, Unreal Engine, Usability, VIM, Visual Basic for Applications, Visual Studio, VueJS, WebAssembly, WebGL, WordPress, XML, XSLT, Xamarin, Xcode, Yii, Zend Framework, jQuery, Автомобильные гаджет, Администрирование баз данных, Администрирование доменных имен, Алгоритмы, Анализ и проектирование систем, Аналитика мобильных приложений, Антивирусная защита, Астрономи, Беспроводные технологии, Библиотека ExtJS/Sencha, Бизнес-модели, Биллинговые системы, Биографии гико, Биологи, Биотехнологи, Браузер, Брендин, Будущее здес, ВКонтакте API, Веб-аналитика, Веб-дизайн, Венчурные инвестици, Верстка писем, Видеокарт, Видеоконференцсвяз, Видеотехник, Визуализация данных, Визуальное программирование, Виртуализация, Восстановление данных, Высокая производительность, Гаджет, Геоинформационные сервисы, Глобальные системы позиционирования, Голосовые интерфейсы, Графические оболочки, Графический дизайн, Демосцен, Децентрализованные сети, Дизай, Дизайн игр, Дизайн мобильных приложений, Законодательство в I, Занимательные задачк, Зву, Здоровь, Игры и игровые консол, Изучение языко, Инженерные системы, Интервь, Интернет веще, Интернет-маркетинг, Интерфейсы, Инфографик, Информационная безопасность, Искусственный интеллек, Исследования и прогнозы в IT, История I, Карьера в IT-индустри, Квантовые технологи, Киберпан, Киберспор, Клиентская оптимизация, Кодобре, Компиляторы, Компьютерная анимация, Компьютерное желез, Контекстная реклама, Контент-маркетинг, Конференци, Копирай, Космонавтик, Краудсорсин, Криптовалют, Криптография, Лазер, Лайфхаки для гико, Логические игр, Локализация продуктов, Математика, Машинное обучение, Медгаджет, Медийная реклама, Мессенджеры, Микросервисы, Микроформаты, Моз, Монетизация IT-систем, Монетизация веб-сервисов, Монетизация игр, Монетизация мобильных приложений, Мониторы и Т, Мультикоптер, Накопител, Нанотехнологи, Настольные компьютер, Настройка Linux, Научная фантастик, Научно-популярно, Ненормальное программирование, Носимая электроник, Ноутбук, ООП, Облачные вычисления, Облачные сервисы, Оболочки, Обработка изображений, Образование за рубежо, Открытые данные, Отладка, Офисы IT-компани, Параллельное программирование, Патентование, Перифери, Планшет, Платежные системы, Повышение конверсии, Подготовка технической документации, Поисковая оптимизация, Поисковые технологии, Презентаци, Программирование, Программирование микроконтроллеров, Продвижение игр, Проектирование и рефакторинг, Производство и разработка электроники, Промышленное программирование, Прототипирование, Профессиональная литература, Процессор, Работа с 3D-графикой, Работа с векторной графикой, Работа с видео, Работа с иконками, Развитие стартап, Разработка веб-сайтов, Разработка для Office 365, Разработка для интернета вещей, Разработка игр, Разработка мобильных приложений, Разработка на Raspberry Pi, Разработка под AR и VR, Разработка под Android, Разработка под Arduino, Разработка под Bada, Разработка под Java ME, Разработка под Linux, Разработка под MacOS, Разработка под Sailfish OS, Разработка под Tizen, Разработка под Windows, Разработка под Windows Phone, Разработка под e-commerce, Разработка под iOS, Разработка робототехники, Разработка систем связи, Распределённые системы, Расширения для браузеро, Реверс-инжиниринг, Регулярные выражения, Резервное копирование, Робототехник, Семантика, Серверная оптимизация, Серверное администрирование, Сетевое оборудовани, Сетевые технологии, Сжатие данных, Системное администрирование, Системное программирование, Системы сборки, Системы управления версиями, Смартфон, Совершенный код, Сотовая связ, Соф, Социальные сети и сообществ, Спам и антиспа, Спортивное программирование, Стандарты связи, Старое желез, Статистика в I, Суперкомпьютер, Схемотехника, Телемедицин, Терминология I, Тестирование IT-систем, Тестирование веб-сервисов, Тестирование игр, Тестирование мобильных приложений, Типографика, Транспор, Удалённая работ, Умный до, Управление e-commerce, Управление медиа, Управление персоналом, Управление продажами, Управление продуктом, Управление проектами, Управление разработкой, Управление сообществом, Урбаниз, Учебный процесс в I, Физик, Финансы в I, Фототехник, Фрилан, Функциональное программирование, Хакатон, Хими, Хостин, Хранение данных, Хранилища данных, Читальный за, Экологи, Электроника для начинающи, Энергия и элементы питани, Яндекс API

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

Information

Rating
9,632-nd
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Product Manager
Lead
Python
Project management
Algorithms and data structures
asyncio