LINUX.ORG.RU

Сообщения nozh

 

линукс на десктопе

Форум — Talks

Пользуюсь линуксом на личном лептопе (Lenovo X230 с 16Gb RAM) и макосью на рабочем (какой-то топовый 15" макбук про). Когда садился за личный лептоп программировать на Go в Gogland, постоянно страдал от тормозов при отрисовке редактора. Всё было настолько плохо, что простого перемещения курсора приходилось ждать по две-три секунды. Я сильно сомневался что дело в Gogland, поскольку IntelliJ IDEA (IDE построенная на той же самой платформе, что и Gogland) работающая на макбуке вообще сколько нибудь заметно не тормозила на гораздо более сложных файлах (тысячи строк говнокода).

Сегодня таки решил разобраться в чём проблема. Оказалось в JDK8 по умолчанию включили код рендеринга через XRender, который в принципе должен рисовать быстрее. Проблема заключается в том, что его поведение немножко отличается от поведения Java2d на других платформах: он не отобразит изменения на экране пока не переполнится буфер команд Xlib, либо пока не будет вызван Toolkit.sync().

В JetBrains считают, что это не их проблема и добавлять Toolkit.sync() не собираются: https://youtrack.jetbrains.com/issue/IDEA-150262

Разработчики OpenJDK тем временем тоже не спешат фиксить эту регрессию поскольку предложенный фикс замедлит рендеринг когда X работает по сети (что конечно является основным юзкейсом для Java программ): https://bugs.openjdk.java.net/browse/JDK-8068529

К счастью всё лечится отключением xrender, достаточно добавить строчку "-Dsun.java2d.xrender=false" в gogland64.vmoptions. Типичный linux desktop экспириенс - без допиливания напильником в нетривиальных местах будешь жрать говно с лопаты.

 ,

nozh
()

Посоветуйте почитать про дизайн сетевых протоколов на основе UDP

Форум — Development

сабж.

Хочу написать свой велосипед протокол обмена сообщениями произвольной длинны что бы поверх него реализовать протокол распределённого консенсуса Raft. UDP потому что Raft и сам справляется с потерей либо out-of-order delivery сообщения, плюс полезна возможность отправки мультикастов (для репликации нужно будет рассылать одно и то же сообщение всем нодам кластера).

 ,

nozh
()

IPv4 multicast + linux bridge + LXC - как-то странно работает

Форум — Admin

Разбираюсь с протоколом Raft, пишу приложение которое шлёт сообщения upd mutlicast-ами. Для того что бы его потестить, создал с помощью LXC два контейнера с дефолтными настройками сети: один конец veth пары втыкается в бридж lxcbr0, другой конец в контейнере получает адрес 10.0.3.XX. На интерфейсе lxcbr0 соответсвенно настраивается адрес 10.0.3.1/24. Сервер, который шлёт мультикасты и клиент, который должен их получать запускаются в контейнерах.

Проблема: все мультикаст пакеты, которые получает клиент, имеют source address 10.0.3.1 вместо адреса сервера. MAC адрес при этом не меняется. Почему так? Как сделать так что бы в source address был IP 10.0.3.54? Вообще, из-за чего это происходит?

Ubuntu 14.04

server_container$ sudo ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:16:3e:ab:53:43
          inet addr:10.0.3.54  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::216:3eff:feab:5343/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:67486 errors:0 dropped:0 overruns:0 frame:0
          TX packets:64842 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:64841422 (64.8 MB)  TX bytes:8354230 (8.3 MB)

client_container$ sudo tcpdump -e -i eth0 -n udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
09:28:03.612988 00:16:3e:ab:53:43 > 01:00:5e:03:1d:47, ethertype IPv4 (0x0800), length 152: 10.0.3.54.5001 > 224.3.29.71.5001: UDP, length 110
09:28:04.974579 00:16:3e:ab:53:43 > 01:00:5e:03:1d:47, ethertype IPv4 (0x0800), length 152: 10.0.3.54.5001 > 224.3.29.71.5001: UDP, length 110
09:28:06.336165 00:16:3e:ab:53:43 > 01:00:5e:03:1d:47, ethertype IPv4 (0x0800), length 152: 10.0.3.54.5001 > 224.3.29.71.5001: UDP, length 110

root@ubuntu:~# ifconfig lxcbr0
lxcbr0    Link encap:Ethernet  HWaddr fe:92:7a:d9:4b:6d
          inet addr:10.0.3.1  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::dcac:9ff:fe9d:e7ee/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:96883 errors:0 dropped:0 overruns:0 frame:0
          TX packets:109548 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8296510 (8.2 MB)  TX bytes:181533376 (181.5 MB)

 , ,

nozh
()

Защита от подключения rogue devices к кабельной сети

Форум — Security

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

Какие бывают способы сделать это, и какие из них наиболее вменяемы?

Пока остановились на IPSec с аутентификацией (всмысле каждый пакет будет подписываться hmac-sha1) на каждой машине в режиме transport mode.

Ещё слыхал про IEEE 802.1X Network Login, но товарищ из майкрософта пишет, что не особо он защищает от rogue devices: http://technet.microsoft.com/en-us/library/cc512611.aspx (там есть описание атаки, начинается со слов «Now, here’s how the attack works»).

 , , rogue device

nozh
()

[посоветуйте-тред] Поэзия для быдла

Форум — Talks

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

nozh
()

Ищу почтовый клиент удобный для чтения почтовых рассылок

Форум — Desktop

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

Собственно хочется интерфейс примерно как у Gmail. Так например организован список дискуссий. Список отсортирован по дате последнего сообщения в дискуссии.

nozh
()

Человек, страдающий от БАС, написал патч для гнома используя азбуку Морзе

Форум — Talks

https://bugzilla.gnome.org/show_bug.cgi?id=78514#c19

Для Ъ:
Adrian Hands, страдающий от бокового амиотрофического склероза (болезнь сопровождается параличами и атрофией мышц), написал патч для гнома используя азбуку Морзе, т.к. не мог двигать руками, и тем более набирать текст на клавиатуре. Он успел дожить до момента принятия патча в код гнома, вот одно из его последних писем своему сыну:

On Sun, Jan 30, 2011 at 12:16 PM, Adrian Hands <handsadrian@gmail.com> wrote:
> ACCEPTed
> COMMITed
> RESOLVEd
> BOO-YAH!
>
> commit 0b209b1ff16e863e60a1d86413aa57c5fbde76b0
> Author: Adrian Hands <handsadrian@gmail.com>
> Date:   Fri Dec 31 14:34:58 2010 +0100
>
>    Add Copy Image and Copy Path to clipboard functionality
>
>    Fixes bug 78514.
>
>  data/eog-ui.xml  |    9 +++++++
>  src/eog-window.c |   63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 72 insertions(+), 0 deletions(-)

I have the coolest Dad in the world!

nozh
()

[javascript] Результат выполнения блока

Форум — Development

В ECMAScript Language Specification есть такое понятие, как Block (стр. 86):

Syntax
Block : { StatementList_opt }
StatementList : Statement StatementList Statement
Semantics

The production Block : { } is evaluated as follows:
1. Return (normal, empty, empty).

The production Block : { StatementList } is evaluated as follows:
1. Return the result of evaluating StatementList.

The production StatementList : Statement is evaluated as follows:
1. Let s be the result of evaluating Statement.
2. If an exception was thrown, return (throw, V, empty) where V is the exception. (Execution now proceeds as if no exception were thrown.)
3. Return s.

The production StatementList : StatementList Statement is evaluated as follows:
1. Let sl be the result of evaluating StatementList.
2. If sl is an abrupt completion, return sl.
3. Let s be the result of evaluating Statement.
4. If an exception was thrown, return (throw, V, empty) where V is the exception. (Execution now proceeds as if no exception were thrown.)
5. If s.value is empty, let V = sl.value, otherwise let V = s.value.
6. Return (s.type, V, s.target).

Насколько я понял этот текст, результатом интерпретации выражения { foo(); bar(); 10 } будет 10. Когда пишу такое выражение в REPL-е хромиума или фаербага, то в ответ получаю 10, что совпадает с моим пониманием спецификации.

Вопросы:

1. Почему результатом интерпретации { foo(); bar(); 10 } + 1 является 1?

2. Можно получить результат интерпретации блока через eval: eval('{ foo(); bar(); 10 }') + 1 == 11. Можно ли как-нибудь без eval-а обойтись?

Если интересно, для чего мне это нужно: хочу исправить баг в библиотеке clojurejs. Из (alert (if true (do (alert) «boom») «bam»)) она генерирует alert((true ? alert(); «boom»; : «bam»)), что неправильно. Если бы что-то типа этого alert((true ? { alert(); «boom» } : «bam»)) парсилось и работало, то фикс был бы тривиальным.

 

nozh
()

RSS подписка на новые темы