Другой вариант, безопасный для транзакций, проверялся в тестах на генерацию миллиона идентификаторов в 100 потоков — не было пропусков или дублирующихся идентификаторов.
--- таблица для хранения идентификаторов
DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
`name` varchar(80) COLLATE utf8_bin NOT NULL,
`value` int(20) unsigned NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- процедура для получения очередного идентификатора
DROP FUNCTION IF EXISTS `sequence_next`;
DELIMITER ;;
CREATE FUNCTION `sequence_next`(sequence_name char(80))
RETURNS int(20)
NOT DETERMINISTIC
BEGIN
-- last_insert_id() умеет устанавливать новое значение
-- из-за MyISAM работает вне транзакции
update sequence set value=last_insert_id(value+1) where name=sequence_name;
return last_insert_id();
END ;;
DELIMITER ;
-- инициализация последовательности
INSERT INTO `sequence` (`name`, `value`) VALUES ('login',123456789); -- инициализация не с нуля, для примера
Взять следующий
SELECT sequence_next(:sequence_name) as `value`;
Видел в интернет вариации таблицы sequence чтобы там были значения минимума, максимума, инкремента, но на практике не сталкивался с тем, чтобы прирост был отличный от единицы и счётчика останавливался.
Потому что есть тёмная и светлая сторона менеджмента.
На светлой — люди, продукт, команда, лидеры, поощрения, опыт, навыки, улучшение.
На тёмной — ресурсы, доход, расход, план, факт.
Нам, как разработчикам, не хочется думать о тёмной стороне, о том что мы ресурсы, мы совершенно одинаковые, у компании от нас только прямые расходы и косвенные доходы (особенно, когда нас 50 и нет ярко выраженного личного вклада).
Нам, как владельцам продукта, не хочется думать о светлой стороне. Что там незаменимые специалисты, эксперты в разработке ПО, что один лидер по стоимости равен трём нелидерам, что в целом надо накостылить из гавна и палок *нечто*, что хомячки уже вчера готовы были платить за этот кодобред.
Потому что это нам неприятно.
Противоречит нашему мировозрению.
Вызывает много вопросов, когнитивный диссонанс, выход из зоны комформа, попытку взглянуть на мир чужими глазами.
Тех джедаев, которым удалось не перейти туда или сюда, они балансируют между светлой и тёмной стороной одинаково успешно — их мало. А ещё приверженцы светлой и тёмной одинаково недолюбливают их за недостаток силы.
Книги по светлой стороне: «Программист-прагматик», «Программист-фанатик», «Работа мечты», «Как стать организацией осознанного развития», «Клиенты на всю жизнь», «S.U.M.O.», «Открывая организации будущего».
Книги по тёмной стороне не подскажу, не так хорошо в них ориентируюсь, но иногда приходится сталкиваться. Рваный след от неудачных встреч с этой силой. Обрывочные сведения.
По своему опыту на хабре скажу, что отправлял корректировки авторам приватными сообщениями, а не комментариями к статьям.
Минус никогда за такое не получал, это же приват.
А автор ставил плюс в карму, за помощь.
И несмотря на определённую закономерность в последовательности, логины — это не купоны.
Ну и что в том, что они предсказуемо последовательны?
К логину ещё пароль добавляется.
Защищайтесь от брутфорса паролей, а не от подбора логинов.
Мне кажется намного более простым хранение одного целого для порядкового номера пользователя и функцию свёртки числа в строку в виде перевода в N-значную систему исчисления, как делается для base64, только алфавит использовать свой, ещё и рандомно отсортированный.
Класс симметричного перевода числа в строку (PHP) github.com
Пример использования:
$alphaId= new AlphaId(array(
'min_length' => 8, // какой длины символьный код
'passkey' => 'соль',
));
$login = $alphaId->toAlpha($userId); // $userId = порядковый номер пользователя
// можно сохранить в БД, а можно "развернуть обратно"
$userId = $alphaId->toId($login);
Чтобы подогнать под требование «код должен быть XX999999» — переписывайте функцию свёртки и развёртки.
Например, комбинацией двух AlphaId, один из которых работает с буквами, а второй c цифрами.
P.S. Дурацкие логины у вас. Смысл делать их рандомными, если они всё равно в итоге, при 100% заполнении, будут последовательными.
Возможность попробовать себя в нескольких смежных областях
Более свежие технологии, чем в гигантах, иногда даже более свежая версия базового ПО уже радует (стабильность, скорость)
Возможность начать проект с самого начала или сделать значительный вклад в растущий проект, очень ценный пункт в портфолио
Очень быстрый рост «мягких навыков»
Это не столько об удалёнке, сколько о небольшой компании
У удалёнки добавляется свободный график и навык удалённого общения: голосовые и видео коммуникации, общий код, расшаренные столы, согласование работы с коллегами в разных часовых поясах
> Человек, который идёт в ВУЗ уже должен представлять — чего он хочет.
Я знал, что после ВУЗа меня по блату возьмут в банк программистом. Что для этого надо — не знал. На чём пишут — не знал. Что пишут — не знал. Но знал что возьмут. Я попал в группу тех, кто планировал с учётом будущего? Даже если попал, разочарованно выпал из неё, потому что…
1999, управляющий банка скоропостижно скончался, но у нас не было договоров о целевом обучении. Дело в том, что я попал в квоту бесплатных, и тут тупик: если бесплатно, то невозможно было подписать договор о целевом обучении.
Новому директору я не понадобился. Но я, счастливая простота, решил что любой другой банк возьмёт меня точно также, за «ни за что», «просто так».
И я не пытался узнать, с чем и на чём работают в банках. Старательно получал корочки. Сдавал лабы, рефераты, курсовые.
После окончания ВУЗа я оказался не нужен банкам. Ни по языку, ни по знаниям предметной области, ни по опыту я им не подходил. Огородами-огородами ушёл в веб-разработчики :) потому что кушать хотелось.
Алгоритмы нужны. Типовых алгоритмов очень много. Простые (перебор, поиск максимума в массиве, деревья), сложные.
Самоучки часто не в состоянии найти максимум. Это очень удивляет. Даю им страницы из «Алгоритмов» Скиены и других книг — не могут ничего понять, а там вообще-то очень просто.
В ВУЗе не популяризировали навыки совместной разработки — потому нельзя использовать решения из git, потому что каждый сам за себя, потому что задачи чрезвычайно мелкие.
Не учили проектировать софтовые проекты — максимум рассказывали о существующих.
Не популяризировали «Чистый код», потому что мы и с грязным то иногда парились — мой компилятор учебного языка был просто вонючей кучей навоза.
Не популяризировали «Рефакторинг», потому что нечего было рефакторить. И некогда.
Не называли книгу «Алгоритмы» Скиены. Может быть несколько из них были на «МатАнализе и интерпретации данных» и «Теории массового обслуживания», но у меня это уже была магистратура — до неё её ещё дожить надо.
Не называли банду четырёх.
Не упоминали методологии SCRUM или waterfall.
Не упоминали UML.
Эти книги не упоминались ни в списке обязательной, ни в дополнительной литературе.
Но кто про них узнал и нашёл время освоить — молодцы.
Кто умудрился получить практику в какой-нибудь студии аутсорсной — те узнали, что надо, но ВУЗ как бы ни при чём.
Я понимаю, что кому надо, то научится. При удачном стечении обстоятельств кто-то направит, где-то подскажет. Разумный последует совету, оценив его разумность, конечно.
Но я не принимаю этот аргумент. ВУЗ не учит мышлению, это моё искреннее убеждение. Анализировать что-то самостоятельно — этого у меня по специальности не было ни в одном предмете. Не учили упорядочивать мышление и исследовать проблемы. Ну по крайней мере до 4 или 5 курса упорядочивать нужно было только учебный материал, который многократно повторялся в книгах и, пардон, через рот преподавателя. Некоторые преподаватели вообще не стеснялись всю лекцию читать конспект или выдержки из книг, некоторые задавали работы и НЕ ПРОВЕРЯЛИ! — особенно на социологии/философии/истории/политике — предметы, которые должны были учить думать, некоторые были в курсе, что весь курс списывает рефераты/курсовые и даже не снижали оценки, некоторые просили ВЕСЬ поток написать реферат на ОДНУ тему — это же просто сумасшествие какое-то.
Попробую не жаловаться (что непродуктивно). Попробую объяснить иначе.
Полезные для меня вещи, упорядочившиеся мысли, я узнал сам из книг, статей, видео вне учебного плана, вообще значительно позже окончания ВУЗа. До этого они может и попались бы мне на глаза, но никто даже не намекал на их полезность или хотя бы существование. Как говорится, чтобы быть умным, нужно одну книги. Но чтобы найти её, нужно прочитать 1000.
К слову «если бы они попались мне на глаза...»
Ещё до школы мне попались на глаза книги с объяснением принципов самоорганизации, тайм-менеджмента — я их освоил. Полезные навыки.
Мне попалась книга по технике быстрого чтения и я закончил три курса по этой технике. Позволяет усваивать печатные материалы значительно быстрее.
Мне попалась книга по ТРИЗ и я изучил её. Она попалась мне на глаза в школе, на полке внеклассного чтения и когда я попросил её домой — у учительницы математики были глаза как блюдца. И ещё раз через 3 дня — когда вернул.
Мне попалась книга по вычислительной технике, когда техники было — два компа на деревню — и я изучил её от корки до корки, печатать учился по нарисованной клавиатуре, писал программы без компа (не в курсе, были ли они вообще исполнимы).
Мне попалась книга по профориентации и поэтому я не парился «куда идти учиться», а искал ВУЗ нужной мне специальности. У меня — тяга к технике и электронике, специальности типа «человек-знаковая система».
Это было до ВУЗа. Понятно, что кто хочет, то выучит.
Но если бы мне не попались эти книги? Слепая случайность. Меня учили бы этому в ВУЗе в рамках общей программы высшего образования с целью последующего трудоустройства? Нет.
Ни профориентации, ни теории решения изобретательских задач (я не про тервер), ни даже метода мозгового штурма, ни практики тайм-менеджмента, ни GTD, ни квадрантов важное-срочное, ни… Они вообще по факту не интересовались, кто мы такие после ВУЗа.
> Кому надо, тот научится
Кто хотел и нашёл, если знал что искать — тот на коне, рад.
Кто хотел, но не знал — ни у кого спросить, ни где искать — тот окончил ВУЗ без пользы, разочарован. Может наверстать позже и тут в коментах жаловаться как я :)
Кто не хотел — мог в ВУЗ и не ходить.
Вообще, я и сейчас ощущаю недостаток навыков упорядочивания мыслей. Тараканов там много. Но лучше чем было во времена студенчества и до школы. С тех пор появился интернет и вообще стали много говорить о мышлении, об эффективности, психологии, управлении — можно выбрать, читать интересно, материалы очень понятные.
Знаю, что сейчас кроме курсов по IT появляются специальные кадровые агенства, которые занимаются профориентацией и подготовкой к карьере. Спасибо им.
Думаю, ещё нужны учреждения, популяризирующие рациональное, логическое, упорядоченное мышление, навыки исследования и решения проблем. Этакие школы Монтессори для взрослой аудитории (погуглил — оказывается есть такие).
Т.е. если вы кинулись отвечать на задачу с неполными данными и дали не верный ответ — вы не пригодны. Если начали задавать нужные вопросы, но ответ был дан не совсем верно — могут взять помощником, а потом посмотреть/обучить/… и тд и тп
Да, сейчас я придерживаюсь такой же точки зрения. Надо было устроить диалог.
Аргументы приму, поставлю плюс. Эта чёртова дилемма (учиться в ВУЗе/не учиться в ВУЗе) у меня у самого висит перед глазами, потому что дочь в 7ом классе и уже сейчас ей приходится объяснять, зачем ей ВУЗ — мы с женой нервно переглядываемся, потому что она там преподавала английский и слышала про качестве обучения на технических специальностях, а я занимаюсь наставничеством для тех кто «до ВУЗа» пытаются его подобрать и «после ВУЗа» пытаются найти себе применение.
Мои аргументы такие:
+ высшее образование расширяет кругозор
+ даёт систематизированные знания по профильным дисциплинам
— нагружает лишними непрофильными дисциплинами, от которых тошнит
— очень долгое, 4 — 6 лет, это значительный провал в карьере, особенно если подрабатывать в МакДаке или вообще ничего не делать
Основной совет дочери и другим: не надеяться на корочку и заботься о карьере с первого курса. Самостоятельно искать любой способ получить практику по профилю.
И такой вот выбор: пока она учится в ВУЗе или профильном учебном заведении по нужной ей специальности — мы её содержим. Сразу же как заканчивает или бросает — обеспечивает себя сама. Считай у неё есть фора в 4 — 6 лет чтобы не париться по поводу «что кушать» и при необходимости работать даже бесплатно, если это послужит на пользу карьере. Кто-то сказал: «Если ты не будешь делать что-то бесплатно, ты не будешь делать это и за деньги. Ищи, что тебе интересно просто так.»
Кстати, недавно ей в школе задали составить резюме на вакансию в неком абстрактном летнем лагере. Я был ошарашен, потому что искренне считал, что ни школа, ни ВУЗ не парятся трудоустройством выпускников. С удовольствием составили с ней резюме на вакансию переводчика и репетитора по английскому языку, оказалось есть что записать в опыт (1ое место на олимпиаде по английскому, специальный дополнительный курс по английскому, опыт общения на английском со сверстниками). Я бы сказал, резюме получилось хорошим. И это 7ой класс.
Извините, весь тред ответов на SO не прочитал заранее.
Взять следующий
Видел в интернет вариации таблицы sequence чтобы там были значения минимума, максимума, инкремента, но на практике не сталкивался с тем, чтобы прирост был отличный от единицы и счётчика останавливался.
Если надо — допишу такое :)
На светлой — люди, продукт, команда, лидеры, поощрения, опыт, навыки, улучшение.
На тёмной — ресурсы, доход, расход, план, факт.
Нам, как разработчикам, не хочется думать о тёмной стороне, о том что мы ресурсы, мы совершенно одинаковые, у компании от нас только прямые расходы и косвенные доходы (особенно, когда нас 50 и нет ярко выраженного личного вклада).
Нам, как владельцам продукта, не хочется думать о светлой стороне. Что там незаменимые специалисты, эксперты в разработке ПО, что один лидер по стоимости равен трём нелидерам, что в целом надо накостылить из гавна и палок *нечто*, что хомячки уже вчера готовы были платить за этот кодобред.
Потому что это нам неприятно.
Противоречит нашему мировозрению.
Вызывает много вопросов, когнитивный диссонанс, выход из зоны комформа, попытку взглянуть на мир чужими глазами.
Тех джедаев, которым удалось не перейти туда или сюда, они балансируют между светлой и тёмной стороной одинаково успешно — их мало. А ещё приверженцы светлой и тёмной одинаково недолюбливают их за недостаток силы.
Книги по светлой стороне: «Программист-прагматик», «Программист-фанатик», «Работа мечты», «Как стать организацией осознанного развития», «Клиенты на всю жизнь», «S.U.M.O.», «Открывая организации будущего».
Книги по тёмной стороне не подскажу, не так хорошо в них ориентируюсь, но иногда приходится сталкиваться. Рваный след от неудачных встреч с этой силой. Обрывочные сведения.
Минус никогда за такое не получал, это же приват.
А автор ставил плюс в карму, за помощь.
Наверное это выход, если душа требует.
Можно отдельно хранить
бесполезно«красивый» короткий ключ, а для API выдавать 64-символьную свёртку sha256 «солёного» id пользователяНу и что в том, что они предсказуемо последовательны?
К логину ещё пароль добавляется.
Защищайтесь от брутфорса паролей, а не от подбора логинов.
Класс симметричного перевода числа в строку (PHP) github.com
Пример использования:
Чтобы подогнать под требование «код должен быть XX999999» — переписывайте функцию свёртки и развёртки.
Например, комбинацией двух AlphaId, один из которых работает с буквами, а второй c цифрами.
P.S. Дурацкие логины у вас. Смысл делать их рандомными, если они всё равно в итоге, при 100% заполнении, будут последовательными.
Это не столько об удалёнке, сколько о небольшой компании
У удалёнки добавляется свободный график и навык удалённого общения: голосовые и видео коммуникации, общий код, расшаренные столы, согласование работы с коллегами в разных часовых поясах
Я знал, что после ВУЗа меня по блату возьмут в банк программистом. Что для этого надо — не знал. На чём пишут — не знал. Что пишут — не знал. Но знал что возьмут. Я попал в группу тех, кто планировал с учётом будущего? Даже если попал, разочарованно выпал из неё, потому что…
1999, управляющий банка скоропостижно скончался, но у нас не было договоров о целевом обучении. Дело в том, что я попал в квоту бесплатных, и тут тупик: если бесплатно, то невозможно было подписать договор о целевом обучении.
Новому директору я не понадобился. Но я, счастливая простота, решил что любой другой банк возьмёт меня точно также, за «ни за что», «просто так».
И я не пытался узнать, с чем и на чём работают в банках. Старательно получал корочки. Сдавал лабы, рефераты, курсовые.
После окончания ВУЗа я оказался не нужен банкам. Ни по языку, ни по знаниям предметной области, ни по опыту я им не подходил. Огородами-огородами ушёл в веб-разработчики :) потому что кушать хотелось.
Самоучки часто не в состоянии найти максимум. Это очень удивляет. Даю им страницы из «Алгоритмов» Скиены и других книг — не могут ничего понять, а там вообще-то очень просто.
Не учили проектировать софтовые проекты — максимум рассказывали о существующих.
Не популяризировали «Чистый код», потому что мы и с грязным то иногда парились — мой компилятор учебного языка был просто вонючей кучей навоза.
Не популяризировали «Рефакторинг», потому что нечего было рефакторить. И некогда.
Не называли книгу «Алгоритмы» Скиены. Может быть несколько из них были на «МатАнализе и интерпретации данных» и «Теории массового обслуживания», но у меня это уже была магистратура — до неё её ещё дожить надо.
Не называли банду четырёх.
Не упоминали методологии SCRUM или waterfall.
Не упоминали UML.
Эти книги не упоминались ни в списке обязательной, ни в дополнительной литературе.
Но кто про них узнал и нашёл время освоить — молодцы.
Кто умудрился получить практику в какой-нибудь студии аутсорсной — те узнали, что надо, но ВУЗ как бы ни при чём.
Но я не принимаю этот аргумент. ВУЗ не учит мышлению, это моё искреннее убеждение. Анализировать что-то самостоятельно — этого у меня по специальности не было ни в одном предмете. Не учили упорядочивать мышление и исследовать проблемы. Ну по крайней мере до 4 или 5 курса упорядочивать нужно было только учебный материал, который многократно повторялся в книгах и, пардон, через рот преподавателя. Некоторые преподаватели вообще не стеснялись всю лекцию читать конспект или выдержки из книг, некоторые задавали работы и НЕ ПРОВЕРЯЛИ! — особенно на социологии/философии/истории/политике — предметы, которые должны были учить думать, некоторые были в курсе, что весь курс списывает рефераты/курсовые и даже не снижали оценки, некоторые просили ВЕСЬ поток написать реферат на ОДНУ тему — это же просто сумасшествие какое-то.
Попробую не жаловаться (что непродуктивно). Попробую объяснить иначе.
Полезные для меня вещи, упорядочившиеся мысли, я узнал сам из книг, статей, видео вне учебного плана, вообще значительно позже окончания ВУЗа. До этого они может и попались бы мне на глаза, но никто даже не намекал на их полезность или хотя бы существование. Как говорится, чтобы быть умным, нужно одну книги. Но чтобы найти её, нужно прочитать 1000.
К слову «если бы они попались мне на глаза...»
Ещё до школы мне попались на глаза книги с объяснением принципов самоорганизации, тайм-менеджмента — я их освоил. Полезные навыки.
Мне попалась книга по технике быстрого чтения и я закончил три курса по этой технике. Позволяет усваивать печатные материалы значительно быстрее.
Мне попалась книга по ТРИЗ и я изучил её. Она попалась мне на глаза в школе, на полке внеклассного чтения и когда я попросил её домой — у учительницы математики были глаза как блюдца. И ещё раз через 3 дня — когда вернул.
Мне попалась книга по вычислительной технике, когда техники было — два компа на деревню — и я изучил её от корки до корки, печатать учился по нарисованной клавиатуре, писал программы без компа (не в курсе, были ли они вообще исполнимы).
Мне попалась книга по профориентации и поэтому я не парился «куда идти учиться», а искал ВУЗ нужной мне специальности. У меня — тяга к технике и электронике, специальности типа «человек-знаковая система».
Это было до ВУЗа. Понятно, что кто хочет, то выучит.
Но если бы мне не попались эти книги? Слепая случайность. Меня учили бы этому в ВУЗе в рамках общей программы высшего образования с целью последующего трудоустройства? Нет.
Ни профориентации, ни теории решения изобретательских задач (я не про тервер), ни даже метода мозгового штурма, ни практики тайм-менеджмента, ни GTD, ни квадрантов важное-срочное, ни… Они вообще по факту не интересовались, кто мы такие после ВУЗа.
> Кому надо, тот научится
Кто хотел и нашёл, если знал что искать — тот на коне, рад.
Кто хотел, но не знал — ни у кого спросить, ни где искать — тот окончил ВУЗ без пользы, разочарован. Может наверстать позже и тут в коментах жаловаться как я :)
Кто не хотел — мог в ВУЗ и не ходить.
Вообще, я и сейчас ощущаю недостаток навыков упорядочивания мыслей. Тараканов там много. Но лучше чем было во времена студенчества и до школы. С тех пор появился интернет и вообще стали много говорить о мышлении, об эффективности, психологии, управлении — можно выбрать, читать интересно, материалы очень понятные.
Знаю, что сейчас кроме курсов по IT появляются специальные кадровые агенства, которые занимаются профориентацией и подготовкой к карьере. Спасибо им.
Думаю, ещё нужны учреждения, популяризирующие рациональное, логическое, упорядоченное мышление, навыки исследования и решения проблем. Этакие школы Монтессори для взрослой аудитории (погуглил — оказывается есть такие).
Да, сейчас я придерживаюсь такой же точки зрения. Надо было устроить диалог.
Ещё бы этому учили…
Что мешало в то же время учиться самостоятельно и искать общения с сильными разработчиками?
Мои аргументы такие:
+ высшее образование расширяет кругозор
+ даёт систематизированные знания по профильным дисциплинам
— нагружает лишними непрофильными дисциплинами, от которых тошнит
— очень долгое, 4 — 6 лет, это значительный провал в карьере, особенно если подрабатывать в МакДаке или вообще ничего не делать
Как выбрать специальность будущему айтишнику? — там довольно подробно моя точка зрения.
Основной совет дочери и другим: не надеяться на корочку и заботься о карьере с первого курса. Самостоятельно искать любой способ получить практику по профилю.
И такой вот выбор: пока она учится в ВУЗе или профильном учебном заведении по нужной ей специальности — мы её содержим. Сразу же как заканчивает или бросает — обеспечивает себя сама. Считай у неё есть фора в 4 — 6 лет чтобы не париться по поводу «что кушать» и при необходимости работать даже бесплатно, если это послужит на пользу карьере. Кто-то сказал: «Если ты не будешь делать что-то бесплатно, ты не будешь делать это и за деньги. Ищи, что тебе интересно просто так.»
Кстати, недавно ей в школе задали составить резюме на вакансию в неком абстрактном летнем лагере. Я был ошарашен, потому что искренне считал, что ни школа, ни ВУЗ не парятся трудоустройством выпускников. С удовольствием составили с ней резюме на вакансию переводчика и репетитора по английскому языку, оказалось есть что записать в опыт (1ое место на олимпиаде по английскому, специальный дополнительный курс по английскому, опыт общения на английском со сверстниками). Я бы сказал, резюме получилось хорошим. И это 7ой класс.