Сообщество - Лига программистов
Добавить пост

Лига программистов

1 542 поста 11 462 подписчика

Популярные теги в сообществе:

С++ против C#

Я универсал? Кому я такая нужна?

Здравствуйте, уважаемые! Я работаю в IT 25 лет, если считать обучение в техникуме с красным и инст с синим и преподавание алгоритмики и основ программирования. По профессии. У меня вот вопрос. Я пришла на работу на ЯВУ. Прошло почти 3 года, меня спускают через flutter  до С и С++. Я могу любить и не любить языки? Или это инструмент - люби что дают?

Совместное обучение

Пикабушники, привет! Что-то мне сегодня пришла в голову мысль закинуть тут удочку на предмет поиска людей по интересам. А конкретнее для совместного прокачивание скиллов в направлении Анализ данных/Data science. По опыту знаю, что одна голова хорошо, а две лучше, но вот нет у меня среди круга общения людей, которых можно к этому привлечь. Я сейчас в поиске работы и упёрлась в то, что резюме нужно прокачать проектами - может это будет участие в компетишнс на kaggle, или хакатон какой-нибудь, или просто запилить что-нибудь, что не стыдно будет выложить в репо на гитхаб. Ну вдруг не одна я столкнулась с этим и кому-то ещё нужен товарищ 🤔
Немного обо мне и моих скилах.
Сразу скажу, что я пытаюсь сменить профессию (дада, войти в it, ничего нового), опыт работы по финансовому профилю. Но я не совсем с нуля - образование мат. Методы в экономике. То есть мат. стат, базы данных и программирование мне знакомы давно. Так сложились обстоятельства, что меня унесло в другую степь.
По навыкам. Хотелось бы, чтобы мы были +/- на равных, чтобы один из нас не превратился в бесплатного ментора, хотя в целом я с удовольствием поделюсь всем, что знаю и умею.
Пишу на Python - некрасиво, до разраба далеко.
Есть опыт дергания чего бы то ни было через Rest Api, разбора страниц html/xml. Ну естественно pandas, numpy, sklearn (по ML я пока дальше не продвинулась).
SQL практикую на Postgres, недавно ещё локально поставила Influxdb, чтобы можно было пощупать NoSQL.
Платных курсов не проходила, пользуюсь материалами на Stepik, ютьюб, очень много полезного нахожу и читаю на medium. Серьезно, medium это вообще маст хэв.
Хмм... Вроде в основном все.
Живу в СПб, можем общаться онлайн или встретиться в офлайне.

В общем, если кому-то интересно, отпишитесь в комментах.

Всем хорошего настроения и крутых проектов 💪

Update:
мой уровень инглиша - не говорю, но читаю документацию, статьи, ютьюб с субтитрами. В целом комфортно, по необходимости юзаю гугл переводчик.

В сторону работы с изображениями не смотрела вообще.

Показать полностью

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Наткнулся на просторах интернета на рекламу подобного расширения для браузеров на базе движка Chromium. Мне стало дико интересно, как оно работает. Но для этого нужно было изучить код расширения, который хранился в zip-архиве с расширением CRX.


Сказано-сделано. За несколько секунд был нагуглен сайт, который скачивал любое расширение для хрома.

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

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

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Скрипты меня интересовали в первую очередь. Я начал изучение с файла background.js и обнаружил в нём любопытное содержимое.

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Как мы видим, расширение использует черный список ключевых слов (мopгeнштepн, mоrgеnstеrn, mоrgеnshtеrn, aлишep тaгиpoвич, aлишep вaлeeв), которые предназначены для поиска и скрытия любого контента на сайте, связанного со знаменитостью.


Кроме того, используется сторонний сервис для идентификации пользователя и загрузки черного списка мемов (согласно файлу injected.js).

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Также в файле injected.js описана функция blockThemALL, которая просматривает тело страницы, сверяется с черным списком ключевых слов и мемов и блокирует запрещенные элементы. Стандартный алгоритм, ничего нового.


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

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Pro-версия добавляет три ключевых слова: бyзoвa, бyзoвoй, бyзoвy. Ну это просто смехота. Зачем мне разблокировать Pro-версию, если можно самому добавить ключевые слова, любые, какие я захочу? Браузеры на базе движка Chromium поддерживают режим разработчика, что позволяет добавлять любые расширения, даже самописные.

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Именно на этом моменте я не сдержался и решил опубликовать пост. Я, конечно, все понимаю, но зачем держать конечных пользователей за дебилов? Если бы они сделали возможность добавлять любое ключевое слово для Pro-версии, то никаких вопросов бы не было. Но разводить пользователя на пиар своего детища, добавляя капельку изменений, это уже глупо, потому что любой может скачать код расширения, распаковать архив и переписать его под себя. Единственно возможная защита - это хранить черный список или логику работы на сервере, но зачем мне нужен ваш список, если я могу создать свой. И вообще, существуют блокировщики рекламы.

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Также у меня возникают сомнения в универсальности данного способа. Проверку по ключевым словам можно обойти элементарной заменой символов, прилагаю пример подобного кода на Python.

Заблокируй Mopгeнштepнa: волшебная кнопочка для ленивых с урезанным функционалом Программирование, Python, Javascript, Web-программирование, Знаменитости, Длиннопост

Я особо не заморачивался, просто нагуглил код на Stack Overflow, который решал аналогичную задачу и чуть-чуть переписал под себя. Символы кириллицы заменяются на визуально похожие символы латиницы и наоборот. Конечно, можно обнаруживать и блокировать подобную подмену, но я сомневаюсь, что разработчики расширения настолько заморочились. Поправьте меня, если я неправ.


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


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

Показать полностью 8

Решаем задачи по SQL и отвечаем на вопросы с нашего Телеграм-канала

Что хакатон дает программисту?

Что хакатон дает программисту? Саморазвитие, Программист, Рассказ, Мотивация, Опыт

Генерация текстов настолько захватила мое существо, что я просто преисполнился в своем сознании…

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

Я начал брать учеников и рассказывать им про ИТешечку и программирование, в частности. Сначала думал: «ну нафига эти лишние напряги, итак, сидишь кодишь сутками, читаешь, нафига тебе еще учить каких-то нубов?».

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

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

Вот так пролетело лето и почти осень. И тут меня торкнуло, а почему бы еще не поддать жару!

Что бы вы думали? Я зашел на сайт хакатонщиков. (кто не знает – хакатоны это мероприятия, где небольшие команды программистов, дизайнеров и менеджеров за пару дней пытаются создать такое, на что при обычной работе уходит несколько месяцев или лет).

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

А еще происходит великая магия от моих текстов. Иногда при общении с незнакомыми людьми, в основном в чатах, они мне говорят, что поддерживают некоторые мои идеи. «Вот такая-то статья затрагивает интересную мысль, я про нее тоже думал». А потом еще и цитату выдают, про которую я уже забыл! Мля, какое это восхитительное чувство! Пусть это всего пару раз пока, но когда тебя цитируют…

На десерт расскажу вам про интересный инсайт, который произошел со мной в воскресенье в спортзале. Тягал я железки и тут мне представилось, как я перед своей командой выступаю с вдохновляющей речью, чтобы мы победили в хакатоне. Сначала я представил себя главным героем фильма «Волк с Уолл-стрит», стою в большом зале перед сотней служащих и начинаю:
«Вы пришли сегодня, чтобы не просто отработать свою смену, вы пришли чтобы добиться победы. Вы победители! Поймайте сегодня своих маленьких нехочунчиков, швырните их в сторону и скажите – это мой день! Я направлю энергию на то, чтобы вырвать победу у конкурентов. Если каждый из нас сделает это, то вместе мы приобретем невероятную силу! За работу!».

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

Показать полностью

Красивости кода. Поможите, кому не лень

Часики на Java.

В гифке видно - секундная стрелка двигается с отскоком.

Беда в том, что в хроме на Intel Core 2 Duo E6550 с 5 гигами памяти, этот отскок не работает.

Если подсунуть достойную видеокарту - отскок начинает срабатывать.

Можно как-нибудь сделать так, чтоб на сравнительно слабых машинках часики тикали с этой красивостью ?

Автор не я, код скопировал с публичной странички, никаких комментариев относительно кода дать не смогу.

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

Красивости кода. Поможите, кому не лень Программирование, IT, Код, Гифка, Длиннопост

<meta name="viewport" content="width=device-width, initial-scale=1">

<style>

body {

background: rgb(8, 89, 70);

overflow: hidden;

padding: 0;

margin: 0;

}

.clock {

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

background-image: url(clock.png);

background-size: contain;

background-position: 50% 50%;

background-repeat: no-repeat;

}

.clock > * {

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

}

.clock > * > * {

position: absolute;

left: 0;

top: 0;

width: 100%;

height: 100%;

background-size: contain;

background-position: 50% 50%;

background-repeat: no-repeat;

transform-origin: 50% 50%;

}

.clock .second {

z-index: 170;

}

.clock .second-inner {

background-image: url(second.png);

}

.clock .minute {

z-index: 99;

}

.clock .minute-inner {

background-image: url(minute.png);

}

.clock .hour {

z-index: 98;

}

.clock .hour-inner {

background-image: url(hour.png);

}

</style>

<script>

var TRANSFORM_NAME

function easeOutElastic(t) {

var p = .3

return Math.pow(2, -10 * t) * Math.sin((t - p / 4) * (2 * Math.PI) / p) + 1

}

function updateClock() {

var clockEl = document.body.querySelector('.clock')

var time = new Date().getTime()

var milliSeconds = (time % 1000) * 1.0 / 1000

if (milliSeconds > .5) {

milliSeconds = .5 + easeOutElastic((milliSeconds - .5) / .5) * .33

} else {

milliSeconds = -.17

}

var seconds = Math.floor((time / 1000) % 60)

var rotation = (360 / 60) * seconds + (milliSeconds + .17) / 60 * 360

clockEl.querySelector('.second-inner').style[TRANSFORM_NAME] = 'rotate(' + rotation + 'deg)'

var minutes = ((time / 1000 / 60) % 60)

var rotation = (360 / 60) * minutes

clockEl.querySelector('.minute-inner').style[TRANSFORM_NAME] = 'rotate(' + rotation + 'deg)'

var hours = ((time / 1000 / 60 / 60) % 1) + new Date().getHours()

var rotation = (360 / 12) * hours

clockEl.querySelector('.hour-inner').style[TRANSFORM_NAME] = 'rotate(' + rotation + 'deg)'

window.requestAnimationFrame(updateClock)

}

</script>

<body>

<div class='clock'>

<div class='hour'><div class='hour-inner'></div></div>

<div class='minute'><div class='minute-inner'></div></div>

<div class='second'><div class='second-inner'></div></div>

</div>

<script>

if (typeof document.body.style.transform == 'undefined') {

TRANSFORM_NAME = 'webkitTransform'

} else {

TRANSFORM_NAME = 'transform'

}

updateClock()

</script>

</body>

Показать полностью

Как я выбирал фреймворк для ТГ бота

Завёл себе аккаунт чтобы делиться всякими находками, которые удаётся нарыть или придумать по ходу разработки. Может будет полезно для кого-то, ну и надеюсь на советы бывалых.

Для ЛЛ: искал фреймворк для чайников, выбрал Pyrogram, потому что он быстрый, удобный и хорошо документированный.

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

- Во первых, и наверное самое важное, чтобы было понятно для чайников, т.е. хорошая документация, развитое сообщество и все нужные апи надёжно спрятано внутри простых функций. Потому что хочется писать логику бота, а не ботать апи =)

- Во вторых нормальная производительность. По честному она тут нахрен не нужна, но я-же делаю проектик для удовольствия, поэтому хочется чтобы всё было красиво. А это отсутствие задрачивания ТГ-сервера (т.е. вебхуки или прям MTP), асинхронная обработка запросов, и желательно, прости господи, многопоточность (спойлер - с этим пока не срослось)
- В третьих обожаю лаконичные фреймворки. "Во первых - это красиво". Код писать проще и  получается читабельнее.

На моих любимых плюсах нашелся целый один фреймворк "tgbot-cpp". Он довольно вменяемый, но по п.1 не проходит - доки не очень и сообщество небольшое =/  Ну и с лаконичностью там не оособо - на питоне получается гораздо компактнее. Сходу разобраться не вышло, забил. Может в будущем, если буду делать что-то высоконагруженное к этому вернусь (ха-ха).

В питоне всё поразнообразнее, масса вариантов, под мои хотелки подошли аж два фреймворка. Сначала напрыгнул на aiogram. Большое русскоязычное сообщество, масса примеров и даже учебник, ну и приятный функционал. Всё было классно, пока я не углубился в доки, и там оказались баальшие дыры. В принципе сообщество помогает, но бегать постоянно за помощью как-то напряжно. И ещё сейчас активно растёт новая, третья, версия, она прикольная, но пока в статусе беты и обратную совместимость не поддерживает. И доки к ней дырявые. Так что aiogram тоже отложил на будущее.

Попечалился и полез смотреть ещё один популярный питоновский фреймворк - Pyrogram. И тут прям попадание в яблочко: он офигенно документирован, быстрый, удобный, работает по MTProto - никакого сексу с вебхуками и статическим IP. Вобщем пока что ван лав, всем рекомендую! Попозже напишу подробный ман как начать с ним работать. В принципе в документации всё есть, но была пара моментов над которыми пришлось подумать.

P.S. Из доков к Пирограму узнал, что у Телеги есть тестовые сервера с тестовыми пользователями. Прикольно!

Показать полностью

Готовы к Евро-2024? А ну-ка, проверим!

Для всех поклонников футбола Hisense подготовил крутой конкурс в соцсетях. Попытайте удачу, чтобы получить классный мерч и технику от глобального партнера чемпионата.

А если не любите полагаться на случай и сразу отправляетесь за техникой Hisense, не прячьте далеко чек. Загрузите на сайт и получите подписку на Wink на 3 месяца в подарок.

Готовы к Евро-2024? А ну-ка, проверим! Футбол, Тест, Евро 2024, Болельщики, ВКонтакте (ссылка)

Реклама ООО «Горенье БТ», ИНН: 7704722037

Почему я бросил школу GeekBrains и не стал 1С разработчиком?

Отличная работа, все прочитано!