Блог Александра Башкирова

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

FluentPDO - библиотека для работы с PDO в PHP

Просмотров: 4706Комментарии: 0
Alib.spb.ru

Слйчайно наткнулся на FluentPDO - библиотеку для работы с PDO в PHP. Смысл в том, что библиотека является слоем абстракции между приложением, PDO-расширением PHP и SQL. Потестировав, понял, что удобно. А значит, есть смысл рассказать.

Для начала - ссылки.

  1. FluentPDO на github: https://github.com/envms/fluentpdo
  2. Подробная статья о том, как её использовать: https://www.sitepoint.com/getting-started-fluentpdo/
Ну и - чем "зацепило".

Смысл в том, что от программиста при использовании библиотеки требуется создать PDO-объект для работы с БД, передать его в fluentpdo, и дальше, используя встроенные методы - работать с SQL.

Например:

$pdo = new PDO("mysql:dbname=testdb", "testuser", "testpassword");
$fpdo = new FluentPDO($pdo);

Дальше "всё просто", например, простой select * from mytable where id=$userid будет выглядеть так:

$query = $fpdo->from('mytable')->where('id', $userid);

И чтобы обработать результат:

foreach($query as $row){
    
print $row['field1'] . ' -- ' . $row['field2'] . '<br>';
 }

Если нужны конкретные столбцы, то:

$query = $fpdo->from('mytable')
   ->select(array('field1', 'field3'))->where('id', $userid);

Ну и чисто для иллюстрации - insert:

$values = array('field1' => 'testval1', 
     'field2' => 'testval2', 
     'field3' => 'testval3'); 
     
$query = $fpdo->insertInto('mytable')->values(values); 
  
$insert = $query->execute();

Также поддерживаются все основные операции, включая разнообразные update, join, delete и т.д.

Кстати, по приведенной выше ссылке примеров сильно больше. Скажу, что я попробовал на тесте FluentPDO - мне понравилось. Как-то упрощает жизнь, с точки зрения того, что не надо писать километровый код и запросы выглядят пологичнее. Ну и вся мощь PDO - типа единого синтаксиса работы с разными БД, безопасности (использование placeholder), получается как бы на нашей стороне :)

Про статью "Agile в небольших командах — как красиво сломать себе шею"

Просмотров: 1713Комментарии: 0
Alib.spb.ru

Еще интересный пост на Хабре: https://habrahabr.ru/company/bitrix/blog/321098/

Довольно эмоционально автор описывает, почему Agile в небольших командах - это зло, и условия, при которых оно злом не будет являться.

Хотя, на мой взгляд, основное условие, при котором Agile в принципе будет работать - высокая степень зрлости команды. Когда работа идет на результат, а не на бумагу. И когда разработчики нацелены на сотрудничество, а не на "копать отсюда и до обеда".

А это уже вопрос организации, корпоративной культуры и мотивации. Смогли создать такую культуру - хорошо. Нет - никакой Agile не поможет в принципе.

Так как-то.

Авиакомпания сломала вашу гитару? Есть способ ответа :)

Просмотров: 1527Комментарии: 0

В 2009 году кантри-сузыкант Дэйв Кэролл летел в Небраску. Гитара, которую он вез с собой, была признана не ручной кладью и попала в багаж, после чего была сломана. Дейв пытался найти справеливость и получить компенсацию, обращзасясь в авиакомпанию, но безуспешно. В итоге, устав бегать, он написал песню и клип на нее про этот случай, которая стала звездой ютуба.

По ссылке - подробности. Ссылка

А сам клип (на мой взгляд очень задорный и талантливый) вот:

Про блокировки таблиц в mysql

Просмотров: 3317Комментарии: 0
Alib.spb.ru

Натолкнулся на любопытную особенность работы блокировки в mysql. Итак дано:

таблица table-1 и table-2. Из второй мы читаем, результат записываем в первую. Но читаем не просто - а достаточно хитро, примерно так

TRUNCATE TABLE table-1;
INSERT INTO table-1 SELECT * FROM table-2 WHERE flf2=(SELECT fld FROM table-2 WHERE fld3='value');

Если таблицы не заблокировать (что мне понятнее) или не использовать транзаккцию (что для случая mysql я пока не использовал), то при одновременном выполнении запроса получится ... да всё, что угодно. Имитация (запуск скрипта с вызовом указанного кода в несколько потоков) приводил к тому, например, что для ряда ситуаций число строк в table-1 превышало ожиждаемое в 1,5-2 раза.

Соответственно, требуется обернуть вызовы блокировкой. Которая по идее должна выглядеть так:

LOCK TABLES table-1 WRITE, table-2 READ;
TRUNCATE TABLE table-1;
INSERT INTO table-1 SELECT * FROM table-2 WHERE flf2=(SELECT fld FROM table-2 WHERE fld3='value');
UNLOCK TABLES;

Но вот фигушки. В такой конструкции mysql упорно выдает ошибку ERROR #1100: Table 'table-2' was not locked with LOCK TABLES

Как оказалось, это не бага, это фича. Как написано в документации https://dev.mysql.com/doc/refman/5.7/en/lock-tables.html - для каждого упоминения таблицы table-2 в SELECT требуется свой блокировочный алиас в LOCK'е. Вот так примерно:

LOCK TABLES table-1 WRITE, table-2 READ, table-2 AS t2 READ;
TRUNCATE TABLE table-1;
INSERT INTO table-1 SELECT * FROM table-2 WHERE flf2=(SELECT fld FROM table-2 AS t2 WHERE fld3='value');
UNLOCK TABLES;

В такой конструкции - всё будет работать.

И еще момент: когда используем LOCK TABLES, то в нем надо перечислить (заблокировать) все таблицы, к которым будет доступ на чтение / запись. В противном случае mysql выдаст Error #1100. Ту самую, что какая-то таблица не блокирована, ага.

Про книгу. Луис Герстнер. "Кто сказал, что слоны не могут танцевать. Жесткие реформы для выживания компании"

Просмотров: 2228Комментарии: 0
Книги

Прочитал книгу Луиса Герстнера "Кто сказал, что слоны не могут танцевать. Жесткие реформы для выживания компании". Луис Герстнер - генеральный директор и председатель совета директоров IBM с 1993 по 2002 годы. Человек, спасший IBM. Человек, который смог развернуть корабль корпоративной культуры IBM и через это ставший "звездой".

Вообще это не первая, и даже не вторая книга топ-менеджеров разных компаний, которую я читаю. Как минимум, я писал про книгу Ли Якокка "Карьера менеджера". Игорь Ашманов - "Жизнь в пузыре". Знаменитые "Грабли российского бизнеса" Сергея Абдульманова, Дмитрия Кибкало, Дмитрия Борисова. И еще много разных других. Все они - истории успеха, истории отчаяния, истории побед. Те самые истории, из которых складывается история.

Но вот Герстнер меня "купил" тем, что у него не только про истории. У него - изумительно точные диагнозы.

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

Закончил я тем, что кратко рассказал о своей философии и практике управления.

  • Я руководствуюсь принципами, а не процедурами.
  • Рынок диктует нам, что делать.
  • Я верю в качество, сильные стратегии и планы, командную работу, вознаграждение за результаты и нравственную ответственность.
  • Я ищу людей, которые работают, чтобы решать проблемы и помогать коллегам. Я увольняю политиканов.
  • Я много занимаюсь стратегией; ваша задача – ее реализация. Просто держите меня в курсе дел с помощью неформального общения. Не скрывайте плохих новостей: я ненавижу сюрпризы. Не пытайтесь валить все на меня. Решайте проблемы сами; не выносите их постоянно наверх.
  • Действуйте быстро. Если возникают ошибки, пусть они будут результатом быстроты, а не медлительности.
  • Иерархия имеет для меня мало значения. Давайте приглашать на совещания людей, которые могут помочь в решении
  • проблемы, невзирая на должности. До минимума сократите количество комитетов и собраний. Никаких комитетов по принятию решений. Давайте разговаривать честно и прямо.
  • Я не очень разбираюсь в технологии. Мне придется этому научиться, но не ждите, что я буду владеть ею в совершенстве. Руководители подразделений должны стать для меня переводчиками на деловой язык.

И завление, которое Герстнер сделал на первом своем в качестве директора клиентском мероприятии:

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

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

К вопросу о диагнозах. Герстнер, например, пишет по итогам первых 3 недель работы в качесте директора:

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

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

В общем, для меня она однозначно стоила потраченного на прочтение времени. Надеюсь, что и вам она может оказаться полезной.

Про LXLE, LXQt и вообще немного про LX

Просмотров: 16629Комментарии: 0
Linux

Случайно наткнулся на описание дистрибутива Linux на базе ubuntu - LXLE. Суть - в том, что это та же самая Lubuntu, только с поддержкой старого железа. Кстати, LXLE переводится как Lubuntu Extra Life Extension. Дистрибутив весит в итоге 1,5 Гб (я так подозреваю, туда запилены драйверы для старого всего).

Стало интересно - поставил на виртуалку. В общем, работает, стартует. Ставил “по-скромному” (512 Мб памяти и 20% процессора). После установки “голая” система ест у меня 85 Мб, что по-моему неплохо. Из коробки, на мой вкус - идет много разных приложений. Слишком много. Подозреваю, что это частично бэкпорты, но не разбирался.

Официальный сайт: http://lxle.net/

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

Ссылка на прямое скачивание версии 16.04.1: https://sourceforge.net/projects/lxle/files/Final/OS/16.04.1-32/lxle-eclectica-16.04.1.iso/download

Ну и “чтобы 2 раза не вставать”, раз уж речь зашла о lx… я какое-то время назад узнал о форке - развитии lxde, под названием lxqt (та же lxde - но под Qt). Тогда - в конце 2014 пациент был “скорее жив”. Сейчас же - пациент жив вполне уверенно. С удивлением отметил, что под этим вполне можно работать, выглядит симпатично (на мой вкус). Многое “утащено” из LXDE, ну и привнесены мелкие приятные фишки (например, группировка окон “а-ла windows”). В общем, как бы альтернатива LXDE, как ни крути. Правда, вопрос сколько памяти кушает, а также  производительность и стабильность на текущий момент - они немного за бортом…

Оф.сайт: http://lxqt.org/

Скриншот для примера с моего ноутбука:

Рабочие столы в вебе на javaScript

Просмотров: 3044Комментарии: 0
Alib.spb.ru

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

Пост про реализации этой идеи: https://habrahabr.ru/post/320124/

Ссылки на проекты:

Автор поста очнеь подробно разбирает именно функции этих проектов - где что можно сделать. А я хотел бы остановиться на аспекте безопасности данных. Загрузка файлов в облако, если только это не частное приватное облако, самостоятельно настроенное и с шифрованием - это всегда риск. Почему тогда весь мир (ок, весь рунет) пользуется Гугл Диском, Яндекс Диском, Облаком Мэйл.Ру и не парится?

Причин, на мой взгляд, две.

Первая - в том, что большие компании как-никак, но о реноме заботятся. Для них риск утечки пользовательских данных неприемлим. Также, как неприемлим и их просмотр. В каком-то приближении. Слишком высоки репутационные риски.

Вторая - большие компании это большая инфраструктура. Если, например, Мэйл.Ру дает сколько-то там Гигабайт, то они есть. Если кто-то обещает, что будет резервирование - то оно будет. Без вариантов. (Подозреваю, что риск потери пользовательских данных присутствует и в таких компаниях, но он несопоставим с риском потерь в компаниях небольших).

Небольшие же проекты, скорее всего, не могут гарантировать в первую очередь именно сохранность данных, и во вторую - приватность. Почему? Да потому, что, например, "живет" проект на хостинге или, в лучшем случае - на VDS. Вы загружаете данные - они запросто могут не зарезервироваться (если это традиционный хостинг, то обычно бекапы делаются раз в сутки) или стать доступными третьим лицам (разработчики в небольших командах зачастую используют пользовательские данные как "полигон").

Мораль наверное такая: проекты классные, но ... для поиграться. Разве что OS.js можно рассматривать более серьезно - так как есть возможность установить его к себе на сервер. Что в какой-то мере будет уже гарантией приватности. Остальные, к сожалению, предлагают именно сервис - использование которого для меня выглядит немного рискованно, учитывая, что компании - владельцы сервисов - совсем не на слуху.