LINUX.ORG.RU

Задачка для metaprog

 , ,


1

1

Имеется выхлоп dpkg -l вида:

ii  2048-qt                                                     0.1.6-2+b2                                   amd64        mathematics based puzzle game
ii  aapt                                                        1:8.1.0+r23-3+b2                             amd64        Android Asset Packaging Tool
ii  abiword                                                     3.0.4~dfsg-2                                 amd64        efficient, featureful word processor with collaboration
ii  abiword-common                                              3.0.4~dfsg-2                                 all          efficient, featureful word processor with collaboration -- common files
ii  accountsservice                                             0.6.55-3                                     amd64        query and manipulate user account information

(гусары с aptitude и прочими готовыми колясками — молчать! Задача учебная!)

Надо выгрепнуть из него все строчки пакетов, у которых статус — установлен. То есть в первой колонке есть буковка i. Дело осложняется тем, что кроме ii, там может быть hi, ic, it и прочая шняга.

Решение однострочником, сложное и неудобное:

dpkg -l|grep -P '^[^\s]*?i[^\s]*?\s'

Уже видно, что регулярка страшная. А если не по первой колонке грепать, а по какой-нибудь пятой, то станет ещё страшнее и непонятнее. Плюс нужен расширенный синтаксис grep, который не во всех реализациях grep присутствует, а потому юзать его — фу!

Куда проще сделать:

dpkg -l|col1|grep i

, не так ли? ;)

(здесь col1..col9 — мини-скриптик из пакета byobu, который является, грубо говоря, просто удобным алиасом для awk '{print $1}')

Очевидная проблема здесь, однако же, в том, что в конвейере теряется важная информация, а именно вся строчка, которую нужно отобразить! Остаётся только огрызок в виде первой колонки!

Как решить эту задачу в один конвейер и красиво? А никак :P

Привлекаем императивный язык с промежуточными переменными!

import sys

for line in sys.stdin.readlines():
    if 'i' in line.split()[0]:
        sys.stdout.write(line)

Но всё равно некрасиво, линейный код с искусственным ветвлением через переменную. Вот бы запрограммировать двумерно! Как-то так:

        +-----+ colstream  +-----+  +------+ bool
line-+->| ||| >===========>| [1] >->| Y  i >--------+
     |  +-----+            +-----+  +------+        | transistor
     |                           +->/dev/null     --+--
     +-------------------------------------------/     \->-------> output

(где Y — пиктограмма воронки, как в Excel ;))

Этим и отличается текстовое программирование от графического: текстовое — одномерное, графическое — двумерное! В порог человеческого восприятия ещё и трёхмерное влезет; до такого вроде ещё не додумались (ну, если Minecraft’овский Redstone и аналоги не считать), но у Нас мыслишки есть ;)


Интересно, как реализуют эту задачу Их Метапрожейшество @metaprog ;) В отличие от тех «простых» задачек, что обычно предлагают в метапроготредах, эта займёт всего пару минут Вашего драгоценного метавремени, не так ли? ;) И послужит хорошей демонстрацией в копилочку того, чем хорош Метапрог (если он, конечно, хорош).

Антиметапрогеры превентивно посылаются в высирач, но могут предложить свои варианты конвейерной (не некрасивой императивной) обработки на текстовых ЯП, ибо почему бы и нет. Латентные (и не только!) шиндузятники с пошуршеллом тоже приветствуются, ага.



Последнее исправление: mertvoprog (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

i-rinat же ответил.

Видимо, тот ответ не соответствует критерию «Однозначного и понятного ответа».

i-rinat ★★★★★
()
Ответ на: комментарий от metaprog

А проблемы управления памятью с бухты-барахты не решаются, особенно без всякого дерьма типа сборщика мусора

В Rust же порешали ;)

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

mertvoprog
() автор топика
Ответ на: комментарий от metaprog

А проблемы управления памятью с бухты-барахты не решаются, особенно без всякого дерьма типа сборщика мусора. Я вот с Лабвью работаю - так оно памяти иногда обжирается и начинает дико тормозить.

В LabView имеется свой хороший API, который упрощает решения задач программистов для работы с устройствами.
Это для них ГЛАВНОЕ и в этом они ПРАВЫ.
Продолжать суждение не буду, так как вы и сами догадаетесь о чем дальше сказать хотел …

При системной разработке нужно не семь раз отмерить, а 777 раз прежде чем полагаться на чужой монструозный API …

И еще.

Много интересных задач, но ни кому не нужных, разве что для фана.
И ПОЛНО нерешенных задач о которых все ПОТРЕПАТЬСЯ любят, н не шевельнут и левым мизинцем для их решения.

Vladimirmir
()
Ответ на: комментарий от Vladimirmir

Й

Шутка

У проекта Метапрог четыре ноги.  
Позади у него ДЛИННЫЙ ХВОСТ.
Но трогать его НЕ МОГИ. 
За его малый рост.
За его малый рост.
Vladimirmir
()
Ответ на: комментарий от mertvoprog

Владимурмурмур

Слушаюсь и повинуюсь …

Интересно кто нибудь понял в каком состоянии проект и какие задачи с использованием его можно/полезно решать?

Vladimirmir
()
Ответ на: комментарий от mertvoprog

ИМХО два года назад разве не было диаграмм в Метапрог?
Были.
Для того, чтобы разработать Метапрог, который не использует API LabView нужно ОГОГО сколько своего API разработать и прежде всего GUI.

Вот в чем вопрос
Vladimirmir
()
Ответ на: комментарий от mertvoprog

Они ж ещё два года назад как и решили использовать готовый Nuklear+, зачем им разрабатывать GUI? :

И что @metaprog разработал controls для обеспечения а-ля GUI LabView?
Говорили и сделали - разное.

Говорят, что мух ...
Vladimirmir
()
Ответ на: комментарий от Vladimirmir

controls для обеспечения а-ля GUI LabView?

И не надо этот хтонический ужас из 90-х портировать ;) Вы же видели скриншоты смельчаков, которые пытались запускать прототип?

Для самого Метапрога возможностей Nuklear+ вполне достаточно, для всякой простой прикладухи тоже. Кому надо — могут использовать другую библиотеку виджетов с C-биндингами, проблемы? ;)

mertvoprog
() автор топика
Ответ на: комментарий от mertvoprog

Для самого Метапрога возможностей Nuklear+ вполне достаточно, для всякой простой прикладухи тоже.

Да кто же против?
Но результат не сложно предвидеть …

Vladimirmir
()
Ответ на: комментарий от Vladimirmir

«Все это хорошо, правильно, понимаешь ли …» …
Пойду как лучше на кухню да разогрею пюре с грибами + стаканчик томатного сока.

И это много лучше выяснения - "Есть ли жизнь на Марсе".
Vladimirmir
()
Ответ на: комментарий от Vladimirmir

GUI LabView - ужас?

Для «программистов» на LabVIEW — «и так сойдёт», примерно как Electron или Unity3D.

Для пользователей, кроме страдающих Windows 98 головного мозга, как @metaprog — ЧТО ЭТО,

*****

ТАКОЕ?

Владимурмурмур

mertvoprog
() автор топика
Ответ на: комментарий от Vladimirmir

Видите, как много скрытого смысла! А что за грибы? А почему томатный сок такого же цвета, как Марс?

mertvoprog
() автор топика
Ответ на: ???? от mertvoprog

Так надо то что, чтобы остались только ii строчки? Тогда это ещё проще.

system-root ★★★★★
()
Ответ на: комментарий от mertvoprog

GUI LabView - ужас? Для «программистов» на LabVIEW — «и так сойдёт», примерно как Electron или Unity3D.

Графический язык программирования должен быть близок к ИИ.
Плохо, когда термин «графический» разработчик понимает «буквально».
Тогда на свет появляется что-то типа Метапрог.
Не все суждения можно адекватно и просто для восприятия выразить через графические примитивы.
В тредах @metaprog говорил об этом.

Диаграммы а-ля LabView - «плохая заливная рыба».

Vladimirmir
()
Ответ на: комментарий от mertvoprog

Шутка

Видите, как много скрытого смысла! А что за грибы? Не мухоморы

А почему томатный сок такого же цвета, как Марс?

Дождь у нас сегодня от того, что в Зимбабве корова усралась.

PS: Такой логики на форуме ВАЛОМ.

Vladimirmir
()
Ответ на: комментарий от Vladimirmir

Дождь у нас сегодня от того, что в Зимбабве корова усралась. PS: Такой логики на форуме ВАЛОМ.

Дружище, суждение не о тебе было.

Vladimirmir
()
Ответ на: комментарий от Vladimirmir

должен быть близок к ИИ

Не, далеко не всем нужны эти ваши T9 и прочие кнопки «сделать всё хорошо», которые иногда делают, что надо, но часто и шалят, на что повлиять крайне нетривиально ;)

mertvoprog
() автор топика
Ответ на: комментарий от mertvoprog

Графический ЯП не нужен. Просто надиктовываешь код и всё.

Проблема только в том, что программист больше не может думать как человек – это расплата за общение с железками – и не может родить ничего человеческого.

anonymous
()
Ответ на: комментарий от mertvoprog

Я не понимаю что там нужно, хотя два раза перечитывал. «Нужно отфильтровать только те строки, у которых ___»

system-root ★★★★★
()
Ответ на: SkyNet от anonymous

ну там и шиз сидит недалекий, этапять

anonymous
()
Ответ на: комментарий от anonymous

надиктовываешь

Не взлетит. Многие люди тупо не умеют вербально формулировать нечто хоть сколь-нибудь целостное ;) Не только для машины, а вообще. Что ещё хуже, такие люди часто становятся большими начальниками ;)

программист больше не может думать как человек

Так @metaprog как раз не программист, чем и гордятся, и таргетируются на таких же ;)

Хотя, судя по всему, Они технарь-инженегр, что ещё хуже в данном случае.

А гуманитарии уже программируют в Excel, не нужны им эти ваши Метапроги ;)

mertvoprog
() автор топика
Ответ на: комментарий от system-root

Ну тут Нас ещё на первой странице подловили, что постановка задачи формально не совсем соответствует реализации, да ;)

mertvoprog
() автор топика
Ответ на: комментарий от mertvoprog

Хотя, судя по всему, Они технарь-инженегр, что ещё хуже в данном случае.

Ну это как сказать. Укладка шпал – это типа построения связанного списка. Причём на спинно-мозговых рефлексах. При этом головной моск может спокойно думать о великом и вечном.

kostyarin_ ★★
()
Ответ на: комментарий от kostyarin_

это типа построения связанного списка

Да — эмуляция работы ЭВМ ;) Ровно то же, чем занимаются и те, чью работу с помощью ЭВМ постепенно автоматизируют ;)

Мы вот в детстве чем-то подобным и занимались: на R/W-носителе (бумага, карандаш, ластик ;)) сортировали списки, сдвигали их при добавлении/удалении элементов, чертили перекрывающиеся окошки, позже даже рисовали битами на полях некое подобие FAT ;) Компьютерный карго-культ, это как у тех, кто с «ноутбуком» с форзаца Энциклопедии профессора Фортрана игрались, но у Нас такой книжки не было, посему всё куда запущеннее ;)

А что в итоге?

  1. Как программист так толком и не состоялись, хотя пытаемся рвать высирач уже лет 10, из них лет 8 професси-анально.

  2. Имеем патологическую неспособность вести заметки: хоть бумажные, хоть электронные. Вот просто не понимаем, как можно просто взять и что-то накалякать, не определив представление, форматы данных, кодировки ;) А в процессе их обдумывания теряется как желание эти заметки вести (даже в уже организованном виде), так и то, что, собственно, нужно записывать ;)

Интересно, как шпалоукладывание влияет на способность просто ходить по шпалам и никогда не заблуждаться! ;)

mertvoprog
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.