Linux за българи: Форуми

Програмиране => Конкурс bash-майсторът => Темата е започната от: zeridon в Dec 11, 2007, 21:21



Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: zeridon в Dec 11, 2007, 21:21
Сортиране на музика

Понеже сме били много сериозни фенове на дос 4.0 имаме прилино голяма колекция от файлове по 10тина файла в папка. Преди две седмици сте си купили чисто нов огромен диск, инсталирали сте си любимата система и сега искате да си сортирате музиката. Хубавото е че тя е много добре описана с тагове.
Искаме от директорията в която са нашите дублиращи се файлове по 10тина в папка искаме да ги подредим в красива структура

изходна структура на файловете
source/
source/dir1/
source/dir1/file012.mp3

целева структура
dest/
dest/Artist 1/
dest/Artist 1/Good Album/
dest/Artist 1/Good Album/Artist 1 - Very Ugly Song.mp3

Решението на задачата подлежи на тестване със тестов комплект файлове
тестов комплект: http://imbuza.no-ip.org/~zeridon/bashmajstora3/mp3testset.tar.gz
подис: http://imbuza.no-ip.org/~zeridon/bashmajstora3/mp3testset.tar.gz.asc
Референтно решение: http://imbuza.no-ip.org/~zeridon/bashmajstora3/mp3organizer.sh





Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Dec 12, 2007, 16:17
Писна ми вече - сигурно има бъгчета, ама ...
Изненадааа !!!
Този път не ползвам скриптов език :p



сорса





Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: romeo_ninov в Dec 12, 2007, 17:26
Цитат
Писна ми вече - сигурно има бъгчета, ама ...
Изненадааа !!!
Този път не ползвам скриптов език :P


сорса ($2)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Dec 12, 2007, 17:40
Бях забравил да мина към паметта, а не да седя в стека :)
Че с тая рекурсия ... точно за това ще се хванете :)

Хех :) не бях писал на С от толкоз времеее... различно е ;)





Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Dec 12, 2007, 18:27
Ако задачата беше да се създаде файлова система, която да представя музиката така, бих участвал ;) Сегашната задача просто не е достатъчно интересна :)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Dec 13, 2007, 01:26
Perl rulzzz :)

Perl сорс


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: zeridon в Dec 13, 2007, 10:45
Ами tarator действай. И на мен ще ми е интересно да видя решението.


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: gat3way в Dec 13, 2007, 12:56
Сигурно ще пропусна, имам едни доволно отвратителни занимания на главата :(


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Dec 13, 2007, 13:56
Малки поправки в скрипта на zeridon. Има голям проблем с шпациите в имената на файловете + проверка за ID3 таг:

Код
GeSHi (Bash):
  1. #!/bin/bash
  2. #
  3. # simple script for organizing mp3 file
  4. # made for BASH Maistora contest
  5. #
  6. # author: vvitkov
  7. # version: 0.1
  8. # date: 20.09.2007
  9. # contact: http://www.getoto.net/az/
  10. # license: CC NC-BY-SA v3.0
  11.  
  12. # $1 source dir (default source)
  13. # $2 destination dir (default dest)
  14. # organization pattern dest/srtist/album/artist - song
  15.  
  16. if [ "$1" ]; then
  17.        SOURCE=$1
  18. else
  19.        SOURCE="source"
  20. fi
  21.  
  22. if [ "$2" ]; then
  23.        DEST=$2
  24. else
  25.        DEST="dest"
  26. fi
  27.  
  28. find $SOURCE -type f -print0 | while read -d '' -r FILE;
  29. do
  30.        if [ "`id3 -l "$FILE" | grep 'No ID3 tag'`" ]; then
  31.                echo "No ID3 tag found. Skipping file $FILE";
  32.        else
  33.                ARTIST=`id3 -l "$FILE" | grep Artist | cut -d: -f3 | cut -c 2-34 | tr -s [:space:] | sed 's/^\ //' | sed 's/\ $//'`
  34.                ALBUM=`id3 -l "$FILE" | grep Album | cut -d: -f2 | cut -c 2-34 | tr -s [:space:] | sed 's/^\ //' | sed 's/\ Y$//'`
  35.                SONG=`id3 -l "$FILE" | grep Title | cut -d: -f2 | cut -c 2-34 | tr -s [:space:] | sed 's/^\ //' | sed 's/\ A$//'`
  36.                mkdir -p "$DEST/$ARTIST/$ALBUM"
  37.                FINAL="$DEST/$ARTIST/$ALBUM/$ARTIST - $SONG.mp3"
  38.                #       echo $FINAL
  39.                echo "Moving: $FILE -> $FINAL" >> mp3organizer.log
  40.                mv -iv "$FILE" "$FINAL"
  41.        fi
  42. done
  43.  

:)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: radoulov в Dec 14, 2007, 13:44
C Awk:

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. shell="/bin/bash"
  4. source="$1"
  5. dest="$2"
  6. ext="$3"
  7.  
  8. export shell source dest ext
  9.  
  10. id3 -l "${source:=source}"/*/*."${ext:=mp3}"|awk 'NR%4 == 1 {
  11.        fn = substr($0, 1, length-1)
  12.        next
  13. }
  14. NR%4 == 2 {
  15.        sn = $2
  16.        an = $4
  17.        next
  18. }
  19. NR%4 == 3 {
  20.        aln = $2
  21.        nd = sprintf("%s/%s/%s/", dest, an, aln)
  22.        printf "[ -d \"%s\" ]||mkdir -p \"%s\"\n", nd, nd
  23.        printf "mv \"%s\" \"%s%s - %s.%s\"\n", fn, nd, an, sn, e
  24.        next
  25. }' FS="  : |   *|: " dest="${dest:=dest}" e="${ext:=mp3}"|"${shell:=/bin/bash}"
  26.  
  27. exit




<!--EDIT|radoulov|Дек. 14 2007,14:46-->


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Dec 15, 2007, 00:09
Кода стана твърде дълъг, все пак ще се опитам да го постна. Използва libid3tag и libspfs от проекта npfs на sourceforge (писан от колега-булгар).

Програмата се пуска:

mp3fs srcdir

Остава в background и чака на порт 1234 (може да се промени с опция -p). Файловата система се монтира:

mount -t 9p 127.0.0.1 /mnt/mp3 -o port=1234

Код
GeSHi (C):
  1. #include <stdarg.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <sys/stat.h>
  7. #include <sys/types.h>
  8. #include <fcntl.h>
  9. #include <time.h>
  10. #include <errno.h>
  11. #include <dirent.h>
  12. #include <id3tag.h>
  13. #include <spfs.h>
  14.  
  15. Spfile *createfile(Spfile *parent, char *name, u32 mode, void *ops, void *aux);
  16. Spfile *findfile(Spfile *parent, char *name);
  17. Spfile *dirfirst(Spfile *dir);
  18. Spfile *dirnext(Spfile *dir, Spfile *prevchild);
  19. int fileread(Spfilefid *, u64, u32, u8 *, Spreq *);
  20. int fileopenfid(Spfilefid *);
  21. void fileclosefid(Spfilefid *);
  22.  
  23. Spdirops dops = {
  24. .first = dirfirst,
  25. .next = dirnext,
  26. };
  27.  
  28. Spfileops fops = {
  29. .read = fileread,
  30. .openfid = fileopenfid,
  31. .closefid = fileclosefid,
  32. };
  33.  
  34. Spsrv *srv;
  35. Spfile *root;
  36. Spuser *user;
  37. int nextid;
  38.  
  39. void
  40. sysfatal(char *fmt, ...)
  41. {
  42. va_list ap;
  43.  
  44. va_start(ap, fmt);
  45. vfprintf(stderr, fmt, ap);
  46. va_end(ap);
  47. exit(1);
  48. }
  49.  
  50. char *
  51. getid(struct id3_tag *tag, char *id)
  52. {
  53. struct id3_frame *frm;
  54. id3_ucs4_t const *str;
  55. char *ret;
  56.  
  57. frm = id3_tag_findframe(tag, id, 0);
  58. if (!frm)
  59. return NULL;
  60.  
  61. if (strcmp(id, ID3_FRAME_COMMENT) == 0)
  62. str = id3_field_getfullstring(&frm->fields[3]);
  63. else
  64. str = id3_field_getstrings(&frm->fields[1], 0);
  65.  
  66. if (!str)
  67. return NULL;
  68.  
  69. ret = id3_ucs4_utf8duplicate(str);
  70. return ret;
  71. }
  72.  
  73. char *
  74. gettitle(struct id3_tag *tag)
  75. {
  76. return getid(tag, ID3_FRAME_TITLE);
  77. }
  78.  
  79. char *
  80. getartist(struct id3_tag *tag)
  81. {
  82. return getid(tag, ID3_FRAME_ARTIST);
  83. }
  84.  
  85. char *
  86. getalbum(struct id3_tag *tag)
  87. {
  88. return getid(tag, ID3_FRAME_ALBUM);
  89. }
  90.  
  91. int
  92. process(char *fname)
  93. {
  94. char *fn, *artist, *album, *title;
  95. struct stat st;
  96. DIR *d;
  97. struct dirent *de;
  98. struct id3_file *f;
  99. struct id3_tag *t;
  100. Spfile *artdir, *albdir;
  101.  
  102. if (stat(fname, &st) < 0)
  103. sysfatal("cannot stat %s", fname);
  104.  
  105. if (S_ISDIR(st.st_mode)) {
  106. d = opendir(fname);
  107. if (!d)
  108. sysfatal("cannot open directory %s", fname);
  109.  
  110. while ((de = readdir(d)) != NULL) {
  111. if (de->d_name[0] == '.' && (de->d_name[1] == '.' ||
  112. de->d_name[1] == '\0'))
  113. continue;
  114.  
  115. fn = malloc(strlen(fname) + strlen(de->d_name) + 2);
  116. sprintf(fn, "%s/%s", fname, de->d_name);
  117. process(fn);
  118. free(fn);
  119. }
  120. closedir(d);
  121. }
  122.  
  123. if (!S_ISREG(st.st_mode))
  124. return 0;
  125.  
  126. f = id3_file_open(fname, ID3_FILE_MODE_READONLY);
  127. if (!f)
  128. sysfatal("cannot open file %s", fname);
  129.  
  130. t = id3_file_tag(f);
  131. if (!t)
  132. sysfatal("cannot get tag");
  133.  
  134. artist = getartist(t);
  135. album = getalbum(t);
  136. title = gettitle(t);
  137.  
  138. if (!artist)
  139. artist = strdup("Unknown Artist");
  140.  
  141. artdir = findfile(root, artist);
  142. if (!artdir)
  143. artdir = createfile(root, artist, 0555 | Dmdir, &dops, NULL);
  144.  
  145. if (!album)
  146. album = strdup("Unknown Album");
  147.  
  148. albdir = findfile(artdir, album);
  149. if (!albdir)
  150. albdir = createfile(artdir, album, 0555 | Dmdir, &dops, NULL);
  151.  
  152. if (!title) {
  153. title = malloc(64);
  154. snprintf(title, 64, "Track%d", nextid);
  155. }
  156.  
  157. fprintf(stderr, "process %s\n", fname);
  158. createfile(albdir, title, 0444, &fops, strdup(fname));
  159. id3_file_close(f);
  160.  
  161. return 0;
  162. }
  163.  
  164. Spfile *
  165. findfile(Spfile *parent, char *name)
  166. {
  167. Spfile *f;
  168.  
  169. for(f = parent->dirfirst; f != NULL; f = f->next)
  170. if (strcmp(f->name, name) == 0)
  171. return f;
  172.  
  173. return NULL;
  174. }
  175.  
  176. Spfile *
  177. createfile(Spfile *parent, char *name, u32 mode, void *ops, void *aux)
  178. {
  179. Spfile *ret;
  180.  
  181. ret = spfile_alloc(parent, name, mode, nextid++, ops, aux);
  182. if (parent->dirlast) {
  183. parent->dirlast->next = ret;
  184. ret->prev = parent->dirlast;
  185. } else
  186. parent->dirfirst = ret;
  187.  
  188. parent->dirlast = ret;
  189. ret->atime = ret->mtime = time(NULL);
  190. ret->uid = ret->muid = user;
  191. ret->gid = user->dfltgroup;
  192. spfile_incref(ret);
  193. return ret;
  194. }
  195.  
  196. Spfile*
  197. dirfirst(Spfile *dir)
  198. {
  199. spfile_incref(dir->dirfirst);
  200. return dir->dirfirst;
  201. }
  202.  
  203. Spfile*
  204. dirnext(Spfile *dir, Spfile *prevchild)
  205. {
  206. spfile_incref(prevchild->next);
  207. return prevchild->next;
  208. }
  209.  
  210. int
  211. fileread(Spfilefid *fid, u64 offset, u32 count, u8 *data, Spreq *req)
  212. {
  213. int n, fd;
  214.  
  215. fd = (int) fid->aux;
  216. n = pread(fd, data, count, offset);
  217. if (n < 0)
  218. sp_uerror(errno);
  219.  
  220. return n;
  221. }
  222.  
  223. int
  224. fileopenfid(Spfilefid *fid)
  225. {
  226. int fd;
  227. char *fname;
  228. Spfile *f;
  229.  
  230. f = fid->file;
  231. fname = (char *) f->aux;
  232. fd = open(fname, O_RDONLY);
  233. if (fd < 0) {
  234. sp_uerror(errno);
  235. return 0;
  236. }
  237.  
  238. fid->aux = (void *) fd;
  239. return 1;
  240. }
  241.  
  242. void
  243. fileclosefid(Spfilefid *fid)
  244. {
  245. int fd;
  246.  
  247. fd = (int) fid->aux;
  248. close(fd);
  249. }
  250.  
  251. void
  252. usage(void)
  253. {
  254. fprintf(stderr, "mp3fs -d -p port srcdir\n");
  255. exit(1);
  256. }
  257.  
  258. int
  259. main(int argc, char *argv[])
  260. {
  261. int port, ecode, c, debuglevel;
  262. pid_t pid;
  263. char *s, *ename;
  264.  
  265. user = sp_uid2user(geteuid());
  266. root = spfile_alloc(NULL, "", 0555 | Dmdir, 0, &dops, NULL);
  267. root->parent = root;
  268. spfile_incref(root);
  269. root->atime = root->mtime = time(NULL);
  270. root->uid = root->muid = user;
  271. root->gid = user->dfltgroup;
  272. port = 1234;
  273.  
  274. while ((c = getopt(argc, argv, "dp:")) != -1) {
  275. switch (c) {
  276. case 'd':
  277. debuglevel = 1;
  278. break;
  279.  
  280. case 'p':
  281. port = strtol(optarg, &s, 10);
  282. if (*s != '\0')
  283. usage();
  284. break;
  285.  
  286. case 'h':
  287. default:
  288. usage();
  289. }
  290. }
  291.  
  292. if (optind >= argc)
  293. usage();
  294.  
  295. process(argv[optind]);
  296. srv = sp_socksrv_create_tcp(&port);
  297. if (!srv)
  298. goto error;
  299.  
  300. srv->debuglevel = debuglevel;
  301. spfile_init_srv(srv, root);
  302. sp_srv_start(srv);
  303. if (!debuglevel) {
  304. close(0);
  305. open("/dev/null", O_RDONLY);
  306. close(1);
  307. open("/dev/null", O_WRONLY);
  308. close(2);
  309. open("/dev/null", O_WRONLY);
  310.  
  311. pid = fork();
  312. if (pid < 0) {
  313. fprintf(stderr, "cannot fork\n");
  314. return -1;
  315. }
  316.  
  317. if (pid != 0) {
  318. /* parent */
  319. return 0;
  320. }
  321.  
  322. /* child */
  323. setsid();
  324. chdir("/");
  325. }
  326. fprintf(stderr, "start listening\n");
  327. sp_poll_loop();
  328.  
  329. return 0;
  330.  
  331. error:
  332. sp_rerror(&ename, &ecode);
  333. fprintf(stderr, "Error: %s\n", ename);
  334. return -1;
  335. }


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Dec 15, 2007, 00:12
Между другото примерното решение няма да работи правилно ако:

- някое от полетата не е дефинирано
- някое по полетата съдържа /


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: gat3way в Dec 15, 2007, 00:51
Случайно да се казваш Лъчезар Йонков :)

Лигавя се де :)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Dec 15, 2007, 01:12
Как се казвам аз не е много ясно, но колегата написал v9fs, npfs и spfs определено се казва така :)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: gat3way в Dec 15, 2007, 01:19
Просто видях че имаш влечение към план9 идеите, пък и ползваш framework-a, а и разработващият тези неща е българин, та предположих :)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Dec 15, 2007, 01:27
Като се има предвид, че около два пълнителя за Калашников ще са достатъчни за да очистят голяма част от потребителите на Plan9, броят на българи, които са му фенове е доста голям :) Във fortune файла на Plan9 има поговорка "Never smack a Bulgarian" ;)


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: radoulov в Dec 16, 2007, 20:15
Още една shell версия:

Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. source="$1"
  4. dest="$2"
  5. export source dest
  6.  
  7. find "${source:=source}" -name '*.mp3' -exec bash -c '
  8.     filename="$1"
  9.     id3 -l "$filename"|while read -r; IFS=: read -r t s ar;IFS=: read -r a al j; do
  10.          song="${s%                          Artist}"
  11.          artist="${ar%                      }"
  12.          album="${al%                         Year}"
  13.          dst="${dest:=dest}/${artist# }/${album# }"
  14.          [ -d "$dst" ]||mkdir -p  "$dst"
  15.          mv -v "$filename" "$dst/${artist# } - ${song# }.mp3"
  16. done' - {} \;


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: zeridon в Jan 04, 2008, 17:23
И така дойде време да теглим чертата и да видим кой какъв какво и как :p

Равносметката
Имаме 3-ма участници vladsun, radulov i tarator с общо 5 решения. 3 скриптови и две компилирани. 4 от тях що годе нормални и едно дето ми издуха главата.

По идейност смятм че едноличен победител е tarator (аплодисменти, хвърчащи цветя и жени).

Кратък разбор по задачки

vladsum - mp3o.c
Стилистично добре издържана, добре четима, има си опцийка колко да е шумна. Добра идея е ограничението за дълбочина на рекурсията. Не чак толкова добра идея е да се използва собствено парсене на ID3 информацията защото може да се намира на доста места (дори v1)

vladsum - mp3o.pl
Perl защо ли не съм учуден :) Разчита се на външен модул (дано той да се справя добре). С итератора идеята е добра. Няма хендлинг на грешки (освен ако в използваните модули няма свестен). Като цяло изглежда добре и си бачка добре.

radulov - mp3awk.sh
The power of awk. Кратко сладко, семпло, ефективно. Има умно използване на специални променливи от средата. И единственотко което не мога още да зацепя е страшно странният сепаратор на полета който се ползва (но работи)

radulov - mp3bash.sh
Bash Magic :). Интересно попълване на полетата, но полето за артист не се изчита цялото. По стандарт е 30 знака.

tarator - mp3fs.c
Doctor where is my head!!!
Аммм ако може такова нали да не коментирам. Бях останал с впечатлението че се изгъбарка но не би ... организация на музика посредством файлова система.
Кодът изглежда подреден, макар че стилът не е от най-четливите. Цялостен е до толкова до колкото библиотеките се оправят с проблемите. Тъй като не съм много запознат със spfs не мога да съм по точно аргументиран.

Крайната ситуация
За мен лично победител в този кръг е tarator - поздравления.

Моля сега всички да си изкажат тяхното мнение.

пс: Очаквайте следващия кръг. Само да драсна някакво референтно решение.


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: tarator в Jan 04, 2008, 21:39
Виновник за лошия стил е софтуера на форума, стилът ми не се различава от стандартния на Линукс ядрото.


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Jan 06, 2008, 18:45
Решението на tarator определено ми харесва - заради него се зачетох в този български проект :) И аз гласувам за неговото решение :)

По отношение на забележката за парсването на ID3 тага на zeridon - познай кой сорс съм разглеждал за повече инфо за ID3 тага - id3 :p ;) В този смисъл, моето С решение работи толкова добре, колкото и решенията с bash/awk ползващи id3 инструмента.


Титла: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: VladSun в Jan 06, 2008, 18:46
Цитат
Виновник за лошия стил е софтуера на форума, стилът ми не се различава от стандартния на Линукс ядрото.
Мдам, всеки път и аз забравям за това. Решението е tabs-to-spaces :)


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: Acho в Jan 17, 2023, 08:14
Аман от простотийки, темата е от 2006 година деа. Само спамове.


Титла: spam
Публикувано от: mirafiori в Jul 19, 2026, 18:42
spam


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: 4096bits в Jul 19, 2026, 21:12
Гога, тук ли си?


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: Acho в Jul 20, 2026, 08:30
Явно го няма.


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: kuunlaaksot в Jul 23, 2026, 23:23
Гога, тук ли си?

оставете ги линковете... може пък, специалният латентнен педал на умрелия ви форум да се върне на "правилния" тротоар


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: spec1a в Jul 24, 2026, 13:02
   Кой е "специалният латентнен педал" ?  :o

   След като форума е умрял,защо пишеш тук ?
Избиваш си комплексите ли ?


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: remotexx в Jul 25, 2026, 12:53
Оставете го Гогата на мира, я кажете сега събрахте ли вече пари за нова жена ..или мъж  ;D
https://www.youtube.com/watch?v=u1z1H0wb1GA
както почти всичко останали и тях ги правят в КИТАЙ ...в час по трудово вероятно

А има и по изчанчени модели  ;)
https://www.youtube.com/watch?v=Mt3CRS1en-c


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: 4096bits в Jul 25, 2026, 13:10
Защо да давам пари за жена, когато и така си идват?

И защо наспамваме темата?


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: spec1a в Jul 26, 2026, 11:12
Предпочитам истински жени.


Титла: Re: Задача 3 - 13.11.2007 - 27.12.2007
Публикувано от: go_fire в Aug 04, 2026, 19:07
Не мога да знам, какво му е в главата на Лунар, но най-вероятно има предвид Славей Караджов. Преди време изяде банан лично от него. Явно много го беше ядосал.

После нямаше късмет да си направи нова регистрация (имаше някакъв проблем, може би banlist или друго извън форума се беше задействало). Аз също не успях да му направя служебна регистрация.

Смешното е, че със същите данни успях да направя регистрация в онзи форум за корейски сериали, за който съм ви разказвал. А примерно година и половина не успявах да си направя регистрация там. После я ползвах много активно, докато не дойде crimeflare ($2), в резултат, на което им благодарих за рибата.

Имаха същия проблем като тук, прекалено много паяци ги обграждаха и взеха най-грешното от грешните решения.