LINUX.ORG.RU

Сообщения vertexua

 

Проигрывание MP4 файлов в Firefox

Форум — Multimedia

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

GStreamer, GStreamer-ffmpeg стоят, media.autoplay.enabled стоит

 ,

vertexua
()

Могут ли украсть SSL ключи, взломав nginx?

Форум — Security

... и потом сделать кому-то man-in-the-middle. Кажется от такого сценария нельзя уберечься теоретически? Или можно?

 ,

vertexua
()

Compton, i3, tearing, NVidia

Форум — Desktop

Кто с вышеназваной конфигурацией осилил победить тиринг? Драйвер проприетарный, карта - GeForce GTX 660. Уже все комбинации параметров compton перепробовал, уйму параметров в xorg.conf.

Тиринг в фоксе, при видео и при скроллинге текста. Есть и в играх

P.S. Compton и любой композитинг мне нахрен не нужен, я его тоже использую чтобы победить тиринг по идее. Если есть способ без него в i3 - тоже подходит

 , , ,

vertexua
()

nginx в docker торчащий в web

Форум — Security

Допустим у меня роутер настроен на пропуск двух портов внутрь сети.

1) SSH на нестандартном порту, вход только по pubkey

2) https в nginx внутри docker непосредственно у меня на компе. Версия nginx отключена. Пока что я сам docker не настроил, но на что обратить внимание чтобы тот кто осилит выполнить удаленный эксплоит в nginx не смог вылезти из контейнера? Гайды?

Почему я концентрируюсь не на защите nginx? Ну просто возможно он будет проксировать в сомнительно защищенные самописные велосипеды.

 ,

vertexua
()

Приглашение терминала в фиксированом месте

Форум — Talks

Почему текущее приглашение терминала не пишут в какой-то статус панели сверху? Или внизу, так как терминал в основном доходит до низа экрана. А там где вводится команда не оставляют «$»?

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

1) Чтобы не ходить глазами туда-сюда

2) Чтобы видеть историю каталогов при выполнении предыдущих команд.

Цель - минимизация траты места при очень длинных каталогах. Меня убивает когда «$» находится очень далеко справа и все команды сразу переходят на новую строчку

 , ,

vertexua
()

Написал себе небольшую проверялку уведомлений с ЛОРа

Форум — Linux-org-ru

Ничего умного, просто логинится дергает notification-count.

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

maxcom

P.S. Вот такое сорц https://gist.github.com/7f652c4d69efab5bff2a

P.P.S. RSS не хочу, так как они обозначают прочитаным только то, что прочитали через ридер

 ,

vertexua
()

Браузер и терминал

Форум — Talks

Я заметил что перестал пользоваться графическими десктопными приложениями совсем. Два приложения - браузер и терминал. В терминале всякие cli приложения в tmux. Tmux нужен для того, чтобы залогиниться в привычную сессию с 10 вкладками из ноута или с работы.

Кому-то нужно что-то еще?

Ввиду тех ЯП, на которых в данный момент пишу, vim с плагинами хватает. Могу максимум представить третье приложение - большая IDE для Java/Scala

vertexua
()

Avahi для DNS в локальной сети веб-приложения

Форум — Web-development

Допустим я соорудил торчащий внаружу вебсайт, есть субдомены, nginx на фронтенде размаплен с proxy redirect на несколько других тачек по *.local адресам, которые определяются через Avahi.

Что может пойти не так (из-за Avahi)? Ведь поттерингоподелка имеет славу исключительно софта для дома, если вообще имеет славу.

Хм... В конце то концов это все действительно у меня дома. А некоторые домены - ноуты в шкафу

 , ,

vertexua
()

Почему не держат сайты у себя дома через бесплатный micro instance в облаке

Форум — Web-development

А не написали такую проксю, чтобы дома, с динамическим IP подключаться по ssh к удаленной micro тачке, которая будет только перенаправлять запросы по ssh туннелю на домашний Core i7 с двадцаткой гигов RAM?

vertexua
()

Most hated софт для линукс

Форум — Talks

Пишите сюда софт, который вы бешено ненавидите в Linux. Предвижу упоминания Поттернига.

vertexua
()

Защита от расшифровки облачного хранилища

Форум — Security

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

1) Клиент - пользователь браузера

2) Сервис - предоставляет хранилище, например профиль соцсети.

3) Хранилище ключей - сторонний сервис, который по OAuth дает доступ з различным хранилищам ключей

Задача - разрешить пользователю пользоваться сервисом, у которого полностью открытый исходный код клиента - необфусцированый JS, который гарантировано не отправляет определенные данные на сервер. Если он отправит, то автоматически теряет доверие и пользователя. С другой стороны он содержит данные на сервере и никто не может проверить как именно он их читает. Нужно обеспечить чтобы он не мог читать личные данные пользователя, которые хранит. Сервис определим как «тайно-злонамереный», он хочет читать данные пользователя, но никогда не покажет это на клиенте, исходный код которого все могут читать и будет на клиенте вести себя честно.

Решение. Пользователь хранит данные на сервисе в зашифрованом виде в формате encrypted key->encrypted value. encrypted key - или зашифрованый ключ или 0 (начальный обьект из которого видно остальные). В таком виде оно приходит на клиент. Клиент делает запрос в хранилище ключей по данному ключу и получает ключ разшифровки, который разшифровывает на клиенте encrypted value. Таким образом можно расшифровать что угодно и добраться до любых encrypted value пользователя, если начать исследовать его данные с фиксированого ключа «0», последовательно расшифровывая обьекты.

Но что если само хранилище ключей для определенного пользователя пойдет в сервис и само начнет читать данные? Дело в том, что хранилище ключей не знает смысла ключей, ведь они зашифрованы и их можно хранить в глобальном scope ключей. А как же быть с ключем «0», разве он не будет в хранилище храниться как «facebook.com.0» чтобы хоть как-то различать «0» от различных сервисов. Ответ: он тоже зашифровав, расшифровка «0» ключа происходит на клиенте web ui хранилища ключей специальным паролем.

Вопрос: зачем эта вся возня с ключами, если можно просто вот тем паролем, per service, которым мы расшифровываем «0» ключ напрямую расшифровывать все данные сервиса. Дело в том, что это создает один большой пароль на весь профиль. А например расшарить фотку с друзьями - поделиться ключами для encrypted value фотки. Убрать права доступа, что случается реже - создать новый обьект, новый ключ, перешифровать и раздать заново всем друзьям.

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

Вот такая норкомания. Я пошел обедать.

 ,

vertexua
()

Кому-то удавалось сгенерировать PCH с помощью clang?

Форум — Development

Пишу вот так

$ clang++ -cc1 -emit-pch `pkg-config --cflags gtkmm-3.0` canvas.h -o canvas.h.pch

Валится

In file included from canvas.h:22:
In file included from /usr/include/gtkmm-3.0/gtkmm.h:87:
In file included from /usr/include/glibmm-2.4/glibmm.h:87:
In file included from /usr/include/glibmm-2.4/glibmm/thread.h:46:
In file included from /usr/include/glib-2.0/glib.h:30:
In file included from /usr/include/glib-2.0/glib/galloca.h:32:
In file included from /usr/include/glib-2.0/glib/gtypes.h:32:
In file included from /usr/lib64/glib-2.0/include/glibconfig.h:9:
/usr/include/glib-2.0/glib/gmacros.h:38:10: fatal error: 'stddef.h' file not found
#include <stddef.h>
         ^
1 error generated.

Пробую разные способы, но короче суть в том что ему похоже нужно перечислить все -I ключи, включа дефолтные. Он без параметров не находит даже iostream/stdio.h. На этом беда не заканчивается, похоже есть уйма флагов, которые он тоже из дефолта не берет.

Гугл молчит. Решил обратиться к когорте экспертов ЛОРа перед тем как пойду по легкому пути - Stackoverflow. Свое роднее.

 ,

vertexua
()

Не верю своим глазам

Форум — Talks

Выполнил квест ) Практически полностью чистый нацпол

Я считаю теперь пора в модераторы. Обещаю быть субьективным, несправедливым и однобоким. Мечты мечты

vertexua
()

Ваши прогнозы по SteamBox, будет скоро готово и будет много игр или...

Форум — Talks

мне купить XBox или PS и не париться?

 

vertexua
()

Python, отстрел ног, JS-way

Форум — Development

Какой же болезненный отстрел

from time import sleep
import random
import threading

from Queue import Queue

class ThreadPool(object):

  def __init__(self, workers_count):
    self.queue = Queue()
    self.threads = []
    self.shutdown = False
    self.finalized = False

    for _ in range(0, workers_count):
      thread = threading.Thread(target=lambda: self.DoWork())
      thread.daemon = True
      thread.start()
      self.threads.append(thread)

  def Submit(self, task):
    if not self.finalized:
      self.queue.put(task)

  def DoWork(self):
    while not self.shutdown:
      task = self.queue.get()
      try:
        task()
      except Exception as e:
        print e
      self.queue.task_done()

  def FinalizeAndWaitCompletion(self):
    self.finalized = True
    self.queue.join()

def DoWork(n):
  print "Doing work "+str(n)+" on "+str(threading.current_thread().ident)
  sleep(random.randrange(100, 10000)/1000.0)
  print "Done work "+str(n)+" on "+str(threading.current_thread().ident)


def main():
  tp = ThreadPool(10)

  for i in range(0, 30):
    tp.Submit(lambda: DoWork(i))

  tp.FinalizeAndWaitCompletion()

if __name__ == '__main__':
  main()

Можете атомарности и локи не тыкать, с этим все норм, не нужно.

Ладно, добавлю вывод, а то тут не все запускать будут

Doing work 3 on 140046287099648
Doing work 3 on 140046295492352
Doing work 6 on 140046278706944
Doing work 6 on 140046057334528
Doing work 6 on 140046065727232
Doing work 7 on 140046048941824
Doing work 8 on 140046040549120
Doing work 9 on 140046032156416
Doing work 10 on 140046023763712
Doing work 11 on 140046015371008
Done work 8 on 140046040549120
Doing work 14 on 140046040549120
Done work 11 on 140046015371008
Doing work 14 on 140046015371008
Done work 14 on 140046040549120
Doing work 14 on 140046040549120
Done work 6 on 140046278706944
Doing work 14 on 140046278706944
Done work 3 on 140046287099648
Doing work 14 on 140046287099648
Done work 6 on 140046057334528
Done work 7 on 140046048941824
Done work 6 on 140046065727232
Done work 10 on 140046023763712
Done work 14 on 140046287099648
Done work 14 on 140046040549120
Done work 3 on 140046295492352
Done work 9 on 140046032156416
Done work 14 on 140046015371008
Done work 14 on 140046278706944

 ,

vertexua
()

На каком языке должен быть формат конфига системы сборки?

Форум — Development

JSON, XML, YAML? Может быть s-выражения? Может быть жесточайшие никому не ведомые велосипеды как в QMake, CMake, autotools?

Может проще использовать например Python скрипт, в который заимпортированы классы системы сборки и осталось создать обьекты Project, Target, etc?

vertexua
()

Делюсь интересной ссылкой. Google Transparency Report

Форум — Talks

 , , , ,

vertexua
()

Change detection тесты.

Форум — Development

Узнал о таком забавном антипаттерне и интересном его описании. Все на поверхности, но на практике такие тесты таки всплывают. Вот код

int add(int a, int b){
  return a+b;
}

Представим такой дебильный тест на несуществующем фреймворке

assertEquals(add_code, 
  "int add(int a, int b){"+
  "  return a+b;"+
  "}");

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

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

void myFunction(MyObject obj, MyOtherObject obj2){
   int x = obj.doSomething();
   obj2.doSomethingElse(x);
}

И тест

MyObject o = mock(MyObject.class);
MyOtherObject o2 = mock(MyOtherObject.class);

validate(o.doSomething()).return(2);
validate(o2.doSomethingElse(2));

myFunction(o, o2);

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

Такие дела. Мораль истории - не пишите такие тесты если не уверены на точно что в данном случае так и надо. Нужно пытаться проверять только точно желаемые вызовы и избегать влезания в реализацию в тесте

Всем спасибо, я все сказал.

 , , ,

vertexua
()

Что почитать по concurrency и memory model в С++11

Форум — Development

Интересуют atomics, CAS, memory barriers, false sharing detection and prevention, lock-free структуры данных, разные примеры happens before и т.д.

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

Статьи тоже сойдут, хотя я уже их начитался.

 

vertexua
()

Почему так сделали в std::unique_ptr?

Форум — Development
#include <iostream>
#include <memory>
#include <vector>
#include <thread>

using namespace std;

class MyClass{
public:
    MyClass(){
        cout << "Created " << this  << " at " << std::this_thread::get_id()  << endl;
    }

    void SayHi(){
        cout << "Say hi from thread " << std::this_thread::get_id() << endl;
    }

    virtual ~MyClass(){
        cout << "Destroyed " << this << " at " << std::this_thread::get_id() << endl;
    }
};

void Use(std::unique_ptr<MyClass> m){
    m->SayHi();
}

int main(){
    auto m = std::unique_ptr<MyClass>(new MyClass());
    
    cout << std::boolalpha;

    // Prints true
    cout << "is null " << static_cast<bool>(m) << endl; 

    m->SayHi();

    std::thread t1(Use, std::move(m));

    // Prints false
    cout << "is null " << static_cast<bool>(m) << endl; 
    
    // WTF? this works?!?!?
    m->SayHi();

    // Thank you C++ designers that I at least check...
    if(m)
        m->SayHi(); 
    }

    t1.join();
}

Почему unique_ptr остается юзабельным после std::move? Это считается хорошим дизайном? Кому нужен такой сценарий?

Я бы вот хотел чтобы в том вызове оно или не скомпилировалось или упало в рантайме чтобы рано найти ошибку. А так при передаче указателя в другой поток никакой речи о thread safety быть не может. Можно возразить что unique_ptr не должен решать эту проблему. Но это еще вопрос, а почему это не должен?

 

vertexua
()

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