Мой SQL

Неделю назад провёл семинар по MySQL. Событие не ахти какое, но всё же решил записать на будущее.

24-го сентября и 2-го октября в Екатеринбурге проходили занятия по MySQL. Носили они странное название ‘Мастер-класс «Мой SQL»‘. Организовывали это мероприятия девочки из IT-People, что организовывают различные IT-движухи в Екатеринбурге и области. Два дня по 4 часа с домашним заданием. Билет — 5000 рублей. Планировалось проводить для новичков, но пришли по большей части уже более-менее умелые — пришлось перекраивать программу на ходу.

Несколько выводов, что я сделал:
Читать далее Мой SQL

Чистим разросшийся файл mysql ibdata1

В MySQL есть такой замечательный файл — ibdata1. Замечателен о не только тем, что растёт как дурак, но и тем, что хранит кучу данных сервера.

Начнём с того, что просто удалить его можно, но это приведёт к уничтожению данных таблиц. ibdata1 хранит данные таблиц (кроме схем — они хранятся в других файлах), индексы и прочую информацию. Альтернатива хранению в одном файле — хранить для каждой таблицы эту информацию в отдельном файле. Собственно это я и предлагаю сделать.

  • mysqldump --all-databases > alldb.sql используем, чтобы выгрузить все данные сервера
  • Удаляем все базы кроме служебных mysql.
  • Останавливаем mysql.
  • Добавим в my.cnf (во многих дистрибутивах этот файл лежит в /etc/mysql) в секцию
    [mysqld]

    строчку

    innodb_file_per_table
  • Удаляем /var/lib/mysql/ibdata1 и /var/lib/mysql/ib_logfile* файлы.
  • Поднимаем сервер mysql
  • Заливаем дамп в базу cat alldb.sql | mysql -uroot -p

How to extract files from compressed archives in Linux CLI

Sometimes I have an archives with unknown (for me) compression format. It’s easy if it happened when I use GUI FileRoller or other GUI archive tools. But when I logged in CLI (command line interface/console) I should know a command and parameters to unpack.

Читать далее How to extract files from compressed archives in Linux CLI

Git (no branch)

Sometimes you can get a weird situation:

$ git branch
 * (no branch)
 master

But you can back in a master branch (or some other branch) and save all changes.

Get commit’s hash from git log.

$ git log
 commit d735ee31656010d25765f395d98cbbdbe5b448e8 <---- It's here!
 Author: Georgy Bazhukov <gosha@bugov.net>
 Date:   Wed May 29 13:05:15 2013 +0600

    more code!

And change branch

$ git checkout master

After you should merge a current commit (HEAD) with commit from «(no branch)»

$ git merge d735ee31656010d25765f395d98cbbdbe5b448e8

«Towel day». Achievement unlocked!

Many companies uses Jira+Stash (issue tracker+git) for code development. And it’s pretty handy. Also you can install plug-in for achievements (for free). And it’s fun!

For example new developers starts to use issues in git-comments to get achievement «BugHunter». After that they still use issues in comments because it’s a good practice and they are used.

achievment

But some of achievements are anti-achievements. For example «Pardon my French» (swearing in comments).

Once per year you can unlock achievement «Towel day». But I missed it this year. «Don’t panic!» — you can get it any time :)

git commit --amend --date="Sat May 25 14:00 2013 +0600"

Yes, it’s a cheat in a developer’s tool. But who blames me? Achievements are so delicious! ^_^

Ошибка при git pull: HTTP code = 411

$ git push origin master
 Password for 'https://bugov@www.***.ru':
 Counting objects: 1243, done.
 Delta compression using up to 4 threads.
 Compressing objects: 100% (1126/1126), done.
 error: RPC failed; result=22, HTTP code = 411
 fatal: The remote end hung up unexpectedly
 Writing objects: 100% (1243/1243), 4.32 MiB | 1.97 MiB/s, done.
 Total 1243 (delta 310), reused 0 (delta 0)
 fatal: The remote end hung up unexpectedly
 Everything up-to-date

Решение:

git config http.postBuffer 524288000 # 500Mb

Энтерпрайзный код — на чём писать?

Энтерпрайзные решения — мечта любого программиста с самомнением. Тут тебе и высокие нагрузки и отказоустойчивость — всё то, на чём реально можно проверить навыки. Мечта красивая, но, зачастую, несбыточная.

Один очень благочестивый и набожный человек внезапно лишился всего своего состояния. И зная, что Господь может в любых обстоятельствах прийти к нему на помощь, принялся молиться:
— Сделай так, чтобы я выиграл в лотерею.
Такие молитвы воссылал он год за годом, но оставался бедняком.
Но вот он и умер и, как человек праведной жизни, попал прямо к райским вратам.
Но входить отказался. А заявил, что прожил всю свою жизнь, не нарушая заповедей и в полном соответствии с тем, чему его учили, а вот Бог все равно так и не послал ему выигрыш в лотерею.
— И все, что Ты мне обещал, ничего не стоит! – в ярости кричал он.
— Я был готов помочь тебе, — отвечал Господь. – Но ты бы хоть раз купил лотерейный билет!

Пауло Коэльо, «Мактуб»

Именно так, многие мечтают, да не многие стремятся. Что обычно делают программисты? — Пишут программы. Для кого? Для непрограммистов, которым до лампочки энтерпрайзность их приложения. Главное — чтобы работало как-то. При чём здесь, казалось бы, программиста должна поджимать проблема безопасности: сломают — работать не будет :) Но нет, не тут то было: защита «неуловимого Гарри» (да кому он нужен?) работает для большинства проектов.

Читать далее Энтерпрайзный код — на чём писать?

Почему код на Perl считается плохо поддерживаемым

Иначе говоря, почему в приличном обществе принято считать, что писать большие проекты на perl — плохой тон.

Так уж получилось, что perl появился ещё до web’а, а на момент появления последнего являлся практически единственным инструментом разработки web сайтов. А первый блин — всегда комом. Тогда большинство проектов были небольшими, поэтому можно было писать, особо не задумываясь: что будет дальше. Да и паттернов разработки как таковых не было — не было и тех, кто разрабатывая код мог бы писать код, который через десяток лет всё ещё был бы логичен и красив.

А значит, практически весь код, что был написан в те далёкие времена, нужно было просто «закопать» и написать всё «с чистого листа», дабы потомки не ломали голову. Однако, коммерция — есть коммерция: есть код? зачем его переписывать — лучше «доработать». Так и появлялись те франкинштейны, которые неизбежно становились всё страшнее и непроходимее.

Любой, кто поддерживал старый код на perl поймёт меня — тонна кода, которую невозможно переваривать кусочками, а лишь целиком, просто напросто выедает всю память программиста, после чего программист падает с ошибкой, неспособный обработать или перехватить исключение — памяти то под обработчик нет…

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

Почему же нельзя писать сразу так, чтобы было всё понятно? Всё просто: поточное программирование web-сайтов даже сейчас сводится в основном к следующему: есть ядро, целое, логичное. А ещё есть 1000 и 1 костыль, на скорую руку напиленных под нужды заказчика. Со временем, эти костыли складируются «на всякий случай» и используются для выпиливания новых: запросы заказчиков различны, но схожи. Таким образом, те самые костыли, которые были сделаны на скорую руку, становятся частью ядра, или, если повезёт, модулями.

Итого: чем старше система, те больше в ней костылей, тем сложнее поддерживать код.

Более современным языкам повезло больше: они появились, когда данная проблема стала ясна, а значит, стали искать и решения. Сейчас существует огромное количество фреймворков — по сути, ядер. А также команд, сообществ, поддерживающих их. То есть разработка ядра была отдана другим программистам, на которых не давит маркетинг (точнее, давит, но другой) — им кристально ясно, что то, что они делают должно быть мощным и простым, как автомат калашникова, чтобы программисты, использующие его, просто «давили на курок».

Неужели, perl остался на уровне франкинштейнов, неужели нет нормальных фреймворков. Естественно, есть. «Ложки нашлись, но осадок остался»…