Pull to refresh
-1
1.6

Специалист по теории типов USB-кабелей

Send message

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

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

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

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

Иначе бы у нас астрологи уже миром правили.

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

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

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

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

Ну так вы и не должны делать 1RM каждую тренировку.

Решает в этом деле хорошая правильная разминка, спортивное питание, чередование упражнений на мышцы (две тренировки на неделе, раз в неделю на одну группу мышц)

Раз в неделю на группу — далековато от оптимума, два раза уже чутка лучше.

Я пытался заниматься два раза в неделю, но после того, как тренировки раздулись до 2.5 часов и в конце «ппц что ж я маленьким не сдох», то разбил на три в неделю с чередованием (одну неделю — два дня ног и один день рук, другую — наоборот). Получилось 80-90 минут за раз, вполне подъёмно, и по приходу домой даже хватает мозга что-нибудь почитать, скажем.

У меня, как я её делать начал, спина перестала болеть вообще, например.

Ни слова про питание, сон, БАДы и спортпит. Одними тренировками "набрать мышцы" не выйдет.

Это да.
Ctrl+F → протеин → 0 результатов (в статье).
Ctrl+F → креатин → 0 результатов (даже в комментах). А у меня от креатина несколько разных плато пробилось, спать проще стало, и на следующий день как-то лучше, зело рекомендую.

Или туда же range of motion — про это в статье вообще ничего нет. А как приходишь в тренажерку, так там минимум половина сидящих на той же вертикальной тяге в каждом повторе просто дёргает тренажер от чуть-больше-прямого-угла-в-локте до чуть-меньше-прямого-угла (и чуть ли не ложится в процессе). Зато там 190+ фунтов, да, молодцы.

Bicep curl — туда же, градусов 15-20 движение максимум, зато дофига вес.

ИМХО тренера нужны (если нужны) в первую очередь для того, чтобы отлавливать такую ерунду. Правда, среднему тренеру интересно, чтобы ему продолжали платить деньги, так что хз, насколько это реализуется на практике.

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

С небольшим весом (штанга + по 30 фунтов с каждой стороны, например) дедлифты вполне себе подъёмные, и ютуба плюс самоконтроля в зеркале достаточно.

вот этот момент не очень ясен- суммы-произведения на типах же, правильно?

Это A в аббревиатуре ADT — алгебра.

Когда у вас есть data Foo = MakeFoo Int Double String, то Foo эквивалентен туплу (то есть, произведению — и в смысле мощностей множеств, и в смысле теорката, и в интуитивном смысле) из Int, Double и String. Если же у вас data Foo = C1 ... | C2 ... | C3 ..., то это сумма вариантов из всех возможностей построить многоточие после C1, либо после C2, либо после C3.

Не отрицаю всю полезность и мощность всего этого, но вот лучшая читаемость в сравнении с растом - все ещё под вопросом, даже с туториалом попроще.

Хм. ИМХО таки

largest :: Ord a => [a] -> a

читабельнее, чем

fn largest<T: std::cmp::PartialOrd>(list: &[T]) -> &T

когда xs в вашем patP что-то там do это ни разу не даёт пояснений о предметной области - это что-то про авторизацию, про обработку контейнеров или про рисование крестиков-ноликов на экране

А когда это elements, то становится понятнее, о чём речь?

Собсна, о какой предметной области идёт речь при написании библиотечных функций вроде filter?

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

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

Ну, опять же, личная практика и практика людей, с которыми я работал.

Но при этом это нормальная практика хаскеля.

Но это не синтаксис. Это вопрос соглашений в вашей кодовой базе.

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

Сравните интро в те же дженерики в Rust с туториалом хаскела.

А, теперь я понял причину вашего удивления!

Потому что это (вместе с хаскельными дженериками) — три сильно разные концепции?

  • Дженерики в Rust — это просто параметрический полиморфизм в хаскеле. Это когда вы пишете showMany :: Show a ⇒ [a] → String. По ним (особенно в варианте Haskell98, без сложных расширений) вообще никакой документации не нужно, и синтаксис у них лайтовый («слово с маленькой буквы — переменная типа»). А по сложным расширениям даже официальная дока (не туториал) тоже вполне лайтовая: например или вот.

  • Дженерики в хаскеле — это, гм, наблюдение, что (почти) любой тип данных изоморфен рекурсивной структуре из сумм, произведений и ещё пары мелочей. Поэтому можно (почти) любой тип данных замапить на это обобщённое представление, обработать его обобщённым образом, и, если надо, размапить обратно. Именно так работает deriving FromJSON для автовывода десериализации из JSON библиотекой Aeson: оно говорит «компилятор, дай мне обобщённое представление данного типа через toRep», компилятор его даёт (вместе с метаинформацией вроде имён полей, или их строгости вот, как вы заметили), и Aeson уже обрабатывает его.
    Это на самом деле охренеть как удобно, потому что все ваши обобщённые функции превращаются в няшную приятную рекурсивную обработку структур данных. Когда мне на работе надо было набросать инфраструктурную либу для работы с тамошним аналогом sqlite, я дженерик-поддержку (де)сериализации произвольных типов сделал минут за 20.
    Согласно тому, что я знаю о расте, прямых аналогов дженериков там нет.

  • Template Haskell — это вообще тупо кодогенерация. Это код на хаскеле, который выполняется во время компиляции и может генерировать любой другой код. Через TH можно сделать поддержку строковой интерполяции, например (чтобы [i|My name is #{name}, my age is #{age}|] разворачивалось в "My name is " ++ name ++ ", my age is " ++ show age), или TH'ем можно сделать всё то же, что можно сделать дженериками (и у компилятора там чуть больше простора для оптимизаций).
    FromJSON тоже можно было бы сделать TH'ем, но код на TH писать куда менее приятно, чем на дженериках.
    TH — это плюс-минус растовские процедурные макросы.

Написанный до этого и, возможно, уже устаревший ответ на другие ваши замечания

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

Так здесь бизнес-логика — это как компилятор видит ваш код. Эта документация нужна тем, кто пишет библиотеки для метапрограммирования. Эта дока — для тех, кто пишет аналог serde из раста (aeson конкретно для жсона, например), а не тех, кто пользуется аналогом serde. Те, кто пользуется, просто пишет deriving (Generic, Aeson.FromJSON, Aeson.ToJSON) и в ус не дует.

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

Это будет в любой докуменатции.

Зачем вообще необходимо иметь примеры раскрытия типа в примерах, а не в тех разделе где-нибудь рядом с Generic Representation Type?

Потому что вся эта страница — про generic representation type?

Надеюсь, это всё сняло некоторые ваши вопросы.

Ведь они могут что-то доказать только когда число (длина массива и т.п.) известна на стадии компиляции.

Нет, в том-то и дело, что настоящие завтипы позволяют зависимости от рантайм-данных (в отличие от их эмуляции через DataKinds и ещё сотню расширений в хаскеле, или статические завтипы а-ля ATS, или path-dependent types в скале, или какой там академический термин для control flow analysis в TS). Просто рантайм-значения потребуют рантайм-проверок.

В завтипизированном языке вы можете написать

-- Для начала три библиотечных функции.
-- Тотальная функция с очевидной семантикой
-- Fin n — тип чисел, меньших `n`:
index : Vect a n → Fin n → a

-- Проверка, что число меньше другого
-- Dec P — либо свидетельство (элемент типа) P,
-- либо свидетельство ¬P,
-- тип вроде Dec P = Yes P | No (¬ P):
(<?) : (lhs : Nat)
     → (rhs : Nat)
     → Dec (lhs < rhs)

-- Если число меньше границы, то из него можно сделать `Fin`:
toFin : (n : Nat)
      → (n < b)
      → Fin b

-- REST-метод для индексации массива,
-- всё очевидно в рантайме:
indexEndpoint : Vect a len → MonadRest ()
indexEndpoint {len} someArray = do
  -- куда уж рантаймнее?
  idx <- param Nat "idx"
  case idx <? len of
    Yes proof → sendReply $ index someArray (toFin idx proof)
    No _contra → sendError "out of bounds!"

Зачем всё это нужно по сравнению с вашим вариантом TS рядом?

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

declare function makeAesKey(bytes: Uint8Array): Aes256Key;

говорит, что она физически эту проверку делать не может (ну или кидает исключение, но этого в типах нет).

Во-вторых, после того, как вы сделали эту рантайм-проверку один раз, вы дальше можете доказывать статически, что если она проходит, то какие-то зависящие от неё вычисления тоже проходят проверку, и дополнительно их делать не надо. Скажем, если idx выше меньше n, то idx * 2 / 3 (или idx & (idx - 1), или что угодно подобное) тоже меньше n, и это уже проверять в рантайме не надо, это можно просто доказать.

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

Метапрограммирование на основе рефлексии в Haskell емнип можно сделать нормальным, но хаскелл среднестатистическому программисту в принципе читать сложнее.

Чем сложнее? Как раз минимальный синтаксис, но не слишком минимальный (то есть (не (лисп))).

Даже условная Scala или Erlang в этом плане попроще будут.

С чтением эрланга у меня мало опыта, implicit val а[_] от(скалы): _ => { у[меня] = new глаза[меня](вытекают[меня]) }. ИМХО, конечно.

И всё-таки ноль в степени ноль — это единица или неопределённость? Пишите свои ответы в комментариях.

Если вы строите основания прямо с множеств, то a^b — это просто мощность множества функций из множества мощности b в множество мощности a. Поэтому:

  • Сколько функций из пустого множества в непустое множество? Ровно одна. Поэтому 5⁰ = 1.

  • Сколько функций из пустого множества в пустое множество? Да тоже ровно одна, поэтому 0⁰ = 1.

  • Сколько функций из непустого множества в пустое множество? Ноль, поэтому 0^(suc x) = 0 .

Если же вы модный чувак и строите математику от теорката, то можно заметить, что в Set (и вообще в любой декартово замкнутой категории, где это одно из определений) функтор A × • — левый сопряжённый к функтору экспоненциирования •^A (интуитивно, любой функции A × B → C однозначно соответствует «каррированная» функция B → C^A, и это соответствие хорошо себя ведёт), поэтому в частности 𝒜(A × B, C) ≅ 𝒜(B, C^A). Дальше для A ≔ 0, так как функтор • × B тоже левый сопряжённый, поэтому сохраняет копределы, а 0 — копредел (пустой диаграммы), поэтому 0 × B ≅ 0, поэтому ∀ B. |𝒜(0 × B, C)| = 1, поэтому ∀ B. |𝒜(B, C^0)| = 1, поэтому C^0 — терминальный, то есть, (изоморфен) 1.

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

Шаблоны и прочее метапрограмирование

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

Метапрограммирование — ну, дженерики норм (особенно если навесить pattern synonyms, если вам вдруг однобуквенные конструкторы не оч).

Лучше было арестовать и допросить создателей репозиториев и форков с этим файлом, да?

А, чёрт, я тут случайно оставил старый вариант (потому что сначала написал код здесь, а потом скопировал его в редактор, чтобы подобрать константу, но забыл его здесь обновить, лол). 5 секунд собирается, конечно, вариант с 33 вместо 20.

Но, впрочем, там не только 20 уровней рекурсии, там ещё и O(fib(n + 1)) сложений надо сделать, а это уже несколько дольше, особенно в интерпретируемом режиме. ghci вот тоже пару секунд на это тратит.

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

Почему? Вы ж даже в предыдущем комментарии писали о причинах, тогда как, опять же, я пишу о следствиях. У вас фокус на вас. У меня фокус на системах.

Я уже отвечал, но вас ответ не устроил.

Ответ «как скажете» меня действительно не устраивает. Если у вас это считается за ответ, то ну сорян.

Любопытно что я вам верю на слово но не вы мне.

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

Но в тоже время я не занимаюсь предсказанием там где у меня нахватает данных.

С полными данными любой дурак предсказать может. Вы попробуйте с неполными.

Попыток построения кусочка кайфового мира.

Да фигня вопрос, но это по-прежнему ограниченные контексты.

Я с удовольствием послушаю.

Всё очень просто: гипотезам надо искать опровержения, а не подтверждения.

описанием научного подхода

Не стоит вскрывать эту тему. Большинство даже «интересующихся» философией науки людей не ушло дальше «наука это когда фальсифицируемо))))».

Давно вы те видео не смотрели.

Да не, недавно. Но обсуждение этого уведёт нас сильно в политику.

Если добежали, то бегут и стреляют.

В основном — одиночными (пусть даже и часто).

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

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

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

И в толпе поддерживающих правительство, плюс, на стороне тех ещё и полиция будет.

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

Кстати, возможность вам иметь оружие уровня полицейского повышает или понижает ваши шансы на успех противостояния полиции?

Вопрос не стоит в том, чтобы вы себя там от кого-то защитили в случае конфликта "толпа на толпу" или тем более "толпа против вас", а в том, чтобы вы эффективно друг друга не перестреляли.

У кого это такой вопрос? У меня такого вопроса нет.

Ну то есть то что я тратил время на расписывание причин такого перехода, вас совершенно не убедило?

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

Это уже какая-то фрактальная ирония.

К тому же в наше время тяжеловато отличить человека саркастичного от человека долбануто.

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

Впрочем, вы ж опять сольётесь с ответа :(

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

я вас прекрасно понимаю, равно и мои, одно время до 99% доходило.

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

потому как наш разговор это предполагает

вы сразу делаете выводы

kekw

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

В десятку чего? Причин, почему все вокруг… не, не так. Причин, почему вы говорите, что все вокруг белые и пушистые?

Сорян, но проверка гипотез работает не так.

Нет не пытаетесь, вы сразу делаете выводы, часто ошибчные, а затем просто нападаете на оппонента.

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

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

Модельки. Предсказания. Предельно скучно.

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

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

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

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

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

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

Ох и способ у вас вести беседу...

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

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

Прямо вот вижу счастливейшего человека.

Я нигде не претендовал на звание счастливейшего человека.

Почти каждый, кого ловят на лжи, начинает говорить про "неполную информацию".

Штирлиц ещё никогда не был так близок к провалу.

Обычная манипуляция

ой как много манипуляций

Не, у Штирлица сегодня реально непруха.

Ничего важнее семьи и близких, да, согласился бы, а остальное...

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

Я думаю тут отвечать нет смысла, вам не интересно узнавать как дела обстоят на самом деле

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

А как дела обстоят на самом деле объективно, а не в рамках вашей модели — ну, тут у меня есть моя модель, я ей вполне доволен, и мне интересно исключительно лишь эту модель проверять на прочность и искать ей опровержения. Но да, у меня есть metacognition-констрейнты, которые я не собираюсь менять, потому что считаю их наиболее эффективными, поэтому «вам надо найти вдохновение» не является для меня опровержением.

С тех пор не пользуюсь.

Виндой или деллом? :]

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

Ни разу за много лет не наблюдал.

Ну, после миграции на новую машину — тоже.

Но это звучит как УМВР.

Потыкал на игровой машине — не подходит.

  • Кропа страниц нет.

  • Истории результатов поиска нет.

  • Навигации «вперёд/назад» по переходам по ссылкам внутри pdf нет (ну или я не нашёл).

  • Настраиваемой инверсии цветов нет. По i что-то происходит, но это пришлось гуглить, и я не понял, как настроить цвет фона и алгоритм смены цветов изображения/цветного текста.

  • Тёмная цветовая тема — это просто ад, там половина пиктограмм становится пикселизированным месивом.

Короче, даже для потребления контента линукс оказывается впереди. А это я ещё про программирование не говорил.

Information

Rating
1,604-th
Registered
Activity