LINUX.ORG.RU

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

А как нынче модно прозрачно MITM-ить SSL?

Форум — Admin

Я так понимаю, чтобы MITM'ить всё, надо заводить свою CA, и её прописывать во все броузеры, и генерировать сертификат на каждый видимый новый домен? Как это вообще структурно выглядит? Я понимаю, что просто порт пробрасывается на прозрачный прокси, но ведь сертификаты же... Никто себе не делал такое?

 , ,

slapin
()

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

Форум — Development

Рассказали тут забавное про ведро, дайте комментарий, зачем так?

«Ну просто многие его части писали наркоманы, это проявляется во всем, даже в мелочах )

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

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

вот типичное использоваение списка в ядре:

struct shit {
type1 some_shit;
....
struct list_head list_item;
...
type1 some_shit;
};

И потом имея указатель ptr на list_item можем сделать: list_entry(ptr, struct shit, list_item)

и когда смотришь на это первый раз - нифига не понимаешь
читаешь доку на kernel.org - еще больше нифига не понимешь

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

#define list_entry(ptr, type, member) \ ((type *)((char *)(ptr) – (unsigned long)(&((type *)0)->member)))

может выпендриваются просто
когда начинаешь читать исходники на предмет того как vfs с инодами работает - поначалу тоже волосы шевелятся»

 ,

stevejobs
()

Списки как в ядре linux

Форум — Development

Привет,

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

Вот функционал, аналогичный которому я ожидал бы увидеть: http://kernelnewbies.org/FAQ/LinkedLists

Как я понимаю std::deque мне не подходит так как: во-первых, std::deque, как я понимаю, сам инкапсулирует в себя нужный мне класс, а мне нужно наоборот; во-вторых, использует выделение памяти, при чем не совсем прозрачно.

 ,

DesertFox
()

Многопоточное приложение

Форум — Development

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

Вот, я перехватываю сигналы, например SIGINT. Кроме сигналов есть т.н. неисправимые ошибки в процессе выполнения.

При перехвате сигнала или появлении какой либо неисправимой ошибки я дергаю shutdown() завершение проги. Там все закрывается и освобождается.

Однако, естественно, что фатал эррор бывает вызывается из какого-либо потока, или даже, сигнал перехватывается «как-бы в контексте» потока. В таком случае вылезают понятные нативно, но не понятные в причинах касяки.

Собственно я сделал как. При старте проги получаю в (main контексте) thread_main = pthread_self() и устанавливаю threads_err = 0 Тогда в той части которая генерирует ошибку я проверяю в каком контексте она была вызвана (pthread_self() != thread_main), если это не в родительском main-потоке, то устанавливаю threads_err = 1 а цикл в main следит за состоянием этой переменной, и если ошибка есть, то вызывает shutdown()

Кажется мне, что это ГК. Или все же это нормальная практика? Нет? А как правильно?

 , , ,

deep-purple
()

Выравнивание неполного типа, расположенного на стеке

Форум — Development

Доброго дня.
Меня интересует, как можно разместить opaque type на стеке, использовав его нативное выравнивание. Пока у меня есть такое:

/* foo.h */

#ifndef FOO_H
#define FOO_H
	
#include <stddef.h>
#include <stdalign.h>

typedef struct foo Foo;
typedef unsigned char foo_store;

extern const size_t foo_sz;
extern const size_t foo_align;

Foo* foo_init (void);
Foo* foo_init_local (foo_store *store);

#define foo_local(x) alignas(max_align_t) foo_store x[foo_sz]

#endif //FOO_H
/* foo.c */

#include <stdlib.h>
#include "foo.h"

struct foo {
	int a;
	float b;
	double c;
	void *ptr;
};

const size_t foo_sz = sizeof(struct foo);
const size_t foo_align = alignof(struct foo);

inline static void assign (struct foo *f);

struct foo* foo_init (void) {
	Foo *f = malloc(sizeof *f);
	assign(f);
	
	return f;
};

struct foo* foo_init_local (foo_store *store) {
	struct foo *f;
	if (!store)
		return NULL;
		
	f = (struct foo*)store;
	assign(f);
	
	return f;
};

inline static void assign (struct foo *f) {
	f->a = 1;
	f->b = 2.0;
	f->c = 3.0;
	f->ptr = (void*)0xB16B00B5;
}

/* main.c */

#include <stdalign.h>
#include "foo.h"

int main (void) {
	foo_local(store);
	Foo *f = foo_init_local(store);
	
	return 0;
}

Всё вроде как работает нормально, но используется выравнивание по границе 16, а не 8. Условие: нельзя тупо задефайнить FOO_ALIGN 8 в foo.h (ну типа вдруг я захочу изменить состав struct foo). Я почему спрашиваю-то вообще. Вот говорят, что плохо выделять маленькие структуры в куче из-за её фрагментации (вопрос производительности не рассматриваем). Не возникнет ли некоего подобия фрагментации на стеке из-за несоответствующего выравнивания? Ведь адресов, кратных 16 в два раза меньше, чем кратных 8 (да ведь?). Ну и заодно: как malloc() выравнивет память? Надеюсь, понятно объяснил. Мне это ни для чего не надо, спрашиваю из интереса.

 ,

PamidoR
()

Какой путь необходимо проделать к теории категорий?

Форум — Talks

Привет, ЛОР!
Предположим, понравился мне Haskell. Предположим, более-менее я его понял. Начинал я его учить с надеждой, что пойму математику. Ан нет, язык как язык, просто подход необычный.
Поспрашивав людей, я получил ответ, что просто так теорию категорий не выучить. Кто-то сказал, что нужно знать топологию. Кто-то упомянул другие области. А что скажете вы?
Исходные данные: студент второго курса какого-то шаражного вуза, непонятно как ещё не вылетевший. Практически полностью не понимаю матан, чуть лучше дела обстоят с линейной алгеброй и дискреткой, хотя тоже весьма плохо. Да, я тупой. Или ленивый. Или всё сразу. Но хочется исправиться.
Цель: понять теорию категорий и, желательно, применение оной. Ещё желательно было бы изучить как можно больше сфер математики, но это так, мечты.
Что скажете? Какую шикарную литературу по математике вы в своей жизни встречали? Нет ли какой-то волшебной книги по математике, которая охватывала бы все сферы?

 

Deleted
()

Домашний угол

Галерея — Рабочие места

Давненько не постал ничего в галерею. Скринов с KDE там уже достаточно, так что решил лучше показать домашнее рабочее место. Тем более совсем недавно его обновил, воспользовавшись распродажами по случаю Black Friday. На фото:

  • Ноутбук System76 Galago Ultra Pro (по нему на лоре есть тема). Примечателен хорошей аппаратной конфигурацией при скромном размере и весе и установкой Linux из коробки. К сожалению у ноута нет док-порта, поэтому приходится подключать приличное число проводов. На ноуте Arch с KDE.
  • Так как периодически работаю из дома, то 2 x Dell P2214H установленных на MDS14 Dual Monitor Stand оказываются весьма кстати. Из интересного - оба монитора подключены к одному mDP порту через вот такую вот штуку от Matrox. Кстати, под онтопиком работает отлично - понадобилось только подсунуть правильный режим xrandr-у.
  • Беспроводные мышь Logitech M705 и клавиатура HP Wireless Elite Keyboard v2. Мышь взял, так как оказалась как-раз по руке. Клавиутуру на рабое использую эргономичную от MS, но для дома она оказалась очень уж громоздкой, так что купил слим-версию от HP - при необходимости легко убирается под мониторы, освобождая место на столе.
  • Примечательная акустика - Bose Computer MusicMonitor. Глядя на ее размер, никогда не подумаешь, что она может ТАК звучать. В общем вещь дорогая, но сделана потрясно (кстати, корпус металлический) и место на столе экономит.
  • Стол и стул куплены в местном магазине офисного барахла (Staples). У стола стеклянная столешница (на которой очень удобно паять), стул обтянут синтетической сеткой, что гораздо приятнее летом для тела, чем кожзам.
  • Веб-камера, стереомикрофон, usb-хаб, наушники, флешки, кружка, лампы и прочие мелкие нужности. И да, кубик рубика - учусь собирать на досуге.

Кроме собственно стола еще есть полка (левее стола, в кадр не попала), где хранятся фототехника, книги, мелкие инструменты и паяльник, кабели и всяческие железки; и телек с подставкой, которая приютила NAS, принтер, роутрер, свич и прочую мелочь.

Вот так собственно и работаю/развлекаюсь. Если есть какие вопросы - задавайте.

 ,

ava1ar
()

WSGI

Галерея — Скриншоты

GTK2/3, Firefox: Vertex Light
Emerald: Vertex Mono
Иконки: Numix Circle
Обоина и много других картинок
Шрифты Open Sans и Monaco.

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

 

zezic
()

Python-программист, Москва, полная занятость

Форум — Job

В http://qrator.net требуется Python-программист.

Основные требования:

  • Python 2.7: хорошее знание языка, умение работать со стандартной библиотекой
  • Уверенное владение MySQL или PostgreSQL
  • bash: умение писать несложные скрипты
  • Опыт работы в среде UNIX (Linux, OS X, *BSD...)
  • Сложность алгоритмов (на базовом уровне)
  • Понимание принципов многопоточного программирования

Приветствуется, но необязательно:

  • Знание стека протоколов TCP/IP, Berkeley sockets, умение диагностировать проблемы сетевого приложения на сетевом и транспортном уровне
  • Знакомство с принципами работы протоколов HTTP и DNS
  • Знакомство с C/C++, умение работать с ctypes из Python и/или с Python API из C
  • Знакомство с Python-библиотеками для криптографии
  • Опыт реализации алгоритмов машинного обучения
  • Знакомство с принципами объектно-ориентированного и функционального программирования
  • Понимание проблематики предметной области - фильтрации паразитного трафика и защиты от DDoS-атак

Для связи можете писать мне, ab@qrator.net

 , ,

Shaman007
()

Boost что за зверь такой?

Форум — Talks

На самом деле мне всё равно что это за хреновина, которая собирается очень долго и требует много места, в процессе сборки покрайней мере. Как какой-то gcc или firefox.

Удручает, что эту хреновину теперь используют в моих mpd и ncmpcpp, пришлось откатиться до версии 0.18.21 и 0.5.10 соответственно. И это навсегда. Козлячие, загубили своими инновациями самый лучший консольный аудиоплеер!

Перемещено mono из development

 ,

Spoofing
()

Django vs JS

Форум — Web-development

Хочется освоить Web-разработку. Одни советуют Django, другие - JS (всё остальное менее востребовано на местном рынке труда). Сам я пайтонист, но не прочь изучить и другие языки/технологии. Что посоветуете? И в чём плюсы и минусы каждого из них?

Заранее спасибо

 angularja, , , js.node,

zelo
()

Landing page от программиста

Форум — Web-development

Сделал я сервис - никто не использует. Думаю, нужен landing и жизнь наладится. Сделал landing. Теперь нужно понять насклько все плохо.

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

https://hashmem.com

ps И не нужно убеждать, что сервис плох - сервис отличный и меня не переубедить. Вот маркетинг мой действительно плох

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

 

fedotxxl
()

Ман по Firefox + userChrome.css

Форум — General

Хотел я попилить Firefox с помощью файла из сабжа. Не могу нагуглить справочник по элементам UI Firefox. Если такой есть, дайте, пожалуйста, ссылку. Если же нет, подскажите, пжлст, чем можно взглянуть эти элементы UI и их код с CSS самому.

 , , , ,

DeadEye
()

Вечер воскресения

Галерея — Скриншоты

Обычная рутина перед понедельником... эх как же не хочется завтра вставать и ехать на работу
Вот png скрин #1, вот png скрин #2
Lenovo ThinkPad Edge + 24" Dell U2413 Silver
Debian Stable 64, noflash ;)

 , ,

chilinik
()

Ёкарный Бабай

Галерея — Скриншоты

GTK2/3: Iris (Recolored)
Иконки: Numix Circle feat. Flattr (Recolored)
Обоина
Compiz, Docky
Screenfetch врёт и всё такое.

Прошу, сообщите, если с таким заголовком нас не пропустят.

 

zezic
()

На чем написан rxvt-unicode?

Форум — Development

Мне казалось, что на C, я полез в исходники, а там


#include "../config.h"
#include "rxvt.h"

#include <stdlib.h>
#include <string.h>

int
main (int argc, char *argv[])
try
  {
    ptytty::init ();
    rxvt_init ();

    rxvt_term *t = new rxvt_term;
    t->init (argc, argv, environ);
    ev_run ();

    return EXIT_SUCCESS;
  }
catch (const class rxvt_failure_exception &e)
  {
    return EXIT_FAILURE;
  }

Вроде и C (#include <stdlib.h>), но что там делают new, class и прочие? Ни разу такого не видел (впрочем, опыта как такового у меня пока нет).

 , ,

Plcmn
()

Я познаю strict aliasing

Форум — Development

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

Компилируется код такой командой (gcc 4.9.2):

gcc test.c -o /dev/null -O3 -Wall -Wextra

Случай №1. Есть какой-то буфер в виде массива чаров, полученный откуда-то (по сети, например). Хочется его распарсить, для этого привести char * к какому-нибудь struct payload * и работать со структурой; выравнивание и порядок байтов к вопросу отношения не имеют, считаем, что там всё правильно. Для примера можно для упрощения вместо struct payload взять обычный int — с ним происходит то же самое:

int main()
{
        char buf[5] = "TEST";
        int *p = (int *)&buf; // По стандарту char может алиасить любой тип, но не наоборот
        *p = 0x48414559; // Но здесь предупреждения о нарушении strict aliasing почему-то нет
        *(int *)buf = 0x48414559; // А вот здесь есть
//        *(int *)(buf+1) = 0x48414559; // Вот так уже не будет, кстати
        return 0;
}
test.c: In function 'main':
test.c:6:2: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
  *(int *)buf = 0x48414559;
  ^

Вопрос: чем отличается доступ через указатель p и через buf, приведенный к int *? Почему в одном случае нет варнинга, в другом есть? Действительно ли в одном случае нарушается правило strict aliasing, а в другом нет? Или это потерянный варнинг? Или особенность реализации gcc?

Случай №2. Приведение struct sockaddr_in * к struct sockaddr *, использующееся повсеместно. Для чистоты эксперимента структуры объявнены вручную, а не взяты из хедеров. Да, их наполнение отличается от того, что там должно быть. Итак, я решил продолжить эксперимент с приведением типа указателя без промежуточной переменной.

#include <stdint.h>

struct sockaddr {
        uint16_t sa_family;
        char sa_data[14];
};

struct sockaddr_in
{
        uint16_t sin_family;
        uint16_t sin_port;
        uint32_t sin_addr;
        char sin_zero[8];
};

int main()
{
        {
                struct sockaddr_in addr;
                ((struct sockaddr *)&addr)->sa_family = 2; // Тут варнинга почему-то нет
        }
        {
                char addr[16];
                ((struct sockaddr *)&addr)->sa_family = 2; // А тут есть, как и в предыдущем примере
        }
        {
                uint32_t addr[4];
                ((struct sockaddr *)&addr)->sa_family = 2; // А здесь почему-то снова нет
        }
        return 0;
}

Господа, я в замешательстве. Вот моё мнение по этому поводу:

В первом примере нарушения правила strict aliasing есть в обоих случаях (char может алиасить любой тип, но не наоборот), однако варнинг есть почему-то в одном из случаев, в связи с этим вопрос: это недостающий варнинг или особенность поведения gcc?

Во втором примере нарушений правила strict aliasing нет, поскольку я обращаюсь только к объекту struct sockaddr. Однако в случае, когда addr — это массив чаров (как в первом примере), варнинг возникает. Здесь аналогичный вопрос: это лишний варнинг, или же смысл различен?

Ну и один глобальный вопрос: если я где-то в своих рассуждениях ошибаюсь (или чего-то не понимаю), то где?

 

gentoo_root
()

Gtk не блокируется сигнал

Форум — Development

Здравствуйте. Подскажите, почему не блокируется сигнал.

как видно здесь сигнал создается

void fm_load_file(Page *page)
{
    gchar *text;
    gsize length;
    GFile *file = g_file_new_for_path(page->file_name);
    g_file_load_contents(file, NULL, &text, &length, NULL, NULL);
    page->monitor = g_file_monitor_file(file, G_FILE_MONITOR_SEND_MOVED, NULL, NULL);
    page->handler_number = g_signal_connect(page->monitor, "changed", G_CALLBACK(file_monitor_watcher), page->file_name);
	gtk_text_buffer_set_text(page->buffer, text, -1);
	gtk_text_buffer_set_modified(page->buffer , FALSE);
    g_free(text);
}

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

void fm_save_file(Page *page)
{
    g_signal_handler_block(page->monitor, page->handler_number);
    GtkTextIter start, end;
    gchar *text;
    gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(page->buffer), &start, &end);
    text = gtk_text_iter_get_text(&start, &end);
    g_file_set_contents(page->file_name, text, -1, NULL);
    gtk_text_buffer_set_modified(page->buffer , FALSE);
    g_free(text);
    g_signal_handler_unblock(page->monitor, page->handler_number);
}

На всякий случай при срабатывании сигнала

gboolean file_monitor_watcher(GFileMonitor *monitor, gpointer user_data)
{
	g_print("file changed\n");
}

Как мне добится временного отключения сигнала? Буду весьма признателен за любую помощь.

 , ,

kradwhite
()

Существуют ли иные модели ООП?

Форум — Development

На сегодняшний день известно 2 модели ООП. Назовем их условно, «сильная» и «слабая».

Первая — смолтоковская модель, основанная на, воистину, величайших идеях Алана Кея, в первую очередь — позднее связывание и концентрация на сообщениях.

Вторая — основанная на лексических замыканиях.

К сожалению, вторая модель получила наибольшее распространение в современных языках программирования. Первая нашла свое воплощение лишь в очень малом количестве ЯП, из мейнстримных я знаю только JS и Ruby. Видимо, основная причина в трудностях эффективной реализации мощной модели, хотя, пример JS заставляет усомниться в этом. Другой причиной, может быть то, что средний программист не может понять сильную модель, тогда как слабую понимают почти все.

А вопрос такой: есть ли какая-нибудь альтернативная модель, некий третий путь. Тут следует пояснить, наверное, что я не провожу различия между смолтоковской классовой(smalltalk, ruby) и прототипной(js, self, io) моделями, условно считаем, что это то же самое, также я не провожу различия между замыканиями и java-like-классами, в данном случае (т.е. модель scheme в контексте примеров модели вычислений с окружениями из SICP === java-style etc), нутыпонел — я обобщил. Может быть что-то еще, принципиально отличающееся от этих двух, есть такое?

 , ,

oop
()

FreshPlayerPlugin — PepperFlash в Firefox

Форум — Development

Flash плеер всё заменяют и заменяют, но никак не заменят полностью. Новые и сверхновые фичи браузеров это замечательно, но Flash бывает всё ещё нужен. К сожалению, доступная NPAPI браузерам версия застыла на 11.2, а новые версии выходят только в составе Chrome. Поэтому я делаю адаптер, который сможет быть посредником между PPAPI плагином и NPAPI браузером. Это такая штука, которая позволит использовать свежий Flash в Firefox, Opera и других браузерах, в которых работают плагины.

https://github.com/i-rinat/freshplayerplugin

 , , , , ppapi

i-rinat
()