• Как генерировать случайные имена?

    qmax
    @qmax
    программер
    Марковские цепи помогут вычислить сочетаемость букв в именах, и выбирать наиболее "благозвучную" букву по контексту (префиксу).
    Метод архиэффективный и способен породить бесконечннешее количество слов.
    Но только если обучающая выборка достаточно большая.

    Мои рекомендации:
    Используйте длинну префикса 3-4 буквы (примерно длинна слога).
    Боле длинные префиксы будут порождать слова слишком похожие на исходные и их рекомбинации.
    Более короткие будут не очень благозвучны.
    Обязательно используйте символы начала и конца слова в качестве спец-буквы ('^' и '$'), просто пробела недостаточно, но уже не помню почему.

    Для имён имеет смысл генерить их с конца, поскольку окончания у имён специфичные, и рандом может долго не попадать на концевую цепочку, порождая излишне длинные слова. А при генерации с конца можно просто по критической длинне принудительно оборвать слово, или выйти на ближайшей остановке.

    Для хранения эффективно использовать префиксное дерево с частотами в качесве значений.
    Алгоритм составления словаря довольно простой:
    prefix = '^'
    for letter in text:
      freqdict[prefix+ letter] += 1 # увеличение счётчика этого сочетания
      if letter ='$':  # конец слова, сброс префикса
        prefix = '^'
      else:
        prefix = prefix[-depdth:] # обрезане префикса до максимальной длинны

    После этого нужно нормальизовать значения для каждого префикса, чтобы
    для каждого префикса сумма значений всех хвостов была = 1.
    При таком раскладе можно "склеить" частоты в единичный отрезок, разделёный на части пропорционально частоте, и рандомом выбирать "взвешенно-равномерно".

    Алгоритм генерации:
    prefix = '^'
    while prefix[-1] != '$':
      tails = freqdict[prefix].items() # под-дерево всех продолжений префикса в виде списка (key, value)
      thresh = random() # точка на единичном отрезке
      i = 0 # текущий элемент
      level = 0 # верхняя граница отрезка текущего элемента
      while thresh > level:
        level += tails[i][1]
        i++
      prefix += tails[i][0]


    Код написан по памяти, не принимайте на слово :)
    Наверно, мне уже пора выкладывать библиотеку для рыбогенерации...
    Ответ написан
    3 комментария
  • Bestpractices по ООП и паттернам в js?

    AMar4enko
    @AMar4enko
    Что-нибудь такое superherojs.com
    Ответ написан
    Комментировать
  • Архаично ли обучать школьников программированию в консольном режиме?

    @gleb_kudr
    Важнейшая задача обучения школьников - не само обучение, а вовлечение. Вовлекать надо чем-то ярким и интересным. Это в первую очередь GUI и приложения насыщенные графикой. Начало должно быть именно таким.
    Когда вовлечение произойдет, можно переходить уже к более систематическому обучению с азов, т.е. с простейших редакторов и консоли.
    Ответ написан
    7 комментариев
  • Как найти все комбинации символов?

    Mrrl
    @Mrrl
    Заводчик кардиганов
    Такие матрицы, судя по всему, описывают возможные бинарные операции на множестве {'a','b','c'}, т.е. функции от двух переменных из этого множества, принимающие значения в этом же множестве.
    Всего таких функций будет 3^9=19683. Поэтому достаточно перебрать числа от 0 до 3^9-1, и троичную запись каждого из них превратить в матрицу. На C# это бы выглядело так:
    char[,] matr=new char[3,3];
        for(int i=0;i<19683;i++){
            int a=i;
            for(int j=9;--j>=0;){
                matr[j/3,j%3]=(char)('a'+a%3);
                a/=3;
            }
            Process(matr);
        }
    Ответ написан
    4 комментария
  • Возможно ли защитить сайт от скачивания файлов с других ресурсов?

    kompi
    @kompi
    nullstack devoops
    nginx
    location ~ .(gif|png|jpe?g)$ {
         valid_referers none blocked mywebsite.com *.mywebsite.com;
         if ($invalid_referer) {
            return   403;
        }
    }
    Ответ написан
    1 комментарий
  • Что такое jsonp и как им пользоваться?

    kirill89
    @kirill89
    Это технология для выполнения запроса к другому домену (через обчный XHR это не возможно).

    В двух словах работает это следующим образом:

    В head страницы добавляется новый тег script с src установленным в адрес запроса и параметры (например "www.example.com/?id=1&jsonp=myCallback").

    Как вы понимаете этот скрипт будет загружен браузером несмотря на домен на котором мы находимся.

    При этом ответная сторона (example.com) в тело этого скрипта вернет не просто JSON, а вызов javascript функции указанной в jsonp параметре (мы разумеется эту функцию должны заблаговременно объявить).
    Пример ответа от example.com: myCallback({ "user": "Rrooom", "message": "test" });

    Это не плохой способ обойти проблему кросс доменных запросов, но возможен только GET.
    Ответ написан
    1 комментарий
  • На каком языке-фреймворке легче написать кроссплатформенное gui-приложение?

    daapp
    @daapp
    Программист
    Tcl/Tk - бинарник от 3 Mb, сборка с помощью starpack одной командой.

    Собираю для Win32/64, LInux x86/arm.

    wiki.tcl.tk - всё что только есть о Tcl.
    Ответ написан
    Комментировать
  • Есть ли более дешевые альтернативы Raspberry Pi?

    RicoX
    @RicoX
    Ушел на http://ru.stackoverflow.com/
    Какая-то у вас малина дорогая, неделю назад брал себе B+ с доставкой обошлась 40$ куда уж дешевле то, редакции попроще можно дешевле найти, из аналогов есть всевозможные одроиды, но по цене примерно то-же самое. Дешевле только МК.
    Ответ написан
    7 комментариев