Анатолий Ч. | канал
input.mp4.zip
Конкурс закончился
Победил @gosunov. Он уже получил 1500₽. Правки за оставшиеся 500₽, интервью с победителем и публикация рабочего решения будут уже не сегодня.
Хоть многие в комментариях утверждали о тривиальности задачи, всего было прислано 14 неудачных попыток от 4 разных участников. На решение задачи ушло чуть меньше 7 часов, так что можно считать, что эффективность участников-фрилансеров равна 214 рублям в час.
Ставлю в комменты загружаться файлы победителя и ложусь спать. Спокойной ночи!
Победил @gosunov. Он уже получил 1500₽. Правки за оставшиеся 500₽, интервью с победителем и публикация рабочего решения будут уже не сегодня.
Хоть многие в комментариях утверждали о тривиальности задачи, всего было прислано 14 неудачных попыток от 4 разных участников. На решение задачи ушло чуть меньше 7 часов, так что можно считать, что эффективность участников-фрилансеров равна 214 рублям в час.
Ставлю в комменты загружаться файлы победителя и ложусь спать. Спокойной ночи!
Анатолий Ч. | канал
Конкурс закончился Победил @gosunov. Он уже получил 1500₽. Правки за оставшиеся 500₽, интервью с победителем и публикация рабочего решения будут уже не сегодня. Хоть многие в комментариях утверждали о тривиальности задачи, всего было прислано 14 неудачных…
Решение
Я немного пообщался с @gosunov, он студент в итмо и занимается олимпиадным программированием. Во время конкурса узнал много нового про формат .png. Его решение состояло из bash-скрипта script.sh, который внутри себя в одном месте запускает python-скрипт:
script.sh
mask.py
Оно сделает анимацию для 42x42, для 100x100 понадобится поменять параметры руками и запустить ещё раз.
🥔—🥔—🥔—🥔
Также параллельно с победителем конкурса вчера, прямо на моих глазах пытался закодить задачу @the_tigor, но не успел. В качестве поощрительного приза я купил ему чипсики. Его код состоит из одного python-скрипта, который сразу генерит и 42х42, и 100х100 версии:
tigor.py
Про правки я напишу в комменты (и в наш божественный @wallet_chat).
Я немного пообщался с @gosunov, он студент в итмо и занимается олимпиадным программированием. Во время конкурса узнал много нового про формат .png. Его решение состояло из bash-скрипта script.sh, который внутри себя в одном месте запускает python-скрипт:
script.sh
set -e
mkdir frames42x42
mkdir frames42x42masked
ffmpeg -i input.mp4 -an -vf crop=272:272,scale=42:42,fps=6 42x42_fps6_muted.mp4
ffmpeg -i 42x42_fps6_muted.mp4 frames42x42/%05d.png
python3 mask.py
ffmpeg -y -framerate 6 -i frames42x42masked/%05d.png 42x42.apng
mv 42x42.apng 42x42.png
mask.py
from PIL import Image
w = 42
h = 42
x0 = (w - 1) / 2
y0 = (h - 1) / 2
R = min(h, w) / 2 - 1
def crop_to_circle(im):
for x in range(w):
for y in range(h):
dist = ((x0 - x) ** 2 + (y0 - y) ** 2) ** 0.5
if dist > R:
im.putpixel((x, y), (0, 0, 0, 0))
n = 32450
for i in range(1, n + 1):
print('\r%05d/%05d' % (i, n), end='')
im = Image.open('frames%dx%d/%05d.png' % (w, h, i)).convert('RGBA')
crop_to_circle(im)
im.save('frames%dx%dmasked/%05d.png' % (w, h, i))
Оно сделает анимацию для 42x42, для 100x100 понадобится поменять параметры руками и запустить ещё раз.
🥔—🥔—🥔—🥔
Также параллельно с победителем конкурса вчера, прямо на моих глазах пытался закодить задачу @the_tigor, но не успел. В качестве поощрительного приза я купил ему чипсики. Его код состоит из одного python-скрипта, который сразу генерит и 42х42, и 100х100 версии:
tigor.py
import cv2
from PIL import Image, ImageDraw
from tqdm import tqdm
import random
target_fps = 6
video = cv2.VideoCapture('./input.mp4')
first42 = None
first100 = None
sequence42 = []
sequence100 = []
mask = Image.new('L', (272, 272), 0)
draw = ImageDraw.Draw(mask)
draw.ellipse((0, 0, 271, 271), fill=255)
frame_count = video.get(cv2.CAP_PROP_FRAME_COUNT)
nth_frame = video.get(cv2.CAP_PROP_FPS) / target_fps
frame_id = 0
frameids = []
while int(frame_id) < frame_count - nth_frame:
frame_id += nth_frame
frameids.append(frame_id)
def rand_mod(img):
for i in range(4):
width, height = img.size
random_x = random.randint(0, width - 1)
random_y = random.randint(0, height - 1)
random_channel = random.randint(0, 2)
pixel = list(img.getpixel((random_x, random_y)))
if pixel[random_channel] < 255:
pixel[random_channel] += 1
else:
pixel[random_channel] -= 1
img.putpixel((random_x, random_y), tuple(pixel))
for frame_id in tqdm(frameids):
video.set(cv2.CAP_PROP_POS_FRAMES, int(frame_id))
ret, frame = video.read()
if not ret:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame)
cropped = img.crop((104, 0, 376, 272))
round = Image.composite(cropped, Image.new('RGBA', (272, 272)), mask)
img100 = round.resize((100, 100))
img42 = round.resize((42, 42))
rand_mod(img100)
rand_mod(img42)
if first42 is None:
first100 = img100
first42 = img42
else:
sequence100.append(img100)
sequence42.append(img42)
img.close()
cropped.close()
round.close()
def save(first, sequence, name):
first.save(name, optimize=True, compression_level=9, save_all=True,
append_images=sequence, loop=0, duration=int(1000 / target_fps))
save(first42, sequence42, '42.png')
save(first100, sequence100, '100.png')
Про правки я напишу в комменты (и в наш божественный @wallet_chat).
Много каналов по соседству публиковали свой Spotify Wrapped. Не думаю, что вам интересно моё увлечение Лидой и Джонибоем, но знали ли вы, что Спотифай делает такую же штуку для артистов?
Раскрываю свои итоги года как Anatoliy Ch. в Spotify.
Слушатели
За год у меня было 764 слушателя из 69 стран. Топ-5 стран по прослушиваниям: Сербия, Нидерланды, США, Германия, Украина. 553 человека услышали меня впервые.
Стримы
У меня 14293 стрима — это 220 часов непрерывного прослушивания моей музыки.
Активность
В этом году мне поставили 103 лайка, а мои песни попали в 21 плейлист. Мои треки шерили другим людям — чаще всего шерили «Музыку для сна в самолёте», «Дай денег» и «Музыку для сна в отеле». И что больше всего меня удивило — у 5 разных человек я попал в топ-5 артистов за этот год!
Астрологи объявили неделю музыкального флекса, самооценка выросла вдвое.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Anatoliy Ch.
Переезд
Я и какой-то большой кусок сотрудников переезжаем в новый офис. В пятницу все коллеги вокруг упаковывали вещи, чтобы на выходных грузчики перевезли все наши вещи на новые рабочие места.
У меня же вещей по сути не было: монитор мне для работы не нужен, коллекцию съеденных пачек тик-таков я передал на нужды бисерохранения, а коммунальную GaN-зарядку я хотел прихватить с собой лично.
Поучаствовать в общем переезде очень хотелось, и мне пришла идея: я достал первую попавшуюся бутылку воды из соседней переговорки, достал наклейку new work place для переезда, записал на ней свой новый стол, и наклеил на бутылку.
В воскресенье на старом столе её уже не было. Завтра я еду в новый офис.
Я и какой-то большой кусок сотрудников переезжаем в новый офис. В пятницу все коллеги вокруг упаковывали вещи, чтобы на выходных грузчики перевезли все наши вещи на новые рабочие места.
У меня же вещей по сути не было: монитор мне для работы не нужен, коллекцию съеденных пачек тик-таков я передал на нужды бисерохранения, а коммунальную GaN-зарядку я хотел прихватить с собой лично.
Поучаствовать в общем переезде очень хотелось, и мне пришла идея: я достал первую попавшуюся бутылку воды из соседней переговорки, достал наклейку new work place для переезда, записал на ней свой новый стол, и наклеил на бутылку.
В воскресенье на старом столе её уже не было. Завтра я еду в новый офис.
Внимание
Я пришёл(теперь буду ходить на работу пешком 🤩 ) в новый офис.
Бутылку перевезли.
Спасибо за внимание
Я пришёл
Бутылку перевезли.
Спасибо за внимание
Please open Telegram to view this post
VIEW IN TELEGRAM
Анатолий Ч. | канал
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
https://www.youtube.com/watch?v=v4rvTMBCJD0
Сейчас на ютубе пропали абсолютно все рэп-баттлы (почему?). Я обнаружил это вчера, когда не нашёл баттл Оксимирона и Славы КПСС и не смог приобщить ещё одного человека к высокому.
Я не на шутку испугался, ведь это видео — самое главное событие баттл-рэп сцены в мире ever, и одно из самых социально значимых видео на русском ютубе в 2017 году (в моём личном топе оно на первом месте, на втором «Он вам не Димон», на третьем «Тает Лёд»).
Возможно, в ближайшем времени времени видео вернут, но сейчас я его перезалью здесь. Да, два гигабайта, зато с более высоким качеством, чем в большинстве ютуб-перезаливов.
Сейчас на ютубе пропали абсолютно все рэп-баттлы (почему?). Я обнаружил это вчера, когда не нашёл баттл Оксимирона и Славы КПСС и не смог приобщить ещё одного человека к высокому.
Я не на шутку испугался, ведь это видео — самое главное событие баттл-рэп сцены в мире ever, и одно из самых социально значимых видео на русском ютубе в 2017 году (в моём личном топе оно на первом месте, на втором «Он вам не Димон», на третьем «Тает Лёд»).
Возможно, в ближайшем времени времени видео вернут, но сейчас я его перезалью здесь. Да, два гигабайта, зато с более высоким качеством, чем в большинстве ютуб-перезаливов.
Анатолий Ч. | канал
Смерть программы лояльности На этой неделе @wallet изменил минимальную сумму чека в 5000 раз: с 0.0001 до 0.5 TON. Это значит: 1. Что присылать вам приятные копеечные чеки за подписку на канал я теперь не могу. 2. Что присылать вам чеки побольше за длительную…
Возвращение манидропов
Ой, чуть не забыл! @wallet понизил минимальную сумму чека обратно до 0.0001 TON, поэтому я вернул манидропы.
Уточню, как оно работает сейчас:
1. На канале выходит новый пост.
2. Робот ждёт случайное время в определённом интервале.
3. Робот кидает пост-манидроп в комментарии под постом.
4. В посте-манидропе TON-чек (много не дам).
5. Кто первый его активирует — того и тапки.
6. Взявший чек традиционно помечает коммент реакцией, указав своё первенство. Или же не отмечает, и получает на пост-манидроп негативные реакции и комментарии «скам».
На данный момент, временной интервал — 5-10 минут, а сумма чека 0.00777 TON.
Технически, можно и всю программу лояльности возродить, но я этого делать не буду.
Во-первых, сейчас я получаю офигительное удовольствие от целенаправленного избегания хранения пользовательских данных и использования баз данных в принципе.
Во-вторых, лавочка с @wallet может в любой момент снова закрываться, я не хочу об этом беспокоиться.
Можете прийти через 5 минут и испытать свою (удачу?) скорость в комментах👇
Ой, чуть не забыл! @wallet понизил минимальную сумму чека обратно до 0.0001 TON, поэтому я вернул манидропы.
Уточню, как оно работает сейчас:
1. На канале выходит новый пост.
2. Робот ждёт случайное время в определённом интервале.
3. Робот кидает пост-манидроп в комментарии под постом.
4. В посте-манидропе TON-чек (много не дам).
5. Кто первый его активирует — того и тапки.
6. Взявший чек традиционно помечает коммент реакцией, указав своё первенство. Или же не отмечает, и получает на пост-манидроп негативные реакции и комментарии «скам».
На данный момент, временной интервал — 5-10 минут, а сумма чека 0.00777 TON.
Во-первых, сейчас я получаю офигительное удовольствие от целенаправленного избегания хранения пользовательских данных и использования баз данных в принципе.
Во-вторых, лавочка с
Можете прийти через 5 минут и испытать свою (удачу?) скорость в комментах
Please open Telegram to view this post
VIEW IN TELEGRAM
Анатолий Ч. | канал
Please open Telegram to view this post
VIEW IN TELEGRAM
Татары строят
Тюбетей. Это Ресторан татарской кухни с доставкой на дом.
minecraft.tubatay.com
А я что делаю?
Тюбетей. Это Ресторан татарской кухни с доставкой на дом.
minecraft.tubatay.com
А я что делаю?
Страничка сервера со статусом в реальном времени в роботе:
t.me/dot_ch_bot?start=minecraft_server
Начинаем 28 декабря (я вайпну карту), но зайти можете уже сейчас.
Про концепцию, правила и
Please open Telegram to view this post
VIEW IN TELEGRAM