↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Lost-in-TARDIS Онлайн
28 февраля 2019
Aa Aa
Я тут увидела самое наглядное различие между кодом, который писали программисты, и кодом, который писали биологи, которое только может быть. Это просто гениально, просто гениально.
Биоинформатический тул выдает фрейм: список генов и некоторое значение для каждого из этих генов. Как будет оформлен вывод у программиста?.. Ну да, простая табличка через пандас, разделитель какой-нибудь таб, всё понятно.
Как он оформлен тут? После каждого гена идет различное количество пробелов, такое, чтобы если открыть файл в блокноте, значения, соответствующие этим генам, выстраивались в одну колонку.
Я рыдала и билась об стол больше минуты.

PS. А еще тул очень мееееедлеееенннныый, и считается долго-долго. А когда досчитается - в нем захардкожено сохранять посчитанный файл по пути ./Outputs/*.txt Разумеется, он сам не создаст нужную папку Outputs, которой нет в клоне с гита. Разумеется, не найдя её, он упадет, ничего не сохранит, и его надо будет запускать еще раз.

#реал #этопздц #боль
28 февраля 2019
20 комментариев
Покажите, плиз :)
Lost-in-TARDIS Онлайн
Киттикэт
https://github.com/Singh-Lab/nCOP
Пжлст, запускать на свой страх и риск.

Самое смешное, что при всем этом алгоритм у тула вполне себе хороший и результаты он тоже выдает осмысленные и хорошие.
(поэтому мне надо будет как-нибудь переписать его с руби на питон и заоптимизировать)
Lost-in-TARDIS
осталось найти свободное время, которое как мифический Грааль?
Lost-in-TARDIS Онлайн
Vallle
Ну не, это рабочая задача, просто она не самая приоритетная.
Если я правильно понял проблему, то написать скрипт, переформатирующий текстовой файл - задача простейшая.
Lost-in-TARDIS Онлайн
П_Пашкевич
Проблемы нет, переформатировать никогда проблемой не было.
Тут просто риторический вопрос, ну как, как можно было такой формат вывода вообще придумать.
ДНИЩE--ЫЫЫЫ
> .DS_Store
Lost-in-TARDIS
мы кодили как могли (с)
Ластро
Первое, с чего бы я начил рефакторинг этой партянки, это разбил исходник на части. Просто, чтобы осмыслить то, что там написано. Впрочем, предположу что знания биологии сильно облегчают процесс осмысления данного кода.
> Тут просто риторический вопрос, ну как, как можно было такой формат вывода вообще придумать.

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

Да и для генерации, полагаю, никаких ухищрений не надо, учитывая, что форматированный вывод умеет в ширину поля из коробки в большинстве ЯП и библиотек, начиная с сишного printf("%-20.20s",str);
Lost-in-TARDIS Онлайн
Facensearo
Кажется, я слишком молода для такого дерьма.
конечно, он восходит к матричным принтерам и моноширинному консольному выводу
(кстати, а теперь я и задумался, что для консолесранья он будет даже и удобнее тсв, только надо, конечно, дублировать вывод в файл в формате человеческом)
> Первое, с чего бы я начил рефакторинг этой партянки, это разбил исходник на части. Просто, чтобы осмыслить то, что там написано. Впрочем, предположу что знания биологии сильно облегчают процесс осмысления данного кода.

эм, а с чего бы это портянка? глянул на гитхабе - всего тысяча строк.

Алсо, если чо, вывод в строках с 623

puts "Writing output to: #{$OUT_DIR}#{$cancer}_results.txt"
genes = sort_hash($selected_genes)
fo = File.open("#{$OUT_DIR}#{$cancer}_results.txt", 'w')
genes.each { |e| fo.puts "#{e.ljust(10)} #{($selected_genes[e].to_f*100/$NUM_AVG_ITER). round(1)}%" }

Я раби не знаю нихуя, но воткнуть Dir.mkdir("#{$OUT_DIR}") перед fo - .. должно помочь от несоздавания папки, а заменить "#{e.ljust(10)} на просто "#{e}\\t - от говноедства с выравниванием
Lost-in-TARDIS Онлайн
Facensearo
>>>конечно, он восходит к матричным принтерам и моноширинному консольному выводу
Это когда я под стол ходила или когда меня еще в планах не было?

>>>Я раби не знаю нихуя, но воткнуть Dir.mkdir("#{$OUT_DIR}") перед fo - .. должно помочь от несоздавания папки, а заменить "#{e.ljust(10)} на просто "#{e}t - от говноедства с выравниванием
Очень вероятно (я просто тоже руби не знаю нихуя). Энивей, всё равно переписывать.
Ластро
Facensearo, у меня пунктик, я стараюсь декомпозировать на максимальное число частей. Код одним куском у меня вызывает нервный тик. Я хочу видеть структуру, которую могу обозреть одним взглядом.

То есть это либо должна быть структура файлов. Либо код реально должен помещаться на один экран.
Да ты же поехавший!
я пуризма уровня "один файл - один класс - один экран - ̶e̶i̶n̶ ̶f̶ü̶h̶r̶e̶r̶" давно не видел. Даже сторонники "один метод - один экран, причем консольный 25x80" уже подвымерли, кажется.

В принципе, даже если опустить удивительный мир кодогенерации по какой-нибудь модели данных (стопятьсот тысяч строк с одного json, стопятьсот миллионов с xsd), то я не вижу никакого смысла резать модули сверх необходимого.

//============================
не, тыща строк - это дофига на самом деле, но учитывая, что в сабж тупо затолканы всякие utils и прочие методы, а сама задача решается в банальном процедурном стиле — сойдет, да, зачем растаскивать скрипт по разным файлам
вот если чуть больше, то уже надо будет пилить
Ластро
вообще-то 25x80 это уже повод задуматься распилить метод

Вот эти utils, для начала и выкинуть в отдельный файл. Чтобы они не загораживали основной алгоритм.
Ластро
> "один файл - один класс
Шутки шутками, а отход от этого принципа, для того же qt может приводить к проблемам линковки. И ошибка выдваемая компилятором нифига не очевидна.
> Вот эти utils, для начала и выкинуть в отдельный файл. Чтобы они не загораживали основной алгоритм.

А зачем? Для пуризма? Что они загораживают, кроме круга для тараканьих бегов в голове?
А несколько скриптов, особенно если их надо распространять среди, хм, разнообразно сведущих в ит специалистов-отраслевиков - это больше проблем, чем кажется.

> Шутки шутками, а отход от этого принципа, для того же qt может приводить к проблемам линковки. И ошибка выдваемая компилятором нифига не очевидна.

Ну давай еще удивительную линковку С++ вспомним и — особенно — студиевские дефолтные прекомпилированные заголовки, у меня от букв LNK2001 до сих пор на жопе волосы шевелятся.

Только причем тут раби-скрипт на тыщу строк для биологов?
Ластро
>Ну давай еще удивительную линковку С++ вспомним
Это она и есть

>А зачем? Для пуризма?
Для читаемости. Поверишь или нет, но я в этом отношении не самый запущенный случай. Вон Боб Мартин в своём «Чистом коде» советует следующее о длине функций:
Первое правило: функции должны быть компактными. Второе правило: функции должны быть еще компактнее. … Из сказанного выше следует, что блоки в командах if, else, while и т.д. должны состоять из одной строки, в которой обычно содержится вызов функции. Это не только делает вмещающую функцию более компактной, но и способствует документированию кода, поскольку вызываемой в блоке функции можно присвоить удобное содержательное имя.
А ещё предлагает использовать функции, одного, ну максимум двух аргументов.

Про длину файлов у него тоже было.

В общем предлагаю свернуть тему. Ибо холиварная а все останутся при своём.
ПОИСК
ФАНФИКОВ











Закрыть
Закрыть
Закрыть