Однажды русская и немецкая компании договорились провести совместные соревнования по гребле на восьмиместных байдарках.
Обе команды долго и упорно тренировались и когда обе были на пике формы устроили соревнования, но…
Немцы победили с преимуществом в 1 км.
После поражения русская команда была деморализована.
Топ-менеджмент решил выяснить причину провала.
Была создана рабочая группа для подготовки предложений по изменению и реструктуризации в команде.
После многих недель изысканий было установлено, что в немецкой команде гребли семеро и один рулевой…
а в русской – один на веслах и семеро рулевых!
Топ-менеджментом русской компании была привлечена консалтинговая компания для подготовки и проведения реструктуризации команды.
Получив солидный гонорар и внедрив показатели KPI, ССП и ISO 9001 и проведя маркетинговые исследования, консалтинговая фирма пришла к выводу:
Слишком много сотрудников в русской команде подает команды и слишком мало гребет….
После реструктуризации русская команда выглядела так:
– четыре рулевых…
– два старших рулевых,
– один рулевой директор,
– и один гребец.
Кроме того для гребца была введена персональная система оценки показателей эффективности и расширен круг обязанностей, чтобы повысить его ответственность.
На следующий год немецкая команда опять убедительно победила с отрывом в 2 км.
В результате очередного поражения, топ менеджментом русской компании была нанята консалтинговая компания по аудиту и оценке эффективности команды. Было принято решение расформировать гребную команду…
Гребец, как основной виновник неэффективности команды был уволен, все плановые инвестиции на 2014-2015 годы в новую лодку и весла были отменены.
Рулевым была объявлена благодарность, а сэкономленные деньги были выплачены топ-менеджменту в качестве премии.
Самый простой способ хранить пароли в базе это положить их в таблице пользователей в открытом виде, допустим в поле с типом VARCHAR. Но при таком подходе, в случае попадания базы в руки злдоумышленника, все пароли 100% становятся ему известны.<br/>
Чтобы этого не произошло, пароль лучше хранить в зашифрованном виде, использовав алгоритмы шифрования md5, sha1 и т.п.
Всегда считал что у .NET в System.IO существует какой нибудь метод который реализует копирование папки с содержимым, включая все подкаталоги и файлы. Оказалось что я ошибался, и такого метода нет. Поэтому привожу пример реализации этого действия, довольно простой функцией, при помощи System.IO.DirectoryInfo.
Команды манипулирования данными SELECT, UPDATE, DELETE работают сразу с группами строк. Эти группы, вплоть до отдельных строк, можно выбрать с помощью опции WHERE. А если надо перебрать строки некоторой таблицы последовательно, одну за другой? На этот случай в языке SQL существуют курсоры. Курсор (current set of record) – временный набор строк, которые можно перебирать последовательно, с первой до последней.
При работе с курсорами используются следующие команды.
Объявление курсора:
DECLARE имя_курсора CURSOR FOR SELECT текст_запроса
Любой курсор создается на основе некоторого оператора SELECT.
Из архива...
Недавно пришлось сделать простенькую подгонялку фотографий в заданные рамки, так чтобы пользователь мог собственноручно выбрать область на фото источнике и вырезать её. Впринципе ничего сложного, самое сложное пожалуй — это отрисовка прямоугольника выделения, когда нажали на кнопку мыши и перемещаем её по изображению — выделяя необходимую нам область.
Сначала самое важное. У картинки pictureBox сразу включаем свойство SizeMode в AutoSize, ни в коем случае ни какие нибудь там Zoom-ы если конечно нет желания поразбираться с масштабированием.
Далее — надо сделать так — чтобы работал скроллинг при выделении мышкой. Так уж получилось что это больное место в .NET (не работает оно само собой и всё тут).
Пример обработки XML файла, средствами языка C#.
Простой пример, наглядно показывает как легко разобрать по кусочкам XML файл.
string prm = "";
XmlTextReader reader = new XmlTextReader(fi.Name.Replace(fi.Extension, ".XML"));
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element: // Узел является элементом.
prm = prm + ("<" + reader.Name);
while (reader.MoveToNextAttribute()) // Чтение атрибутов.
prm = prm + (" " + reader.Name + "='" + reader.Value + "'");
prm = prm + (">");
break;
case XmlNodeType.Text: // Вывести текст в каждом элементе.
prm = prm + (reader.Value);
break;
case XmlNodeType.EndElement: // Вывести конец элемента.
prm = prm + ("</" + reader.Name);
prm = prm + (">");
break;
}
}
MessageBox.Show(prm);
reader.Close();
Из архива
Расскажу об одном небольшом нюансе который поможет сэкономить время и нервы. Эта особенность мною была замечена только в MySQL (проявлялась как в 5 так и пока в тестовом 6-ом). Заключается она в необходимости особого наименования процедур, для правильного восстановления базы из архива (дампа MySQL).
Смысл заключается в алфавитном порядке функций. При создании дампа базы все элементы сохраняются в алфавитном порядке, тоесть если в процедуре proc1 вызвать процедуру proc2 — то при восстановлении из дампа вылетит ошибка поскольку первой будет восстанавливаться процедура proc1 — которой требуется proc2 — но её в базе на момент воссоздания ещё не будет.