Comments 88
Спасибо за ДвануляР (: в избранное!
На здоровье! :)
черт, даже защиту от беконечного перенаправления сделали :)
1. задание имени произвольной длинны не вписывается в концепцию предельного минимализма, время жизни ссылок — тоже лишнее поле в форме :)
2. API можно, приведите примеры для чего это будет использоваться?
3. в процессе.
Спасибо! :)
2. API можно, приведите примеры для чего это будет использоваться?
3. в процессе.
Спасибо! :)
ну, например как на lmgtfy.com
зачем — да просто, чтобы было :)
для защиты от злоупотреблений можно ограничение сделать на количество запросов с одного IP в единицу времени
API простой: api.00r.ru/?url=someurl возвращает короткую ссылку
свои имена я использую частенько на tinyurl, если сокращаю длинные запросы к гуглокартам, например, 00r.ru/дорога_к_дому выглядит лучше, чем 00r.ru/86
зачем — да просто, чтобы было :)
для защиты от злоупотреблений можно ограничение сделать на количество запросов с одного IP в единицу времени
API простой: api.00r.ru/?url=someurl возвращает короткую ссылку
свои имена я использую частенько на tinyurl, если сокращаю длинные запросы к гуглокартам, например, 00r.ru/дорога_к_дому выглядит лучше, чем 00r.ru/86
Хочу API как здесь: u.nu/unu-api
ОК, смотрю что к чему :)
Классный сервис, более короткое имя, наверное, уже не придумают.
Но вот их FAQ просто убил, ощущение, что написано для американцев:
Прорывная технология трехбуквенного домена на 75% короче, чем ближайшие имитации!!! :)
Но гарантия неудлинения доменного имени в будущем просто убила наповал :)
Кто-нибудь сможет пояснить как доменное имя может удлиниться, и как этому подвержены остальные сокращалки адресов? :)
Но вот их FAQ просто убил, ощущение, что написано для американцев:
How much shorter are your URLs than the competion’s?
u.nu’s ground-breaking 3-letter domain technology is 25% shorter than its closest imitators, which have 4-letter domains, and it’s fully 70% shorter than arch-rival tinyurl.com’s rambling Dostoyevskian screed of a domain name. Unlike all those other sites, which make no such assurances, we offer a 100% guarantee that our domain name will never get longer. Add those percentages up and you get 195%, which is quite a lot.
Прорывная технология трехбуквенного домена на 75% короче, чем ближайшие имитации!!! :)
Но гарантия неудлинения доменного имени в будущем просто убила наповал :)
Кто-нибудь сможет пояснить как доменное имя может удлиниться, и как этому подвержены остальные сокращалки адресов? :)
речь идет видимо о гарантии неудлинения части урл после имени домена :)
А все остальные видимо удлиняют? :)
Тогда мне непонятно как они работают — ведь смысл как раз в неизменности короткого адреса!
Тогда мне непонятно как они работают — ведь смысл как раз в неизменности короткого адреса!
ну два типа встречал, те которые манипулируют с неизменной длины идентификатором типа АNbNcN, и те что используют идентификатор длина которого постепенно увеличивается — nn — > An — > nA ->nnn -> nnA -> nAA и т.д., т.е. идет перебор комбинаций начиная с базовой разрядности, с постепенным увеличением разрядности.
На двануляре используется алгоритм второго типа, причем самый простой вариант — простейший счетчик. Вариант тупиковый, поэтому буду менять :)
На двануляре используется алгоритм второго типа, причем самый простой вариант — простейший счетчик. Вариант тупиковый, поэтому буду менять :)
проблему с бесконечным редиректом пофиксил :)
спасибо всем кто указал на ошибку!
спасибо всем кто указал на ошибку!
без http:// не работает :(
так задумано :)
минусуете-то за что?
без http:// не работает, потому что ситуация когда нужно укоротить URL без указания протокола — надумана.
Вы ведь как поступаете, когда вам нужно укоротить URL? Копируете из адресной строки браузера, ftp-клиента, свойств страницы/картинки _полный_URL_, и вставляете его в поле ввода ссылкоукоротительного сервиса.
Ситуации когда нужно вбить URL руками мне видятся несовсем корректными. Для чего? Выдать отдин сайт за другой?
Возможно я чего-то недопонимаю, так объясните мне, вместо того чтобы молча минусовать :)
Peace!
без http:// не работает, потому что ситуация когда нужно укоротить URL без указания протокола — надумана.
Вы ведь как поступаете, когда вам нужно укоротить URL? Копируете из адресной строки браузера, ftp-клиента, свойств страницы/картинки _полный_URL_, и вставляете его в поле ввода ссылкоукоротительного сервиса.
Ситуации когда нужно вбить URL руками мне видятся несовсем корректными. Для чего? Выдать отдин сайт за другой?
Возможно я чего-то недопонимаю, так объясните мне, вместо того чтобы молча минусовать :)
Peace!
а если я захочу magnet-url укоротить, например? (для того же хабра, например! тут парсер их съедает :))
если честно, то я попробовал руками ввести, поэтому в этой ситуации мне не помог сервис
и без www
00r.ru/567 — обратите внимание, в адресе на который вас средиректит нет www :)
Я имел ввиду, ввожу habrahabr.ru в инпут, а мне выдает «Недопустимый URL».
Не очень понятно почему он недопустимый. Пишите тогда «Вы ввели неверный формат URL. Правленый формат www.sitename.com»
Не очень понятно почему он недопустимый. Пишите тогда «Вы ввели неверный формат URL. Правленый формат www.sitename.com»
хм.
Ваш короткий url: 00r.ru/168
:)
:)
для защиты от бесконечного редиректа, попытка укоротить адрес вида 00r.ru/nnn будет приводить к редиректу на домашнюю страницу :)
спасибо за оценку! :)
спасибо за оценку! :)
задванолил хабр… получил 223-й урл, задванолил его, получил 230-й кажется, потом его задванолил, получил… 231-й ) зашел по 231-му… попал на двануляр =(
почему меня не перевели по всем ссылкам?!
почему меня не перевели по всем ссылкам?!
вообще как то не круто, что используете счетчик по цифрам только, это через какое то время будет что то вроде 00r.ru/168232? А еще же есть буквы :)
если использовать еще и буквы, тогда лучше вообще использовать 16ти ричную систему исчисления. Еще короче будет ведь :).
A20D14= (10*16^5)+(2*16^4)+(0*16^3)+(13*16^2)+(1*16^1)+(4*16^0)=10620180
вместо 8и символов получаем 6ть :)
ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления
A20D14= (10*16^5)+(2*16^4)+(0*16^3)+(13*16^2)+(1*16^1)+(4*16^0)=10620180
вместо 8и символов получаем 6ть :)
ru.wikipedia.org/wiki/Шестнадцатеричная_система_счисления
слишком простое решение, и не сильно то укоротит жизнь коротким ссылкам.
в английском алфавите 26 букв (ведь так) + строчные и прописные + 10 цифр = получаем 62 символа из которых можно запросто сделать 62-ричную систему счисления.
ru.wikipedia.org/wiki/Система_счисления
в английском алфавите 26 букв (ведь так) + строчные и прописные + 10 цифр = получаем 62 символа из которых можно запросто сделать 62-ричную систему счисления.
ru.wikipedia.org/wiki/Система_счисления
а чем вам использование своей системы счисления не элегантное решение?
сложность алгоритма :) хотя первое о чем я подумал, это действительно была модификация одной из систем счисления :)
да, я считаю такой алго сложным, разубедите меня :)
Не слышали про функции dechex() и hexdec() :)?
На всякий случай: сервис написан на PHP, что можно видеть по заголовкам ответа :)
речь ведь не о шестнадцатиричном представлении идентификатора, а о написании алго _собственной_системы_счисления_
алгоритм собственной системы счисления я считаю достаточно сложным :)
алгоритм собственной системы счисления я считаю достаточно сложным :)
На С это проще простого — Вам всё равно максимум понадобятся 64битные идентификаторы:
Я мог чуток напутать где-нибудь, но алгоритм должен быть верным :).
P.S. Хабрапарсер мог съесть нули, я вроде бы их везде, где мог, восстановил, но может быть я где-то недоглядел.
P.P.S. Обратное преобразование, я думаю, тривиально, так что описывать не буду, ок :)?
long long id = 7391749137491, tmp = 0 , tmp2 = 0 ;(подсвечено с помощью highlight.hohli.com/)
char curr_digit = 0 ;
char alphabet[] = { 'a', ..., 'z', 'A', ..., 'Z', '0', ..., '9' }; // 62 символа
#define ALPH_SIZE 62
#define ALPH_MAXLEN 12 // посчитайте сами log_62(2^64)
char result[ALPH_MAXLEN+1]; // лишний байт на хранение 0 символа
int i = 0 ;
tmp = id;
for(i = 0 ; i < ALPH_MAXLEN; i++)
{
cur_digit %= ALPH_SIZE;
result[i] = cur_digit;
tmp /= ALPH_SIZE;
if(!tmp) break;
}
result[i+1] = 0 ;
// далее нужно перевернуть строку
int l = i; // длину строки мы знаем
char tmpchar = 0 ;
for(i = 0 ; i<l/2; i++)
{
tmpchar = result[l-i];
result[l-i] = result[i];
result[i] = tmpchar;
}
Я мог чуток напутать где-нибудь, но алгоритм должен быть верным :).
P.S. Хабрапарсер мог съесть нули, я вроде бы их везде, где мог, восстановил, но может быть я где-то недоглядел.
P.P.S. Обратное преобразование, я думаю, тривиально, так что описывать не буду, ок :)?
В основном цикле надо писать не
А
Я чуток подзабыл, что задача не просто перевести из одной системы исчисления в другую, но и сделать это с использованием алфавита :).
result[i] = cur_digit;
А
result[i] = alphabet[cur_digit];
Я чуток подзабыл, что задача не просто перевести из одной системы исчисления в другую, но и сделать это с использованием алфавита :).
спасибо за пример! :)
Собственно, смотрите более подробно вот тут:
ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F#.D0.9F.D0.B5.D1.80.D0.B5.D1.85.D0.BE.D0.B4_.D0.BA_.D0.B4.D1.80.D1.83.D0.B3.D0.BE.D0.BC.D1.83_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8E
ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B7%D0%B8%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%81%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F#.D0.9F.D0.B5.D1.80.D0.B5.D1.85.D0.BE.D0.B4_.D0.BA_.D0.B4.D1.80.D1.83.D0.B3.D0.BE.D0.BC.D1.83_.D0.BE.D1.81.D0.BD.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8E
Ещё одна поправка:
должно быть заменено на
cur_digit %= ALPH_SIZE;
должно быть заменено на
cur_digit = tmp%ALPH_SIZE;
пример в студию пожалуйста, только не реализацию двоичной и шестнадцатиричной систем :)
О! Мне так стыдно :) А если серьезно, спасибо за реальный пример кода! Думаю не только мне он пригнодится
вот прямое и обратное преобразование base62 (нашел в примерах в учебнике PHP:
function fbc( $num, $base=62, $index=false ) {
if (! $base ) {
$base = strlen( $index );
} else if (! $index ) {
$index = substr( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" , ,$base );
}
$out = "";
for ( $t = floor( log10( $num ) / log10( $base ) ); $t >= ; $t-- ) {
$a = floor( $num / pow( $base, $t ) );
$out = $out . substr( $index, $a, 1 );
$num = $num - ( $a * pow( $base, $t ) );
}
return $out;
}
function cbf( $num, $base=62, $index=false ) {
if (! $base ) {
$base = strlen( $index );
} else if (! $index ) {
$index = substr( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", , $base );
}
$out = ;
$len = strlen( $num ) - 1;
for ( $t = ; $t <= $len; $t++ ) {
$out = $out + strpos( $index, substr( $num, $t, 1 ) ) * pow( $base, $len - $t );
}
return $out;
}
> 62-ричную систему счисления.
Зачем такое извращение?
Добавьте точку и подчеркивание или дефис и будет нормальная 64-ричная.
А там уже до UUencode рукой подать. Но опять же напрямую использовать UU не надо — там есть плохие для URL символы.
Зачем такое извращение?
Добавьте точку и подчеркивание или дефис и будет нормальная 64-ричная.
А там уже до UUencode рукой подать. Но опять же напрямую использовать UU не надо — там есть плохие для URL символы.
У меня одного эти цифры в домене вызывают улыбку и странные ассоциации?
не только у вас, используемая на двануляре технология у наших англоязычных друзей дословно называется long URL cloacking
так что отношение к туалетной тематике имя домена имеет :)
для тех кто еще не догадался о чем речь: wiki вам в помощь
так что отношение к туалетной тематике имя домена имеет :)
для тех кто еще не догадался о чем речь: wiki вам в помощь
не таботает, при вводе любого адреса мишет о недоступном урле
Opera 10 релизная.
Opera 10 релизная.
приведите пожалуйста пример неработающего адреса, я проверю.
вообще-то должно работать
из известных проблем — кириллица в урле, т.е. если в один из параметров GET-запроса будет содержать кириллицу, скрипт сочтет такой URL невалидным.
В любом случае, дайте пример url'а :)
вообще-то должно работать
из известных проблем — кириллица в урле, т.е. если в один из параметров GET-запроса будет содержать кириллицу, скрипт сочтет такой URL невалидным.
В любом случае, дайте пример url'а :)
Еще касяк, ну не совсем касяк, а недоработка.
Внес адрес, получил ссылку, жму в опере обновление странички и ссылка вносится еще раз. т.е. надо писать в куку юзеру метку о том что он только что внес урл и не давать это сделать обновлением странички. Ну или после внесения данных перекидывать на другую страничку, чтобы данные POST уходили.
Внес адрес, получил ссылку, жму в опере обновление странички и ссылка вносится еще раз. т.е. надо писать в куку юзеру метку о том что он только что внес урл и не давать это сделать обновлением странички. Ну или после внесения данных перекидывать на другую страничку, чтобы данные POST уходили.
translate.google.com/translate_t#en|ru|
Недопустимый URL.
Недопустимый URL.
Обязательно сделайте букмарклет для своего сервиса :) Я, например, всегда только так использую bit.ly, может, и Вашим так будут пользоваться? :)
Где то там промелькнуло — более короткий сервис уже не придумать — фигушки)) где то ещё двухсимвольники есть, которые не используются.
а вообще — забавно. Спасибо что используете трёхсимвольник по назначению — я вот своему ничего, кроме Jabber сервака придумать не могу…
а вообще — забавно. Спасибо что используете трёхсимвольник по назначению — я вот своему ничего, кроме Jabber сервака придумать не могу…
Неплохо было бы еще увидеть историю сгенерированных мною коротких ссылок.
Спасибо, пользуюсь. Только например на lovejournal.eu/_f/mp3/!mojo/Luomo — Tessio (Butch Sunrise Remix).mp3 говорит не допустимый формат, хотя он работает нормально.
И извини не могу поднять твой -1 ☺
И извини не могу поднять твой -1 ☺
Недопустимый формат URL.
Правильный: домен/необязательные_параметры
Правильный: домен/необязательные_параметры
Sign up to leave a comment.
Нашел применение домену-трехсимвольнику — сервис коротких URL