вторник, 12 июля 2016 г.

Configuring Jenkins for C# projects

Steps in my build configuration

Restore nuget packages

chcp 1251
.nuget\nuget.exe restore Swag.sln

Build solution

chcp 1251
cmd.exe /C " "C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" 
             /t:Build /p:Configuration=Release "/p:Platform=Any CPU" 
             SOLUTION.sln " && exit %%ERRORLEVEL%%

Run NUnit tests and export results in NUnit2 format


chcp 1251
packages\NUnit.ConsoleRunner.3.2.1\tools\nunit3-console.exe 
             bin\Release\TESTS.dll --result=TestResult.xml;format=nunit2

Add post-build actionPublish NUnit test result report

TestResult.xml


You need to add chcp1251 for Jenkins log file encoding. Replace with your own locale

пятница, 29 января 2016 г.

Книги за 2015

В 2015 году выдалось прочитать не так уж много книг. Сказывается, что слушать приходится только в машине. И то не всегда, т.к. трудно порой сосредоточиться.


Итак мой список (довольно короткий):

  1. Энди Уир "Марсианин" - очень классная книга, просто башку порвало. Не то, чтобы в корне поменяло какое-то мое мышление, но очень и очень увлекательно. Я был очень удивлен детальностью всех объяснений и что для чего нужно. А позже я узнал, что автор - программист и для меня всё встало на свои места. Да, такие технологические мелочи гуманитарий редко сможет прописать. В общем, кто не читал - читайте. Того стоит
  2. Рэй Бредберри "451 градус по Фаренгейту" - с антиутопиями я уже свыкся. С сюжетом и повествованием всё в порядке. Для ознакомления - хорошая книга.
  3. Борис Акунин "История Российского государства. Том I. От истоков до монгольского нашествия. Часть Европы"
  4. Борис Акунин "История Российского государства. Том II. Ордынский период. Часть Азии"
  5. Борис Акунин "История Российского государства. Том III. От Ивана III до Бориса Годунова. Между Азией и Европой" - три замечательных книги. Все, что мне нравится в книгах Акунина - детальная подробность, ненавязчивость и много собственных рассуждений, подвергая сомнению какие-то исторические факты, отражено здесь. 
  6. Борис Акунин "Другой путь" - хорошие рассуждения о настоящей любви. Мнение автора о настоящей любви и всем, что с ней связано. Есть о чем подумать после прочтения.
  7. Мартин Фаулер "Архитектура корпоративных программных приложений" - если честно, я мало чего понял. То ли книгу надо читать в оригинале, то ли в печатном варианте разбираться.

На остальные книги по программированию в этом году времени не осталось. А те, что мог прочитать, не имели для меня профессионального интереса.

четверг, 26 февраля 2015 г.

Исправление ошибки при использовании P/Invoke

Чтобы исправить вот эту ошибку:

System.BadImageFormatException: Была сделана попытка загрузить программу, имеющую неверный формат.

Нужно в свойствах проекта Visual Studio установить платформу сборки x86.Properties - Build - Platform Target - x86



#slack for windows with desktop notifications

Hello there!

There are no official desktop Slack version, so I started to search non-official clients. I have found this project SlackUI, but that version does not support desktop notifications :(

So, I have been working on new Slack UI with desktop notifications. Here is result of my work (be careful, 25 Mb GIF):

https://lh4.googleusercontent.com/GdVxADmQTy3BRVpF7X2Ml8SoCmvxjcg2tOkcLEMERnB5ZNba-hXwEQ3p4ym3lc7xkYA7dlEFyZk=w1896-h875




What works?

  • Drag'n'Drop
  • Notifications

What doesn't work?

  • Opening links in new window
  • Hiding to tray

Where can I download?

четверг, 19 февраля 2015 г.

How to set Omnibus Gitlab unicorn workers count

Stop your gitlab instance

sudo gitlab-ctl stop

Edit file
/etc/gitlab/gitlab.rb


Uncomment and set unicorn workers count

#!/bin/sh
##################
# GitLab Unicorn #
##################
## Tweak unicorn settings.

# unicorn['worker_timeout'] = 60
unicorn['worker_processes'] = 1

How to set Omnibus #Gitlab #Sidekiq workers count

Stop your gitlab instance

sudo gitlab-ctl stop

Edit file
/opt/gitlab/sv/sidekiq/run


Set your workers count

#!/bin/sh

cd /var/opt/gitlab/gitlab-rails/working

exec 2>&1

exec chpst -e /opt/gitlab/etc/gitlab-rails/env -P \
  -U git -u git \
  /opt/gitlab/embedded/bin/bundle exec sidekiq \
    # ADD THE LINE BELOW AND SET NUMBER OF WORKERS
    -c 3 \  # <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SET NUMBER OF WORKERS HERE
    -q post_receive \
    -q mailer \
    -q system_hook \
    -q project_web_hook \
    -q gitlab_shell \
    -q common \
    -q default \
    -e production \
    -r /opt/gitlab/embedded/service/gitlab-rails \
    -t 4

четверг, 25 декабря 2014 г.

WPF set application-wide Culture, NumberFormat, Decimal separator

WPF by default uses built-in culture settings that come with .Net Framework libraries.

For example, for ru-RU culture double must look like 123456,789, for en-US like 123456.789, so if you don't want your users to be angry, you must set your application culture at startup. However, our users want to see doubles like in en-US culture, e.g. 123456.789

There are two ways to do this:

1. Modify current culture settings. And that is awful
   a. Not all controls support such behaviour
   b. This code breaks all your hopes:
    XmlLanguage xmlLanguage = XmlLanguage.GetLanguage("ru-RU");
    FrameworkElement.LanguageProperty.OverrideMetadata(typeof (FrameworkElement),
                                                       new FrameworkPropertyMetadata(xmlLanguage)); 

    XmlLanguage ignore all modifications to Thread.CurrentThread.CurrentCulture

2. Register your own culture (works if your users can get administator rights).


        private const string CultureName = "ru-MIT";
        private const string cultureEnglishName = "ru-MIT";
        private const string cultureNativeName = "Русский (Мит)";

        private static void Main(string[] args)
        {
            CreateAndRegisterOwnCulture();
        }

        private static void CreateAndRegisterOwnCulture()
        {
            var ownCulture = new CultureAndRegionInfoBuilder(CultureName, CultureAndRegionModifiers.None);

            var parentCulture = new CultureInfo("ru-RU");
            var region = new RegionInfo("RU");
            ownCulture.LoadDataFromCultureInfo(parentCulture);
            ownCulture.LoadDataFromRegionInfo(region);

            ownCulture.CultureEnglishName = cultureEnglishName;
            ownCulture.CultureNativeName = cultureNativeName;

            var nfi = (NumberFormatInfo) parentCulture.NumberFormat.Clone();
            nfi.NumberDecimalSeparator = ".";
            nfi.NumberGroupSeparator = " ";
            nfi.CurrencyDecimalSeparator = ".";
            nfi.CurrencyGroupSeparator = " ";

            ownCulture.NumberFormat = nfi;
            ownCulture.Parent = parentCulture;


            if (SystemHasMitCulture())
            {
                Console.WriteLine(">>> System already has own culture :)");
                return;
            }

            // Admin rights are needed here
            // CultureAndRegionInfoBuilder.Unregister(CultureName);

            try
            {
                // Admin rights are needed here
                Console.WriteLine(">>> Trying to set own culture");
                ownCulture.Register();
                Console.WriteLine(">>> Own culture set successfully");
            }
            catch (UnauthorizedAccessException)
            {
                Console.WriteLine(">>> Set own culture failed :(");
            }
            catch (InvalidOperationException)
            {
                Console.WriteLine(">>> Culture is already registered :)");
            }
        }

        private static bool SystemHasMitCulture()
        {
            return CultureInfo.GetCultures(CultureTypes.UserCustomCulture).Any(ci => (ci.Name == CultureName));
        }

The same code on Github Gist: https://gist.github.com/Snegovikufa/f051959dd105b7e56405

Python setup.py build vcvarsall.bat error

If you get this error when running python setup.py build

error: Unable to find vcvarsall.bat

You need:
1. Install Microsoft Visual C++ Compiler for Python 2.7
http://www.microsoft.com/en-us/download/details.aspx?id=44266
2. Upgrade setuptools
3. Try again

вторник, 11 ноября 2014 г.

Выбор графика для отображения данных

Иногда возникает проблема выбора каким же графиком отобразить данные. Надеюсь вот эти картинки смогут помочь.



Configuring Jenkins for C# projects

Steps in my build configuration Restore nuget packages chcp 1251 .nuget\nuget.exe restore Swag.sln Build solution chcp 1251 cmd.e...