Показаны сообщения с ярлыком Списки полезного. Показать все сообщения
Показаны сообщения с ярлыком Списки полезного. Показать все сообщения

понедельник, 10 сентября 2012 г.

Essential string processing functions in Common Lisp

It should be noted that true Common Lisp somewhat lacks in several important parts of string-processing, and it shows sometime. Today I needed to heavily process large body of regular text and will write here some functions which are AFAIK considered "standard" in modern languages and which not so easily accessible and/or amazingly intuitive in CL.

In all following code snippets token input stands for input string.

  1. Trimming string from spaces, tabs and newlines

    (string-trim '(#\Space #\Newline #\Return #\Linefeed #\Tab) input))

    All named characters are listed in Hyperspec, 13.1.7 Character Names.

  2. Replacing by regular expressions

    Provided by CL-PPCRE package.

    In next snippet I remove all tokens enclosed in square brackets from the input string:

    (ql:quickload :cl-ppcre)
    (cl-ppcre:regex-replace-all "\\[[^]]+\\]" input "")

    Honestly, I don't know when you can need simple regex-replace and not regex-replace-all. Also, note the double-escaping of special symbols (\\[ instead of \[).

  3. Splitting string by separator symbol

    Provided by CL-UTILITIES package.

    In next snippet I split the input string by commas:

    (ql:quickload :cl-utilities)
    (cl-utilities:split-sequence #\, input)
  4. Making same modification on every string in given list

    In next snippet I trim spaces around all strings in list input-list:

    (map 'list 
         (lambda (input) (string-trim " " input)) 
         input-list)

    However, way better is to wrap the transformation for the string in separate function and call the mapping referencing just the name of transformation:

    (defun trim-spaces (input)
      "Remove trailing and leading spaces from input string"
      (string-trim '(#\Space) input))
    
    (map 'list #'trim-spaces input)

    Do not forget that string is just a sequence of a characters, and all sequence-operating functions can work on strings in either "abcd" form or '(#\a #\b #\c #\d) form. This applies only to sequence-operating functions, however.

  5. Removing the characters from string by condition

    In the next snippet I leave only the alphanumeric characters in the input string:

    (remove-if-not #'alphanumericp input)

    There are remove-if also.

    As with map, you can make arbitrary complex predicates either with lambdas or wrapping them in separate functions.

пятница, 1 июля 2011 г.

Вот так вот сессия кончится, а у тебя есть что почитать. ;)

Решил написать тебе список кое-каких ресурсов, откуда можно почерпнуть кое-какие сведения. :)

Исхожу от предпосылок, что тебя интересует:
  1. Разработка компьютерных игр
  2. Веб-разработка
Как и меня.

По веб-разработке.

Верстать HTML+CSS+JS можно легко научиться по Opera Web Standards Curriculum. Там учат только best practices, ты будешь в хороших руках. :)

Справочник по HTML+CSS, который я считаю нормативным, это htmlbook.ru
Умение аккуратно пользоваться CSS приходит только с опытом.

По яваскрипту есть замечательный сайт учебного характера javascript.ru. Кроме этого, только сегодня нашёл огромный гайд по Javascript от Mozilla Foundation,  он такой огромный, что я уверен, дочитав его до конца, становишься гуру жабоскрипта. :) Справочник по яваскрипту как таковой отсутствует, потому что большая часть функций берётся из DOM, здоровенного трёхуровневого словаря функций, предназначенных для работы с HTML-страницей.

Сам я чистым яваскриптом почти никогда не пользуюсь, пользуюсь jQuery. Вот справочник функций jQuery. К jQuery написаны также две дополнительные большие библиотеки -- это jQuery UI, и jQuery Tools. jQuery Tools используется в моей работе постоянно, потому что всем нужны слайдеры и всплывающие диалоговые окна. :)

Только после полноценного знакомства с традиционным HTML десятилетней давности, рекомендую переходить на чтение HTML5 — Edition for Web Developers. Сам я только ещё готовлюсь к этому шагу в будущее, потому что IE 6, 7 и 8 и даже 9 поддерживают HTML5 никак. :(

Для работы на бэк-энде тебе настоятельно мною рекомендуется язык PHP, и, соответственно, "официальный" гайд по PHP (сам я его никогда не читал полностью, только частями). Если у тебя уже развёрнут XAMPP и ты можешь добраться до index.php в каталоге сервера через http://localhost/index.php, то уже можешь начинать кодить на PHP, всё нужное уже настроено и работает. :)

В качестве каркаса для веб-приложений на PHP я очень-очень рекомендую Yii, это зверский очень удобный, но очень хардкорный каркас. Нахрен Джумлу. Вот руководство по Юи, в виде туториала от простого к сложному. Хотя предупреждаю, что Юи --- это не система управления контентом, а каркас веб-приложения (одним предложением: админку придётся делать самостоятельно).

Впрочем, в России огромное количество коммерческих сайтов сделано на 1С-Битриксе. Кучу денег может принести одно только сопровождение веб-сайтов, построенных на 1С-Битриксе. Поэтому, становятся крайне полезными два справочника: документация для разработчиков и пользовательская документация. В этих священных писаниях собрано описание всех внутренностей Битрикса.

Возможно, для настройки веб-сайта в XAMPP тебе пригодится моя статья про настройку локального Apache на виртуальные хосты. ;) Хотя вряд ли, если честно.

До сих пор при вёрстке веб-сайтов приходится учитывать особенности Интернет Эксплорера, вот статья про то, как справляться с некоторыми самыми частыми багами IE6, вот полная коллекция багов IE6,7&8. Кстати, само по себе зрелище то ещё. :)

По созданию дизайна веб-сайта в Фотошопе вот тебе три сборника ссылок (с картинками): первый набор туториалов по рисованию сайтов, второй набор туториалов, третий набор. Это я ещё сам не читал, будете с Ингой меня превосходить. :)

Про веб-разработку вроде всё вспомнил.

По разработке компьютерных игр.

Здесь пойду в обратную сторону.
Недавно в Сети нашёл замороженный проект perfectstorm --- один парень делал RTS на Common Lisp с использованием OpenGL. Я выпросил у чувака исходники и успешно их скомпилировал. В моей голове роятся мысли о том, чтобы изучить эти исходники и понять, как оно вообще работает --- там в проге по полю двигаются юниты, стреляют друг в друга, выделяются рамочкой и есть рудиментарный AI с pathfinding'ом, вполне себе RTS.


Для понимания того, как это работает, надо знать две технологии. Первая это сам язык Common Lisp, вторая это OpenGL.

Для понимания того, зачем именно Common Lisp, рекомендуется вот эта статья и вот эта статья и вот эта самая большая и подробная статья. Для изучения Common Lisp рекомендуется книга Practical Common Lisp, доступна вся онлайн, я прочитал уже 19 глав.

Для изучения OpenGL я нашёл для себя OpenGLBook.com, это сборник из 4 огромных статей, показывающих "на пальцах", каково это --- программировать компьютерную графику с использованием OpenGL.
Вообще я так понял, что в первую очередь нужно знать, как делается графика в играх, потому что это самое сложное и комплексное (и востребованное), а потом уже всё остальное.

Есть две технологии работы с компьютерной графикой: использование OpenGL и использование DirectX. DirectX, понятное дело, работает только на Windows. Однако, для него есть такая штука, как DirectX Software Development Kit (DirectX SDK), который свободно можно скачать и пользоваться. Там должен быть компилятор сразу, куча туториалов, документация --- всё, что хочешь. У фирмы Nvidia есть Nvidia Graphics SDK, он, должно быть, учитывает особенности их видеокарт, но я думаю, можно покопаться в коде и запустить его и под ATI'шной видюхой.Есть и Nvidia SDK для DirectX и Nvidia SDK для OpenGL. У ATI(AMD) ничего подобного не нашёл.

Собственно, пока только эти две книги по кодингу читаю. Когда вкурю, что к чему, дам больше ссылок.

Так как я хочу делать мультиплатформенные игры и вообще программы, то возникает вопрос ещё о том, как выводить GUI (есть разные библиотеки) и звук. :)

Пока всё, успехов там.

Марк
29 июня 2011
04:11

суббота, 7 мая 2011 г.

Какие плагины устанавливать в Firefox

Да-да, я толстый тролль, вы совершенно правы. :) Мне физиологически не нравится Firefox как он есть, и к моему большому сожалению, в Debian предполагается использование только его (под названием Iceweasel, но это совершенно неважно).

В эпоху пользования Виндой я сёрфил в Сети исключительно при помощи Оперы, и переезд на Фаерфокс оказался достаточно горьким впечатлением. Однако, Фаерфокс можно допилить при помощи плагинов, установить которые --- пара пустяков, поэтому всё не так уж страшно.

Разберёмся, какие плагины действительно нужны в Firefox как веб-браузере.