LINUX.ORG.RU

Сообщения nerdogeek

 

Давайте меряться

Форум — Talks

Стал замечать что скорость создания/удаление тучи мелких файликов на разных системах (btrfs, ext4, xfs) существенно различается. Запилил по-быстрому скрипт на питоне для замеров:

import os
import random
import time

def CreateFiles(dir, numFiles, maxFileSize):
    try:
        buffer = os.urandom(maxFileSize)
    except Exception as e:
        print( e )
        return

    for i in range(numFiles):
        filePath = dir + '/' + str(i)
        try:
            f = open( filePath, "wb" )
            f.seek( 0 )
            f.write( buffer )
            f.close()
        except Exception as e:
            print( e )

def CreateDirs(dir, numDirs, numFiles, maxFileSize):
    for i in range(numDirs):
        dirPath = dir + '/' + str(i)
        try:
            os.mkdir( dirPath )
        except Exception as e:
            print( e )
        CreateFiles(dirPath, numFiles, maxFileSize)

def RemoveAllFiles(dir, numDirs, numFiles):
    for i in range(numDirs):
        dirPath = dir + '/' + str(i)
        for j in range(numFiles):
            filePath = dirPath + '/' + str(j)
            try:
                os.remove( filePath )
            except Exception as e:
                #print( "File already removed, skipping..." )
                pass
        try:
            os.rmdir( dirPath )
        except Exception as e:
            pass

def RemoveRandomFiles(dir, numDirs, numFiles, numRemovals):
    step = numFiles / numRemovals
    for i in range(numDirs):
        dirPath = dir + '/' + str(i)
        index = 0
        for j in range(numRemovals):
            index += random.randint(1, step)
            filePath = dirPath + '/' + str(index)
            #print( index )
            try:
                os.remove( filePath )
            except Exception as e:
                #print( "File already removed, skipping..." )
                pass

def Main():
    dir = "mnt"
    numFiles = 16 * 1024
    numDirs = 10
    maxFileSize = 4 * 1024
    numRemovals = numFiles / 2

    CurrentTime = lambda: int(round(time.time() * 1000))

    start = CurrentTime()
    CreateDirs(dir, numDirs, numFiles, maxFileSize)
    t = CurrentTime() - start
    print( "Create dirs: %d" % t )

    start = CurrentTime()
    RemoveRandomFiles(dir, numDirs, numFiles, numRemovals)
    t = CurrentTime() - start
    print( "Remove files randomly: %d" % t )

    start = CurrentTime()
    RemoveAllFiles(dir, numDirs, numFiles)
    t = CurrentTime() - start
    print( "Remove all files: %d" % t )

Main()
NOTE: По дефолту создает все временные файлы в текущей директории в «mnt» (я туда монтировал разные разделы)
Что выводит у вас скрипт? Напишите тип вашей файловой системы, опции монтирования этой ФС, SSD или HDD, планировщик ядра
P.S. btrfs'ка может и грузит проц, зато пожимает все в 3-5 раз.

 

nerdogeek
()

Мир без функционального программирования

Форум — Development

А что если?.. Если бы ФП просто не существовало... Наверняка есть какая-нибудь еще одна парадигма, где проверка простого числа и сортировка кучей будет выглядеть элегантно, зато все остальное потребует нечеловеческих потуг, хитрости и математически выверенной изворотливости. Кто знает?

nerdogeek
()

Крешится firefox. Куда слать коредамп?

Форум — Talks

Вот уже несколько последних версий стабильно падает когда открываешь pdf встроенным вьювером (pdf.js ?). Может есть у кого опыт как слать багрепорт мозилле. У самого нет времени трахаться с их системой багрепортов.

 

nerdogeek
()

Облачный стартап на js

Форум — Talks

http://www.hipsterjs.org/
Я верил и ждал что он появится...
P.S. Пока вы пишите прошивки под микроконтроллеры на сях, компиляете ночами свои генты, кодите на хаскеле и лиспе, хипстеры просто и целенаправленно идут к успеху, JFYI.

 ,

nerdogeek
()

GlusterFS - готов ли к продакшену?

Форум — Admin

Как оно работает в медленной и нестабильной сети (aws free account)? Есть ли альтернативы?

 

nerdogeek
()

Зигохистоморфный препроморфизм едет в плюсы

Форум — Development

По мотивам этого.

В Хаскеле как известно есть монады, а в C++ их нет. Но ничто не мешает реализовать монады в С++.

В комментариях ссылка на FTL - The Functional Template Library

C++ template library for fans of functional programming. The goal of this project is to implement a useful subset of the Haskell Prelude (and a couple of other libraries) in C++. Presently, this subset is small, but rapidly growing.

Почему-то вспомнилось: «Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.».
Теперь место CL занял хацкель, а Fortran - C++.

 , ,

nerdogeek
()

Посоветуйте бесплатные или дешевые облачные сервисы

Форум — Development

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

 ,

nerdogeek
()

Как узнать pid родительского процесса по pid дочернего ?

Форум — Development

getppid возвращает parent pid текущего процесса, а как можно узнать ppid для процесса с другим pid?
Или как узнать pid всех дочерних процессов для текущего процесса?
Наверно придется в потоке, который обрабатывает sigchild удалять элемент из списка всех дочерних узлов. Сам список будет строго из других потоков (у них маска на sigchild) пополнятся pid'ами дочерних процессов при форке, поэтому не будет дедлока на синхронизации этого списка.
Как лучше сделать? Должно работать не только в linux, но и в unix

nerdogeek
()

руби-стартап vs си-опенсурс

Форум — Talks

Чтобы вы выбрали, если бы у вас появилось много свободного времени?

nerdogeek
()

Линуксоидам на заметку

Форум — Talks

Смотрю я триллер-фильмец на линуксах. В самый кульминационный момент вылазит это чудо, да-да xscreensaver. Причем никак вообще не реагирует на ввод с клавы/мыши. Помог спасительный ctrl+alt+F2 и «sudo pkill -SIGKILL xscreensaver». Такой вот конец. Хэппи энд.
К десктопу готов?

 

nerdogeek
()

Хороший компьютерщик сейчас - как хороший конюх в начале 20-го века

Форум — Talks

Из комментариев одного юзера:

За последие 10 лет у людей стало меньше свободного времени, а скоро будет ещё меньше.

Раньше программисту можно было, как в «Office Space», тратить на решение чисто рабочих вопросов по 15 минут в день, а всё остальное время можно было уделять любимому занятию. Тот же Линус писал в «Just for fun», что он целый год играл на компе, прежде чем написать то самое сообщение, с которого и началось Ядро.

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

А куда ж он денется? Хороший компьютерщик сейчас - как хороший конюх в начале 20-го века, хороший радист в середине или хороший специалист по электронике в 70-х. Профессия нужная, распространённая и, вроде, в будущем востребованная. А потом приходит будущее и оказывается, что всё не так. В случае с компьютерщиками - оказывается, что шаг влево-вправо стал уголовным преступлением, все возможные программы давно написаны, а все возможные идеи давно запатентованы. Чтобы хотя бы разобраться в основах, нужно очень много сил. Разобрался - в смежную область уже не шагнёшь: старость на пороге и мозги не те. Вот суперспецы и шли на радиорынок детальками барыжить. А которым не хотелось - соглашались доживать до пенсии на зарплате в 5000. То же будет и с узкими специалистами по ядру.

nerdogeek
()

Фруктовый микс

Форум — Development

Есть ли такой подход, когда для написания большей части логики используется функциональная парадигма, а для некоторых вспомогательных частей - императивная? Например разделять на уровне синтаксиса ЯП какие функции/методы являются «чистыми», а какие нет. Что-то на уровне псевдокода:

// объявления в чисто функциональном стиле
defunc PrimeNums = 2 : [n | n <- [3..], IsPrime n]
defunc IsPrime n = foldr (\p r-> p*p>n || (rem n p /= 0 && r)) True PrimeNums

// объявления в императивном стиле
def Foo(a, b, c):
    v1 = IsPrime(a)
    v2 = IsPrime(b)
    v3 = IsPrime(c)
    return v1 or v2 or v3
Причем вызов «обычных» def-методов возможен только из других def-методов, но не из defunc.
Существуют ли подобные ЯП? Может быть Lisp?

 ,

nerdogeek
()

Вопрос по разработке СПО

Форум — Talks

Вопрос к тем, кто участвует в разработке СПО.
Когда вы находите время на разработку? Кодите вечерами после работы / по выходным? Как в целом идет продвижение в этом деле: 1-2 небольших коммита в день или куча изменений после долгого перерыва?
Стал замечать что перерывы в разработке действуют более благоприятно на процесс в целом, чем адовое красноглазое фигаченье ночами/все выходные.

 ,

nerdogeek
()

Зато у нас ракеты лучше!

Форум — Talks

Система управления «Бурана» (к сожалению, не нашел в лучшем качестве)
Тогда уже все было: репликации, «high availability»-практики, верификация программ различными методами, интеллектуальные иерархические СУ, использовать Prolog...
Эх, если б мне можно было выбирать: говнякать на сишке или писать ПО для «Буран» :3

 ,

nerdogeek
()

Подскажите систему виртуализации на уровне ОС

Форум — Development

Какие есть способы запуска приложения в изолированном окружении? Желательно чтобы приложение можно было ограничивать в ресурсах (ЦПУ, память), и очень желательно чтобы это приложение не могло влиять на работу других процессов (вне изолир. окружения).
Дополнительно: чтобы пользоваться fork+exec, но форкнутый процесс был в этом окружении, а родительский - нет. При том, что родительский должен уметь останавливать порожденный процесс.
Насколько я понимаю, в posix еще нет таких «контейнеров», верно?

 

nerdogeek
()

Стульев тред

Форум — Talks

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

nerdogeek
()

Современные гениальные ВИА

Форум — Talks

Слышал такие: MGMT, Tame Impala, Pond, Portugal The Man...
Какие еще?
Прошу указывать только современные. Всякие старые, типа The Velvet Underground, The Doors, Pink Floyd... и не очень (Queen, Комитет Охраны Тепла...) и другие не указывать.

 

nerdogeek
()

suffix tree vs trie

Форум — Development

Можно взять исходный текст, развернуть его и построить suffix tree за линейное время. Поиск соответственно по 'перевернутым' строкам в суффиксном дереве. Зачем тогда нужно префиксное дерево?

 

nerdogeek
()

Вопрос по лицензии и версиям файлов в VCS

Форум — Talks

Допустим в общедоступоной VCS (github, например) лежит файл, самая последняя ревизия которого имеет в «шапке» условие лицензии, т.е. просто текст лицензии в начале текстового файла. Но предыдущие ревизии не имеют оной.
Может ли другой человек обойти условие лицензии проекта, просто ссылаясь на версию без включенного текста лицензии?

 

nerdogeek
()

Особенности sigwait на FreeBSD и Linux

Форум — Development

Существует программа, которая после инициализации ждет сигнала своего завершения (который другой процесс должен послать). Код:

sigset_t waitset;
int sig;
sigemptyset( &waitset );
sigaddset( &waitset, SIGTERM );
sigprocmask( SIG_BLOCK, &waitset, NULL );
sigwait( &waitset, &sig );
Также регестрируется обработчик сигнала SIGTERM, который при SIGTERM делает ::exit(0):
struct sigaction sigHandler;
memset( &sigHandler, 0, sizeof( sigHandler ) );
sigHandler.sa_handler = SigHandler;
sigemptyset(&sigHandler.sa_mask);
sigHandler.sa_flags = 0;
sigaction( SIGTERM, &sigHandler, 0 );
В процессе работы из другого потока периодически делается fork+exec.
Во freebsd почему то возвращается sigwait с кодом ошибки 4 (No child processes). В линуксах все нормально, sigwait возвращается только когда родительский процесс посылает SIGTERM. В чем м.б. проблема?

 ,

nerdogeek
()

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