• Обход двумерного массива при помощи одного foreach на C#?

    clx
    @clx
    Например так:
    var array = from i in Enumerable.Range(0, 5)
                from j in Enumerable.Range(0, 3)
                select new { Row = i, Col = j };
    Ответ написан
    1 комментарий
  • Выделение лексем в мат. выражении (при помощи регекспов)?

    @Maccimo
    Однако в этом случае у пользователя есть возможность ввести «x 1», и это будет воспринято как одна лексема «x1»:variable. Можно ли учесть все условия в одном регекспе, чтобы не производить предварительное удаление пробельных символов?
    Предварительно удаляя пробелы вы не упрощаете задачу разбора выражения, а напротив — усложняете.

    Уберите удаление пробелов и добавьте вместо этого пробелы в качестве ещё одной альтернативы в
    regexp идущий сейчас вторым.

    Т.е.:

    var match = Regex.Match(infix, @"[-+*/^%()]|[A-Za-z][A-Za-z0-9]*|[+-]?[0-9]+\.?[0-9]*|[ \t]+");
    

    Таким образом слипания токенов происходить не будет, а приходящие среди значащих токенов пробелы
    можно игнорировать в последующей обработке.

    При более-менее серьёзной задаче, естественно, стоит написать нормальный лексер, а не городить огород из Regex. И модифицировать его проще будет и работать он будет быстрее.

    Как лучше всего проверить валидность выражения?

    можно ли обойтисть только регулярками, или лучше заюзать генератор вроде Сосо/R
    Задачу проверки корректности арифметического выражения средствами одних толкьо regexp-ов, насколько мне известно, решить нельзя.

    Можно задействовать генератор парсеров, а можно написать простенький свой, работающий по методу рекурсивного спуска.

    Всё зависит от того, что вам нужно — разобрать выражение или разобраться, как разбирать выражения.

    Если вас интересует тема парсеров/компиляторов и т.п., то однозначно стоит прочитать «Компиляторы. Принципы, технологии и инструментарий».

    Построение парсера арифметических выражений есть там в качестве пошагового примера.
    Ответ написан
    1 комментарий
  • C#. Запретить создание экземпляра вложенного класса?

    VenomBlood
    @VenomBlood
    Конкретно в случае статического внешнего класса можно сделать следующее:

    Параметры в конструктор добавить по вкусу.
    public static class MyClass
    {
        private static Func<NestedClass> _nestedClassFactory;
    
        public static NestedClass New()
        {
            return _nestedClassFactory();
        }
    
        public sealed class NestedClass
        {
            private NestedClass()
            {
    
            }
    
            static NestedClass()
            {
                _nestedClassFactory = () => new NestedClass();
            }
        }
    }
    Ответ написан
  • Что вдохновляет вас писать код?

    @tucnak
    Что-то внутри. Наверное сущность программиста…
    Ответ написан
    Комментировать
  • Как отправить текстовое сообщение в Skype?

    mark_ablov
    @mark_ablov
    только если есть запущенный скайп.
    Ответ написан
    Комментировать
  • Как заставить себя сделать работу?

    clamaw
    @clamaw
    Я на выходных ничего не делаю как правило по работе. К концу выходных мозг сам рвется активно работать.
    Ответ написан
    1 комментарий
  • Как отучить стажёра от говнокода?

    butteff
    @butteff
    Раз в тысячу лет заправляю свитер в носки
    Ну я кота к лотку приучил так:
    Тыкал в говнокод и бил! Теперь он великолепно программирует на лотке
    Ответ написан
    1 комментарий
  • Куда жаловаться на ОПСОСА?

    BioRap
    @BioRap
    Достаточно распространенный лохотрон, пришедший на смену СМС — подписки и псевдо-подписки.

    Заключается его суть в том, что человек вводит свой номер, куда ему приходит СМС с кодом, который надо ввести на сайте. После этого он считается подписанным на услугу. Причем сначала (первые 24 часа) с него никто не снимает деньги — на этом обычно бдительность угасает. А затем — начинают снимать по $5-$10 каждые несколько дней — и так пока человек не отпишется от услуги. Причем, если у него денег на счете нет — не беда, как только они появятся — подписка тут же и сдерет их.

    Усыпляют бдительность тут 2 вещи — бесплатные первые 24 часа пользования, о которых я выше писал, и то, что не надо никуда ничего отсылать. Поэтому если о том, что слать СМС нельзя никуда старшее поколение уже более-менее в курсе, то вот насчет этой штуки мало кто знает.

    Такие дела.

    Судя по всему партнерка, к которой привязан этот сайт — СМСДоступ (smsdostup.ru). Пишите к ним, пинайте их. Хотя скорее всего, деньги не вернутся — на 10-file.ru/ внизу указаны все условия подписки, не придерешься.
    Ответ написан
    4 комментария
  • Как в C# (или любом другом .net-языке) создать ярлык?

    Laplace
    @Laplace
    private static void configStep_addShortcutToStartupGroup()
    {
    using (ShellLink shortcut = new ShellLink())
    {
        shortcut.Target = Application.ExecutablePath;
        shortcut.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
        shortcut.Description = "My Shorcut Name Here";
        shortcut.DisplayMode = ShellLink.LinkDisplayMode.edmNormal;
        shortcut.Save(STARTUP_SHORTCUT_FILEPATH);
    }
    }
    

    stackoverflow.com/questions/234231/creating-application-shortcut-in-a-directory
    Ответ написан
    Комментировать
  • Литература по криптографии

    rasa
    @rasa
    time machine: habrahabr.ru/qa/3994/
    Ответ написан
    Комментировать
  • Читалка книг для Android

    Shedar
    @Shedar
    FBReader. Умеет все основные форматы, куча настроек, есть работа с OPDS каталогами, интегрирован с LitRes, позволяя прямо из приложения покупать.
    Ответ написан
    2 комментария
  • Любите ли вы статьи о космологии, квантовой физике?

    elliadan
    @elliadan
    общая геометрическая теория как претендент на теорию всего
    Будет очень интересно почитать. Я до сих пор под впечатлением от прочтения книги С.Хокинга «Краткая история времени»
    Ответ написан
    1 комментарий
  • Почему научное сообщество скептически относится к разработкам D-Wave?

    XPilot
    @XPilot
    Вот, например, интересная ссылка на статью в КТ, где эксперты обсуждали вопрос.
    Ответ написан
    Комментировать
  • XML/XSD/UML

    @LastDragon
    Если эклипс:
    1. Eclipse XML Editors and Tools
    2. Eclipse XSL Developer Tools
    3. XSD — XML Schema Definition SDK
    4. Model Development Tools (MDT) — UML2

    Запустить процесс трансформации можно выбрав нужный xsl файл и далее Run -> Run As -> XSL Transformation.

    Теперь что касается UML:
    • Предложенный UML2 хотя и позволяет работать, НО "Although MDT/UML2 provides the metamodel, it does not provide UML modelling tools themselves" => скорее всего не нужен в данном случае
    • Нормального бесплатного UML моделлера не существует, для эклипса тем более (ключевое выделено, спорить на эту тему не буду).
    • Посмотрите SDE for Eclipse — платная, отлично интегрируется с эклипсом, триальный ключ нужноможно получать раз в месяц (сам на ней остановился)
    Ответ написан
    Комментировать
  • Квантовый компьютер?

    izmalk
    @izmalk
    Ниче интересного. За 10 лимонов предлагают купить кусок якобы квантового компьютера (они утверждают что он квантовый, но это еще предстоит доказать).
    Вот статью бы о том как он устроен (т.е. практически доказательство его работоспособности, proof of concept) было бы интересно, но, вероятно, сложно перевести.
    Ответ написан
    Комментировать
  • Включает ли понятие "кодирование" понятие "шифрование"

    burdakovd
    @burdakovd
    Кодирование != шифрование, это, я думаю, вы и сами понимаете.

    Кодирование — произвольное преобразование исходной информации в другой вид. Часто это делается для хранения/передачи данных. В таком случае прямое преобразование называют собственно кодированием, обратное — декодированием. Кодирование == преобразование (причем не обязательно обратимое, например mp3).

    Шифрование — частный случай кодирования. При этом, в отличие от кодирования, фиксируется цель данного преобразования — предотвращение несанкционированного доступа. Ну и (наверно) шифрование обязательно обратимо.

    По пунктам:
    1) Да.
    2) Как синоним — однозначно нет. Как более общее понятие — в принципе да, но по возможности лучше использовать наиболее специфический термин.
    3) А можно ли кодировать сообщения при помощи DES? Можно. Но чтобы подчеркнуть цель такого кодирования — защита информации, лучше использовать слово «шифровать».

    С помощью base64 можно как кодировать информацию (так делают в email), так и шифровать (правда этот способ шифрования не слишком надёжен), в зависимости от цели применения.

    Некоторые программы «шифруют» пароли пользователя, причём могут делать это даже без использования мастер-пароля, например браузеры. Несмотря на то, что тут нет ключа (мастер пароля) — этот процесс называют шифрованием, из-за его семантики.
    Ответ написан
    1 комментарий
  • Дробная карма

    Sterhel
    @Sterhel
    Ща минусовать начнут на кодовое слово «Карма».
    Ответ написан
    7 комментариев
  • Генерация простого числа заданного размера?

    afiskon
    @afiskon
    У Шнайера этот вопрос хорошо освящен (стр 296 «Прикладной криптографии» — pdf легкой найти). Генерируете случайное p. Сначала проверяете p на четность (по младшему биту). Затем проверяете остаток от деления на 3,5,7,… — первые простые числа кроме 2, меньше 2000. Затем прогоняете 5 тестов Рабина-Миллера (google) для 5 разных случайных чисел a. Если прошел все 5 — можно считать число простым. В целях эффективности можно генерировать небольшие a.

    Еще, возможно, вас заинтересует статья об эллиптических кривых — http://eax.me/elliptic-curves-crypto/. Криптография на ЭК не менее безопасна, чем RSA, но существенно проще в реализации и более эффективна благодаря тому, что ключи длиной 256 бит так же надежны, как RSA ключи длиной 4096 бит.
    Ответ написан
    Комментировать
  • Генерация простого числа заданного размера?

    @BiTHacK
    Обычно генерация идёт так: генерируем случайно число заданного размера, проверяем его тестом Миллера-Рабина с кол-вом раундов ln(m), если число составное, то добавляем единицу и проверяем вновь полученное число, в противном случае алгоритм завершён, искомое число получено. Встаёт вопрос, а вдруг полученное число составное? Тест Миллера-Рабина с указанным выше числом раундов даёт надёжность в 4^(-ln(m)), а 100% гарантию на 1024 битное число вы не получите за приемлемое время. m — текущее число.
    Ответ написан
    3 комментария
  • Генерация простого числа заданного размера?

    @mib431
    Если нужно сгенерировать заведомо простое число, то посмотрите на применение методов, использующих разложение числа n-1 на простые множители (так называемые «n-1—методы»). В частности, это тест Поклингтона. С помощью него достаточно легко строится метод построения последовательности простых чисел теоретически любой длины. ЕМНП некоторая модификация этого метода использовалась в старом отечественном ГОСТ'е на цифровую подпись.
    Ответ написан
    2 комментария