[Назад]
Ответ в нить
Captcha image [Д]
Animapcha image [@] [?] [Т]
Тема   ( ответ в 14830)
Сообщение flower
Файл  []
Пароль  (для удаления файлов и сообщений)
Параметры   
  • Прежде чем постить, ознакомьтесь с правилами.
  • Поддерживаются файлы типов GIF, JPG, MP4, OGV, PNG, WEBM, WEBP размером до 25600 кБ.
  • Ныне 73 уникальных клиентов. Посмотреть каталог
  • Предельное количество бампов нити: 200
1623426028141053040.png - (2.39MB, 2048×1969)
14830
No. 14830  
Всем привет, феи. Расскажу о себе и своей жизни. Закончил школу, колледж, университет. Долго мыкался по разным работка, но в итоге нашел себе постоянную работку. Работаю простым манером. Меня на работке более — менее все устраивает. Но хотелось бы найти место где зарплата повыше и условия получше. Сейчас интересно программирование (python), системное администрирование, маркетинг. Стоит ли распыляться на несколько сфер или сконцентрироваться на одной? Например я сейчас учу основы python и сейчас читаю книгу по маркетингу/продажам.
No. 14831  
>python
Я не знаю, как тебе мягче объяснить, но сейчас это уже не актуально. Как говорится, one frontend language, one backend language and one database language. Еще пару скриптовых языков для замазки. И это только для того, что бы начать работать макакой, которая получает больше минималки. Кароче сейчас не лучшее время для того, что бы делать программирование основной работой. А что касается маркетинга, я лично это кроме как шуткой никогда особо не считал.
No. 14832  
1664128391061256.png - (356.07KB, 750×749)
14832
>>14831
Зачем вы распространяете чушь.
No. 14837  
>>14832
А вы питонист?
No. 14838  
>>14837
Таки да. АПВС?
No. 14839  
166890617628793.png - (334.16KB, 1920×1966)
14839
>>14838
А ваш питон так может в одну строку? Дуэль!
No. 14845  
>>14831
Бакости какие-то. IT есть завод XXI века, для каждого найдётся место.
No. 14847  
1668802522919.png - (234.88KB, 700×500)
14847
>>14845
>для каждого найдётся место.
Зарплата в 6 циферок тоже найдется для каждого, как же. Но если вам нравится по 11 часов в день долбиться в текстовый редактор за смешные деньги, то пожалуйста, я же не отговариваю.
No. 14850  
>>14839
Да, там тоже есть ;
No. 14851  
>>14847
Смешность денег зависит от места, фирмы и позиции, а не от языка и фрони/фулл/бек.
Знать скуль пооезно, но большая часть бека на орм, а фронт на графкуль если уж действительно надо.

Опять же, из личного опыта, я вам не стаковерфлов, исследования проводить.
No. 14857  
>>14840
И SyntaxError тоже есть. Не сбегай с кододуэли.
No. 14860  
102810018_p0.jpg - (410.79KB, 1792×2500)
14860
Да, без "крутых" библиотек сложновато. Зато хоть смотрится понятно.

import Data.List
import Magic
import System.Directory

magic = magicOpen [MagicMimeType]

getMimeType :: [FilePath] -> IO [String]
getMimeType fps = magic >>= (m -> magicLoadDefault m >> mapM (magicFile m) fps)

groupByMime :: [FilePath] -> IO [[(FilePath, String)]]
groupByMime fps = do
    mimes <- getMimeType fps
    let zipped = zip fps mimes
        srted = sortBy ((_, m0) (_, m1) -> compare m0 m1) zipped
        grped = groupBy ((_, m0) (_, m1) -> m0 == m1) srted
    return grped

ls :: FilePath -> IO [FilePath]
ls fp = listDirectory fp >>= (list -> return $ map ((fp ++ "/") ++) list)

fillTo :: Int -> String -> String
fillTo n xs
    | xsLen >= n = xs
    | otherwise = xs ++ (replicate (n - xsLen) ' ')
  where
    xsLen = length xs

main =
    ls "/proc" >>= groupByMime >>=
    mapM_
        (list ->
             let (sh, hd) = splitAt 10 list
              in putStrLn (fillTo 30 "path" ++ "type") >>
                 mapM_ (x -> putStrLn $ fillTo 30 (fst x) ++ (snd x)) sh >>
                 putStrLn (fillTo 30 (show $ length hd) ++ "omited.n"))

No. 14861  
101883703_p0.jpg - (1.67MB, 6144×9216)
14861
>>14860
Ум, оно не по mime группирует, а по st_mode из lstat() https://linux.die.net/man/2/lstat
https://man7.org/linux/man-pages/man7/inode.7.html#:~:text=The file type and mode

А то все онлайн запускалки говрят что не могут Magic найти и не могу ваш код проверить. (https://ideone.com/eWAWVH)
No. 14862  
>>14857
Вы бы хоть ссылку правильную указать потрудились. Да и кодогольф как мерило языка - занятие бесполезное.

from itertools import chain, groupby, repeat; from pathlib import Path; for p, t in chain.from_iterable([chain([("type", "path")], list(zip(repeat(x, 10), y)), [("", f"(another {len(list(y))+1})")] if next(y, None) else []) for x, y in groupby(sorted(Path('/proc').iterdir(), key=lambda x: x.lstat().st_mode), key=lambda x: x.lstat().st_mode)]): print("{!s:<30}{:<10}".format(y, x))


Дешифратор st_mode и/или использование массивов вместо итераторов оставлю для читателя. Если хочется избавиться от лишней новой строки, то тривиально оборачивается в
list(starmap(lambda x, y: ..., chain.from_iterable(...))) or None
.

Или если хочется ближе к нормальной логике операций:
format="{:<30}{:<10}"; for ftype, items in groupby(sorted(Path('/proc').iterdir(), key=lambda x: (x.lstat().st_mode, str(x))), key=x.lstat().st_mode): [print(i) for i in ([format.format("path", "type")] + [format.format(str(path), ftype) for path in (islice(items, 0, 10))] + [f"(another {len(list(items))+1})n" if next(items, False) else ""])] and None


chain()
в первом только на случай UB.
А теперь жду вашу версию без ;.
No. 14863  
>>14861
https://hackage.haskell.org/package/magic
Можно эту функцию переписать через
https://hackage.haskell.org/package/unix-2.8.0.0/docs/System-Posix-Files.html#t:FileStatus
если уж lstat.
No. 14864  
102728148_p0.jpg - (887.93KB, 1320×2014)
14864
В общѣмъ, если дополнить нѣхватку стандартныхъ библитѣкъ своими функциями, то получается куда более лаконичная вѣрсия, чѣмъ в этом вашѣмъ питоне. А в одну строку не помѣщается потому только, что мне в своѣмъ Vim-e лѣнь вырубать hindent.

import Data.List
import System.Directory
import System.Posix.Files as PF
import Text.Printf

data StMode
    = BlkDev
    | CharDev
    | Dir
    | NamedPipe
    | RegFile
    | Sock
    | SymLink
    deriving (Eq, Ord)

instance Show StMode where
    show BlkDev = "block device"
    show CharDev = "character device"
    show Dir = "directory"
    show NamedPipe = "named pipe"
    show RegFile = "regular file"
    show Sock = "socket"
    show SymLink = "symbolic link"

getStMode :: FilePath -> IO StMode
getStMode fp =
    getFileStatus fp >>=
    (x ->
         case () of
             _
                 | isBlockDevice x -> return BlkDev
                 | isCharacterDevice x -> return CharDev
                 | isNamedPipe x -> return NamedPipe
                 | isRegularFile x -> return RegFile
                 | isDirectory x -> return Dir
                 | PF.isSymbolicLink x -> return SymLink
                 | isSocket x -> return Sock)

groupByStMode :: [FilePath] -> IO [[(FilePath, StMode)]]
groupByStMode fps = do
    stModes <- mapM getStMode fps
    let zipped = zip fps stModes
        sorted = sortBy ((_, m0) (_, m1) -> compare m0 m1) zipped
        grouped = groupBy ((_, m0) (_, m1) -> m0 == m1) sorted
    return grouped

ls :: FilePath -> IO [FilePath]
ls fp = listDirectory fp >>= (list -> return $ map ((fp ++ "/") ++) list)

main =
    ls "/dev" >>= groupByStMode >>=
    mapM_
        (list ->
             let (toShow, toHide) = splitAt 10 list
              in printf "%-30s%sn" "path" "type" >>
                 mapM_ (x -> printf "%-30s%sn" (fst x) (show $ snd x)) toShow >>
                 printf "%-30s%s" (show $ length toHide) "omitednn")

No. 14865  
>>14864
Ахъ да! Главное – лаконичность эта достигаѣться не путем страшныхъ извращѣний, а путем вполне естѣстественнымъ, что непрѣменно говорит о преимуществе даннаго языка!
No. 14866  
>>14864
>1/3 задания не учтена, сайд-эффекты
>лаконичность
>страшныхъ извращѣний
>использует буквально то же самое
What did he mean by this?
No. 14867  
1664234225942785.png - (219.28KB, 500×500)
14867
>>14866
Лол.
No. 14868  
>>14867
>вваливается в тред советов с ахинеей, галопирует с какими-то своими дуэлями
>выигрывает по каким-то лично придуманным правилам
>get out
Apply yourself.
No. 14869  
Одна девочка, глядя на это всё, уже коньяк ополовинила. Страшно.
No. 14871  
>>14869
Учитывая обычный размер бутылок коньяка, девочке предстоит весёлые вечер, ночь и утро.
No. 14877  
BUZZ!
#include <dirent.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char *types[] = { "unknown", "named pipe", "character device", "", "directory", "",  "block device", "", "regular file",
            "", "link", "", "socket", "", "whiteout", ""};

long main(size_t argc, char **argv){
    const char *arg = argc > 1 ? argv[1] : ".";
    size_t arglen = strlen(arg);
    char names[16][16][256];
    static size_t last[16];
    DIR *parent = opendir(arg);
    if(!parent)
        return -1;
    for(struct dirent *c = readdir(parent); c; c = readdir(parent)){
        if(!strcmp(c->d_name, ".") || !strcmp(c->d_name, ".."))
            continue;
        if(last[c->d_type] < 16)
            strcpy(names[c->d_type][last[c->d_type]], c->d_name);
        last[c->d_type]++;
    }

    for(size_t i = 0, ever_printed = 0; i < 16; i++){
        if(last[i] == 0)
            continue;
        if(ever_printed)
            printf("n");
        else
            ever_printed = 1;
        printf("%-*s %sn", arglen + strlen("/") + 32,  "path", "type");
        for(size_t j = 0; j < (last[i] > 16 ? 16 : last[i]); j++)
            printf("%s/%-32.32s %s (%lu)n", arg, names[i][j], types[i], last[i]);
        if(last[i] > 16)
            printf("(other %lu)n", last[i] - 16);
    }
}

Не могу удержаться.
No. 14878  
16690734842256.png - (432.46KB, 1920×2765)
14878
>>14862
Ссылку на что?
Можете не поверить, но мой изначальный поинт, который я хотел продемонстрировать, был о трудности использования python для быстрых однострочников в шелле в качестве замены shell-скриптингу.
Необходимость прыгать повсюду для того же
> оборачивается
везде, когда в ruby можно просто chain-ить.

> А теперь жду вашу версию без ;
Pathname('/proc/').children.group_by(&:ftype).each{ |type, files| files.first(10).each_with_index{ |file, index| lambda{ |file, type| "%-30s%-10s" % [file, type] }.tap{ |printer| if index.zero? then puts printer.call("path", "type") end or puts printer.call(file, "%s (%s)" % [type, files.size]) } } and (files.size - 10).tap{ |remain| if remain > 0 then puts "(another #{remain})nn" else puts end } }

https://ideone.com/azO7gu
https://ideone.com/8eX05Q

И я не могу запустить вашу штуку: https://ideone.com/J8jwkG В чём дело?

>>14864
Оно запускается, отлично.
https://ideone.com/eaO3aE

Правда про /proc/self почему-то говорит, что директория.
No. 14879  
>>14877
П - Продуктивность.
No. 14881  
>>14868
Кто-то слил разрозненных постеров в одну колыхающуюся угрожающую массу. Не стоит так делать.
No. 14897  
>forced anon
Tsk.

>>14878
Excusez moi, не проверил финальную версию перед копипастом.
https://ideone.com/lZJcN7
https://ideone.com/YSMXkt
>мой изначальный поинт, который я хотел продемонстрировать, был о трудности использования python для быстрых однострочников в шелле
И он нифига не очевидный, особенно когда вы даёте скриншот IDE, а не консольки. Плюс, умещение скриптов в одну строку никогда на самом деле не было чем-то необходимым, когда есть HEREDOC или возможность просто создать файл, а не дебажить длинностроку на живом.
В любом случае, для шеооскриптов ничего лучше Перла не придумали.

>>14877
А return 0 кот будет делать? И почему long? И NAME_MAX может быть больше 256.

>>14881
Есть ли разница, в треде всё равно балаган, и выцеплаять только кого-то одного - такое себе,
No. 14898  
>>14897
>Есть ли разница, в треде всё равно балаган, и выцеплаять только кого-то одного - такое себе
Поэтому нужно обгадить всех кислыми фразами с зарубежных имиджбордов. Это именно тот Ойчан, который мы все хотим видеть. Отлично. Продожайте.
No. 14899  
>>14898
"Кислость" у вас в голове. Вот что мешало на вопрос нормально ответить вместо перехода на нападки, м?
No. 14900  
>>14899
Вы разговариете сами с собой. К сожалению здесь. Поэтому берите свою кислость и идите. Вот эта девочка вам уже и транспорт подготовила.
No. 14902  
>>14878
>Правда про /proc/self почему-то говорит, что директория.
man 5 proc
>When a process accesses this magic symbolic link, it resolves to the process's own /proc/[pid] directory
No. 14903  
>>14897
> В любом случае, для шеооскриптов ничего лучше Перла не придумали.
Ruby наследник perl. Там даже похожие predefined globals и sed mode в интерпретаторе.
https://ruby-doc.org/core-2.0.0/doc/globals_rdoc.html

CPAN перла живой? Что там с Raku?
https://en.wikipedia.org/wiki/Raku_(programming_language)
> Influenced by
> Ruby
No. 14904  
>>14902
Но до резолвинга оно всё-таки ссылка.
No. 14906  
>>14903
>Ruby наследник perl
Так и PHP наследник perl, и Питон. Плюс в основной поставке системы он не идёт, в отличие от.
>CPAN перла живой?
А что ему сделается? https://metacpan.org/
>Что там с Raku?
Оффициально открестились года вроде два назад, не слежу.
No. 14907  
>>14904
https://hackage.haskell.org/package/unix-2.8.0.0/docs/System-Posix-Files.html
getFileStatus вызывает stat(2), который резолвит ссылки.
Надо было getSymbolicLinkStatus использовать, он lstat(2) вызывает. Моя ошибка.
https://ideone.com/EUnE8Z
Удалить сообщение []
Пароль  
[Mod]