LINUX.ORG.RU

Избранные сообщения peter_t

Обнаружена скрытая загрузка проприетарного блоба браузером Chromium

Новости — Интернет
Группа Интернет

Один из пользователей Debian установил Chromium 43 и обнаружил, что при первом запуске браузер, не уведомляя пользователя, молча загружает и устанавливает расширение «Chrome Hotword Shared Module». Указанное расширение содержит внутри себя блоб (бинарный компонент), исходники которого не предоставляются. При этом, расширение даже не отображается в списке установленных расширений и не предоставляет возможности себя отключить.

( читать дальше... )

>>> Подробности

 ,

anonymous ()

Динамическая кодогенерация на Си

Форум — Development

Хочу добавить JIT в свой интерпретатор скриптового языка. Проблема в том, что на x86 данные в памяти могут быть доступны только либо для записи, либо для выполнения. Т.е. если записать в массив байты (опкоды машинных инструкций с RET в конце), то вызвать его как функцию уже нельзя. Погуглив, нашел, что в виртуальных машинах, упаковщиках, протекторах и т.п. используется такая схема: сначала сгенерированные опкоды записываются в стек, а стек уже может быть вызван как функция. Написал такой код:

#include <stdio.h>

#define MAX_CODE_SIZE 65536

typedef int (*FN_CALLBACK)();

int invoke(int size, unsigned char *source)
{
	unsigned char buffer[MAX_CODE_SIZE];
	register unsigned char *src;
	register unsigned char *dest;
	unsigned char *limit;
	if (size <= 0 || size >= MAX_CODE_SIZE)
		return 0;
	src = source;
	dest = buffer;
	limit = buffer + size;
	while (dest < limit)
		*dest++ = *src++;
	return ((FN_CALLBACK)((void*)buffer))();
}

unsigned char prog[] = {
	0x31, 0xC0, // xor eax, eax
	0x40,       // inc eax
	0x40,       // inc eax
	0xC3        // ret
};

int main(int argc, char *argv[])
{
	int r;
	r = invoke(5, prog);
	printf("Result: %d\n", r);
	return 0;
}
Он успешно компилируется GCC, при запуске выводит 2. Вопрос в том, будет ли такой код кроссплатформенным (на x86)? У меня в Ubuntu и Windows 7 он работает, но как будет на других ОС? Везде ли можно выполнять команды из стека?

 , ,

Den_Zurin ()

Электронная экономика. Как она должна быть устроена.

Форум — Talks

Изложу свою мысль. Деньги возникли как тот товар посредник при обмене, они сделали обмен удобным. Но они всё таки являлись информационным средством которое позволило выражать соотношение цены ресурсов, товаров и знаний. Удобная прослойка и абстракция. Товар же который покупали за деньги объединил в себе ресурсы, энергию и услуги. Инкапсулировав их в одну сущность и оценив её деньгами. Но согласитесь, это ведь не оптимально, возможны явные перекосы в итоговых соотношениях из за непрозрачности. К тому же из за этой инкапсуляции цены ресурсов и услуг (труда) начинают коррелировать и иметь друг для друга буферный эффект, прям как два параллельных электрических кабеля. И я думаю сложности регулирования экономики проистекают именно из за такой связи возникающей в товаре. Но сейчас нужное информационное обеспечение может быть выполнено без помощи денег, в их старом понимании когда они были привязаны к золоту. Сегодняшние деньги обеспечены главным образом нашей готовностью за них трудиться, то есть по сути они даже не обещание других денег, а обезличенное обещание труда, чужого труда. Если деньги выражают главным образом труд, то они не могут максимально эффективно выразить стоимость вещей. Ведь многие экономисты замечали что когда пытаешься выстроить модель плановой социальной экономики то становиться вопрос в том какое количество вещей должен потреблять тот или иной трудящийся так что бы он не испытывал недовольства и не терял мотивацию и этот вопрос имеет неидеальное компромиссное решение и каким бы оно не оказалось, кто то будет всё равно чувствовать себя обделённым.

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

  • 1) С добывающих предприятий взимается натуральный ресурсный налог, затем каждому гражданину предоставляется счёт на котором хранятся ресурсы или продукты их не глубокой переработки и энергия. Далее государство предоставляет добывающим предприятиям кредиты в виде денег и денежные компенсации небольшой части ресурсов. Так же деньги предоставляются научным организациям и некоторым производствам. То есть обеспечивается добыча ресурсов, а соотношение между финансированием науки и кредитами предприятиям определяет соотношение исследования/производство.
  • 2) Таким образом у всех есть ресурсы в равном количестве (за исключением добывающих предприятий, у них немножко больше), у учёных деньги, у предприятий кредиты.
  • 3) Потребитель делает заказ в магазине и расплачивается за него со своего счёта. Например если он покупает такой простой товар как столовый нож, то он платит: Сталь 120 грамм. +24 рубля + 5 кватт . Если булку хлеба, то: зерно 400 грамм, NaCl 3 грамма, + 3 рубля + 0,3 кватт. И так далее. Если какой то вид ресурсов у человека кончается, то он может обменять его на онлайн-бирже на другой вид ресурсов.
  • 4) Интересное следствие. Если ресурсы можно будет обменивать напрямую и легко то каждый из ресурсов становиться валютой которая сама себя обеспечивает. Более того деньги становятся в равную значимость и выражают собой только труд, технологии, знания и услуги. Конечно их возможно обменять на ресурсы, но этот обмен не является ежедневным и не обдумываемым, он устанавливает рыночное соотношение стоимости труда и ресурсов так же как и относительной стоимости валют.
  • 5) Таким образом у подобной экономики нет нехватки ресурсов обусловленной нехваткой денег.
  • 6) Макроэкономические расчёты становятся проще, уже всё не валиться в одну кучу. Кроме того все цены становятся прозрачными, производитель не может утаить ресурсы, он использует предоставленные, а потребитель оплачивает деньгами которые получает за свой труд, труд производителя и технологию предоставляемую наукой.
  • 7) Исчезают многие буферные эффекты связанные с непрозрачной структурой товара, одновременно появляется твёрдое основание экономики в виде добытых ресурсов, добычу которых можно точно предсказать, а их стоимость оценить в них самих.
  • 8) Конечно это потребует масштабной автоматизации, развития логистики которая тоже будет вынуждена стать автоматической. И электронного управления экономикой. Так же это потребует создания новых экономических моделей. Ещё важно учесть, что для того что бы система работала хорошо и не впала в зависимость от иностранных валют, она должна быть внедрена на очень большой территории обладающей актуальными технологиями и некоторой производственной избыточностью, а население обслуживаемое такой экономической системой должно быть не менее 250-300 миллионов человек.

Я догадываюсь что идея не нова, но я попытался выразить концепцию идеи и хоть какое то теоретическое доказательство её полезности.

А linux тут при том что автоматизация с ним проще и надёжнее.

 , , , ,

rezedent12 ()

Почему UTF-8 именно такой?

Форум — Talks

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

Почему нельзя было сделать так:

1) Если старший бит байта сброшен, то берём его как есть.

2) Если установлен, то сдвигаем предыдущее значение на 7 бит и добавляем младшие 7 бит байта.

То есть итерация по символам выглядела бы так:

char *str = ...;
int code = -1;
while (1) {
    if (*str < 0x80) {
        if (code != -1) {
            // Тут мы работаем с Unicode символом code
        }
        code = *str;
        if (code == 0) break;
    } else {
        code <<= 7;
        code |= *str & 0x7F;
    }
}

Плюсы: алгоритм обработки прост до безобразия, не нужно беспокоится о проверке на корректность (если про это забыть в случае с UTF-8, а кто-то обрежет строку по середине символа, то приложение может упасть), символы пакуются ещё компактнее, нет ограничения на размер символа (вдруг кому-нибудь когда-нибудь станет мало UTF32 и появится UTF64 - в моём коде достаточно будет заменить int на long long).

Почему авторы стандарта не догадались до такой простой идеи и нагородили очень странные вещи? Или есть какие-то причины по которой тот вариант лучше того, что выше?

 

KivApple ()

ксерокс не захотел копировать страницу из книги.

Форум — Talks

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

ксерокс-то обмануть удалось. Но вот звоночек очень тревожный. Надо бы запастись парочкой еще не закопиращенных фото-скан-приборов.

 

dikiy ()

хеш-таблица на диске

Форум — Development

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

ключ: битовая строка (желательно, но не обязательно, произвольной длины)

данные: фиксированное количество бит

критерии: минимальный объем на диске, быстрое время доступа на чтение, не слишком требовательно к озу (т.к. для десктопа).

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

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

 , ,

MyTrooName ()

Не получается запилить initramfs

Форум — Linux-install

По мотивам прошлого треда.

tl;dr: пилю на внешнем диске систему типа sysrescuecd, тестирую на нетбуке с атомом x86 на борту.

Скомпилировал busybox, написал init, сложил всё в ФС. А дальше начинаются приключения по одному из двух вариантов:

  1. если в конфиге ядра нет CONFIG_SATA_AHCI_PLATFORM, то ядро прогружается, init монтирует /proc, /sys и /dev, а когда доходит до монтирования настоящего корневого раздела, вываливается в ash. Расследование показало, что findfs не может найти раздел диска, а дальнейшее расследование — что и диска-то в /dev/ не видать. Ни /dev/sda или /dev/sdb. Получается, ядро не смогло определить контроллер или в /dev/ по какой-то причине не создались устройства? Я бы ещё понял, если бы модуль EHCI для USB не подгрузился (кстати, надо добавить), и поэтому не был бы виден внешний диск, но встроенного в нетбук ведь тоже не видать!
  2. если в конфиге ядра присутствует CONFIG_SATA_AHCI_PLATFORM, то загрузка замирает на
    Decompressing Linux... Parsing ELF... done.
    Booting the kernel.
    Тем не менее, ядро прогружено, и SysRq+… вполне себе работают. Что происходит — непонятно.

В оригинальном конфиге ядра с нетбука CONFIG_SATA_AHCI_PLATFORM присутствует.

Конфиги ядер систем: нетбука (f-book) и внешнего диска (rescue).

BLOCK, DEVTMPFS, DEVTMPFS_MOUNT, SATA_AHCI и USB_STORAGE присутствуют и там и там. EHCI_HCD на rescue собран модулем из-за старого бага, когда в системе есть хабы USB 3.0 и 2.0, первые не определяются или определяются не все, если EHCI_HCD=y.

На нетбуке ядро 3.8.10, на внешнем 3.9.11.

 ,

Deleted ()

Ситуация с Wayland: факты о X и Wayland.

Новости — Open Source
Группа Open Source

Это вольный перевод статьи, намедни размещённой на phoronix. Оринальная статья — обзор недостатков, их исправлений и преимуществ между X и Wayland. Её написал Eric Griffith, при участии Daniel Stone, специально для ресурса phoronix. Работа собрана по кусочкам из презентаций Keith Packard, David Airlie, Kristian Høgsberg, из страниц про X11, X12, Wayland в вики и на freedesktop.org, из прямых интервью с разработчиками.

Оригинал выпущен под Creative Commons версия 3, с указанием авторства; перевод доступен на тех же условиях (с указанием на авторов оригинала, как мне кажется).

( читать дальше... )

>>> Подробности

 ,

quiet_readonly ()

Slax получил финансовую поддержку и Slax 7 — быть

Новости — Slackware
Группа Slackware

Сегодня в рассылке пришла новость от автора дистрибутива:

I'm writing to you since you registered at Slax website (http://www.slax.org) some time ago.

I'm happy to announce that Slax got financial support and I'm now working on a next major update, Slax version 7. There are no IFs or BUTs, I'm working on it almost fulltime and the plan is to release Slax 7 within the next few months.

That's it, that's the message I wanted to share.

The next version of Slax, the version 7, will be a major update. It will be available for both 32bit and 64bit architectures, in 50 languages. Furthermore, I'm considering ARM architecture as well (waiting for my Raspberry Pi computer).

There is a huge amount of Linux distributions based on Slax already. I'm sure that the new release is going to determine the direction of many other projects in the future.

I'll post regular progress updates on my blog http://www.tomas-m.com and I'll seek there for your comments and your suggestions! So if you are interested, make sure to check that page often.

Please share this on your facebook and other social media, so that every Slax fan can participate in the brainstorming :)

Thank you very much!

Tomas M the author and developer of Slax

Коротко: дистрибутив получил финансовую поддержку, и автор с абсолютной уверенностью в своих силах обещает выпустить новую версию в течение нескольких месяцев. Будут доступны 32- и 64-битные версии, равно как и версия для ARM.

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

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

>>> Подробно о Slax

 , ,

cdshines ()

Контейнеры в C

Форум — Development

Будучи сиплюсплюсником, меня давно интересует как те же задачи выполняются в C. Знаю, на ЛОРе есть множество приверженцев C, надеюсь они ответят на пару простых вопросов.

Я являюсь активным сторонником идеи «Алгоритм должен работать настолько быстро, насколько позволяет железо». С этой точки зрения C++ даёт потрясающие возможности из-за своей системы кодогенерации. Да, я имею в виду шаблоны.

Не будем зарываться в дебри boost'а, возьмём простую задачу - контейнеры.

Для примера я взял односвязные списки в GTK GSList и Qt QList. QList позволяет хранить как простые, так и сложные типы с конструкторами, деструкторами, типы с общими данными. При этом накладных расходов на выделение в куче не происходит, а при реаллокации выбирается нужный алгоритм в зависимости от QTypeInfo<T>, к примеру для int будет вызван memcpy(), а для QString оператор копирования. Кроме того блок данных заранее резервируется и для сложных типов вызывается placement constructor. Для удаления данных по указателям используется алгоритм qDeleteAll(from,to), который сам дёрнет нужные конструкторы. Беглый просмотр GSList показал, что в нём можно хранить только указатели, со всеми вытекающими накладными расходами на аллокацию/уничтожение памяти, ручное кастирование, слежение за утечками, фрагментацию памяти.

Аналогичная ситуация со связными списками GList и QLinkedList.

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

Далее, счётчики ссылок и деструкторы.

К примеру, в C++ список строк будет выглядеть как QList<QString>, при этом можно забыть про внутреннюю структуру строки - конструктор, деструктор и операторы копирования сами занимаются подсчётом ссылок, разделением и уничтожением данных. Вернуть строку из функции проще простого:

QString foo()
{
    return listOfStrings.at( 5 );
}

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

В GTK я сходу нашёл GString:

struct GString 
{
  gchar *str;
  gint len;
};

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

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

Или может GTK неудачный пример, тогда дайте ссылку на правильную C-библиотеку с контейнерами.

Dendy ()

1С:Предприятие 8.3: клиенты и конфигуратор для Linux

Новости — Проприетарное ПО
Группа Проприетарное ПО

Тихо и незаметно вышла ознакомительная версия отечественной платформы для автоматизации учёта 1С:Предприятие 8.3. Главной особенностью релиза является появление толстого (в том числе в режиме конфигурирования) и тонкого клиентов для Linux (.deb и .rpm, x86 и x86_64).

Среди прочих изменений стоит выделить:

  • возможность автоматического обновления тонкого клиента при подключении;
  • поддержка защищённых соединений SSL и сертификатов во всех механизмах платформы;
  • поддержка внешних компонент и расширений для браузеров Google Chrome и Safari;
  • реструктуризация информационной базы в фоновом режиме;
  • выгрузка структуры и данных конфигурации в формате XML.

>>> Подробности

 , ,

ollowtf ()