вторник, 5 декабря 2017 г.

"Через не могу"


"Надо", "через не могу" это худший способ сделать что-либо. Заставлять себя означает навсегда отбить охоту заниматься каким-либо делом.

Нас вообще неправильно учат и родители и учителя. Учат концентрироваться на своих ошибках, неудачах, а не на успехах.

четверг, 20 июля 2017 г.

Про латынь

На латинском calculi - галька. В те времена галька использовалась для счета. Считали почти также как на советских счетах с костяшками, только вместо спиц были проточенные в доске желобки, ну а вместо костяшек - галька.
Слово калькулятор (calculator), собственно, и произошло от латинского calculi. По русски, выходит гальколятор. ))))
Посчитай на гальколяторе! ))))

пятница, 1 апреля 2016 г.

Все свое ношу с собой. Часть 4

Продолжения не будет.
Купил NAS DNS-327L. Поставил на него гитсервер, свою справочную систему на основе вики, торренткачалку и фильмораздавалку (потоковое видео). Пробросил виртуальный езернет-туннель на рабочий комп.
Раньше документы хранил в дропбоксе, что-то потяжелее в разных облачных хранилищах, свои проекты на битбакете, вырезки с инета на эверноте, торренты на ноутбуке (т.к. тихий и можно оставить на ночь). Теперь, какое-то приятное ощущение от того, что все в одном месте. Короче, вполне доволен получившимся комбайном. )))
Собственно, всю эту возню с NAS я потому и затеял, что несколько ранее используемых мною облачных сервисов, по разным причинам, прекратили свое существование, причем вместе с моими файлами, которые я не успел оттуда слить.

Git. Применение патчей

Про разрешение конфликтов писать не буду. На этот счет есть много материала.
Просто несколько маленьких хитростей на случай, когда вам прислали большой патч, а он не применяется.
Подробности о том, что именно не нравится гиту можно получить командой:
git apply -v <*.patch>
Иногда ему не нравятся переводы строк. Тогда попробуйте:
git apply --ignore-whitespace <*.patch>
или:
git am --keep-cr --whitespace=nowarn <*.patch> (эта команда сразу закомитит патч)
Самой полезной фишкой считаю:
git apply --reject <*.patch>
В этом случае гит применит все, что сможет, а то что не получается запишет в виде отдельных файлов с расширением *.rej. Очень удобно.

Как в git разбить один комит на несколько

Метода описана в мануале по гиту, однако, напишу и себе, чтоб не забыть.
git rebase -i <хэш_комита>^ (не забываем про ^ в конце)
В появившемся редакторе в первой строчке пишем edit вместо pick.
git reset HEAD^
Сейчас рабочий католог находится в состоянии как будто вы еще не сделали тот комит, который нужно разбить.
git add -p .
Клавишами 'y' и 'n' выбираем фрагменты, которые должны войти в первый разбитый комит. Если предлагаемый фрагмент слишком большой, его можно сократить клавишей 's' или даже подредактировать клавишей 'e' (при условии, что вы хорошо понимаете то, что делаете).
Делаем первый комит:
git commit -m"Комментарий".
Повторяем последние две команды пока не закончите разбиение, а затем делаем:
git rebase --continue
Если тут гит начнет ругаться, что не может сделать пустой комит, то это значит, что вы забрали из первоначального комита все изменения и он стал пустым. Тогда наберите:
git rebase --skip
Заканчиваем, если нужно, ребейс git rebase --continue. Внимательно читаем выводимые сообщения, чтобы убедиться, что мы не застряли посреди ребейса с каким-нибудь конфликтом.

среда, 17 февраля 2016 г.

Git. Исправления "задним числом"

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

1. Чаще всего, вы замечаете, что что-то забыли сразу же после того как только что сделали коммит. Этот случай самый простой.

понедельник, 5 октября 2015 г.

Arch-linux + dwm

Поставил Arch Linux и ультраминималистичесский тайловый оконный менеджер DWM.
Плюсы: 1) система загружается секунд за 5.
Минусы: 1) установка вручную; 2) все-таки слишком минималистично. ))) Хотя...

Вообще-то, на сайте Arch Linux есть очень подробныйне очень подробный) гайд по установке. Все подводные грабли также можно найти в тамошней вики, но... многабукаф. Поэтому, законспектирую как делал я.

четверг, 11 сентября 2014 г.

Азы git

Пришлось на днях объяснять азы гита. 

Часть 1

В отличие от многих других систем контроля версий (cvs) git оперирует не файлами, а строками. Т.е. для него первичны строки, а файлы им воспринимаются как некие контейнеры для строк. Например, если удалить какой-либо файл, то гит запишет это в своем репозитории (базе данных) именно как удаление всех строк из файла, впрочем сам файл он тоже пометит как удаленный, чтоб немелькал зазря в списках файлов (например, выдаваемый по команде git ls-files).

С git можно не беспокоится чего-то потерять. Он сохраняет ВСЕ изменения, в том числе и удаленные строки и файлы, и их всегда можно посмотреть и при необходимости откатить обратно. (Однако бойтесь команд с опциями --force или --hard - с ними все-таки можно что-то потерять).

пятница, 15 августа 2014 г.

Шпаргалка по Lua

-- с двойного тире начинается однострочный комментарий

--[[
    А если добавить двойные квадратные скобки
    получится многострочный комментарий
--]]
----------------------------------------------------
-- 1. Переменные и управляющие конструкции
----------------------------------------------------

num = 42  -- Все числа в Lua представляют из себя числа с плавающей точкой двойной точности (double)
-- Не переживайте, у 64-битных double имеется 52 бита
-- для хранения точных целочисленных (int) значений;
-- для целочисленных значений, которым нужно менее 52 бит, никаких проблем не возникнет

s = 'walternate'  --строки неизменны (нельзя переназначать) как в Рython'e
t = "double-quotes are also fine" -- можно использовать и двойные кавычки
u = [[ Double brackets         
             start and end           
             multi-line strings.]]   -- Двойные квадратные скобки 
                                     -- обрамляют многострочные строки (strings)
t = nil  -- обнуляет t; В Lua имеется "сборщик мусора"

четверг, 14 августа 2014 г.

Калькулятор на Lua в 30 строк

Захотелось написать зародыш компилятора )))

Интерпретатор:
function   oper(src) return src:match'^([-+*/]?)%s*(.*)' end
function number(src) return src:match'^(%d*)%s*(.*)' end
operators = {
    {
        ['+'] = function(a,b) return a+b end,
        ['-'] = function(a,b) return a-b end
    },{
        ['*'] = function(a,b) return a*b end,
        ['/'] = function(a,b) return a/b end
    }
}

function expr(src, pri)
    local a,b,n,r,op
    pri = pri or 1
    op = operators[pri]
    if op then
        a, src = expr(src, pri+1)
        r, src = oper(src)
        while op[r] do
            b, src = expr(src, pri+1)
            a = op[r](a,b)
            r, src = oper(src)
        end
        return a, r..src
    end
    r, src = number(src)
    if r=='' then error('number expected: '..src) end
    return r, src
end

print(expr('2 + 2 * 3')) -- 8
В operators операции расположены по приоритетам (низкий в начале). Можно добавлять свои операции.

вторник, 26 ноября 2013 г.

C++: Памятка C++, конструкторы, копирование, присвоение, деструкторы

(Скомунизжено с all4study.ru)

Очень долго собирался написать памятку по разным приёмам программирования на C++. Но никак не мог выбрать достаточно компактный способ изложения. Получалось либо непонятно, либо очень длинно. В конце концов, я решил написать небольшой пример, снабжённый комментариями. Здесь, конечно, представлено далеко не всё, что стоило бы включить в памятку, но за-то то, что есть, изложено очень сжато, компактно и, мне кажется, что понятно. Я не планирую останавливаться на этом примере, для других аспектов программирования на C++ я постараюсь придумать другие примеры. Пока же, жду замечаний, предложений и критики этой первой заметки.

суббота, 27 июля 2013 г.

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

пятница, 12 июля 2013 г.

DebugPrint (C#)

Откопал еще один свой раритет. Класс для форматирования отладочных сообщений. Сейчас, когда уже полно всяких отладочных фреймвоков, его полезность сомнительна, а на момент его написания (2005 г.) была весьма полезная штука.

вторник, 9 июля 2013 г.

Как править миром тайком от санитаров )))

Мои наполеоновские планы стать Создателем Вселенной рассыпались прахом.
В очередной (уже 3-й) раз, попытался собрать команду энтузиастов для создания игры. И в очередной раз все заглохло. Как и в прошлые разы, у кого запал закончился, у кого завал на работе и ему не до игры, а кто вообще ребенка родил (наша левел-дизайнер).
Недаром корифеи Геймдева утверждают, что на голом энтузиазме без должного финансирования далеко не уедешь. Придется доделывать как инди...