LINUX.ORG.RU

Сообщения vertexua

 

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

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

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
()

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

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

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

vertexua
()

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

 , , , ,

vertexua
()

Change detection тесты.

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

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

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

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

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

 

vertexua
()

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

#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
()

Софт чтобы смотреть фильмы из торрентов не качая для Linux

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

Прошу приводить примеры

 ,

vertexua
()

Ни одной книги по systemd

Хотя первый выпуск был в 2010ом году.

Есть только парочка глав во всяких книгах аля «Федора для наркоманов». Но ведь там же уйма фич, всякие управления контейнерами, контроль над квотами, большое множество утилит. Последняя тема на ЛОРе, в которой обсуждалась новая версия, своим списком изменений навеяла мысль что я нихрена не понял в этих фичах. Было бы круто ознакомиться

 

vertexua
()

Portage похоже использует генератор случайных чисел

Несколько запусков emerge приводят то к блокирующим пакетам, то к нормально определенным зависимостями.

У вас такое было?

 , , ,

vertexua
()

Следующий Gnome 3.13.0 и systemd

Неплохо

https://wiki.gnome.org/ThreePointThirteen/Features/SystemdUserSession - сам гном будет засовывать приложения в cgroups, управляя квотами на память, диск и тд.

Дискач

 , ,

vertexua
()

DRM в Firefox

Помните крику было что мол FF реализовывает DRM?

Чем там закончилось? Где баг со статусом (не тот чтобы наоборот отменить)? Хотелось бы отслеживать.

Наброс: наконец-то может Netflix запилят не через сервелат и можно будет киношки смотреть легально в угоду копирастам и в баттхерт штольманоугодникам ЛОРа и другим свидетелям Притяжства

 , ,

vertexua
()

Нацист на аватарке

vertexua
()

Крипота, слежение

https://maps.google.com/locationhistory

Не знал о таком сайте.

P.S. У кого нету гуглоакка и нету ведроида с включеным слежением не оценят

 ,

vertexua
()

Новый тип СУБД от Google

http://research.google.com/pubs/pub42851.html

Mesa is a highly scalable analytic data warehousing system that stores critical measurement data related to Google's Internet advertising business. Mesa is designed to satisfy a complex and challenging set of user and systems requirements, including near real-time data ingestion and queryability, as well as high availability, reliability, fault tolerance, and scalability for large data and query volumes. Specifically, Mesa handles petabytes of data, processes millions of row updates per second, and serves billions of queries that fetch trillions of rows per day. Mesa is geo-replicated across multiple datacenters and provides consistent and repeatable query answers at low latency, even when an entire datacenter fails. This paper presents the Mesa system and reports the performance and scale that it achieves.

Кому интерестно, можно почитать.

 dmbs,

vertexua
()

Теперь я умею плавать с аквалангом

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

Кто тоже подобным занимался? Где стоит понырять?

 , ,

vertexua
()

SCTP

Какой прекрасный протокол. Вроде уже везде поддерживается. Почему бы не начать по чуть-чуть хоронить TCP? Какой софт ним пользуется?

vertexua
()

Откуда ВЫ знаете что мессенджер защищенный?

Secret, Tor, I2P, Telegram, шифрованый WebRTC etc - разные мессенджеры, технологии, разный уровень защищенности и приватности.

Пользователям посвящается. Откуда вы знаете что все так хорошо как описывают авторы? Код читали? Знаете что скрывается з тем IP, которому ваш мессенджер отправляет данные?

 , ,

vertexua
()

Красный коридор в аэропорту и ввоз крепкого алкоголя

Хочу во Вна провести сорокаградусного алкоголя больше чем литр. Но не больше 5 литров. Готов пройти через красный коридор, задекларировать алкоголь и заплатить комиссию в 10%.

Есть истории успеха и неуспеха? Насколько это мучительно и долго?

 ,

vertexua
()

Популярность статей в википедии

Прикольный сайт нашел

http://tools.wmflabs.org/wikitrends/english-most-visited-this-month.html

http://tools.wmflabs.org/wikitrends/russian-most-visited-this-month.html

http://tools.wmflabs.org/wikitrends/ukrainian-most-visited-this-month.html

Публикует статистику по годам, месяцам, неделям.

Еще есть такая ссылка, тут больше языков

https://tools.wmflabs.org/wikiviewstats/?locale=en&lang=uk&project=&a...

Можете вверху переключать, есть например беларуский

vertexua
()

Какая разрешительная лицензия открытого кода (без копилефта) вам больше нравится?

Википедия http://goo.gl/ViNXh9

... и почему?

BSD, Apache, MIT, что-то еще?

vertexua
()

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