Saturday, September 14, 2019

Backup with fixed size chunks

Here is a program to split large folders to fixed size chunks to backup it. Usually it takes 5 minutes to create ten 4Gb chunks with preserved folder structure you simply merge it again from backup. It supports Unicode for folders as well.

class Program
    {
        private const int MB = 1000000;
        private static string _folder;
        private static string _destFolder;
        private static bool _sameDestination;
        private static long _chunkSize;
        private static bool _move;
        private static bool _owerride;

        private static List<string> _skippedFiles = new List<string>();
        private static long _totalCount;
        private static long _totalSize;
        private static string[] _files;

        [DllImport("kernel32.dll", SetLastError = true)]
        static extern IntPtr GetStdHandle(int nStdHandle);

        [DllImport("kernel32.dll")]
        static extern bool ReadConsoleW(IntPtr hConsoleInput, [Out] byte[]
           lpBuffer, uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead,
           IntPtr lpReserved);

        public static IntPtr GetWin32InputHandle()
        {
            const int STD_INPUT_HANDLE = -10;
            IntPtr inHandle = GetStdHandle(STD_INPUT_HANDLE);
            return inHandle;
        }


        static void Main(string[] args)
        {
            Console.WriteLine("Folter to backup:");
            _folder = ConsoleReadLine();

            if(!Directory.Exists(_folder))
            {
                Console.WriteLine("NOT FOUND");
                return;
            }

            Console.WriteLine("Same destination?");
            string yesNo = Console.ReadLine();
            _sameDestination = yesNo.ToLower() == "yes";

            if (!_sameDestination)
            {
                Console.WriteLine("Destination folter:");
                _destFolder = ConsoleReadLine();

                if (!Directory.Exists(_destFolder))
                {
                    Console.WriteLine("NOT FOUND");
                    return;
                }
            }
            else
            {
                _destFolder = _folder;
            }

            Console.WriteLine("Size of CD MB:");
            _chunkSize = Convert.ToInt64(Console.ReadLine()) * MB;

            Console.WriteLine("Move files?");
            _move = Console.ReadLine().ToLower() == "yes";

            Console.WriteLine("Owerride partial results?");
            _owerride = Console.ReadLine().ToLower() == "yes";

            ScanForFilesLargeWhenSize();
            PreStatistics();

            Console.WriteLine("Are you sure tu start?");
            yesNo = Console.ReadLine();

            if(yesNo.ToLower() != "yes")
            {
                Console.WriteLine("FINISED");
                return;
            }

            ProcessFolter();
        }

        private static string ConsoleReadLine()
        {
            const int bufferSize = 1024;
            var buffer = new byte[bufferSize];

            uint charsRead = 0;

            ReadConsoleW(GetWin32InputHandle(), buffer, bufferSize, out charsRead, (IntPtr)0);
            // -2 to remove ending \n\r
            int nc = ((int)charsRead - 2) * 2;
            var b = new byte[nc];
            for (var i = 0; i < nc; i++)
                b[i] = buffer[i];

            var utf8enc = Encoding.UTF8;
            var unicodeenc = Encoding.Unicode;
            return utf8enc.GetString(Encoding.Convert(unicodeenc, utf8enc, b));
        }

        private static void ProcessFolter()
        {
            int chunkIndex = 0;
            long currentSize = 0;
            string currentFolter = string.Empty;
            long currentCount = 0;
            foreach (var file in _files)
            {
                string chunkName = string.Empty;
                var info = new FileInfo(file);
                if (chunkIndex == 0 || currentSize + info.Length > _chunkSize)
                {
                    if (chunkIndex > 0)
                    {
                        Console.WriteLine("Chunk created: {0}", currentFolter);
                        Console.WriteLine("Chunk size: {0} MB", currentSize / MB);
                        Console.WriteLine("Chunk file count: {0}", currentCount);
                    }
                    currentSize = 0;
                    currentCount = 0;
                    chunkIndex++;
                    chunkName = $"CD_{chunkIndex}";
                    currentFolter = Path.Combine(_destFolder, chunkName);
                    Directory.CreateDirectory(currentFolter);
                }

                string subFolder = CreateChunkSubfolder(file, currentFolter);
                string destFile = Path.Combine(currentFolter, subFolder, info.Name);
                long size = info.Length;
                if (File.Exists(destFile) && _owerride)
                {
                    File.Delete(destFile);
                }
                if (!File.Exists(destFile))
                {
                    if (_move)
                    {
                        File.Move(file, destFile);
                    }
                    else
                    {
                        File.Copy(file, destFile);
                    }
                    currentSize += size;
                    currentCount++;
                }
                else
                {
                    currentSize += new FileInfo(destFile).Length;
                }
            }
        }

        private static string CreateChunkSubfolder(string file, string destFolder)
        {
            string result = Path.GetDirectoryName(file).Replace(_folder, string.Empty).TrimStart(Path.DirectorySeparatorChar);
            string[] subfolders = result.Split(Path.DirectorySeparatorChar, StringSplitOptions.RemoveEmptyEntries);
            string curentFolder = destFolder;
            foreach(var folder in subfolders)
            {
                curentFolder = Path.Combine(curentFolder, folder);
                if (!Directory.Exists(curentFolder))
                {
                    Directory.CreateDirectory(curentFolder);
                }
            }
            return result;
        }

        private static void PreStatistics()
        {
            Console.WriteLine("====================");
            Console.WriteLine("Total size to process: {0} MB", _totalSize / MB);
            Console.WriteLine("Total files count to process: {0}", _totalCount);
            Console.WriteLine("Minimal estimated chunks: {0}", (_totalSize / _chunkSize)+1);
            Console.WriteLine("Destination folder: {0}", _destFolder);
            Console.WriteLine("====================");
        }

        private static void ScanForFilesLargeWhenSize()
        {
            _files = Directory.GetFiles(_folder, "*", SearchOption.AllDirectories);
            foreach (var file in _files)
            {
                var info = new FileInfo(file);
                if (info.Length > _chunkSize)
                {
                    _skippedFiles.Add(file);
                    Console.WriteLine("{0} SKIPPED with size {1} MB", file, info.Length / MB);
                }
                else
                {
                    _totalCount++;
                    _totalSize += info.Length;
                }
            }
        }
    }

dictionary for a year

I started to prepare to new year with new words and phrases:

topic1


kindness доброта

concise локаничный

beside рядом с

serving порция

brewer пивовар

occasional случайный

hang out for требовать

reach out добиваться

leak out обнаруживать
topic2


entire цельный

entice соблазнять

considerably значительно

blueprint детельный план

lay out планировать

efficient результативный

deal сделка

consume расходовать

approach подход

apparent очевидный

challenging многообещающий
topic3


eliminate устронять

negligible незначительный

state констатировать

product результат

degree степень

intuetively по наитию

meaningless бессмысленный

lastly в заключение

imagine воображать

however однако
topic4


multiply умножать

eliminating исключение

avoid избегать

coerce заставлять

although хотя

factorization разложение на множетели

modulus остаток от деления

sign знак

remaining оставшийся

fraction дробь
topic5


esoteric тайный

rounding округление

precisely точно

hence отсюда

yield давать результат

luckily к счастью

Build-in встроенный

work around в обход

suppementary добавочный

floor право выступать на собрании
topic6


round круглый

ceil перекрывать

representative образец

whether ли

unlike в отлиции

inequality разница

involve привлекать

prime простое число

improve улучшать

pattern принцип
topic7


notice замечать

square root квадратный корень

wonder удивляться

recall возвращаться

decompose раскладывать на составные части

purpose намерение

explore исследовать

various различный

useful успешный

since после того
topic8


easy to look at симпатичный

as well as также как

matched подходящий

within внутри

turn менять направление

throungh на протяжении

regular правильный

set приводить в нужное положение

massive цельный
topic9


of its own accord сам по себе

bracket заключать в скобки

immensely весьма

concept понятие

supplementary добавлчный

denote отмечать

recap краткое повторение

reside быть свойственным

spread разброс
topic10


even уравновешенный

odd разрозненный

refer обращаться

reduce приводить к простому виду

jagged неровно оторванный

daunting обескураженный

keeping соблюдение

Tick-tak-toe крестики нолики

tie связка

entrance вход

nicely тщательно
topic11


maze лабиринт

degree градус

versatile многосторонний

similarly подобныйм способом

mimic подражать

come down уменьшаться

candy леденец

acknowledgment благодарность

thus таким образом

transpose менять порядок
topic12


rank ряд

soil почва

slice часть

space распологаться с промежжутками

equation уравнение

stem стебель

attitude отношение

consideration размышление

toil трудиться

apart from не говоря уже
topic13


tolerance переносимость

term определенный период

significant существенный

despite несмотря на

pitfall подвох

fall into place становиться ясным

key основной

discard ненужный

imaired ослабленный

even даже
topic14


properly должныйм образом

outline очертить

during во время

marble соблазнительный

nutrition пища

since так как

whenever вский раз когда

rather вернее

mindful внимательный к

albeit all through it
topic15


bloat раздуваться

reciprocal обратный

solidify застывать

get soaked through промокнуть до нитки

case прецидент

themselves себя

proper должный

desired желательный

outcome итог
topic16


exibit выражать

qonquer подчинять

countdown обратный отчет

tail заключительная часть

prone предрасположенный

thankfully к счастью

concept идея

evaluate оценивать

just as well пусть будет так

brlong to относиться
topic17


gain преобретать

permutation перестановка

swap менять местами

supersede заменять

halfway на пол пути

retrieval извлечение

Trade-off компромис

marginally минимально

pivot опорный

exhaust исчерпывать
topic18


resultant проистекающий

preserve сохранять

hash крошить

nutshell в двух словах

persistent постоянный

determinate определенный

most большинство

uniform единообразный

distribution распределение

Head-on лобовое
topic19


probing прощупывание

versatile многоцелевой

sceleton набросок

peek быстрый взгляд

evaluate оценивать

native исконно присущий

mutate видоизменять

recall свспоминать

mention упоминать

consequent споследовательный
topic20


alter менять

distinction отличие

cashier кассир

parenthesis вводное слово

afterwards в последствии

shuffle перемешивать

fund out выяснять

inquiry запрос

futhermore к тому же

either любой из двух
topic21


temporal временный

spatial пространственный

obvious очевидный

least наименьший

exсeed превышать

susceptible восприимчивый

forced принудительный

agjusted отрегулированный

accordingly соответственно
topic22


bring приносить

evict выгонять

farthest самый дальний

approximate сходный

inferior частность

balancing уравновешивание

preordination предопределение

flatten выравнивать

otherwise иначе

named after назван в честь
topic23


achieve достигать

appropriate подходящий

traverse преодолевать

skew асиметрия

implied предпологаемый

ancestor предок

fairly должным образом

whether который из двух

percolation процеживание

remain оставаться
topic24


above больше чем

in place в наличии

likewise подобно

following нижеперечисленный

satisfied уверенный

straightforward простой

delve изучать

vertex вершина

edge грань

sparse редкий
topic24


consider рассматривать

fraction доля

dense черезмерный

mutual взаимный

acknowledge подтверждать

adjacency смекжность

so far до настоящего времени

exhausted потраченный

employ применять

regard касательно
topic25


chronological во временном порядке

thereof из этого

origin источник

overall полный

figure out разгадывать

moreover кроме того

trier делающий все что в его силах

brute force грубая сила

ahead будущий

mismatch не подходить
topic26


backtrack отказываться

fingerprint характерный признак

absence отсутствие

break down расщиплять

overlap частично покрывать

immense обширный

literally буквально

knapsack ранец

contigous соприкосающийся

bit of fat случайная удача

exosceleton панцырь
topic27


quit бровать

took out достал

lay класть

phone booth телефонная будка

mentally ill психически больной

stock market фондовый рынок

public debt государственный долг

pick fruits собирать фрукты

wild onion дикий лук

sell by date срок реализации товара
topic28


stranger посторонний человек

discarded выброшенный

rest of us остальные

deal with иметь дело с

tramp бродяга

refuse отказываться

although хотя

freight train грузовой поезд

hitchhike автостоп

mussel двухстворчатая ракушка

salmon лосось

declare обьявлять

reckon расчитывать

cruft хлам
topic29


peach персик

lamb ягненок

beetroot свекла

cabbage капуста

pear груша

aubergine баклажан

melon дыня

mussel мидия

beef говядина

prawn креветка
topic30


prawn придурок

coutgette мелкий кабачек

cucumber огурец

clue раскрывать секрет

pea горох

keen сообразительный

baker пекарь

vowel гласный звук

jar банка

sausage сосиска
topic31


squid кальмар

carton тетропак

tuna тунец

roast печь в духовке

baked испеченный

eat out питаться вне дома

be at grass пастись

streamed vegitables распаренные овощи

fried жаренный

grow выращивать
topic32


steak вифштекс

heading заглавие

advice совет

work out разобраться

cereals злаки

disease болезнь

fibre волокно

cabrohydrate углевод

cure лечение

oily маслянистый

Ready-made приготовленный

lasagne лазанья

plenty избыток

go ahead взять на себя решение

incredible маловероятный
topic33


cousin двоюродный брат

starter первое блюдо

lift подвестти

glass стакан

each other друг друга

shouting кричать

coach тренер

book заказывать

spoilt избалованный

jelaous ревнивый
topic34


reliable надежный

borrow занимать

Self-confident уверенный в чебе

hit ударять

sutubborn упрямый

generous великодушный

kind добрый

matured продуманный

talkative разговорчивый

tidy акуратный
topic35


bevy собрание

venue есто проведения

lebanese ливанский

go along with you так я тебе и поверил

piled ворсистый

pull up препарковаться

get out выходить из машины

lifeline жизненно важная комуникация

furniture мебель
topic36


hardly ever почти никогда

survive продолжать существовать

babysit няня

boarding school интернат

gathering заседание

rivalry соперничество

estranged раздельно проживающий

spouse супруг
topic37


waste растрата

afford иметь возможность

worth стоимость

raise увеличивать

owe быть должным

charge забота

lend одалживать

borrow заимствовать

debd долг
topic38


pay back оплачивать

interest привлекательность

parking meter счетчик стоянки

take out занимать

shy застенчивый

outgoing платежи

everywhere повсюду

share доля

income доход

checkue платежное поручение
topic39


fortnight две недели

healther вериск

shelter приют

swing качать

hut хижина

lend a hand помочь

sight зрелище

so far, so good все идет нормально

straightforward простой

savvy здравый смысл
topic40


peal звон колоколов

adoring поклоняющийся

particular частность

catchy притяательный

tune мелодия

regard считаться

take into account принять во внимание

around повсюду

huge огромный

while в то время как
topic41


performance исполнение

venue место проведения

follow следить за речью

take up браться за что либо

taste пристрастие

deaf глухой

distinguish различать

origin происхождение

emerge выясняться

syncopate упрощать слово пропуская звук

fond нежный
topic42


caring внимательный

especially сособенно

soothing успокаивающий

hit ударять

simultaneously одновременно

tape магнитная лента

such and such такой то

suited подходящий

algae водоросли

significantly многозначительно

excited взволнованный

recital подробное изложение
topic43


induction стимулировать

conduct руководство

enrollment зачисление

awareness осознание

syringe пшприц

prosper процветать

assurance уверенность

rob разбойничать

gain усиление

breath отверстие
topic44


minset образ мышления

devuate отклоняться

mailformed плохо сформированный

bypass обходить

comply соблюдать

tenant арендатор

liability ответственность

mitigate смягчать

disclosure обнаружение

tighty плотно

least previlegie наименьшая превилегия
topic45


sloppy небрежный

accuracy точность

nuisance неприятность

trunk магистратьный

abdominal crunch качание пресса

maintain поддерживать

overtake догнать

emphasize придавать особое значение

mention упомянуть

groceries бакалея

household семейный

expenditure расходывание

triple тройной

habit привычка

thive процветать

Monday, August 26, 2019

Old but not rusty

I started to utilize my GTX970 as parallel processing device. A strategy to support such old device is to downgrade operation system to a version that CUDA 5.5 toolkit supports. I still have no good progress with Ubuntu 12.0.4 but already built toolkit as well on Windows 10 especially via Visual Studio 2012 that available in visual studio web site. Thank you again for support historical versions of Visual Studio and business products, it often required for old devices maintenance.

GTX970 device info:

 CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 1 CUDA Capable device(s)
Device 0: "GeForce GTX 970"
  CUDA Driver Version / Runtime Version          9.1 / 5.5
  CUDA Capability Major/Minor version number:    5.2
  Total amount of global memory:                 4096 MBytes (4294967296 bytes)
MapSMtoCores for SM 5.2 is undefined.  Default to use 192 Cores/SM
MapSMtoCores for SM 5.2 is undefined.  Default to use 192 Cores/SM
  (13) Multiprocessors, (192) CUDA Cores/MP:     2496 CUDA Cores
  GPU Clock rate:                                1329 MHz (1.33 GHz)
  Memory Clock rate:                             3505 Mhz
  Memory Bus Width:                              256-bit
  L2 Cache Size:                                 1835008 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 65536
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 2 copy engine(s)
  Run time limit on kernels:                     Yes
  Integrated GPU sharing Host Memory:            No
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  CUDA Device Driver Mode (TCC or WDDM):         WDDM (Windows Display Driver Model)
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           1 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 9.1, CUDA Runtime Version = 5.5, NumDevs = 1, Device0 = GeForce GTX 970
Result = PASS

Wednesday, August 21, 2019

Decorator is going to a platform

PostSharp with free 10 classes licenses is going to be in Ubuntu LTS soon.
A trivial announce with not trivial changes in IL code synthesis i think.  When you started to work with porting libraries and ASP.NET to a target then this instrument will help to understand a difference that hidden in linux.

debug magazine archive

  71 jounals still available on issuu with great story of netlabels time.  debug_mag Publisher Publications - Issuu