Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
ramilexe

ramilexe

  • 11
    вклад
  • 0
    вопросов
  • 19
    ответов
  • 11%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Функцию, похожую на хэш, с коротким непоследовательным дайджестом и без коллизий?

    MikeMirzayanov @MikeMirzayanov
    Можно так. Работает для всех m от 1 до MOD-1. Если не хватает, то можно либо увеличить константы (тогда может вырасти длина), либо чуток адаптировать алгоритм. Я подогнал, чтобы было как в примере 6 знаков в коде. На самом деле можно все делать в 64-битных переменных, просто так на Java удобнее.

        private static final BigInteger MULTIPLIER = BigInteger.valueOf(13L);
        private static final BigInteger MOD = BigInteger.valueOf(99990001L);
        private static final BigInteger ADDEND = BigInteger.valueOf(699930007L);
    
        public static String encode(long m) {
            if (m <= 0 || m >= MOD.longValue()) {
                throw new IllegalArgumentException("Argument is out of range.");
            }
            return BigInteger.valueOf(m).modInverse(MOD).multiply(MULTIPLIER)
                    .add(ADDEND).toString(36).toUpperCase();
        }
    
        public static long decode(String encoded) {
            return new BigInteger(encoded.toLowerCase(), 36).subtract(ADDEND).divide(MULTIPLIER)
                    .modInverse(MOD).longValue();
        }
    


    Вот примеры того, что получается (для разных m):

    1 BKPXGK
    2 MBOAIK
    3 PWNQV8
    4 RP5H1K
    5 SRUICK
    10000 X2JV9T
    10001 PWMTFN
    10002 U025II
    10003 TRK6AU
    10004 JRJEMK
    10005 UARMRU
    10006 S2NCNJ
    10007 R1E1UK
    10008 HRCMBX
    10009 WU4GN7
    99989996 FVI2O7
    99989997 GY73Z7
    99989998 IQOU5J
    99989999 MBOAI7
    99990000 X2MNK7
    
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • CVS - неправильные версии

    Zigmar
    Zigmar @Zigmar
    Ого, кто-то все еще пользуется CVS… о__О
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Архитектура приложения - вопрос по книгам и задача

    taliban
    Анатолий @taliban
    php программист
    Если хотите действительно понять архитектуру (при условии что Вы уже довольно таки опытный и прочитали довольно таки много книг) то просто делайте бота. Когда он будет готов, сделайте еще раз, но по другому, и затем еще раз переделайте. После третьего раза у вас будет красивый, вылизаный и понятный код + бесценный опыт от раздумий и ошибок.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Подлый развод и способы информирования населения..

    nuzni @nuzni
    «набор текстов на дому» в Яндексе 4 ссылка сверху. Лохотрон.
    Теме это лет 7 уже если не больше. Всё обсосано.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Карьера с SAP.....?

    Вячеслав @Armann
    Учтите — SAP Bussiness One имеет мало отношения к 'большому' SAP R/3 (по которому много вакансий на HH с красивыми цифрами), и насколько я знаю мало распространен в России. Так что со знанием SAP BO и умением интегрировать его с 1С может статься вы будете востребованы только в вашей компании
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Самопроизвольное включение компьютера

    anitspam @anitspam
    image
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Вывод сообщений в реальном времени (JS + PHP)?

    AntonMinsk
    Антон @AntonMinsk
    Посмотрите в сторону dklabrealpolexor достаточно легкий comet-сервер.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Замыкания в JS

    ArtemSmirnov
    ArtemSmirnov @ArtemSmirnov
    Очень частая ошибка, попробуйте так:
    <source language=«javascript>
    for (var i = 0; i < Obj.Sectors.length; i++) {
    (function (i) {
    Obj.Sectors[i].mousemove(function (event) {
    Obj.Popup(event.clientX, event.clientY, i);
    });
    })(i);
    }
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Готика для линукса, или что-то вроде того?

    simplecode
    simplecode @simplecode
    gcc ничего так, я до сих пор не прошел…
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Где стартапу искать программиста?

    s0rr0w @s0rr0w
    На сайтах поиска работы.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Как работает новый аудио плеер вконтакте?

    sajgak
    sajgak @sajgak
    про histrory.pushState почитайте. Это в плане того, что адрес полностью меняется. В остальном — все как в ответе viperet
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Тотальный переход с 7ки на Linux

    Ura78 @Ura78
    Поставьте Ubuntu, VirtualBox и пользуйтесь Windows 7 как виртуальной машиной по необходимости
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Альтернатива вебмани?

    Hoorsh
    Хуршед Нурматов @Hoorsh
    Digital-специалист, веб-разработчик
    Qiwi
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Проверка вхождения диапазона IP- адресов в другой диапазон IP-адресов на PHP?

    Riateche
    Riateche @Riateche
    1. Преобразуем ip в числа с помощью ip2long. Имеем нижние границы диапазонов.
    2. Вычисляем число адресов в диапазоне по формуле 2^(32-x), x — последняя цифра в обозначении подсети.
    3. Прибавляем к нижней границе число адресов, получаем верхнюю границу (не включительно).
    4. Сравниваем границы диапазонов как числа, проверяем вхождение первого диапазона во второй.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Javascript: String.prototype.namespace.method и this

    barmaley_exe
    B@rmaley.e><e @barmaley_exe
    Нельзя, т.к. Ваш объект utils не будет знать о контексте (this для него что-то неопределенное).
    Но если хочется извращений, то можно
     // https://gist.github.com/947203
    (function(){
    	var _utils = { // String.prototype.utils
    			append : function(tail){
    				return this + tail;
    			}
    		},
    		utils = {}, // фронтэнд. на этот объект будут навешены геттеры.
    					// на _utils геттеры вешать нельзя т.к. тогда мы не сможем (вроде как) добраться до методов
    		self = null, // тут будет контекст
    		generateGetter = function(fnc){ // это геттер
    			return function(){ // геттер возвращает функцию
    					return function(){ // которая при вызове возвращает
    							// результат применения соответствующего метода с нужным контекстом
    							return _utils[fnc].apply(self, arguments);
    						};
    				};
    		};
    
    	for(var prop in _utils){  // смотрим все методы _utils
    		if(_utils.hasOwnProperty(prop)){
    			// и назначаем для них геттеры для нашего фронтэнд объекта
    			utils.__defineGetter__(prop, generateGetter(prop));
    		}
    	}
    
    	// Геттер на String.prototype, который вернет наш презентационный объект
    	// Когда кому-нибудь захочется обратиться к какому-нибудь методу этого объекта,
    	// обьявленному в _utils, он попадет на геттер
    	String.prototype.__defineGetter__('utils', function(){
    		self = this;
    		return utils;
    	});
    })();
    
    // Пример
    console.log('Hello'.utils.append(' World'));
    console.log('Hello'.utils.append(' World')
                       .utils.append('!'));
    (протестировано в Опере и Node.js)


    Как видно, здесь активно используются геттеры, которые работают (вроде как) во всех современных браузерах, за исключением всего семейства IE.
    Но самая большая печаль — ужасная неоптимальность этого кода. Вы только посмотрите на 3 (!!!) вложенных функции. И это я еще применил грязный хак с кешированием this в переменной self, дабы не создавать новых объектов.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Посоветуйте книгу по программированию

    soks
    soks @soks
    Многие сходятся во мнении, что лучшая книга Дейтел. Как программировать на C++. Но по моему мнению однозначно лучший Шилдт. Искусство программирования на C++.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Постоянное соединение в MySQL и memcache?

    maxout
    Максим @maxout
    1. используют старые
    2. да, прирост есть. ровно на то количество времени, которое тратится на mysql_connnect + mysql_select_db + «set names» (или что вы там ещё решите выполнять после каждого соединения)
    3. плюс один — скорость.
    минусы:
    1. нет возможности принудительно закрыть соединение.
    2. за счёт сохранения ненужных в данный момент соединений отжирается память mysql-сервера.
    3. по звершении работы скрипта не снимается LOCK с таблиц и не уничтожаются TEMPORARY таблицы.
    4. нужно отдельно следить за mysql server has gone away =)
    5. апачевский mod_php криво работает с pconnect'ами. ну, то есть, само по себе это работает так как и должно, и с точки зрения апача не криво. просто ломается сама логика pconnect'ов: на новый запрос спавнится новый воркер, который о персистентном соединении соседа не знает, и открывает новое, слегка усиливая масштабы проблемы из пункта два.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как называется всплывающее уведомление в верхнем правом углу хабра?

    sajgak
    sajgak @sajgak
    такая вещь есть во всех стандартных сборках LiveStreet. Есть отдельные реализации к примеру на jquery например stanlemon.net/projects/jgrowl.html
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
Оценили как «Нравится»
Самые активные сегодня
  • NikFaraday
    Nik Faraday
    • 6 ответов
    • 1 вопрос
  • CityCat4
    CityCat4
    • 5 ответов
    • 0 вопросов
  • mayton2019
    • 5 ответов
    • 0 вопросов
  • SilenceOfWinter
    Антон Шаманов
    • 5 ответов
    • 0 вопросов
  • DevMan
    DevMan
    • 5 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации