• Дополняя SQL. Часть 3. Жизнь расширений для Visual Studio. Работа с IO. Необычное использование SQL

      Публикую на Хабр оригинал статьи, перевод которой размещен в блоге Codingsight.

      Что будет в этой статье?


      Это третья статья в цикле о жизни разработчиков IDE для баз данных. Ее структура будет похожа на первую и вторую, но здесь я уже не буду рассказывать о парсинге текста. В этой статье речь пойдет о некоторых трюках по работе с файлами и просто различными проблемами при создании большого настольного приложения на платформе .NET. Для понимания этой статьи не обязательно читать первую и вторую части полностью, но в первой статье цикла есть несколько параграфов, которые отлично погружают в контекст разработки. Мне кажется, эта часть цикла получилась интересна даже для большего круга людей, чем предыдущие. Их было бы полезно глянуть перед прочтением статьи, а если на это нет времени или желания, то вот несколько тезисов из прошлых статей:

      • Мы делаем линейку IDE для СУБД MySQL, SQL Server, Oracle, PostgreSQL
      • Это настольное приложение на .NET стеке со всеми вытекающими
      • Много функций завязаны на анализ SQL кода. Используем для этого сильно доработанный ANTLR
      • Парсинг SQL это сложная задача в плане производительности и памяти. Постоянно приходится применять разные трюки для оптимизации

      По мере публикации буду добавлять ссылки на следующие части:

      Часть 1. Сложности парсинга. Истории о доработке ANTLR напильником
      Часть 2. Оптимизация работы со строками и открытия файлов
      Часть 3. Жизнь расширений для Visual Studio. Работа с IO. Необычное использование SQL
      Часть 4. Работа с исключениями, влияние данных на процесс разработки. Использование ML.NET


      Читать дальше →
    • Python: Работа с базой данных, часть 2/2: Используем ORM

      • Tutorial
      часть 1/2: Используем DB-API часть 2/2: Используем ORM
      Это вторая часть моей статьи по работе с базой данных в Python. В первой части мы рассмотрели основные принципы коммуникации с SQL базой данных, а в этой познакомимся с инструментарием, позволяющим облегчить нам это взаимодействие и сократить количество нашего кода в типовых задачах.

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


      Требуемый уровень подготовки: базовое понимание SQL и Python (код статьи проверялся под Python 3.6). Желательно ознакомится с первой частью, так как к ней будут неоднократные отсылки и сравнения. В конце статьи есть весь код примеров под спойлером в едином файле и список ссылок для более углубленного изучения материала.
      Читать дальше →
    • FAQ.Net — бесплатная программа для заметок под Windows с обновленным дизайном

        Введение


        За 3 месяца приложение FAQ.Net скачали более 800 раз. Все кто пользуется блокнотами и ищет готовое решение для хранения важной информации, заметок или документов (в виде текста, изображений, таблиц) в единой БД скачивайте FAQ.Net. Приложение портативное, бесплатное, без рекламы и не нужен доступ в Интернет. Исходный код выложен на github.

        В сообществе ВК размещаются видео-инструкции и новости приложения. Все желающие могут присоединиться к сообществу, поучаствовать в опросах и задать свои вопросы по работе приложения FAQ.Net.





        Возможности приложения FAQ.Net


        • Все заметки (RTF-документы) хранятся в единой БД SQLite
        • Имеется «Словарь подсказок» (см. подробности) — это всплывающие подсказки, которые создаются пользователем и их можно использовать:
          • для навигации по другим заметкам внутри приложения
          • в качестве переводчика, что очень помогает при изучении новых иностранных слов
          • для хранения ссылок Интернета в одном месте
          • для хранения описания предмета, события, слова и др.
        • Автодополнение слов по «Словарю подсказок» (IntelliSense) сочетанием клавиш «Ctrl+Space»
        • Гибкая настройка интерфейса (шрифты, цвета, иконки)
        • Добавление картинок. Если картинка вставлена из редактора Paint через буфер (т.е. комбинацией клавиш Ctrl+C — Ctrl+V), то такие картинки можно редактировать двойным нажатием мышки
        • Создание таблиц
        • Создание резервной копии БД
        • Предварительный просмотр и печать документов
        • Быстрый поиск по всем заметкам
        • На вкладке «Избранное» содержится список заметок, помеченных пользователем
        • На вкладке «Журнал» отображается 50 последних измененных заметок
        Читать дальше →
      • Python, введение в БД

          Базы данных


          Здравствуйте, здесь и сейчас я хочу рассказать, что такое базы данных, зачем они нужны, и т.д.; для работы с ними мы будем использовать python и его библиотеку sqlite3.


          База данных - совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных


          Так нам говорит Яндекс, но если сказать простыми словами, не углубляясь во все эти понятия, то:


          Базы данных (БД) - библиотека, хранящая данные в том или ином виде.


          То есть как в библиотеку мы можем прийти и взять книгу «Война и мир», зная что она будет лежать в разделе романов, на букву «В», так и из БД мы можем взять запись по определённому аргументу, в данном случае жанру.


          И тут возникает вопрос.


          Как это сделать?

          И что бы ответить на этот вопрос, мы должны кое-что узнать.

          Читать дальше →
          • –35
          • 17k
          • 9
        • SQL запросы быстро. Часть 1

          Введение


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

          Обучение SQL запросам я разделил на три части. Эта часть посвящена базовому синтаксису, который используется в 80-90% случаев. Следующие две части будут посвящены подзапросам, Join'ам и специальным операторам. Цель гайдов: быстро и на практике отработать синтаксис SQL, чтобы добавить его к арсеналу навыков.

          Практика


          Введение в синтаксис будет рассмотрено на примере открытой базы данных, предназначенной специально для практики SQL. Чтобы твое обучение прошло максимально эффективно, открой ссылку ниже в новой вкладке и сразу запускай приведенные примеры, это позволит тебе лучше закрепить материал и самостоятельно поработать с синтаксисом.
          Читать дальше →
        • FAQ.Net — записная книжка или программа для заметок под Windows бесплатно

          FAQ.Net — программа для заметок, написанная под Windows на языке C# (.NET Framework 2.0).
          История началась с того, что нужна была портативная программа для хранения накопленных знаний (копий статей из интернета, ссылки на статьи, SQL-запросы, программный код, пароли и т.д.), с возможностью быстрого поиска и редактирования документов. За основу интерфейса FAQ.Net был взят интерфейс из CHM-формата (файл справки или руководство о программе).
          Так как я специализируюсь на базах данных, то решил все документы хранить в БД, используя встроенную СУБД — SQLite. Создал таблицы и написал интерфейс для работы с БД.

          Многие программисты до сих пор создают заметки в текстовых документах, сохраняя их на компьютере и со временем теряют их местонахождение. Теперь, с помощью FAQ.Net все накопившиеся документы, можно хранить в одном месте, не опасаясь за их утрату.
          В приложении FAQ.Net имеется возможность резервного копирования БД.


          Читать дальше →
        • Простое шифрование БД SQlite

            Так получилось, что я очень люблю использовать SQLite СУБД.


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


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


            К примеру, я использовал SQLite в моем движке форума AsmBB о котором уже писал на Хабре. (Кстати, после этого он так и не упал).


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


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


            Быстрый поиск по Интернету показал, что есть несколько расширений SQLite для шифрования БД. К сожалению, официальное расширение SEE несвободно и вообще продается за деньги.


            Но, конечно, свято место пусто не бывает и я сразу наткнулся на расширение SQLeet. И в нем мне понравилось буквально все.

            Читать дальше →
            • +22
            • 6,6k
            • 4
          • AdBlock похитил этот баннер, но баннеры не зубы — отрастут

            Подробнее
            Реклама
          • Полнотекстовый поиск в Android

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


              Читать дальше →
            • Мониторинг ETL-процессов в маленьком хранилище данных

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

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

                Чтобы ответить на вопрос, какую роль играет информация об ошибках ETL, я классифицировал все проблемы, произошедшие за последние два года в немаленьком хранилище.

                image
                Читать дальше →
                • +12
                • 3,4k
                • 4
              • Telegram в качестве хранилища данных для IT проектов

                Добрый день, сегодня я хотел бы поделится с Вами проблемами и их необычными решениями, которые встретились при написании небольших IT проектов. Сразу скажу, что статья для тех, кто хоть немного разбирается в разработке телеграмм ботов, баз данных, SQL и в языке программировании python.

                Весь проект выложен на github, ссылка будет в конце статьи.

                image

                Основная проблема


                Изначально я хотел для себя написать простенького телеграмм бота счетчика калорий, который получает число от пользователя и возвращает сколько калорий осталось до нормы на день. То есть нужно хранить грубо говоря пару переменных для каждого пользователя.
                Читать дальше →
              • Изучаем данные, собранные Xiaomi Mi Band за год

                Введение


                Люди носят фитнес-браслеты по разным причинам, я могу предположить некоторые из них:


                1. Для того, чтобы поддерживать себя в форме и выполнять цели по активности;
                2. Потому что это некая модная штучка;
                3. Чтобы ставить над собой эксперименты или узнать себя лучше.

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


                Методы для извлечения этих данных работают для Mi Band 1, 1S и, возможно, 2 (приложение для 2, кажется, такое же).

                Читать дальше →
              • Чем живёт домашний интернет и статистика сервера доменных имён

                  Домашний роутер (в данном случае FritzBox) умеет многое регистрировать: сколько трафика когда ходит, кто с какой скоростью подключён и т.п. Узнать, что скрывается под непонятными адресатами, мне помог сервер доменных имён (DNS) в локальной сети.

                  В целом, DNS оказал положительное влияние на домашнюю сеть: добавил скорость, устойчивость и управляемость.

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

                  По какой причине каждый день опрашиваются 60 непонятных доменов во время, когда все ещё спят?

                  Каждый день опрашиваются 440 неизвестных доменов в активное время. Кто это такие и что они делают?
                  Читать дальше →
                • Больше статистики сайта в своём маленьком хранилище

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

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

                    На этом этапе есть ограничения инструментов анализа. Это одна из причин, почему мне было недостаточно инструмента Google Analytics, а именно, из-за ограниченной возможности видеть свои данные и манипулировать ими.

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

                    Это легко сделать в своём маленьком хранилище на основе файла access.log и для этого достаточно языка SQL.
                    Читать дальше →
                  • Статистика сайта и своё маленькое хранилище

                      Утилита Webalizer и инструмент Google Analytics помогали мне много лет получать представление о том, что происходит на веб сайтах. Сейчас я понимаю, что они дают очень мало полезной информации. Имея доступ к своему файлу access.log, разобраться со статистикой очень просто и для реализации достаточно элементарных инструментов, таких как sqlite, html, языка sql и любого скриптового языка программирования.

                      Источником данных для Webalizer является файл access.log сервера. Так выглядят его столбики и цифры, из которых понятен лишь общий объём трафика:

                      image
                      Читать дальше →
                      • +24
                      • 4,8k
                      • 2
                    • Использование SQLite в Unity (Unity + SQLite)

                      Всем привет, данная публикация будет посвящена работе с встраиваемой реляционной базой данных SQLite в Unity. Данная статья написана новичком для новичков с целью показания работы с SQLite, предполагается, что вы знаете основы SQL. Так как в интернете нет ясного тутора для новичков, я решил занять эту нишу. В данной статье мы напишем простенький класс для работы с данной СУБД, который можно использовать для решения широкого круга задач (локализация, сохранение данных, ведение разных таблиц).
                      Читать дальше →
                      • +16
                      • 8,3k
                      • 6
                    • Трехмерный движок внутри запроса SQL

                      • Tutorial
                      Несколько лет назад на форуме SQL.ru решили провести сравнение реализаций трассировщиков лучей на разных языках программирования. К сожалению, моя заявка не может участвовать т.к. она не выводит надпись «PIXAR», поэтому публикую ее здесь.

                      Для чистоты эксперимента я использовал SQLite без расширений. Оказалось, что там нет даже функции SQRT.

                      WITH RECURSIVE numbers AS (SELECT 0 AS n UNION ALL SELECT n+1 FROM numbers WHERE n<89),
                      pixels AS (SELECT rows.n as row, cols.n as col FROM numbers as rows CROSS JOIN
                      numbers as cols WHERE rows.n > 4 AND rows.n < 38 AND cols.n > 9 AND cols.n < 89),
                      rawRays AS (SELECT row, col, -0.9049 + col * 0.0065 + row * 0.0057 as x,
                      -0.1487 + row * -0.0171 as y, 0.6713 + col * 0.0045 + row * -0.0081 as z FROM pixels),
                      norms AS (SELECT row, col, x, y, z, (1 + x * x + y * y + z * z) / 2 as n FROM rawRays),
                      rays AS (SELECT row, col, x / n AS x, y / n AS y, z / n AS z FROM norms),
                      iters AS (SELECT row, col, 0 as it, 0 as v FROM rays UNION ALL
                      SELECT rays.row, rays.col, it + 1 AS it, v + MAX(ABS(0.7+v*x) - 0.3,
                      ABS(0.7+v*y) - 0.3, ABS(-1.1+v*z) - 0.3, -((0.7+v*x) * (0.7+v*x) +
                      (0.7+v*y) * (0.7+v*y) + (-1.1+v*z) * (-1.1+v*z)) * 1.78 + 0.28) AS v
                      FROM iters JOIN rays ON rays.row = iters.row AND rays.col = iters.col WHERE it < 15),
                      lastIters AS (SELECT it0.row, it0.col, it0.v AS v0, it1.v AS v1, it2.v AS v2
                      FROM iters as it0 JOIN iters AS it1 ON it0.col = it1.col AND it0.row = it1.row
                      JOIN iters AS it2 ON it0.col = it2.col AND it0.row = it2.row
                      WHERE it0.it = 15 AND it1.it = 14 AND it2.it = 13),
                      res AS (SELECT col, (v0 - v1) / (v1 - v2) as v FROM lastIters)
                      SELECT group_concat(
                      substr('$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/|()1{}[]?-_+~<>i!lI;:,"^. ',
                      round(1 + max(0, min(66, v * 67))), 1) || CASE WHEN col=88 THEN X'0A' ELSE '' END, '')
                      FROM res;
                      



                      Здесь можно покрутить кубик

                      Под катом построчный разбор запроса. Как обычно, достаточно знания основ SQL и школьной математики.
                      Читать дальше →
                    • Используем SQLite в Flutter

                      • Tutorial
                      Привет, Хабр! Представляем вашему вниманию перевод статьи «Using SQLite in Flutter».



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

                      В этой статье я продемонстрирую как сделать это, используя SQLite, в Flutter-e
                      Читать дальше →
                      • +19
                      • 15,6k
                      • 3
                    • Упрощаем работу с базами данных в Qt с помощью QSqlRelationalTableModel

                      Доброго времени суток, Хабровчане! В этой статье я хочу рассказать о своем опыте упрощения взаимодействия с базами данных SQL при разработке десктопного приложения с помощью класса QSqlRelationalTableModel кроссплатформенной библиотеки Qt.

                      Пролог


                      С Qt я познакомился еще будучи студентом 1 курса, только начиная программировать на C++, тогда же и серьезно заинтересовался библиотекой и, с тех пор слежу за ее апдейтами. Несколько месяцев назад на работе мне дали ТЗ, в котором требовалось разработать приложение, взаимодействующее с БД SQLite. Структура базы фиксирована и заранее известна мне из ТЗ.

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

                      Далее я кратко опишу процесс разработки с приведением кусков кода и попытаюсь аргументированно объяснить, почему в данном случае был сделан выбор в пользу QSqlRelationalTableModel.
                      Все под кат!
                    • SQLite и NW.js — пошаговая инструкция для создания крепкой дружбы

                        Привет, Хабр и его обитатели! Захотелось изваять нечто на HTML и JS, чтобы было десктопное и удобное. Что для этого нужно? Правильно. Node.js и NW.js или Electron. Поглядев на слабые попытки холивара NW vs Electron и почитав документацию и того и другого было принято решение для начала пощупать NW.js.

                        Но вот ведь засада. Выполнение npm i sqlite3 устанавливает только те библиотеки, которые могут исполняться при непосредственном запуске через node. А если попытаться подключить скрипт в html и запустить этот html в NW.js, то ничего у нас не выйдет. Гугл сотоварищи выдает только один рецепт включения sqlite в проект на nw.js, да и тот приходится вытаскивать из кэша. Да и устарел он уже. Посему было потрачено пару дней на изучение проблематики и поиск рабочего решения. Прошу под кат.
                        Читать дальше →
                      • ThinkingHome.Migrator — версионная миграция схемы базы данных на платформе .NET Core

                          Привет! Сегодня я выпустил новую версию ThinkingHome.Migrator — инструмента для версионной миграции схемы базы данных под платформу .NET Core.


                          Пакеты опубликованы в NuGet, написана подробная документация. Вы уже можете пользоваться новеньким мигратором, а я расскажу, как он появился, почему у него номер версии 3.0.0 (хотя это первый релиз) и зачем он нужен, когда есть EF Migrations и FluentMigrator.

                          Читать дальше →

                        Самое читаемое