понедельник, 28 декабря 2020 г.

Как починить флешку, которая не опознаётся Windows

Бывает такое. Особенно при (или после) использовании флешки в качестве установочного диска конкурирующей операционной системы. Или после неудачной попытки не очень стандартных манипуляций с накопителем USB-flash.

Винда вроде опознаёт устройство, т.е. на уровне железа всё работает. Disk Management видит накопитель и даже разделы на нём, но сделать ничего не возможно: все действия заблокированы.

В таком случае может помочь следующее.

1. Запустить cmd.exe с правами администратора.

2. Запустить Diskpart. Далее команды выполняются программой Diskpart.

3. Посмотреть список дисков

list disk

4. Выбрать из списка проблемный диск

select disk <указать номер диска>

Ориентироваться можно по объёму накопителя. Также можно сначала посмотреть список дисков в оснастке Disk Management для более полной информации о дисках и разделах. Номера дисков в Disk Management и Diskpart вроде совпадают.

5. Сбросить атрибут read-only

attributes disk clear readonly

6. Очистить конфигурационную информацию

clean

7. Создать раздел

create partition primary

8. Отформатировать раздел

format fs=fat32 quick

9. Завершить работу с Diskpart

Exit

Выйти из Diskpart можно уже после шага 6. Шаги 7 и 8 можно выполнить в оснастке Disk Management.

суббота, 8 апреля 2017 г.

Убрать рекламу в uTorrent за 15 секунд

Легально, бесплатно, без смс.

Проверено и работает на последней версии 3.4.2 (win)
  1. Options > Preferences > Advanced (Настройки > Настройки программы > Дополнительно)
  2. Выставить параметрам «offers.sponsored_torrent_offer_enabled» и «gui.show_plus_upsell» значения «false»
  3. Нажать «OK» и перезагрузить программу
Взято отсюда.

На версии 3.5 надо изменить ещё один параметр:
  • offers.left_rail_offer_enabled -> false

среда, 11 января 2017 г.

Добавление шрифта для окна консоли

Оригинальная статья: https://support.microsoft.com/en-us/kb/247815
Article ID: 247815 - Last Review: 12/05/2015 17:45:43 - Revision: 2.3

Шрифты должны удовлетворять следующим условиям, чтобы быть доступными в окне сеанса командной строки:
  • Шрифт должен быть моноширинным.
  • Шрифт не может быть наклонным.
  • Шрифт не может иметь отрицательные значения свойств A или C.
  • Если шрифт TrueType, он должен быть FF_MODERN.
  • Если он не является шрифтом TrueType, он должен быть OEM_CHARSET.
Дополнительные критерии для азиатских установок:
  • Если он не является шрифтом TrueType, имя шрифта должен быть «Терминал».
  • Если шрифт TrueType азиатских языков, он также должен быть набор знаков азиатских языков.
В Windows 2000 установка Console Fonts больше автоматизирована. Это было сделано для увуличения стабильности работы окна консоли в многоязычных средах. Но на свой страх и риск эту задачу можно решить, добавив в реестр запись для определения шрифта для консоли.


В раздел реестра:


HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont

добавьте строковый параметр (String Value)

Name = 00

Data = "Название шрифта" (без "")

Имя должно быть увеличено на "0" для каждого дополнительного шрифта. Значение ключа должно соответствовать названию шрифта в разделе реестра:


HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Fonts 

Применимо к:
Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Datacenter Server, Microsoft Windows NT Server 4.0 Standard Edition, Microsoft Windows NT Workstation 4.0 Developer Edition,
а также к
Windows 7 Ultimate, и, скорее всего, ко всем промежуточным версиям Windows.

среда, 23 марта 2016 г.

Тайна Тетриса

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

На моей памяти, этот же вопрос возникал и впоследствии. В головах совершенно различных людей, при игре в различные реализации Тетриса, в совершенно разной обстановке.

Причём все эти люди, да и я сам, склонялись к мнению, что Тетрис всегда, или в какие-то моменты просчитывает ситуацию и подкидывает "правильные" фигуры. А смысл игры сводится к тому, что бы понять логику алгоритма, заложенного в программу, и укладывать фигуры в "правильные" места. Тогда можно добиваться очень высоких результатов.

Интерес к этому вопросу подогревало то обстоятельство, что Алексей Пажитнов, изобретатель Тетриса, "занимался проблемами искусственного интеллекта и распознавания речи, а для обкатки идей применял головоломки, в том числе и классическое пентамино" (цитата из Википедии).

Наконец, по прошествии более 30 лет, у меня дошли руки сделать собственную реализацию Тетриса. Я нашёл эмулятор ДВК-2 для PC и тот самый Tetris, в который играл тогда. И сделал программу, максимально точно повторяющую внешний вид, управление и поведение той игры.

Поиграв в свою игрушку, в которой используется самый примитивный генератор случайных чисел, я пришёл к выводу: искусственного интеллекта в Тетрисе нет.


воскресенье, 26 января 2014 г.

Монитор

Дома 30" монитор с разрешением 2560х1600 - это круто! Сразу чувствуешь себя человеком.

понедельник, 18 февраля 2013 г.

Упаковка значения в C#

Обнаружил забавный эффект при упаковке значения. Берём пример из книги "C# 2010: ускоренный курс для профессионалов" Трея Нэша:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace test03
{
    public interface IPrint
    {
        void Print();
    }

    public struct MyValue : IPrint
    {
        public int x;
        public void Print()
        {
            Console.WriteLine("{0}", x);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyValue myval = new MyValue();
            myval.x = 123;
            myval.Print();     // (1)

            IPrint printer = myval;
            myval.x = 456;
            myval.Print();     // (2)

            printer.Print();   // (3)
        }
    }
}


и вставляем в него две строчки, выделенные жирным шрифтом. Что получаем?

123
456
123

Выражения (1) и (2) работают как и ожидается. Выражение (3) вроде должно было бы также вывести 456, но выводит 123.

На мой взгляд, имеется в наличии источник трудноотлавливаемых ошибок. Значение в поле структуры было изменено, а интерфейс printer помнит старое значение, поскольку именно оно и было неявно упаковано при создании объекта-интерфейса. Теперь в программе значение (в смысле типа, т.е. struct) myval существует в двух ипостасях: со значением (в смысле содержимого) поля x, равным 123, и со значением 456. Что и подтверждает явная распаковка, которую можно добавить после (3):

            MyValue unpacked_myval = (MyValue)printer;
            unpacked_myval.Print();


Вот.

Тестировалось на MS VS 2008.

четверг, 6 сентября 2012 г.

Знакомство с Ruby. Первые впечатления

В последнее время в различных публикациях (обычно в Интернете) всё чаще стали мелькать названия языков программирования типа Haskell, Lua, Python, Erlang, Ruby и пр. Естественно мне захотелось посмотреть в каком направлении идёт развитие, и что ожидает программирование в ближайшем будущем.

Я остановился на Ruby. Выбор был сделан достаточно случайно, основываясь на характеристике из Википедии. Цитирую:

…динамический, рефлективный, интерпретируемый высокоуровневый язык программирования для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Ruby близок по особенностям синтаксиса к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и CLU.

Привлекло, что это язык, ориентированный на ООП, близок к Perl (который я неплохо знаю), а также, что он «некоторыми чертами» пересекается с тем же Питоном. И вообще, судя по статье, очень интересный язык.

Установочный пакет (Ruby ver. 1.9.3 под Windows) был взят с официального сайта Ruby, а в качестве основного путеводителя я выбрал книгу Д.Флэнаган, Ю.Мацумото «Язык программирования Ruby», поскольку лучше, чем автор, про язык всё равно никто не расскажет. Установка прошла без проблем, и я начал осваивать новый для себя язык.

Самое первое впечатление (или ожидание?) от языка, что это Perl с нормально организованным ООП: т.е. с системой классов, наследованием, инкапсуляцией и пр. Отсутствие нормального ООП мне всегда досаждало в Perl. Однако в последствии оказалось, что Ruby – это скорее нечто среднее между Perl и JavaScript с примесью ООП в духе C++. Что вроде бы и неплохо.

Второе ожидание было навеяно цитатой из письма Мацумото (из статьи в Википедии): «Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть)». Из этого я сделал вывод, что Ruby по сравнению с Perl, должен быть логически более стройным и более строгим. Пока это ожидание, мягко говоря, не оправдалось.

У меня сложилось впечатление, что Ruby не проектировался, как например Pascal или Modula. За основу был явно взят Perl, а потом разработка языка шла примерно так: это мне не нравится – выкинем, а вот такая штука мне нравится – вставим. Т.е. в итоге получился некий салат из различных концепций и возможностей, в котором «привкус игрушечного языка» чувствуется гораздо сильнее, чем в Perl.

Что мне сильно не понравилось в Ruby:
  • Отсутствие логической стройности синтаксиса. Синтаксис C, C++, Pascal – логичен, Ruby – нет. Один неправильно поставленный пробел изменяет семантику выражения – это нормально? Одну и ту же семантическую конструкцию можно написать несколькими разными способами.
  • Следствием предыдущего пункта является сложность языка. (Хотя одной из отправных точек при создании Ruby была именно простота языка.) Даже если взять вышеупомянутую книгу «Язык программирования Ruby», в ней 492 страницы. Обычно книги «Язык программирования <название_языка>» (книги начального уровня, т.е. описание языка) имеют 300, плюс минус 50 страниц среднего формата, включая оглавление, предметный указатель и описание грамматики языка в РБНФ. На моей памяти только два языка имели более объёмные описания: Ada и Prolog.
  • Избыточное количество методов для встроенных классов. Например, зачем классу Integer нужно иметь три различных итератора upto, downto и times, да еще и step, унаследованный от Numeric?
  • «Опасность» языка или, лучше сказать, незащищённость от ошибок. Про Perl кто-то из корифеев сказал, что только сумасшедший будет писать на Perl без прагмы strict и ключа –w в командной строке интерпретатора. Видимо на Ruby пишут исключительно сумасшедшие.

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