Jebus | AI Design
2.05K subscribers
817 photos
37 videos
3 files
146 links
Промты для дизайна: свет, стиль, референсы.

🔥 Сохрани → сгенерируй

Библиотека промтов: @takeit4
Download Telegram
👩‍💻 Самый быстрый по скорости алгоритм поиска не первого наибольшего элемента массива

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

Например нужно обработать данные списка на питоне:
second_largest([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])  # 6
second_largest([10, 10, 10]) # None
second_largest([1]) # None
second_largest([]) # None
second_largest([8, 8, 7, 6, 5, 6]) # 7


Для этого:
Мы будем использовать две переменных: first и second, инициализировав их значением как минус бесконечность. Пройдем по списку один раз и обновим значения этих переменных по мере необходимости. Этот метод работает за O(n), что быстро и эффективно!

Сам алгоритм:
def second_largest(numbers):
if len(numbers) < 2:
return None

first, second = float('-inf'), float('-inf')
for number in numbers:
if number > first:
first, second = number, first
elif first > number > second:
second = number

return second if second != float('-inf') else None

# Примеры использования
print(second_largest([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5])) # 6
print(second_largest([10, 10, 10])) # None
print(second_largest([1])) # None
print(second_largest([])) # None
print(second_largest([8, 8, 7, 6, 5, 6])) # 7


🔥 Преимущества:
- Временная сложность: O(n)
- Простота реализации
- Легкость в понимании

А как бы вы решили эту задачу?
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21
Ну что, готовимся к разрывному стартапу 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4❤‍🔥2🔥2
Вот не понимаю этой новой моды на Arc Browser 👩‍💻

Мне в рекомендациях на YouTube навалило много видео от айтишников, что это просто нечто, революция и глоток свежего воздуха... Но это просто очередной Google Chrome с вертикальными вкладками. В чем смысл? 😐

Да, у него вертикальные вкладки, но что это дает? У меня широкий монитор, да, но я как-то не испытывал потребности именно в вертикальных вкладках. 👀

Да, у него есть space, то есть что-то вроде локальных профилей, что позволяет залогиниться на условном VK с рабочего аккаунта и личного, ну или в почте так сделать. Удобно ли это? Я не знаю, у меня все и без этого Arc так настроено. 👀

Да, у него есть предпросмотр страницы. Это вообще непонятно, в чем киллер-фича. Это вроде даже в Mozilla есть. 😆

В общем, не понимаю и не советую вам Arc Browser. Может, на маке он какой-то супер красивый, я без мака, сказать ничего не могу. А еще в нем нет русского языка, думайте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1😁1🤔1
Jebus | AI Design
👩‍💻 EndeavourOS Сейчас почему-то очень популярным дистрибутивом стал Arch linux. Я как-то не вкатился в него, можно сказать не понял. Там очень муторная установка, через терминал при помощи арч-вики, но я с ней справился. Думая, что самое душное позади, я…
👩‍💻 микрообзор на EndevourOS

Можно ставить и кайфовать

Простота установки: 4 из 5. Ставить ее очень просто, установщик на русском языке, все пакеты нужные можно установить сразу. Любое окружение. В общем это арчинсталлер на стероидах. Бал забрал за то, что разбегаются глаза при установке и просит вифи. Без интернета никаких доп пакетов не видать.

Легкость первой настройки: 4 из 5. Ну тут по сравнению с арчем тоже все круто-классно. Да, дядечка за тебя уже все решил и все скриптики написал. А минусы будут? Ну типо вау, арч работает и мне не пришлось каждый вечер бороться с ним за первенство в этой квартире. Бал снимаю потому что с коробки все равно не все есть и работает, но это такие мелочи.

Репозитории и пакеты: 5 из 5. EndeavourOS использует мощный пакетный менеджер pacman и имеет доступ к Arch User Repository (AUR), что предоставляет пользователям огромный выбор программного обеспечения и возможность установки почти любого нужного пакета. Но есть и минусы, в AUR все пакеты как с ветки unstable. Наткнуться на что-то, что сломается непонятно от чего проще простого, но все равно наполненность отличная.

Плавность работы интерфейса: 4 из 5. А какие тут могут быть проблемы? множество настраиваемых и современных окружений рабочего стола, таких как XFCE, KDE и GNOME, что делает его привлекательным для пользователей с различными предпочтениями. Эти окружения можно легко настроить под себя, что делает систему ещё более удобной и красивой.

В общем система прикольная и мне зашла, но я пользоваться ей не буду. Мне не нравится арч и его репозиторий, но как вариант для тех, кому арч заходит мастхев.
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥2👍1
This media is not supported in your browser
VIEW IN TELEGRAM
А мне говорили, что этим все кончится
😁4🔥1😱1
👩‍💻 Интересный факт про питон

Одной из уникальных и забавных особенностей Python является возможность использования ключевого слова else вместе с циклами for и while. В других языках программирования такое использование ключевого слова else встречается крайне редко или вовсе отсутствует.

В Python блок else в цикле выполняется, когда цикл завершается "естественным образом", то есть без использования ключевого слова break. Это может быть полезно для того, чтобы отличить завершение цикла по естественной причине от завершения из-за прерывания.

Пример:
# Пример использования else с циклом for
for i in range(5):
if i == 3:
print("Нашли 3, выходим из цикла")
break
else:
print("Цикл завершился без прерывания")

# Пример использования else с циклом while
n = 0
while n < 5:
if n == 3:
print("Нашли 3, выходим из цикла")
break
n += 1
else:
print("Цикл завершился без прерывания")


В первом примере цикл for прерывается, когда i становится равным 3, поэтому блок else не выполняется. Во втором примере аналогично, цикл while прерывается при n == 3, и блок else также не выполняется.
Если бы в обоих случаях условие прерывания не было выполнено, блоки else были бы выполнены, что позволяет легко проверить, завершился ли цикл по естественной причине или был прерван.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
Есть проблемы с ютубом?
Anonymous Poll
50%
Да
50%
Нет
🥴1
This media is not supported in your browser
VIEW IN TELEGRAM
Как на счет забацать свой валдберист, потягивая кофеек и смотря на закат?

Недавно начал разбираться с библиотекой flet. Эта библиотека позволяет делать симпатичный интерфейс, причем адаптированный для web. А также компилируется одинаково для любой системы. Поскольку ничего полезного делать я не умею, я решил сделать онлайн магазин. Базовый с минимумом функий. Оказалось это очень просто.

👩‍💻 Исходный код доступен по 👉🏻 ссылке 👈🏻

Для того, чтобы собрать это в *.exe используем функцию на windows

 pyinstaller --onefile --windowed .\wb.py


В магазине есть главная страница с товарами (стакан, стол, корова), страница товара с возможностью выбрать количество и добавить товар в корзину, корзина с возможностью изменять количество товаров и оплачивать покупку, а также личный кабинет с аватаром и балансом пользователя. Все страницы и элементы интерфейса создаются и обновляются динамически при взаимодействии пользователя с кнопками и другими элементами управления. Реализуется все благодаря внутренним функция flet, причем они не такие уж и сложные.

Если интересна эта библиотека, пишите в комментарии, а также можете посоветовать мне что-то, в чем тоже стоит покопаться.

Основные функции кода:
main(page): Инициализирует приложение, устанавливает заголовок и размеры окна, определяет баланс пользователя и корзину, и вызывает главную страницу.
update_page(view): Очищает текущие элементы управления на странице, добавляет новый вид и обновляет страницу.
home_page(e=None): Создает и отображает главную страницу с товарами, кнопками навигации и их обработчиками событий.
product_page(e, product): Создает и отображает страницу товара с возможностью выбрать количество, добавить товар в корзину и вернуться на главную страницу.
cart_page(e=None): Создает и отображает корзину с товарами, их количеством, общей стоимостью и кнопкой для оплаты, а также кнопками навигации.
account_page(e=None): Создает и отображает личный кабинет с аватаром пользователя, балансом и кнопками навигации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32🔥1
Channel name was changed to «Пикод»
Задача о поиске всех простых чисел до заданного числа n 👩‍💻
Как пример влияния оптимизации кода на время решения.

Пример неоптимизированного кода для нахождения всех простых чисел до n с использованием простого перебора делителей:
def is_prime(n):
if n <= 1:
return False
for i in range(2, n):
if n % i == 0:
return False
return True

def find_primes(n):
primes = []
for i in range(2, n + 1):
if is_prime(i):
primes.append(i)
return primes

n = 100
print(find_primes(n))



Теперь улучшим этот код, используя алгоритм "Решето Эратосфена":
def sieve_of_eratosthenes(n):
is_prime = [True] * (n + 1)
p = 2
while p ** 2 <= n:
if is_prime[p]:
for i in range(p * p, n + 1, p):
is_prime[i] = False
p += 1
primes = [p for p in range(2, n + 1) if is_prime[p]]
return primes

n = 100
print(sieve_of_eratosthenes(n))


В оптимизированном коде используется алгоритм "Решето Эратосфена", который значительно эффективнее простого перебора делителей.

1. Создаем список булевых значений is_prime, где is_prime[i] указывает, является ли число i простым.
2. Начинаем с первого простого числа 2 и отмечаем все его кратные как составные (непростые).
3. Переходим к следующему неотмеченному числу и повторяем процесс.
4. Повторяем процесс до тех пор, пока квадрат текущего числа p меньше или равен n.
5. Возвращаем все числа, которые остались отмеченными как простые.

Этот алгоритм имеет временную сложность (O(n log n)), что значительно быстрее по сравнению с временной сложностью (O(n)) для простого перебора делителей.
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2🔥1
FireFox самый быстрый браузер на сегодняшний день, если врубить эти настройки. Я сам сначала не поверил, что это настолько помогает. 💄 Теперь только с него и сижу. 10 из 10. Они уменьшают дилей на ответ с сервера, увеличивают количество запросов единовременно. А еще отключает телеметрию и покет.

В поисковой строке пишете about:support > Папка профиля > pref.js. Закрываете Firefox, в конец файла pref.js вставляете этот код,сохраняете.


//Ускоряем загрузку страниц
user_pref("network.http.pipelining", true);
user_pref("network.http.proxy.pipelining", true);
user_pref("network.http.pipelining.maxrequests", 30);
user_pref("nglayout.initialpaint.delay", 0);
user_pref("nglayout.initialpaint.delay_in_oopif", 0);

// Отключаем Pocket
user_pref("extensions.pocket.api", "");
user_pref("extensions.pocket.enabled", false);
user_pref("extensions.pocket.site", "");
user_pref("extensions.pocket.oAuthConsumerKey", "");

//Отключаем анимацию открытия видео на фуллскин и подсказку "нажмите esc.."
user_pref("full-screen-api.transition-duration.enter", "0");
user_pref("full-screen-api.transition-duration.leave", "0");
user_pref("full-screen-api.warning.timeout", 0);

//Просим сайты не отслеживать Вас
user_pref("privacy.trackingprotection.enabled", true);
user_pref("privacy.donottrackheader.enabled", true);

//Отключаем телеметрию и отправку отчетов
user_pref("toolkit.telemetry.archive.enabled", false);
user_pref("toolkit.telemetry.bhrPing.enabled", false);
user_pref("toolkit.telemetry.cachedClientID", "");
user_pref("toolkit.telemetry.firstShutdownPing.enabled", false);
user_pref("toolkit.telemetry.hybridContent.enabled", false);
user_pref("toolkit.telemetry.newProfilePing.enabled", false);
user_pref("toolkit.telemetry.previousBuildID", "");
user_pref("toolkit.telemetry.reportingpolicy.firstRun", false);
user_pref("toolkit.telemetry.server", "");
user_pref("toolkit.telemetry.server_owner", "");
user_pref("toolkit.telemetry.shutdownPingSender.enabled", false);
user_pref("toolkit.telemetry.unified", false);
user_pref("toolkit.telemetry.updatePing.enabled", false);
user_pref("datareporting.healthreport.infoURL", "");
user_pref("datareporting.healthreport.uploadEnabled", false);
user_pref("datareporting.policy.dataSubmissionEnabled", false);
user_pref("datareporting.policy.firstRunURL", "");
user_pref("browser.tabs.crashReporting.sendReport", false);
user_pref("browser.tabs.crashReporting.email", false);
user_pref("browser.tabs.crashReporting.emailMe", false);
user_pref("breakpad.reportURL", "");
user_pref("security.ssl.errorReporting.automatic", false);
user_pref("toolkit.crashreporter.infoURL", "");
user_pref("network.allow-experiments", false);
user_pref("dom.ipc.plugins.reportCrashURL", false);
user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false);

//Тонкие вкладки и поисковая строка
user_pref("browser.uidensity", 1);
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1😱1
😁2❤‍🔥1👍1🔥1😢1
Игра Виселица на Python 👩‍💻

Сегодня вечером мне было нечего делать и я решил снова покорять геймдев. 👨‍💻 С flet я не разобрался и пришлось делать все на PyQT. В общем моя новинка игропрома: Виселица. Эта классическая игра теперь может стать отличным примером для тех, кто хочет практиковать свои навыки программирования и работы с GUI на Python.

В чем задумка:
В игре компьютер случайным образом выбирает слово из двух списков: один содержит слова на английском языке, другой - на русском. Пользователь должен угадать буквы слова, вводя их с помощью кнопок на экране. Количество оставшихся попыток отображается на экране, и игрок видит, какие буквы он уже пробовал.

Реализацию я видел так:

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

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

Ну а дальше по классике, угадал — молодец, а нет... Ну сам понимаешь😊

Попробуйте реализовать этот проект самостоятельно! Отличная тренировка.
А если хотите поиграть, вот ➡️ ссылка ⬅️ на код

@debugblog
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🔥1
Микрообзоры браузеров - 1
Brave
👩‍💻

Бытует ой какое ошибочное мнение, что этот браузер как-то помогает анонимности и весь такой конфиденциальный. В целом я не то, чтобы верю в анонимность браузеров на сегодняшний день, но это мое право. А этот браузер буквально построил свою рекламу на этом. На первый взгляд, браузер обещает многое: защиту конфиденциальности, быструю работу и встроенные блокировщики рекламы. Однако, мой опыт использования Brave оказался не таким радужным, и я не могу рекомендовать этот браузер.
В 2020 году Brave был уличен в автоматическом добавлении партнерских ссылок при посещении некоторых криптовалютных бирж. Это вызвало волну негодования среди пользователей. Хотя компания извинилась и устранила эту практику, сам факт такого поведения ставит под сомнение их приверженность к защите конфиденциальности пользователей.

Brave использует собственную криптовалюту BAT для вознаграждения пользователей за просмотр рекламы. Это выглядит как попытка заставить пользователей бустить их коин и не получать по факту никакой выгоды. Несмотря на заявления о блокировке рекламы, Brave активно продвигает собственные рекламные объявления через систему BAT. Чем-то напоминает яндекс браузер.

В итоге, мой опыт использования Brave Browser оказался разочаровывающим. Хотя браузер обещает много, его реализация оставляет желать лучшего. Будем искать идеал дальше.

@debugblog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41🔥1
А что, звучит хайпово

Youtube, Google всё
👎4
Jebus | AI Design pinned Deleted message
Начал делать приложение для помощи в обучении. Пока только для информатики, потому что для других предметов не придумал. Задача простая у него: преподавателем загружается задание в виде кода с ответом. Далее ученик сверяет свой ответ и свой код (по желанию). Поскольку ответ и код решения преподавателя зашифрованы, подглядеть не получится (на самом деле получится, если хитрый и понимаешь принцип работы)
3🔥2👍1
👩‍💻 Чтобы найти максимальный элемент в массиве на языке #Python, существует несколько способов:

1. Использование встроенной функции `max`:
   max_element = max(array)

Это самый простой и быстрый способ, поскольку max оптимизирован и написан на C.

2. Использование цикла `for`:
   max_element = array[0]
for element in array:
if element > max_element:
max_element = element

Это более явный способ, но он менее эффективен, чем встроенные функции.

3. Использование функции `reduce` из модуля `functools`:
   from functools import reduce
max_element = reduce(lambda x, y: x if x > y else y, array)

Этот способ также менее эффективен, чем встроенная функция max, но может быть полезен в определенных контекстах.

4. Использование библиотеки `numpy`:
   import numpy as np
max_element = np.max(array)

Если массив является объектом numpy, этот метод будет очень быстрым благодаря оптимизациям библиотеки.

5. Использование многопоточности:
Для огромных массивов можно разбить задачу на части и выполнить поиск максимума параллельно. Пример с использованием concurrent.futures:
   from concurrent.futures import ThreadPoolExecutor, as_completed

def find_max(sub_array):
return max(sub_array)

def parallel_max(array, num_threads):
chunk_size = len(array) // num_threads
futures = []
with ThreadPoolExecutor(max_workers=num_threads) as executor:
for i in range(num_threads):
sub_array = array[i*chunk_size:(i+1)*chunk_size]
futures.append(executor.submit(find_max, sub_array))
results = [future.result() for future in as_completed(futures)]
return max(results)

max_element = parallel_max(array, 4) # Например, с 4 потоками

Это может ускорить процесс для очень больших массивов на многопроцессорных системах.

Самый быстрый и рекомендуемый способ — это использование встроенной функции max для стандартных массивов Python, либо функции np.max для массивов numpy, так как они написаны на C и максимально оптимизированы для производительности.

@debugblog
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2🔥1
Покоряем геймдев (снова) 😐

Как вы знаете, я пытаюсь разобраться в разработке игр, и на этом пути решил сделать что-то максимально простое, но увлекательного. Выбор пал на "Пинг-Понг" — игру, в которую многие из нас играли.

Инициализация Pygame:
Важно было настроить основное окно и задать его размеры. Решил сделать его 800x600 пикселей — идеальный размер для классического "Пинг-Понга". Определил размеры и начальные позиции для ракеток и мяча. Каждая ракетка управляется своей клавишей — W и S для левой, и стрелки для правой. Настроил движение мяча и ракеток, а также проверку столкновений. Это самая важная часть кода! Когда мяч сталкивается с ракеткой, он меняет направление.

👩‍💻 Код доступен по ссылке

Сейчас модно зазывать людей в айти под видом работы в геймдеве, но это все можно изучать самостоятельно 👨‍💻 Как раз можете попробовать создать какой-то такой простой проект. Или нужен подробный разбор библиотеки pygame?

@debugblog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥21
Как найти медиану массива чисел на Python 👩‍💻

Медиана — это такое значение, которое делит массив на две равные части. Для нахождения медианы в массиве чисел существует несколько способов. Рассмотрим несколько из них.

1. Использование библиотеки statistics:
   import statistics

array = [3, 5, 1, 4, 2]
median = statistics.median(array)

Это самый простой и быстрый способ для небольших массивов, поскольку функция median из модуля statistics написана на C и оптимизирована для работы с числами.

2. Реализация вручную с сортировкой:
   array = [3, 5, 1, 4, 2]
sorted_array = sorted(array)
n = len(sorted_array)
mid = n // 2

if n % 2 == 0:
median = (sorted_array[mid - 1] + sorted_array[mid]) / 2
else:
median = sorted_array[mid]

Этот способ полезен, чтобы лучше понять, как вычисляется медиана. Он также дает возможность обработки нестандартных случаев.

3. Использование библиотеки numpy:
   import numpy as np

array = np.array([3, 5, 1, 4, 2])
median = np.median(array)

numpy — это мощная библиотека для научных вычислений в Python. Если массив представлен объектом numpy, этот метод будет очень быстрым и удобным.

4. Нахождение медианы для больших массивов (использование квантилей):
   import numpy as np

def find_median_large_array(array):
return np.percentile(array, 50)

large_array = np.random.randint(0, 1000, size=1000000) # Пример большого массива
median = find_median_large_array(large_array)

Этот метод полезен для очень больших массивов, так как numpy оптимизирован для работы с большими данными.

5. Использование библиотеки scipy для многомерных данных:
   from scipy import stats

array = [3, 5, 1, 4, 2]
median = stats.scoreatpercentile(array, 50)

scipy — еще одна мощная библиотека для научных и технических вычислений, которая предоставляет множество статистических функций.

Самый быстрый и простой способ — использовать функции median из модуля statistics для небольших массивов или np.median из библиотеки numpy для больших массивов, поскольку они оптимизированы и предоставляют удобные интерфейсы для вычислений.
@debugblog
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
Вот и до Сибири дошло замедление, у вас все также плохо с ютубом?
😢3