Сжатие данных алгоритмом Хаффмана

Автор: admin от 1-02-2019, 18:15, посмотрело: 58

Вступление



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



В результате напишем простенький архиватор. Об этом уже была статья на Хабре, но без практической реализации. Теоретический материал текущего поста взят из книги Роберта Лафоре «Data Structures and Algorithms in Java». Итак, все под кат!

Категория: Программирование

 

Моя вторая зима без снега или магистратура в Бельгии

Автор: admin от 1-02-2019, 18:15, посмотрело: 41

Хочу поделиться своим опытом поступления в институт и переезда в Европу. Пришлось столкнуться с недостатком актуальной информации по документам и ценам, и вся имеющаяся сейчас информация в интернете значительно отличается от той реальности, которая меня ожидала.



Это история не о гении, который в промежутках между научными конференциями и парашютным спортом разрабатывает приложение, чтобы потом реализоваться в Силиконовой долине. Этот рассказ о девушке, которая не сталкивалась в своей жизни с реальными трудностями и у которой все шло своим неспешным путем. Главной задачей моего окружения был “ВУЗ”, что в переводе означает Выйти Удачно Замуж. В какой-то момент захотелось влиять на свою жизнь и вот тут начинается моя история.



Моя вторая зима без снега или магистратура в Бельгии

Категория: Программирование

 

К вопросу о буферах (кольцевых)

Автор: admin от 1-02-2019, 18:15, посмотрело: 35

«Если затраты на разработку архитектуры кажутся Вам чрезмерными, подумайте, во сколько Вам может обойтись неправильная архитектура»



— не могу точно вспомнить источник



Когда то, «давным-давно, в одной далекой галактике», я приобрел замечательную книгу Чарльза Уэзерелла «Этюды для программистов», в предисловии к которой автор обосновывал необходимость изучения учебных примеров и задач перед тем, как начать самостоятельное программирование. Настоятельно рекомендую данную книгу найти, предисловие прочитать (и не останавливаясь на этом, прочитать оставшуюся часть и решить приведенные в ней задачи), поскольку лучше автора обосновать необходимость подобной практики я не смогу. Даже если Вы последуете моей рекомендации, и получите множество знаний и практических навыков при чтении упомянутой книги, можно будет вернуться и дочитать данный пост, поскольку он посвящен несколько иным вопросам. А если Вы моим рекомендациям не последуете, то тем более следует войти под кат.

Категория: Программирование

 

Сериализация данных на уровне базы

Автор: admin от 1-02-2019, 14:30, посмотрело: 42

Привет, Хабр!



Сидел я как-то и пытался отдать фронту JSON с объектами недвижимости, у которых была масса зависимостей. На бэке стояла Symfony 4, knp pagination и JMSSerializer, ну в принципе стандартные вещи, но проблема в том, что когда ты пытаешься отдать объект со всеми вложенными сущностями и коллекциями, то все начинает тормозить на уровне сериализации этих данных.



Сначала нужно сделать запрос в базу, потом сериализатор подтянет постепенно все остальное, потом все это будет обернуто в JSON и только потом все вернется на фронт.



Идея



У меня появилась идея, а почему бы не возвращать на фронт с бэка сразу JSON напрямую из базы, да, надо написать офигительный SQL, но ведь можно сделать инструмент который это сделает за вас. Я принялся за написание идеи, репозиторий на гитхабе, за основу взята модель данных из доктрины, связи OneToOne, ManyToOne, OneToMany и ManyToMany. Так же этот инструмент легко можно прикрутить к Symfony 4 и он сам себя настроит, в итоге вам нужно будет только заинъектить фабрику QueryBuilderFactory и получить оттуда QueryBuilder для нужной таблицы по классу сущности.



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



Пример генерации SQL



<?php

use MashMysqlJsonSerializerQueryBuilderTableJoinStrategyFieldStrategy;
use MashMysqlJsonSerializerWrapperFieldWrapper;
use MashMysqlJsonSerializerQueryBuilderTableTable;
use MashMysqlJsonSerializerWrapperMapping;
use MashMysqlJsonSerializerQueryBuilderQueryBuilder;

$oneToManyTable = (new Table('advert_group', 'adg', 'adg_id'))
    addSimpleField('adg_id')
    addSimpleField('adg_name')
;

$table = (new Table('estate', 'est', 'est_id'))
    addSimpleField('est_id')
    addSimpleField('est_name')
    addOneToManyField($oneToManyTable, 'advert_groups', new FieldStrategy('adg_estate'));

$mapping = new Mapping();
$mapping
    addMap($table, 'est_id', 'id')
    addMap($table, 'est_name', 'name')
    addMap($oneToManyTable, 'adg_id', 'id')
    addMap($oneToManyTable, 'adg_name', 'name');

$builder = new QueryBuilder($table, new FieldWrapper($mapping));
$builder
    setOffset(2)
    setLimit(1);

$sql = $builderjsonArray();

В результате будет сгенерирован следующий SQL:


SELECT JSON_ARRAYAGG(JSON_OBJECT('id',est_res.est_id,'name',est_res.est_name,'advert_groups',(SELECT JSON_ARRAYAGG(JSON_OBJECT('id',adg.adg_id,'name',adg.adg_name)) FROM advert_group adg INNER JOIN estate est_2 ON est_2.est_id = adg.adg_estate WHERE est_2.est_id = est_res.est_id))) FROM (SELECT * FROM estate est  LIMIT 1 OFFSET 2) est_res

Результат:


[{"id": 3, "name": "Москва, окская улица, 3к1", "advert_groups": [{"id": 10, "name": "avito-1115362430"}]}]

Категория: Программирование

 

Игровой чат-бот Угадай Слово — немного наблюдений и вопросов о развитии?

Автор: admin от 1-02-2019, 14:25, посмотрело: 65

Игровой чат-бот Угадай Слово — немного наблюдений и вопросов о развитии?Привет.



Когда в сентябре прошлого года писался игровой чат бот, я поставил планку — если он наберёт 500 пользователей за пол года (то есть до марта 2019), то я напишу об этом боте на Хабре и поделюсь своими мыслями и вопросами по игровым чат-ботам.

Категория: Game Development

 

Быстрый способ добавить уведомления в Android-приложение

Автор: admin от 1-02-2019, 12:25, посмотрело: 53

Быстрый способ добавить уведомления в Android-приложение


Перевели для вас статью Брендона Вивера о работе с уведомлениями в Android OS. Программист объясняет, как быстро добавить этот функционал в свое приложение. Статья, в первую очередь, будет полезна начинающим Android-разработчикам.



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

Категория: Программирование, Веб-разработка, Android

 

На что способен PC Speaker

Автор: admin от 1-02-2019, 11:55, посмотрело: 44

Известный теперь как «системный динамик», а то и просто «пищалка», PC Speaker появился на свет в 1981 году вместе с первым персональным компьютером IBM. Наследник нескольких поколений больших компьютеров для серьёзных дел, он с рождения был предназначен лишь для подачи простейших системных сигналов, и не мог достойно проявить себя в озвучивании главенствующих на домашнем рынке развлекательных программ. Сильно уступая звуковым чипам специализированных игровых систем, пропадая в тени вскоре появившихся продвинутых звуковых карт, он поддерживался многими разработчиками по остаточному принципу — как опция, выдающая хоть какой-нибудь звук при отсутствии лучших альтернатив. За нечастыми исключениями, через спикер проигрывались грубо упрощённые, полностью одноголосые версии мелодий, изначально сочинённых для гораздо более мощных устройств.



Музыкальный альбом «System Beeps» написан для PC Speaker с использованием той же базовой техники из старых игр, и согласно типичной формуле ретро-компьютерного около-демосценового творчества призван раскрыть многие годы оставшийся неисследованным потенциал этого простейшего звукового устройства. Собственно послушать результат и составить своё мнение об успешности данного мероприятия можно на Bandcamp или в видео ниже, а дальнейший текст углубляется в устройство спикера, историю проекта и способы достижения подобного результата для тех, кто хочет знать больше.



Категория: Apple

 

Архитектура, сертифицированная по SQL Server Data Warehouse Fast Track (DWFT): что это значит и как устроено

Автор: admin от 1-02-2019, 11:55, посмотрело: 54

Крупные производители популярного софта заботятся о своих заказчиках по-разному. Один из способов — создать программу сертификации. Чтобы, когда заказчики в раздумьях блуждают между аппаратными конфигами для конкретного софта, производитель этого софта мог подойти и с уверенностью показать пальцем: «Бери вот это и все будет хорошо».



Такую программу для своего SQL Server разработал Microsoft — SQL Server Fast Track (DWFT). По ней сертифицируются конфигурации хранилищ данных — те, которые соответствуют требованиям рабочей нагрузки и могут быть внедрены с меньшим риском, стоимостью и сложностью. Звучит прекрасно, но интересно все-таки оценить эти критерии на практике. Для этого мы подробно разберем одну из конфигураций, имеющих сертификацию SQL Server Data Warehouse Fast Track.



Архитектура, сертифицированная по SQL Server Data Warehouse Fast Track (DWFT): что это значит и как устроено

Категория: Apple

 

Идея, как можно предоставлять сотрудникам временный доступ к ресурсам клиента, не светя лишний раз пароли

Автор: admin от 1-02-2019, 11:55, посмотрело: 43

Небольшая предыстория



После лекции на HighLoad++ 2017. Я посмотрел этот доклад, “Как мы админа увольняли”, в записи. Докладчик сказал, что все web компании испытывает проблемы с паролями, и у меня появилась идея как это решить. Скорее всего кто-то уже сделал, но, если честно, я не знаю просто хочу описать, потом может, кто-то сделает или я как-нибудь сам сделаю. Надеюсь, если кто-то решит сделать, что-то подобное это будет opensource.



Собственно описание проблемы и способа её решения



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



Есть два варианта решения такой проблемы.




  • Выкладывать все изменения на сайт лично руководителю компании.

  • Что-то придумать и сделать.



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



    Что делать определились, теперь нужно определиться как это сделать.



    Вот сразу самая простая идея, а почему не сделать proxy? Ну скорее всего супер-прокси. Схема работы в принципе проста и я её нарисовал ниже.



    Идея, как можно предоставлять сотрудникам временный доступ к ресурсам клиента, не светя лишний раз пароли

    Рисунок 1 – общая схема работы системы



    Как видно из схемы и самой идеи, главным элементом здесь будет прокси сервер.



    Его задачи следующие:




    • Соответственно принимать трафик, или даже стоит работать на уровне команд SSH и SFTP, для начала, и отправлять ответ от сервера клиента, специалисту.

    • Аутентификация и авторизация специалиста

    • Проверка легитимности команд, это можно сделать позже.

    Категория: Apple

     

    Что такое программное обеспечение и почему так важно это понимать?

    Автор: admin от 1-02-2019, 11:55, посмотрело: 48

    Привет, Хабр! Представляю вашему вниманию перевод статьи «What is software and why is understanding it important?» автора Эдриана Бонфьюеса (Adrian Bbonfues).



    Что такое программное обеспечение и почему так важно это понимать?


    Позвольте мне перефразировать слова Марка Андреессена (Marc Andreessen) «программное обеспечение пожирает мир» в «программное обеспечение уже съело мир».

    Программное обеспечение есть во всем и везде.
    Люди привыкли к вещам, которые мы можем увидеть и потрогать. Мы живем в физическом мире автомобилей, стиральных машин, телефонов и фенов. Все это — аппаратные средства — физические инструменты, машины и оборудование. Аппаратное обеспечение представляет собой реальную материальную физическую сущность, ограниченную определенными характеристиками. Но в какой-то момент мы начали идти против аппаратных ограничений. Видеомагнитофоны в 90-х годах были великолепны для записи того, что показывали по телевидению (чтобы записанное можно было посмотреть позже), пока вы непосредственно находились у телевизора с пультом в руке, чтобы нажать кнопку записи, когда начиналось шоу. Разве не было бы еще лучше, если бы вы могли записать что-то по телевизору, не нажимая кнопку записи? Было бы круто сказать вашему видеомагнитофону начать запись в 7 вечера и остановиться в 8 вечера, чтобы вы могли пойти, например, поужинать? Думаю, это было бы намного лучше.

    Категория: Microsoft, Apple

     
    Назад Вперед