Source Code
197 subscribers
30 photos
3 files
80 links
Download Telegram
#cybersecurity
Clubhouse, или open data storage?

Я нашел бота, который без особого труда позволяет записывать разговоры. Вот краткий обзор статьи habr, автора бота.

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

Если же это событие в будущем (event в терминах Clubhouse), то начинается веселье. С некоторой периодичностью, которая увеличивается со временем, мы начинаем дергать ручку /get_event. Мы извлекаем оттуда ориентировочное время старта беседы (потому что оно может меняться со временем) и, если беседа уже началась, идентификатор комнаты. Как только это происходит, бот информирует всех заинтересованных о том, что беседа началась и далее автоматически происходит процедура из предыдущего абзаца. Бывают случаи, когда событие так и не начинается. В этом случае бот убивает событие в очереди демона и отправляет грустное сообщение интересантам."

Полная стаття на habr- https://habr.com/ru/post/543764/
Реп - https://github.com/stypr/clubhouse-py
Какой интерфейс нужно реализовать для сортировки по множеству критериев?
Anonymous Quiz
51%
Comparable
37%
Comparator
7%
Serializable
5%
SortMap
#web
HTTP — это протокол, позволяющий получать различные ресурсы, например HTML-документы.

Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser).

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

Каждый запрос (англ. request) отправляется серверу, который обрабатывает его и возвращает ответ (англ. response). Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси, которые выполняют различные операции и работают как шлюзы или кэш, например.
Что гарантирует безопасность типов в коллекции?
Anonymous Quiz
67%
Generics
13%
Abstract classes
13%
Interfaces
8%
Collection
#python
Что лучше, import или from import?

Обратимся к первоисточникам, а именно-к PEP8. Когда импортируете класс из модуля, будет нормально сделать это так:

from myclass import MyClass
from foo.bar.yourclass import YourClass

Если это вызывает локальный конфликт Имен, то можно сделать это явно:

import myclass
import foo.bar.yourclass

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

Flask импортируется:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!

Pytest импортируется:

import pytest

def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0

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

Этот момент – достаточно частый источник недоумения.
Что позволяет удалять элементы из коллекции?
Anonymous Quiz
12%
Enumeration
10%
Serializable
44%
Iterator
34%
метод removeObj()
#definition
Reverse Engineering (ревёрсинг, обратная разработка) — это процесс «заимствования», восстановления исходников из конечного продукта инженерной и/или научной деятельности с интуитивным конструированием внутренней механики по принципу «а какие процессы должны вызвать такое внешнее поведение этого продукта?». Ориентируясь на нюх, так сказать. Иногда приводит к написанию собственного дока. Много их, ибо ваистену

Примером RE является создание базы данных из готовых сущностей в Spring.
Что из этого синхронизировано и не допускает нулевых элементов?
Anonymous Quiz
33%
Vector
28%
CopyOnWriteArraySet
11%
CopyOnWriteArrayList
28%
ConcurrentSkipListSet
#web
HTTPS vs HTTP

HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP но со встроенным шифровальщиком. Добавочная буква «S» в аббревиатуре означает «Secure», то есть «безопасный».

HTTPS это закрытый протокол имеющий надстройку шифрования и использующий по умолчанию порт 433, тогда как HTTP – открытый протокол который использует порт 80

Данные передаваемые по протоколу HTTPS всегда больше по объёму чем те самые данные на HTTP поэтому их передача в обе стороны занимает чуть больше времени

HTTPS использует SSL-сертификаты для шифрования информации

Как это происходит?

Если на сайте есть SSL-сертификат, между браузером клиента и сайтом устанавливается защищённое соединение. В этом случае браузер сначала преобразует номер карты в случайный набор символов и только потом отправляет его на сервер.

Расшифровать сообщение получится только специальным ключом, который хранится на сервере.
что выведется на экран в результате выполнения программы?
Anonymous Quiz
2%
java
55%
JAVA
40%
Java
3%
jAVA
#interviewTasks
Раздобыли тестовое задание на Strong Junior Java Developer.
Если вам было бы интересно с ним ознакомиться, ждем от вас реакций.
#java
Wildcards (Generics)

Знак вопроса (?) Известен как подстановочный знак в универсальном программировании. Представляет неизвестный тип.

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

В отличие от массивов, разные экземпляры универсального типа несовместимы друг с другом даже явно. Эта несовместимость может быть смягчена подстановочным знаком, если ? используется как фактический параметр типа.
#patterns
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
#microsoft
Почему Microsoft перестали бороться с пиратством своего ПО?

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

Все принятые политики по защите ПО Microsoft не обновлялись с 2010-го года. В 2013-м они запустили программу "play it safe". Сейчас, на официальном веб-сайте, вы ее не найдете. Осталась только фото-заглушка.

Почему же Microsoft перестали бороться с пиратством?
Защита SaaS стала куда сильнее, копии гораздо труднее подделывать. С развитием модели платных подписок многие продукты перешли на SaaS.
Все меньше людей ищет взломанное ПО. Это относится не только к Microsoft. Похожим образом действуют Adobe, которые позволяют пиратство своих продуктов. Именно благодаря пиратству Adobe и Microsoft стали лидерами рынка в своих сферах.

Неужели пиратство может заменить расходы на PR?
#java
Что такое поток демона в Java?

Демон-поток - это поток, который не предотвращает выход JVM, когда программа заканчивается, но поток все еще работает. Примером для потока демона является сбор мусора.

Вы можете использовать метод setDaemon(boolean) для изменения свойств демона Thread до начала потока.

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

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

Интерфейс
— это ссылочный тип в Java. Он схож с классом. Это совокупность абстрактных методов. Класс реализует интерфейс, таким образом наследуя абстрактные методы интерфейса.

Чем отличается класс от интерфейса?
- Вы
не можете создать экземпляр интерфейса.
- В интерфейсе не содержатся конструкторы.
- Все методы в интерфейсе абстрактные.
- Интерфейс не может содержать поля экземпляров. Поля, которые могут появиться в интерфейсе, обязаны быть объявлены и статическими, и final.
- Интерфейс не расширяется классом, он реализуется классом.
- Интерфейс может расширить множество интерфейсов.
_____________________
Пример:
Ниже приведена иерархия классов. Класс Bird имеет метод fly(), но курица унаследовавшая метод, не должна его иметь, что делать в таком случае?

Решение: Убрать метод fly() у класса Bird, и вынести его в интерфейс "toBeAbleToFly". В нем, мы создаем тот самый метод fly(), который уже реализует тот класс, которому нужен этот метод. В нашем случае, это будет Parrot. Курице он нужен, по этому реализовывать этот метод, она не будет.

То есть, мы вынесли конкретный функционал, который нужен специфичной сущности.

// Позже будет выложен еще один пример использования интерфейсов