Как стать автором
Обновить

Комментарии 88

Спасибо за ДвануляР (: в избранное!
На здоровье!:)
На здоровье! :)
черт, даже защиту от беконечного перенаправления сделали :)
где?
Chrome написал, что ссылка не работает,
Firefox был более информативен:
Redirect Loop
Firefox has detected that the server is redirecting the request for this address in a way that will never complete.

IE8 до сих пор пытается открыть — зациклился, бедняга
Правда ваша, есть такая проблема. Сейчас пофиксим. Спасибо :)
да это надуманная проблема :)
она может и надуманная, но все равно не по фэнь-шую, значит надо исправить :)
значит нету
в опере белая страница
как на счёт:
возможности задания своего имени любой длины и времени жизни ссылки
открытого API
защиты от Redirect Loop ссылки на себя: 00r.ru/86
?
1. задание имени произвольной длинны не вписывается в концепцию предельного минимализма, время жизни ссылок — тоже лишнее поле в форме :)
2. API можно, приведите примеры для чего это будет использоваться?
3. в процессе.
Спасибо! :)
ну, например как на lmgtfy.com
зачем — да просто, чтобы было :)
для защиты от злоупотреблений можно ограничение сделать на количество запросов с одного IP в единицу времени

API простой: api.00r.ru/?url=someurl возвращает короткую ссылку

свои имена я использую частенько на tinyurl, если сокращаю длинные запросы к гуглокартам, например, 00r.ru/дорога_к_дому выглядит лучше, чем 00r.ru/86
Ну тогда видимо стоит говорить о двух вариантах интерфейса — минималистичного и с продвинутыми возможностями. Если поборю свою лень — сделаю :)
НЛО прилетело и опубликовало эту надпись здесь
ОК, смотрю что к чему :)
Классный сервис, более короткое имя, наверное, уже не придумают.
Но вот их 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 и т.д., т.е. идет перебор комбинаций начиная с базовой разрядности, с постепенным увеличением разрядности.
На двануляре используется алгоритм второго типа, причем самый простой вариант — простейший счетчик. Вариант тупиковый, поэтому буду менять :)
Это понятно, что рано или поздно надо будет добавлять разряды, либо выбрасывать старые записи. Но вот как понять фразу:
we offer a 100% guarantee that our domain name will never get longer.
они никогда не перейдут на домен na.nu, навсегда остануться на однобуквенном )
проблему с бесконечным редиректом пофиксил :)
спасибо всем кто указал на ошибку!
без http:// не работает :(
так задумано :)
минусуете-то за что?
без http:// не работает, потому что ситуация когда нужно укоротить URL без указания протокола — надумана.
Вы ведь как поступаете, когда вам нужно укоротить URL? Копируете из адресной строки браузера, ftp-клиента, свойств страницы/картинки _полный_URL_, и вставляете его в поле ввода ссылкоукоротительного сервиса.
Ситуации когда нужно вбить URL руками мне видятся несовсем корректными. Для чего? Выдать отдин сайт за другой?

Возможно я чего-то недопонимаю, так объясните мне, вместо того чтобы молча минусовать :)
Peace!
а если я захочу magnet-url укоротить, например? (для того же хабра, например! тут парсер их съедает :))
если честно, то я попробовал руками ввести, поэтому в этой ситуации мне не помог сервис
и без www
00r.ru/567 — обратите внимание, в адресе на который вас средиректит нет www :)
Я имел ввиду, ввожу habrahabr.ru в инпут, а мне выдает «Недопустимый URL».
Не очень понятно почему он недопустимый. Пишите тогда «Вы ввели неверный формат URL. Правленый формат www.sitename.com»
Только без ошибок, не как в моем комментарии :)
принимается, сейчас добавлю описание правильного формата :)
Ваш короткий url: 00r.ru/168
:)
для защиты от бесконечного редиректа, попытка укоротить адрес вида 00r.ru/nnn будет приводить к редиректу на домашнюю страницу :)
спасибо за оценку! :)
задванолил хабр… получил 223-й урл, задванолил его, получил 230-й кажется, потом его задванолил, получил… 231-й ) зашел по 231-му… попал на двануляр =(
почему меня не перевели по всем ссылкам?!
см. выше, защита от redirect loop
реальную необходимость редиректить как вы описали я не смог себе представить, ну и заблокировал, от греха подальше :)
я чуть раньше написал.

а почему это должно привести к ошибке? =)
мое дело предложить.
вообще как то не круто, что используете счетчик по цифрам только, это через какое то время будет что то вроде 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/Шестнадцатеричная_система_счисления
слишком простое решение, и не сильно то укоротит жизнь коротким ссылкам.
в английском алфавите 26 букв (ведь так) + строчные и прописные + 10 цифр = получаем 62 символа из которых можно запросто сделать 62-ричную систему счисления.

ru.wikipedia.org/wiki/Система_счисления
про ту часть короткого URL, что находится после 00r.ru/ сейчас думаю, как только в голову придет элегантное решение — реализую :)
а чем вам использование своей системы счисления не элегантное решение?
сложность алгоритма :) хотя первое о чем я подумал, это действительно была модификация одной из систем счисления :)
СЛОЖНОСТЬ АЛГОРИТМА?!
да, я считаю такой алго сложным, разубедите меня :)
Не слышали про функции dechex() и hexdec() :)?
На всякий случай: сервис написан на PHP, что можно видеть по заголовкам ответа :)
да, на PHP, да, заголовки, что в этом криминального? :)
речь ведь не о шестнадцатиричном представлении идентификатора, а о написании алго _собственной_системы_счисления_
алгоритм собственной системы счисления я считаю достаточно сложным :)
На С это проще простого — Вам всё равно максимум понадобятся 64битные идентификаторы:

long long id = 7391749137491, tmp = 0 , tmp2 = 0 ;
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(= 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(= 0 ; i<l/2; i++)
{
tmpchar = result[l-i];
result[l-i] = result[i];
result[i] = tmpchar;
}
(подсвечено с помощью highlight.hohli.com/)

Я мог чуток напутать где-нибудь, но алгоритм должен быть верным :).

P.S. Хабрапарсер мог съесть нули, я вроде бы их везде, где мог, восстановил, но может быть я где-то недоглядел.

P.P.S. Обратное преобразование, я думаю, тривиально, так что описывать не буду, ок :)?
В основном цикле надо писать не

result[i] = cur_digit;


А

result[i] = alphabet[cur_digit];


Я чуток подзабыл, что задача не просто перевести из одной системы исчисления в другую, но и сделать это с использованием алфавита :).
спасибо за пример! :)
Да, здесь бы как раз Ваш сервис позволил бы чуть-чуть сократить эту ссылку :), чтобы она не вызывала горизонтального скролла у некоторых людей…
Ещё одна поправка:

cur_digit %= ALPH_SIZE;


должно быть заменено на

cur_digit = tmp%ALPH_SIZE;
Любой школьный учебник по информатике должен подойти, вообще-то…
пример в студию пожалуйста, только не реализацию двоичной и шестнадцатиричной систем :)
Двоичная и шестнадцатеричная ничем не отличаются от других. Вы лучше признайтесь, что это стеб, потому что иначе Вы меня просто шокируете… это такой позор, что я не понимаю, как у Вас руки поворачиваются ставить смайлики :)

<?php
 
function convert_to_base($num, $base) {
 
  $digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  $result = "";
 
  while ($num > ) {
     $result = $digits[$num % $base] . $result;
     $num = floor($num / $base);
  }
 
  return $result;
}
 
echo convert_to_base(197716) . "<br>";
echo convert_to_base(19772) . "<br>";
echo convert_to_base(19775) . "<br>";
echo convert_to_base(197762) . "<br>";
 
?>
 


Ну вот. Первый аргумент — число, которое надо перевести; второй аргумент — основание системы счисления, в которую переводим. Примеры с 2 и 16 специально для Вас, чтобы могли свериться с калькулятором. Пятиричная и 62-ричная — в качестве бонуса.

мда, нули съедаются подсвечивалкой.
в общем, там while ($num > 0), уже догадались, наверное.
О! Мне так стыдно :) А если серьезно, спасибо за реальный пример кода! Думаю не только мне он пригнодится
Мне нравится Ваш позитивный подход.
Обратное преобразование сами напишете? :)
вот прямое и обратное преобразование 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 символы.
У меня одного эти цифры в домене вызывают улыбку и странные ассоциации?
не только у вас, используемая на двануляре технология у наших англоязычных друзей дословно называется long URL cloacking

так что отношение к туалетной тематике имя домена имеет :)

для тех кто еще не догадался о чем речь: wiki вам в помощь
не таботает, при вводе любого адреса мишет о недоступном урле
Opera 10 релизная.
приведите пожалуйста пример неработающего адреса, я проверю.
вообще-то должно работать
из известных проблем — кириллица в урле, т.е. если в один из параметров GET-запроса будет содержать кириллицу, скрипт сочтет такой URL невалидным.
В любом случае, дайте пример url'а :)
прочитал выше, понял что без http не работает.
Еще касяк, ну не совсем касяк, а недоработка.
Внес адрес, получил ссылку, жму в опере обновление странички и ссылка вносится еще раз. т.е. надо писать в куку юзеру метку о том что он только что внес урл и не давать это сделать обновлением странички. Ну или после внесения данных перекидывать на другую страничку, чтобы данные POST уходили.
OK, спасибо что обнаружили. Куку думаю проще всего поставить
да, точно, не подумал что [] могут использоваться в URL. Спсибо!
удачи.
Обязательно сделайте букмарклет для своего сервиса :) Я, например, всегда только так использую bit.ly, может, и Вашим так будут пользоваться? :)
забавно получилось :)
Недавно сделал аналогичную поделку — 2sms.ru, есть API, авторизация через OpenID для тех кто хочет свои линки потом править, ссылки вида ключ.2sms.ru или 2sms.ru/ключ, статистика ну и там ещё по мелочам.
Поздравляю! Так напишите об этом в своем блоге, уверен людям будет интересно :)
Ну я может решил к вашей славе примазаться :)
Попытка не увенчалась успехом :)
Это можно сказать только если в карму насрут :)
Где то там промелькнуло — более короткий сервис уже не придумать — фигушки)) где то ещё двухсимвольники есть, которые не используются.

а вообще — забавно. Спасибо что используете трёхсимвольник по назначению — я вот своему ничего, кроме Jabber сервака придумать не могу…
Неплохо было бы еще увидеть историю сгенерированных мною коротких ссылок.
Спасибо, пользуюсь. Только например на lovejournal.eu/_f/mp3/!mojo/Luomo — Tessio (Butch Sunrise Remix).mp3 говорит не допустимый формат, хотя он работает нормально.
И извини не могу поднять твой -1 ☺
Хабр пожирает все http:// Жадная рекурсия?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.