Pull to refresh
23
0
Виктор Лова @nsinreal

Пользователь

Send message

Пишем расширения c Roslyn к 2015 студии (часть 2)

Reading time6 min
Views7K
… Эта статья является продолжением первой части о написании расширений к студии с Roslyn.

Тут я буду описывать что делать, если мы хотим сгенерировать/поменять какой-нибудь код. Для генерации кода мы будем статические методы класса SyntaxFactory. Некоторые методы требуют указать ключевое слово/тип выражения/тип токена, для этого есть перечисление — SyntaxKind, который содержит все это вместе.

Хорошо, давайте для примера сгенерируем код, содержащий число 10. Это делается просто.

SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(10))

Я не шутил, когда говорил, что чтобы создать код проще всего распарсить строку. Благо, SyntaxFactory предоставляет кучу методов для этого (ParseSyntaxTree, ParseToken, ParseName, ParseTypeName, ParseExpression, ParseStatement, ParseCompilationUnit, Parse*List).

Но это не путь настоящего самурая.
Давайте генерировать по пути самурая
Total votes 27: ↑27 and ↓0+27
Comments2

Пишем расширения c Roslyn к 2015 студии (часть 1)

Reading time6 min
Views9.4K
Перейти ко второй части

Для начала, нам потребуется:

1. 2015 студия
2. SDK для разработки расширений
3. Шаблоны проектов
4. Визуализатор синтаксиса
5. Крепкие нервы

Полезные ссылки: исходники roslyn, исходники и документация roslyn, roadmap с фичами С# 6.

Наверное вас смутило, что вам потребуются крепкие нервы и вы хотите пояснения. Все дело в том, что весь API компилятора — это низкоуровненное кодогенерерированное API. Вы будете смеяться, но простейший способ создать код — это распарсить строку. Иначе вы либо погрязнете в куче нечитаемого кода, либо будете писать тысячи extension-методов, чтобы ваш код выглядел синтаксически не как полная кака. И еще две тысячи extension-методов, чтобы оставаться на приемлемом уровне абстракций. Ладно, я вас убедил, что писать Roslyn расширения к студии это плохая идея? И очень хорошо, что убедил, а то кто-то из читающих эту статью может написать второй ReSharper по прожорливости ресурсов. Не убедил? Платформа все еще сырая, бывают баги и не доработки.

Вы меня не убедили
Total votes 30: ↑29 and ↓1+28
Comments14

Я не могу написать бинарный поиск

Reading time11 min
Views206K
Недавно (буквально два года назад) тут пробегала статья Только 10% программистов способны написать двоичный поиск. Двоичный поиск — это классический алгоритм поиска. Мало того, это еще чрезвычайно простой алгоритм, который можно очень легко описать: берем отсортированный массив, смотрим в середину, если не нашли там число, в зависимости от того, что в середине — ищем это число этим же методом либо в левой части, либо в правой, откидывая средний элемент. Для функций также, просто берем не массив, а функцию. Все очень и очень просто, алгоритм описан почти везде, все баги словлены и описаны.

Так вот, я не могу реализовать двоичный поиск. Для меня он ни капельки не тривиален. Наверное, я ненастоящий программист. А ведь так и есть, я всего-лишь студент, но ведь это не оправдание? Если точнее, я не могу реализовать хороший корректный красивый двоичный поиск. Все время у меня вылезает проблема либо с корректностью, либо с красивостью, либо и с тем, и с другим. Так что, да, заголовок немного желтоват.
Прежде чем читать этот топик, напишите свою версию бинарного поиска — для отсортированного массива. Причем, в зависимости от параметра, поиск должен выдавать или первый элемент, или любой из дублирующих. Еще для сравнения, напишите бинарный поиск для функций

А в чем, собственно, проблема?
Total votes 165: ↑107 and ↓58+49
Comments156

Извлечение квадратного корня с помощью нормальных алгоритмов Маркова

Reading time2 min
Views12K
Захотел я однажды вычислить квадратный корень с помощью нормальных алгоритмов Маркова (НАМ).

Кратко о НАМ:
  • Существует список замен одной подстроки на другую, называемых правилами
  • Ищем с начала списка первое правило которое можем применить и применяем его для первого вхождения
  • Если такое правило было обнаружено, то возвращаемся к предыдущему пункту и просматриваем список правил сначала
  • Если правило было заключительным, то завершаем работу
  • Если больше нет правил, которые мы можем применить, то завершаем работу

Итак, вроде бы все просто? Однако, как писать программы на НАМ?
Для себя я сделал примерно такой план:
  • Пытаемся написать обычный алгоритм использующий только строки
  • Следим за тем, чтобы последние замены не пересекались с первыми
  • Переворачиваем алгоритм и записываем с конца к началу

Итак, вернемся к вычислению квадратного корня. Мы будем использовать «детский» метод (он же арифметический), который основывается на том простом факте, что квадрат числа — это сумма нечетных чисел от 1 до 2n-1:
  • 1 = 12 = 1
  • 1 + 3 = 22 = 4
  • 1 + 3 + 5 = 32 = 9
Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments19

Хабрахабр: немного статистики и альтернативный топ вопросов и ответов

Reading time3 min
Views2K
Мне так понравилось анализировать хабр(), что я решил проанализировать недавно созданный раздел хабра: вопросы и ответы. Уже сейчас видно, что этот раздел будет таким же веселым, как и остальные.

Итак, я проанализировал 1775 вопросов и получилась такая статистика:
Читать дальше →
Total votes 163: ↑142 and ↓21+121
Comments58

Хабрахабр: немного статистики и альтернативный топ топиков

Reading time2 min
Views1.3K
Я заметил, что текущий топ хабрахабра содержит малое количество полезных материалов. Вообще, как оценивают материал? Люди ставлят плюс/минус, потому что:
  1. Хотят поощрить автора за написание хороших топиков
  2. Хотят отблагодарить автора за написание сиюминутной новости/интересной картинки
  3. Хотят выплеснуть свое настроение на чужом топике
Вполне очевидно, что такая система голосования не всегда будет поощрять хорошие топики и не всегда в топе будут только хорошие и полезные статьи.
Но у каждой статьи есть еще два иных показателя: количество человек, занесших статью в избранное (коротко — фавориты) и количество комментариев. Очевидно, что первый показатель определяет полезность статьи, а второй — насколько тема затронула умы хабралюдей.
Мне показалось, что альтернативные варианты топа будут очень интересны остальным людям. Вообще, было бы хорошо, если бы такую фичу сделали, разработчики, но…

Итак, я проанализировал 72% топиков хабра (остальные были закрыты/недоступны/удалены) и составил альтернативный топ. Под катом парочка рисунков и ссылки на страницы альтернативного топа.
Читать дальше →
Total votes 144: ↑124 and ↓20+104
Comments36

Свои судоку на своих батниках

Reading time2 min
Views5K
image
С предыдущего хабратопика я понял, что хабражителям очень понравился сапер на своих батниках и поэтому рискнул написать еще одну игру, а именно — Судоку. И опять же, на своих батниках.
Как и Minesweeper, Sudoku for cmd.exe имеет ряд следующих преимуществ:
  • Оригинальное лого
  • Двухцветный текстовой графический интерфейс (фон — чёрный, текст — серый)
  • Возможность воспроизведения программы практически на любом компьютере
В общем, это Судоку для настоящих мужчин. И скачать эту замечательную игру вы можете прямо сейчас, воспользовавшись этими ссылками: Plain Text | Google Docs
Читать дальше →
Total votes 103: ↑83 and ↓20+63
Comments51

Свой сапер на своих батниках

Reading time6 min
Views13K
image

Однажды захотелось мне написать Minesweeper… на батниках. И я его написал.

Встречайте!!! Minesweeper for cmd.exe

Итак, особенности данного продукта:
  • Оригинальное лого
  • Двухцветный текстовой графический интерфейс (фон — чёрный, текст — серый)
  • Возможность воспроизведения программы практически на любом компьютере
В общем, это настоящий сапер (а не те жалкие подобия — KMines и сапер for Windows) для настоящих мужчин. И далее вы сможете прочитать как сделать свой крутой сапер.
Читать дальше →
Total votes 241: ↑227 and ↓14+213
Comments118

Обзор игры Space Community

Reading time6 min
Views1.5K

Space Community — это браузерная пошаговая космическая стратегия, главными отличительными особенностями которой является отсутствие накопления ресурсов, гибкая система мутаций и конструктор юнитов, встроенный обработчик государственности, что позволяет быстро вливаться в игру, создавать неповторимые корабли, обмениваться кораблями, создавать государства.

Читать дальше про эту замечательную игру
Total votes 23: ↑8 and ↓15-7
Comments15

Моделирование развития социальной сети: игра «Социальная жизнь»

Reading time2 min
Views1.2K
Статья навеяна предыдущим постом о игре «Жизнь» Конвея: Поиграем в жизнь
Давайте зададимся целью смоделировать работу социальной сети с помощью аналога игры «Жизнь» — назовем такую игру.
Читать дальше →
Total votes 11: ↑6 and ↓5+1
Comments23

OpenSource игры и просто игры под линукс

Reading time1 min
Views2.4K
Уважаемое хабрасообщество!
У меня есть небольшая просьба к вам: не могли бы вы в комментариях отписаться о существовании различных хороших OpenSource-игр, а также игр под линукс (не только бесплатных). Если игры платные, то обязательное наличие демо-версии или видео. Буду очень благодарен. Если вас не затруднит — напишите оценку игры (0-5 баллов).
Читать дальше →
Total votes 21: ↑12 and ↓9+3
Comments55

Почему Mono хорош

Reading time12 min
Views12K
Мы с участниками социальной сети open-life.org решили сделать перевод статьи Джо Шилдза (Jo Shields) «Here we go again – why Mono doesn’t suck». В результате получилась статья «Почему Mono хорош». Копию данного перевода можно прочитать здесь: Почему Mono хорош — open-life.org

Прим.: Если кто захочет инвайт на open-life.org — стучитесь в личку

Я участник Debian Mono Group, Debian CLI Applications Team, и Debian CLI Libraries Team. И уже в течении года работаю над сопровождением пакетов проекта Mono и программ, которые используют его в ОС Ubuntu (и Debian). Мне хорошо известны горячие споры, угрозы и последующие переходы на личности, и сейчас я принимаю ваш «вызов». В этой статье я говорю от себя лично — не от проекта Debian, не от Ubuntu, не от Mono, и не потому, что меня попросил мой начальник.

Вам хотелось «объективного пояснения, чем хорош Mono, почему он не представляет угрозы и почему его следует включить в Ubuntu по умолчанию»? — Я отвечу на эти 3 вопроса по очереди, затем предложу общий вывод к этой статье, а так же к более широкому движению «Анти-Mono». Это сообщение подписано GPG (прим. переводчика: GPG=GNU Privacy Guard — свободная альтернатива набору криптографического ПО PGP) для подтверждения факта его публикации без изменений. Оригинальный текст доступен по адресу retro.apebox.org/herewegoagain.txt чтобы каждый желающий мог проверить его подлинность самостоятельно.

Читать дальше →
Total votes 151: ↑125 and ↓26+99
Comments80

Information

Rating
Does not participate
Location
Харьков, Харьковская обл., Украина
Registered
Activity