Задать вопрос
  • Каков план изучения андроид разработки?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Тебе нужен не план.
    Тебе нужна тактика, которой нужно придерживаться.
    Ответ написан
    Комментировать
  • Какой ноутбук купить для программирования?

    Slayer_nn
    @Slayer_nn
    Гугол, памаги!
    Тот, который позволяет бюджет
    Ответ написан
    Комментировать
  • Как посчитать количество функций в коде JS?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Такие задачи однозначно решаются обходом AST. Возьмите общеизвестный парсер и инструмент для обхода его дерева, например связка из @babel/parser и @babel/traverse подойдет.
    Так же можно посмотреть в какие ноды что парсится с помощью https://astexplorer.net/ - в нем несколько языков, а для js/ts на выбор есть несколько парсеров.
    Вам по сути нужно найти FunctionDeclaration содержащий в body ReturnStatement и извлечь из него Identifier соответствующий имени. А для второй части - FunctionDeclaration с ArgumentsList не нулевой длины.
    Ну и так как в условии сказано, что внутрь не заходить, то можно пройтись лишь по верхнему уровню, тогда @babel/traverse и не нужен даже
    Ответ написан
    3 комментария
  • На чем лучше писать аналог Aliexpress?

    DevMan
    @DevMan
    с такой постановкой вопроса - лучше вообще не писать.
    и вопрос, если уж стоит, должен быть: не на чем, а как.
    Ответ написан
    7 комментариев
  • Что предпочтительнее в python - проверять значение в словаре или обработать исключение исключение?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Easier to ask for forgiveness than permission. This common Python coding style assumes the existence of valid keys or attributes and catches exceptions if the assumption proves false. This clean and fast style is characterized by the presence of many try and except statements. The technique contrasts with the LBYL style common to many other languages such as C.

    https://docs.python.org/3/glossary.html
    Ответ написан
    1 комментарий
  • Что предпочтительнее в python - проверять значение в словаре или обработать исключение исключение?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Вы можете сами произвести замеры, но ставлю на то, что быстрее окажется проверка по словарю, поскольку она делается за ~O(1) благодаря хешированию.
    Однако я бы предложил чуть более эффективню схему:
    D = dict()
    NOTFOUND = object()
    
    def f1(x):
        result = D.get(x, NOTFOUND)
        if result is NOTFOUND:
            result = D[x] = long_calculation()
        return result


    Не поленитесь (как я), сделайте замеры. Всем тут будет интересно.
    А ещё в питоне как-то не принято экономить на спичках в ущерб чтаемости и прозрачности кода.
    Но если всё как следует "посахарить"... Лучше всего такое кэширование смотрится в виде декоратора.

    UPD:
    Забавно. Я ошибся и с исключением действительно выходит быстрее. На это указал уже автор вопроса, а я на всякий случай пересчитал, причем по отдельности для прогрева, для повторного взятия и для неполучения из прогретого хеша.

    import time
    from math import tan, atan
    import timeit
    
    
    NOTFOUND = object()
    
    
    def long_calculation(x):
        return atan(tan(x) / 2)
    
    
    def f1(x):
        if x not in D:
            D[x] = long_calculation(x)
        return D[x]
    
    
    def f2(x):
        try:
            return D[x]
        except:
            D[x] = long_calculation(x)
        return D[x]
    
    
    def f3(x):
        result = D.get(x, NOTFOUND)
        if result is NOTFOUND:
            result = D[x] = long_calculation(x)
        return result
    
    
    FUNCS = (
        (f1, 'get triple'),
        (f2, 'except'),
        (f3, 'get once'),
    )
    
    
    def work(f, gap=0.1, count=1000):
        for x in range(0, count):
            f(x + gap)
    
    
    D = {}
    number = 10000
    
    for func, descr in FUNCS:
        print(f'{func.__name__} ({descr}):')
        print(f'  Cache empty:', timeit.timeit(f"work({func.__name__})", setup=f'D=dict()', globals=globals(), number=number))
        print(f'  Total reuse:', timeit.timeit(f"work({func.__name__})", setup=f'D=dict(); work({func.__name__})', globals=globals(), number=number))
        print(f'  Total miss :', timeit.timeit(f"work({func.__name__})", setup=f'D=dict(); work({func.__name__}, gap=0.2)', globals=globals(), number=number))

    И вот результат:
    f1 (get triple):
      Cache empty: 2.8940897800493985
      Total reuse: 1.7486431139986962
      Total miss : 1.6964515489526093
    f2 (except):
      Cache empty: 1.2670072519686073
      Total reuse: 1.2622331579914317
      Total miss : 1.2547212480567396
    f3 (get once):
      Cache empty: 1.6983374420087785
      Total reuse: 1.6465996010228992
      Total miss : 1.6999219709541649
    Ответ написан
    2 комментария
  • Как просматривать запущенный процесс python на bash консоли хоста?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    запускай
    screen
    python
    потом закрывай сессию

    потом подключаешься и
    screen -r

    а еще потратить минут 10 на чтение man screen

    Кроме screen есть еще tmux, но его надо ставить отдельно.

    А еще, правильный способ через nohup
    nohup python myscript &
    Ответ написан
    Комментировать
  • Плохо ли то, что я перепрыгиваю с направлений?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Стоит ли так резко перепрыгивать с разных направлений и языков

    Так ты же ничего не изучил, что значит перепрыгивать?
    Или ты считаешь, что если ты почитал про основы, то ты уже что-то изучил?

    Где реализованные проекты, которые не стыдно показать?
    Ответ написан
    Комментировать
  • Скрипт для генерации уникальных изображений?

    MinTnt
    @MinTnt
    Думаю тут и PIL сгодится. Сначала задав код для рисования по пиксельно нужного изображения. А дальше создать список с разными цветами, с которого потом через random выбирать нужный цвет.

    Т.е. создать по функции для рисования определёных одноцветных мест рисунка. А далее выбирая через random случайный код света, передавать его функции, для отрисовки.

    Update: я пока лишь так, быстро просмотрел PIL, написал пусть и не до конца идеальный, но для начала сойдёт - мини-код. Он берёт из папки уже существующее входное изображение, а на выходе изменённое со случайными цветами.
    from PIL import Image, ImageDraw 
    from random import randint
    import time
    
    image = Image.open('enter-image.png')
    pix = image.load()
    width = image.size[0]
    height = image.size[1]
    draw = ImageDraw.Draw(image)
    
    pixel_id = []
    print(f'Через 3 секунды начнётся анализ картинки. Размеры {width}x{height}')
    time.sleep(3)
    start_time = time.time()
    
    for x in range(width):
    	for y in range(height):
    		print(x, y)
    		if not pix[x,y] in [i[0] for i in pixel_id]:
    			pixel_id.append([pix[x,y], []])
    		pixel_id[[i[0] for i in pixel_id].index(pix[x,y])][1].append((x,y))
    
    for a in pixel_id:
    	color = (randint(0, 255), randint(0, 255) , randint(0, 255))
    	for draw_zone in a[1]:
    		draw.point(draw_zone, color)
    
    print('Проработка изменённой картинки завершена. Начинается сохранение.')
    image.save("output-image.png")
    print(f'Сохранение завершено за {time.time()-start_time}.')

    Если же нужно чтоб какие-то цвета не брало в счёт, можно приделать такую проверку.
    if pix[x,y] not in [(0, 0, 0, 255), (255,255,255, 255)]:
    			if not pix[x,y] in [i[0] for i in pixel_id]:
    				pixel_id.append([pix[x,y], []])
    			pixel_id[[i[0] for i in pixel_id].index(pix[x,y])][1].append((x,y))
    Ответ написан
    7 комментариев
  • Проблемы с библиотекой logging в python как ее решить?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    Вставьте где-нибудь на запуск кода:
    import os
    
    LOG_DIR = 'D:\\tmp\\'
    if not os.path.exists(LOG_DIR):
            os.makedirs(LOG_DIR)
    Ответ написан
    Комментировать
  • Куда лучше сохранять файлы .py, на ssd или hdd?

    iLLuzor
    @iLLuzor
    Java, Kotlin, Android Developer
    Конечно ssd.
    Hdd в современном пк вообще быть не должно
    Ответ написан
    2 комментария
  • Где можно проверить, можно ли юзать песню в видео на ютубе?

    Говорят, раньше была фишка для проверки, но её убрали.

    Как вариант: завести ещё один канал для тестов и в него загружать проверочное видео с музыкой под вопросом – после загрузки YouTube проверит его своим Content Id. Если что, репутация основного канала не пострадает.
    Ответ написан
    Комментировать
  • Как решить задачу с массивом?

    DevMan
    @DevMan
    $result = array_reduce( array_reverse( $keys ), function ( $c, $i ) use ( $value ) {
        return [ $i => ( is_null( $c ) ? $value : $c ) ];
    } );
    print_r( $result );
    // или по-модному, если слоник не древний
    $result = array_reduce( array_reverse( $keys ), fn( $c, $i ) => [ $i => $c ?? $value ] );
    print_r( $result );
    https://3v4l.org/tLFqe
    Ответ написан
    Комментировать
  • Стоит ли начинать изучение программирования в 13 - 14 лет?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Те, кому действительно стоит изучать программирование, этим вопросом не задаются, они просто начинают изучать, как только им становится интересно.
    Ответ написан
    3 комментария
  • Хостинг следит за действиями в ЛК. Нормально ли это?

    DevMan
    @DevMan
    у вас глобальное непонимание и корявенький пример.
    вы покупаете ресурсы. вот если в эти ресурсы навтыкают свои трекеры - будет повод для возмущения.
    а ЛК хостера - его собственность.

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

    @mkone112
    Начинающий питонист.
    Вопрос не читал, но осуждаю. Сначала осиль хоть одну книгу, а потом спрашивай про другие.
    Ответ написан
    1 комментарий
  • Как сделать потоковый плеер с отображением текущего трека и обложки?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нужно просто выучить JS и вопрос отпадёт.
    Ответ написан
    Комментировать
  • Как защитить свои банковские аккаунты от мошенников и вирусов?

    saboteur_kiev
    @saboteur_kiev Куратор тега Информационная безопасность
    software engineer
    Не привязывать банковский счет с большой суммой к карточкам вообще.

    Делать отдельный счет или несколько, отдельные карточки, и разграничить какие вы используете для регулярных оплат в магазинах, какие для оплаты в интернете на не самых секьюрных сайтах, держать на этих счетах только некритичные для вас суммы, и проставить дневные лимиты.
    Ответ написан
    1 комментарий
  • Как сохранять установленный аддон firefox через selenium?

    @dandyvssega Автор вопроса
    Начинаю кодить
    При установке аддона(аддон работает без перезапуска) происходят изменения в файлах что на скрине9fa610f0e9994d9994e0a694f0d92536.png

    P.S. В итоге оказывается что селениум создает копию папки профиля во временной директории и работает с ней.После закрытия через driver.quit() эта папка удаляется,соответственно все что установлено и записано(аддоны ,настройки и тд) пропадают с этой папкой.Как решение пока сделал для себя вот такой код ( для профи код конечно покажется смешным извращением,но что поделать,все когда-то начинали = ) )

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support.ui import Select
    
    import datetime
    import time
    import random
    
    from datetime import datetime
    from random import randint
    from random import choice
    from string import ascii_lowercase
    from string import digits
    import os
    import shutil
    
    from shutil import copytree, ignore_patterns
    
    
    
    def regger():
        count = 1
        login = 'testprofile2@mail.com'
        shutil.copytree('/home/user/.mozilla/firefox/source/', "/home/user/.mozilla/firefox/"+ str("source") + str(count))
        profile = "/home/user/.mozilla/firefox/source" + str(count)
    
        fp = webdriver.FirefoxProfile(profile)
    
    #   Addons
        directory = '/home/user/ffadns/'
        files = os.listdir(directory)
        addon = directory + str(random.choice(files)); addon2 = directory + str(random.choice(files)); addon3 = directory + str(random.choice(files))
        fp.add_extension(addon); fp.add_extension(addon2); fp.add_extension(addon3)
        addon_name = addon.split('/'[-1]) ; addon2_name = addon2.split('/'[-1]); addon3_name = addon3.split('/'[-1])
    
        driver = webdriver.Firefox(fp)
        dd = fp.profile_dir.split('/')
        tempProfile_name = dd[-2]
        shutil.move('/tmp/' + str(tempProfile_name) + '/webdriver-py-profilecopy/', '/tmp/' + str(login))
        shutil.copytree('/tmp/' + login, '/home/user/.mozilla/firefox/' + login, ignore=ignore_patterns('lock'))
        shutil.rmtree('/home/user/.mozilla/firefox/source1')
        driver.quit()
    Ответ написан
    Комментировать