Русский
Русский
English
Статистика
Реклама

Autohotkey

Перевод Однажды Microsoft забанила всю мою страну за читерство

19.03.2021 12:22:16 | Автор: admin

Об игре


Club Bing это набор игр, в которые можно было играть в 2007-2012 годах. Все игры были связаны со словами, в них нужно было играть онлайн, чтобы зарабатывать очки, которые можно было тратить в онлайн-магазине для покупки призов. Одна из игр называлась Chicktionary. Цель игры: использовать 7 слов, чтобы составить как можно больше слов.


Буквы, которые можно использовать, указаны внизу, а слова, которые нужно составить это маленькие яйца сверху. Всегда есть одно слово из семи букв.

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

  • 123 Main St. Apt #1, Anywhere, YZ, USA
  • 123 Main St. Apt #2, Anywhere, YZ, USA
  • 123 Main St. Apt #3, Anywhere, YZ, USA

Очевидно, наилучшим соотношением стоимости к очкам обладал контроллер XBox, поэтому можно было оставить компьютер набирать очки на нескольких аккаунтах, а затем тратить все очки на покупку контроллеров. На одном форуме был пост с фотографией парня, получившего почтой примерно 100 контроллеров за один день. Он сразу же выложил их на Ebay и продал. Другими призами были:

  • Телескопы
  • Проигрыватель
  • Xbox
  • Наручные часы Michael Kors
  • Одежда North Face
  • Надувной каяк

На всех призах была маркировка Bing.

Microsoft выпустила эту игру для рекламы своего поискового движка Bing. Каждый раз, когда ты вводил ответ, браузер выполнял его поиск в отдельном фрейме. Вероятно, это позволяло убедить людей больше пользоваться Bing, а также увеличивало количество пользователей, якобы использующих Bing. А этот показатель позволял Microsoft требовать больше денег у рекламодателей, желавших появляться в результатах поиска Bing. Я подсчитал, что все играющие в Chicktionary скриптеры составляли 2-4% от всех поисковых запросов Bing. К тому же я провёл небольшие вычисления, сравнив доход и ежемесячное количество поисковых запросов Google и Bing, и выяснил, что Microsoft получала от игры довольно неплохую прибыль. Иллюзия того, что Bing стал популярнее, вероятно, принесла больше рекламных долларов, чем стоили призы.

Скриптинг


Существовало несколько скриптов для автоматической игры, часто в них использовался AutoHotKey. Я написал собственный скрипт на VB.Net, у него был встроенный браузер. Я назвал его Chicken в честь Chicktionary, а ещё потому, что в моей стране был забавный телевизионный скетч о курице.


Так как игра была написана на Flash, было не очень легко взаимодействовать с элементами в DOM, поэтому игровой процесс состоял из сочетания:

  • Взаимодействий DOM
  • browser.Go(<URL>)
  • Скриншотов и поиска пикселей
  • Windows API для имитации ввода и нажатий мыши

В Microsoft работают не дураки. Они знали о существовании хакеров. Они отлично справлялись с выявлением пользователей, слишком быстро решающих головоломки, и обнуляли их призы. Кроме того, они усовершенствовали распознавание дубликатов адресов доставки. И, разумеется, они использовали капчу.

Captcha


Знаете, такие кривые буквы, которые нужно вводить, чтобы доказать, что ты человек:


Можно подумать, что они бы полностью препятствовали автоматизации, но это не так. Существует больше десятка онлайн-сервисов решения captcha. Их цена составляет примерно 1 доллар за 500 решённых капч. Club Bing отображал капчу через каждые четыре игры. За каждую игру ты получал 20 билетов (если ввести все слова правильно), а Xbox стоил 55000 билетов.

(55000 билетов / Xbox) * (1 игра / 20 билетов) * (1 капча/ 4 игры) * (1 доллар / 500 капч) = 1,375 доллара за Xbox

Довольно выгодная сделка. Кроме того, для этого понадобится 55 дней, потому что в день можно зарабатывать только по 1000 билетов. Но можно завести несколько разных аккаунтов, чтобы через 55 дней получить несколько консолей Xbox. С более дешёвыми призами всё было ещё быстрее: видеоигра стоила 5000 билетов.

Существование сервисов для решения капч объясняет, почему читерство было настолько популярным: эти сервисы имеют партнёрские программы. Скрипт, выполнявший решение, отправляет вместе с запросом партнёрский код, благодаря чему когда пользователь платит, партнёр получает часть денег. Поэтому у скриптописателей была мотивация распространять свои скрипты и писать самые качественные.

Капча с котами


Примерно в 2010 году Microsoft заменила алгоритм капчи с кривых букв на Asirra. Asirra выглядит вот так:


На каждом из этих изображений есть кошка или собака. Чтобы решить задачу, нужно правильно определить 12 из 12 кошек или 11 из 12 дважды подряд.

Когда Club Bing перешёл на эту капчу, всё сообщество читеров Club Bing приостановило свою деятельность. Я приступил к работе.

Первым делом я попробовал отправлять сервису решения капч кошек и собак. В 2010 году эти сервисы не обладали мощными средствами распознавания изображений. Это были просто люди из Бангладеша, отвечавшие на ваши запросы. Я попытался прикинуть, сколько они зарабатывали:

(2000 рабочих часов / год) * (1 капча/ 5 секунд) * (1 доллар / 500 капч) = 2880 долларов / год при полной занятости.

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

Я захотел узнать, смогут ли они решать Asirra. Вот изображение, которое я отправил:


Используемый мной сервис de-captcher вернул такой ответ:

cat or dog?

Строго говоря, он был верным, но меня не устраивал. Я отправил картинку ещё несколько раз:

imageimage

Чтобы получить полезный ответ, потребовалось четыре попытки:

dog

Это не предвещало ничего хорошего. Во-первых, мне нужно было 12 правильных ответов. Если предположить, что каждый раз на поиск работника в Бангладеше, способного сделать всё правильно, потребуется 4 попытки, то это составит 48 запроса. Цена Xbox только увеличилась до 66 долларов! А если они ошибутся хотя бы один раз, мне придётся удвоить эту сумму. Немыслимо! Мне нужно было решение получше.

Почему бы просто не использовать глубокое обучение?


Не забывайте, что дело происходило в 2010 году. Глубокое обучение (deep learning) тогда было развито совсем не так хорошо, как сейчас. В этой статье Стэнфордского университета говорится, что авторам удавалось использовать машинное обучение для правильного решения головоломок всего примерно в 10% случаев. Совершенно неприемлемо! (В основном они просто замечали зелёный цвет, потому что собаки лежат на лужайке с большей вероятностью, чем кошки.)

Также Microsoft использовала схему token-bucket, которая временно блокировала пользователя, если он слишком много раз подряд ошибается. Хотя token-bucket не выполнялась на тестовом сервера Asirra, её применяли в Club Bing.

Harvest: новая надежда


Исследовательский отдел Microsoft создал веб-сайт для демонстрации новой технологии Asirra.
На нём была тестовая площадка, на которой можно было проверить работу сервиса, она сообщала, если вы решали всё правильно. Снова взглянем на изображение:


Видите эту маленькую кнопку Adopt me (Приюти меня)? Она там есть, потому что Asirra была результатом партнёрства с petfinder.com. Petfinder это сервис поиска новых хозяев для домашних питомцев, у которого есть большие списки животных. При нажатии на кнопку Adopt me браузер переходит к профилю этого животного. Разумеется, в профиле указан его вид: кошка или собака.

Повторюсь, в Microsoft работают не дураки. Они знали, что кто-то попробует нажимать на Adopt me под каждым изображением и получить правильный ответ. Поэтому они делали недействительными саму задачу капчи и все ссылки на профили после первого нажатия на кнопку Adopt me. То есть можно было получить только один ответ.

Я решил написать программу, которая сделает это много раз и сопоставит каждое изображение с числом:

  • 0: неизвестно
  • 1: собака
  • 2: кошка

Я назвал её Harvest (уборка урожая), чтобы продолжить тему куриц и сельского хозяйства.

Каждая попытка занимала довольно мало времени, но я не знал, сколько животных мне нужно узнать. На веб-сайте Asirra утверждалось, что их 3,1 миллиона. Но на самом ли деле это так?

Обратный парадокс дней рождения


Многим людям известен парадокс дней рождения: несмотря на то, что в году 365 дней, достаточно собрать в одной комнате всего 22 человека, чтобы получить вероятность 50 на 50 того, что у двух из них день рождения совпадает. Если d=365, а n=22, то вероятность можно посчитать так:


Обратность заключается в том, что если мы знаем, что 22 человека в комнате дают вероятность 50 на 50 нахождения двух людей с одинаковым днём рождения, то можно перевернуть уравнение и вычислить, сколько дней в году.

Аналогично если я буду запрашивать серверы Asirra и отслеживать каждое встреченное изображение, то как долго мне надо будет ждать повтора? Я провёл примерно такой эксперимент (но на VB.Net, а не на псевдокоде python):

def trial():   images_seen = []   while True:       p = fetch_puzzle()       for image in p.images():           if image in images_seen:               break           images_seen.append(image)   return len(images_seen)

В каждой попытке я запрашивал задачи, пока не получу в попытке повтор кошки или собаки. Я проводил множество попыток и отслеживал, сколько изображений получалось до первого повтора. Затем я брал медиану всех этих попыток, что позволяло мне определить, сколько животных нужно увидеть, прежде чем вероятность повтора составит 50 на 50. Далее я вычислил в обратном порядке представленное выше уравнение, чтобы получить количество изображений. И в самом деле, мой ответ оказался достаточно близок к 3,1 миллиона.

Распределённая уборка урожая


Я записал свой скрипт на USB-флэшки и раздал их друзьям. Также я написал программу слияния для объединения баз данных. Через каждые один-два дня мои друзья возвращали мне свои флэшки, я запускал Combine (комбайн, снова сельскохозяйственная тема) и записывал базу на все флэшки, чтобы мои уборщики урожая не повторяли свою работу. Уборщики нажимали Adopt me только на неизвестных изображениях, поэтому поддержание актуальности распределённых баз данных позволяло избегать повторной работы.

Можно ли ускориться?


Спустя 2-3 недели я собрал примерно 1,5 миллиона изображений. Я приближался к этапу, когда задачу иногда можно было почти решить из базы данных. Однако в базе данных присутствовали никогда не заполняемые дыры, потому что ссылка по кнопке Adopt me была сломана. Возможно, это животное уже забрали? Я добавил в базу данных ещё один результат:

  • 0: неизвестно
  • 1: кошка
  • 2: собака
  • 3: нерабочая ссылка

Но есть и другой способ получить правильный ответ: отгадать!

Asirra давала знать, если пользователь решил задачу правильно. Я погонял код какое-то время и замерил следующие показания:

  • adopt_time: сколько времени нужно для нажатия на ссылку Adopt me, загрузку petfinder.com и получить ответ кошка/собака.
  • adopt_success_rate: вероятность того, что при нажатии на Adopt me мы получим ответ, а не сломанную ссылку.
  • guess_time: сколько времени нужно на то, чтобы отправить случайную догадку и узнать, правильно ли решена задача. (На это требовалось меньше времени, чем на загрузку petfinder.com.)

Предположив, что соотношение кошек к собакам 50 на 50 (на самом деле оно было ближе к 40 на 60, ну да ладно), я мог вывести уравнение того, сколько животных я узнаю за секунду при помощи adopt me:

adopt_learning_rate = 1 / adopt_time * adopt_success_rate

Также можно было вычислить скорость узнавания при догадках. Если количество неизвестных животных равно n, то вероятность угадать правильно равна 1 к 2n. Но если я угадаю их правильно, то узнаю все n животных:

guess_learning_rate = n / guess_time * (1 / 2**n)

Приравняв эти два значения и вычислив n, я смог выяснить, что если знаю больше, чем 7 из 12 животных, то смогу просто угадывать остальных, и это будет эффективнее, чем adopt me. Я поместил этот код в уборщик урожая, и пару недель спустя у меня и друзей была достаточная для работы база данных.

Cats Be Gone: сервер решений


Microsoft Research проделал хорошую работу, но допустил пару ошибок в протоколе. Во-первых, они не ограничили частоту запросов к сервису. Благодаря этому и стала возможной уборка урожая. Во-вторых, они неправильно реализовали proofs-of-work.

В процессе решения капчи есть три стороны:

  1. Поставщик captcha (например, Microsoft Asirra или Google reCaptcha)
  2. Сервер captcha (например, Club Bing или другой веб-сервер)
  3. Пользователь captcha (например, игроки в Club Bing)

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


Эта идея плоха по нескольким причинам:

  1. Теперь вся обработка производится на сервере. Что если сервер реализует её неправильно?
  2. Если Asirra когда-нибудь захочет изменить протокол, то каждому серверу придётся обновлять своей веб-сайт.
  3. Сервер-имитатор может стать самым эффективным уборщиком урожая.

Вот как это работало на самом деле (на этот раз для удобства чтения Asirra размещён посередине):


Теперь серверу не нужно знать подробностей работы системы. У него даже нет ответа! Но здесь Microsoft совершила ошибку:

  • В Club Bing было ограничение по частоте, поэтому нельзя было совершать слишком много ошибок подряд, но такого ограничения не было у Asirra.
  • Отсутствовала проверка токена по IP-адресу.

Поэтому я с лёгкостью смог создать веб-сайт cats-be-gone.kicks-ass.org, передававший действительные токены по HTTP. Вот так:


(Хотя IP-адреса токенов не проверялись, проверялась их метка времени. Токены были действительны только примерно один час. Сервер Cats Be Gone (Кошки, брысь) на самом деле генерировал их заранее, и всегда имел наготове 20 токенов, чтобы они были под рукой, когда потребуются.)

Мы с друзьями успешно попользовались какое-то время этим сервером, и в процессе сбора сервером новых ответов ситуация становилась всё лучше.

Превращаем эту систему в бизнес (доход за всё время: 0 долларов)


Поговорив с друзьями, я подумал: Стоит открыть сервер для всех и сделать из него бизнес! Люди уже привыкли к сервисам платы за капчи, поэтому я решил, что они будут вместо этого платить мне. Я решил брать по 1 доллару за 200 решений, это больше, чем стандартная ставка 1 доллар/500, но у меня не было конкурентов. Я выложил клиент на один из самых популярных форумов для подобных вещей и открыл Google Store для приёма платежей.

На форумах много болтали о том, что это какой-то способ обхода, а не солвер, поэтому когда дойдёт время до покупки приза, полученные билеты будут деактивированы. В прошлом уже были проблемы с программами обхода капчи. Люди имели полное право на подозрения. Поэтому я на какое-то время сделал сервис бесплатным. А после того, как он начал доказывать свою действенность при отсутствии альтернатив, у меня появились клиенты и 50 долларов на потенциальных продажах. Ого, да я теперь богач! Ага, точно! Даже бангладешцы выгоднее тратили своё время.

Я обещал, что не буду обрабатывать оплату, пока не будет потрачено 10% платежа, и что верну деньги неудовлетворённым покупателям. Однако всего спустя неделю я отменил все заказы, потому что защита Microsoft полностью уничтожила мою идею.

Империя Microsoft наносит ответный удар


Всё это время Microsoft пыталась использовать различные способы, чтобы победить моё читерство. Первым делом они попробовали переименовать все изображения. Это оказалось полной катастрофой и мне пришлось начинать всё сначала, потому что единственная привязка к кошке или собаке была по имени файла!

Да не, шучу, конечно. Я уже скачал все изображения. 3,1 миллиона изображений по 1 МБ каждый это всего 3,1 терабайта. Даже в те времена 3 терабайта были вполне доступны. Это на меня никак не повлияло. Я знал, что они могут попробовать что-то подобное, поэтому написал уборщик-скачиватель.

Ещё они попытались изменять изображения. Случайным образом выбирались 10-20 пикселей изображения и менялся их цвет. Этого было бы более чем достаточно для поломки любого криптографического хэша, который бы я мог использовать, например, сопоставление SHA1(image), -> cat/dog. Но я его не использовал. Я пользовался MinHash.

Хэширование изображений, v1: MinHash


MinHash очень прост: выбираем десять пикселей изображения и выполняем конкатенацию их значений. Вот и всё. Пока вы выбираете одни и те же десять пикселей, результат будет постоянным.


Если Microsoft изменит пару пикселей, то это особо ни на что не повлияет. Каковы шансы, что они совпадут? А если и совпадут, то это, вероятно, будет всего 1 из 12 изображений, поэтому я могу просто попробовать угадать ответ для него. В худшем случае придётся получить ещё одну задачу и попробовать снова.

И это сработало. Я также сделал так, чтобы сервер обновлялся самостоятельно при правильной догадке и база данных со временем пополнялась.

Microsoft побеждает Cats Be Gone


Microsoft наконец ограничил частоту запросов Asirra, поэтому один сервер Cats-Be-Gone больше не мог создавать токены для всех. И они начали сопоставлять токены с IP-адресами, поэтому токены сервера Cats-Be-Gone потеряли свою ценность. Хуже всего то, что они удалили 3,1 миллиона изображений с petfinder.com и создали совершенно новый набор.

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

Краудсорсинг


Я знал, что некоторые из пользователей захотят отвечать на капчи самостоятельно, поэтому настроил клиент таким образом, чтобы он запрашивал у сервера ответы, а затем просил пользователя просто ответить на неизвестные картинки. Затем клиент должен был отправлять результаты на сервер для обновления базы данных.

Чтобы усложнить злоумышленникам задачу заполнения моей базы данных мусором, я зашифровал всю передачу данных жёстко прописанным ключом и пропускал релизы клиента через обфускатор .Net, чтобы его было сложнее найти. Это бы помешало устраивать хаос в базе данных только обычным пользователям, но такой защиты было вполне достаточно. Единственными, кто бы разобрался, как получить доступ к базе данных при помощи реверс-инжиниринга, были те, кто хотел бы скачать всю базу целиком. Я решил, что меня это не волнует и пусть будет так.

Кроме того, поскольку у меня не было изображений, всё хэширование выполнялось в коде клиента, потому что не хотел отправлять 12 изображений на сервер при каждом запросе. И я знал, что MinHash недостаточно надёжен, поэтому решил перейти на pHash.

Хэширование изображений, v2: pHash


pHash великолепен. Его принцип примерно таков:

  1. Преобразуем изображение в оттенки серого.
  2. Применяем гауссово размытие.
  3. Ужимаем до одинакового квадратного размера.
  4. Применяем к нему дискретное косинусное преобразование.
  5. Сохраняем только 64 наиболее значимые значения.
  6. Для каждого значения записываем 1, если оно больше медианы, в противном случае 0.
  7. Теперь у нас есть 64-битное число!

Для этого у pHash есть библиотека, и естественно, она написана не на VB.Net, поэтому я реализовал её самостоятельно. Сегодня можно было бы просто использовать другой язык, в котором есть библиотека, но я объясню, как работает pHash, потому что это довольно круто.

Преобразование в оттенки серого


Тут всё довольно просто, достаточно преобразовать RGB-значение каждого пикселя в яркость. Существует несколько способов сделать это, вот тот, который описан в Википедии:

Y = 0.2126 * R + 0.7152 * G + 0.0722 * B

Вот как это сделать на python:

from PIL import Imageimage = Image.open('dog.jpg')image.show()for x in range(image.size[0]):    for y in range(image.size[1]):        (r, g, b) = image.getpixel((x,y))        brightness = 0.2126 * r + 0.7152 * r + 0.0722 * b        new_pixel = tuple([int(brightness)] * 3)        image.putpixel((x,y), new_pixel)image.show()


Довольно просто.

Гауссово размытие


Заменяем каждый пиксель взвешенной суммой окружающих его пикселей. Вот пример размытия с радиусом 8.


(Я пропущу этап сжатия до квадратного размера, потому что это довольно скучно и очевидно.)

Дискретное косинусное преобразование


Дискретное косинусное преобразование (Discrete cosine transform, DCT) похоже на преобразование Фурье тем, что можно преобразовать последовательность чисел из одной формы в другую, а также обратить преобразование. inverse_dct(dct(image)) == image. Вам необязательно знать всё о частотном анализе. Достаточно знать, что можно взять матрицу чисел, например, изображение в оттенках серого, и преобразовать её в ещё одну матрицу чисел. И обратное преобразование тоже возможно.

В отличие от преобразования Фурье, DCT состоит из косинусов, а не из степеней e, поэтому все результаты вещественны, без мнимых чисел. Этот способ используется в JPEG для сжатия изображений.

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

im = rgb2gray(imread('dog.jpg'))   #read in the image to grayscaleimF = dct2(im)                     #DCTfraction = 1for y in range(len(im)):    for x in range(len(im[y])):        if x > len(im[y])//fraction or y > len(im)//fraction:            im[y][x] = 0           # blacken pixels that aren't in the top left corner            imF[y][x] = 0          # blacken pixels that aren't in the top left cornerim1 = idct2(imF)                   # inverse DCT


Мы считываем изображение и выполняем с ним DCT. Затем мы зачерняем часть исходного изображения, а также ту же часть преобразованного изображения. А затем инвертируем преобразование. Вот как это выглядит без зачернения:


Здесь нет ничего неожиданного. DCT обратим, поэтому логично, что выходные данные эквивалентны входящим. Немного странно, что изображение DCT только чёрное; вскоре мы к этому вернёмся!

Давайте посмотрим, что произойдёт, если мы отбросим три четверти изображения:


Преобразованное DCT изображение по-прежнему выглядит довольно неплохо, несмотря на потерю трёх четвертей информации. Давайте зачерним его ещё больше.


Оригинал потерял кучу данных, но изображение DCT по-прежнему выглядит приемлемо! В этом и заключается сила DCT: все важные биты находятся в одном углу, а всё остальное можно отбросить.

Теперь давайте приблизим левый верхний угол изображения DCT, ту часть, которую мы не отбросили.


Это левый верхний кусок изображения DCT. Мы видим, что все значимые биты находились в углу. Вот почему DCT сработал, даже несмотря на то, что мы отбросили столько много бит: мы отбросили те биты, которые были неважны. Такой подход работает только с фотографиями, но именно с ними мы и хотим работать.

Чтобы закодировать это в число, мы используем упомянутый выше способ: взяв только 64 числа из левого верхнего угла, закодируем 1, если значение выше медианы, в противном случае закодируем 0. Результатом будет 64-битное число с половиной нулей. Существует более 1018 таких чисел, что намного больше, чем 3,1 миллиона изображений, которые нам нужно закодировать, так что вероятность коллизии мала.

Теперь нам просто нужно найти эффективный способ хранения всех этих чисел для поиска.

VP-деревья


Vantage point tree это своего рода двоичное дерево, работающее следующим образом: для каждого узла мы задаём центр и радиус. Если точка, которую мы ищем, находится внутри радиуса, движемся влево. Если снаружи, то движемся вправо. Продолжаем двигаться так, пока не найдём ответ.


Преимущество такого дерева в том, что расстояние можно сделать любым. Для нашего хэша изображения мы хотим взвесить все биты равномерно, поэтому используем расстояние Хэмминга. Расстояние Хэмминга это количество бит, на которые различаются два числа.

                    01101010111001                    10100010010010отличающиеся биты:  ^^  ^   ^ ^ ^^Расстояние Хэмминга равно 7

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

Chicken и pHash


Теперь, когда мы решили полностью положиться на краудсорсинг, мне показалось несправедливым зарабатывать на этом деньги. Но я продолжил хостить сервер, чтобы кто угодно мог делиться ответами на задачи. Я выдавал результаты Asirra бесплатно и собирал новые ответы, когда о них сообщали. Через каждую пару дней я повторно генерировал дерево на основе последних данных и перезапускал сервер. Максимум я получал примерно 10 запросов в секунду на моём самодельном, написанном на VB.Net HTTP-сервере. Всего у меня было около 2000 уникальных пользователей. Я вычислил примерное количество очков, полученных пользователями с помощью Chicken и среднюю стоимость очка на основании продаваемых на ebay товаров. Похоже, благодаря Chicken пользователи в сумме получили призов примерно на полмиллиона долларов.

Позже Microsoft начала передавать случайным образом пикселизированные и повёрнутые изображения. Они оказались настолько искажёнными, что приводили pHash в растерянность. Компания препятствовала читерству и другими способами. Например, в Club Bing забанили мою страну целиком. В 2012 году работа Club Bing прекратилась.

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



На правах рекламы


Надёжный и недорогой VDS от VDSina позволит разместить любой проект, на любой операционной системе Linux или Windows. Всё будет работать без сбоев и с высоким uptime!

Подробнее..

В закладки Кунг-фу на клавиатуре. Искусство сочетать клавиши

11.04.2021 14:15:43 | Автор: admin

Сочетания клавиш для тех, кто хочет войти в IT и не только.

Содержание

Сочетания клавиш - это простые команды, позволяющие удерживать пальцы на клавиатуре, а не прыгать вперед и назад к мыши. Вы, вероятно, уже знаете такие распространенные сочетания клавиш, как CTRL + C для копирования и CTRL + V для вставки, но есть множество других сочетаний клавиш, которые позволяют делать что угодно на вашем компьютере или в конкретной программе. Говорят, что знание только основных сочетаний экономит вам 8 рабочих дней каждый год. Цель этой статьи - сэкономить вам ГОРАЗДО больше.

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

Для тех, кто осилил начало статьи, а также для уже опытных пользователей клавиатуры дальше начнется самое интересное. Я расскажу о таком инструменте, как AutoHotkey и о своем скрипте, использование которого сделает из вас настоящего печатающего ниндзю.

В конце вы увидите, как все эти знания можно использовать при работе с самым популярным на данный момент текстовым редактором Visual Studio Code.

Не пытайтесь просто запомнить все, что написано в статье. Обязательно попробуйте понажимать все сочетания клавиш, о которых вы не знали! А потом возвращайтесь время от времени, чтобы освежить память.

Если вы пользователь системы Windows, то вы обязаны дочитать до конца.

Поехали.

Базовые сочетания

Базовыми сочетаниями я буду называть те, которые выполняют похожие функции в разных операционных системах и приложениях.

Esc- aka Escape или Эскейп или Эскейт или... ладно, ладно. Тут все просто, она в основном используется для выхода из чего-либо или отмены чего-либо. Если все пошло наперекосяк и "Я что-то нажала и все уронилось", то скорее всего вам нужно будет обратиться к этой клавише.

Tab. Таб это не только символ табуляции, но еще и полезнейший инструмент смены фокуса. Фокус здесь означает то место, на которое будут направлены действия пользователя в системе. Так, например, если у нас в приложении стоит фокус на текстовом поле, то все, что мы печатаем, будет вноситься именно в это поле. Если фокус на кнопке - тоSpaceили в худшем случаеEnterнажмут на эту кнопку. Так что совет тут такой. Когда заполняем формы, переключаемся между полями черезTab, отмечаем галочки черезSpace, решили вернуться -Shift+Tab.

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

Ctrl- работает похожим образом, но позволяет точечно выбирать, что именно вам нужно.

Shift+/<key/>- так исторически сложилось, что Shift часто используется для инвертирования действия, выполненного сочетанием клавиш без Shift. Например Shift+Tab совершает действие, противоположное Tab. Keep in mind!

F1- вызов справки. Просто для справки.

Ctrl+W- закрыть окно, вкладку. Почти всегда работает в приложениях, где есть вкладки.

Ctrl+F- поиск. F - Find.

Ctrl+P. В большинстве программ вызывает меню печати.

Ctrl+S- сохранить. Что тут еще говорить.

Ctrl+Z- отменить действие.

Ctrl+Y/Ctrl+Shift+Z- повторить отмененное действие.

Ctrl+N. Открыть новое окно/файл.

Ctrl+(+)- приблизить/увеличить масштаб.

Ctrl+(-)- отдалить/уменьшить масштаб.

Ctrl+(?shift)+[|Ctrl+(?shift)+]- уменьшить | увеличить размер шрифта.

Shift+Enter- перевести курсор на начало новой строки. Это сочетание бывает необходимо, если нажатиеEnterделает что-то другое.

Графика

Во многих приложениях, где можно работать с графическими элементами, скорее всего заработают следующие сочетания:

Ctrl+D- создать копию объекта. От слова Duplicate.

Ctrl+(?shift)+[- Переместить элемент на задний план. В некоторых программах требуется клавиша модификатор Shift.

Ctrl+(?shift)+]- Переместить элемент на передний план.

Хотя использование мыши - дело, недостойное настоящего погромиста, но иногда без нее никуда.

Эти сочетания мыши критичны для тех, кто работает с графическими элементами.

Ctrl+MouseScroll- увеличить / уменьшить масштаб.

Shift+MouseScroll- переместиться по горизонтали. Иногда весь контент не помещается в окне, и появляется горизонтальная полоса прокрутки. Данное сочетание позволяет перемещаться вправо или влево в таких ситуациях.

Shift+Click- выбрать группу элементов, если возможно.

Ctrl+Click- выбрать элементы, точечно.

Ctrl+(Dragging)- копировать элемент или группу элементов и переместить на позицию курсора. Работает не везде, но полезно помнить.

Терминал Linux

Навигация в терминале не очень удобная. Для того, чтобы немного облегчить жизнь, при работе с этим инструментом, можно воспользоваться скриптом, о котором будет рассказано в разделеAutoHotkey.

Tab- автодополнение команд.

Tab+Tab- вывести список возможных команд автодополнения.

Ctrl+C- послать сигнал прерывания процесса.

Ctrl+Z- приостановить процесс и перевести в фон.

Ctrl+D- удалить символ после курсора. Если строка пустая, то эта команда завершит работу терминала.

Alt+D- удалить слово после курсора.

Ctrl+W- вырезать слово перед курсором.

Alt+Backspace- удалить слово перед курсором.

Ctrl+A- перейти в начало строки.

Ctrl+E- перейти в конец строки.

Ctrl+B- переместиться на символ назад.

Ctrl+F- переместиться на символ вперед.

Windows

Вы можете не любить Windows, но стоит признать, что эта операционная система постоянно развивается и с каждым годом становится все лучше и удобнее. Сейчас это современная система, предоставляющая пользователю множество возможностей.

Парочка полезностей:

  • Поиск через "Start" в Windows работает так, что он быстро находит файлы, находящиеся в системных папках. Поэтому, если вам лень ходить по файловой системе, нажимаемWinи вводим имя файла - система быстро нам его найдет.

  • Если открыть контекстное меню файла с зажатымShift, то появятся дополнительные опции. Одной из них будет "Скопировать как путь", очень удобно.

Сочетания

Win+D- скрыть все окна.

Win+M- свернуть все окна.

Win+Shift+M- развернуть все окна.

Win+X- открыть меню системных инструментов.

Win+P- открыть меню проекции на дополнительные дисплеи.

Win+Left/Right- переместить окно влево/вправо.

Win+Up- развернуть окно на весь экран.

Win+Down- открепить окно / свернуть.

Win+L- заблокировать систему.

Win+B- фокус на панель инструментов.

Win+Ctrl+Left/Right- переключиться между рабочими столами.

Win+(.)- открыть меню стикеров.

Alt+Tab- вы и так знаете. Переключаемся между активными окнами. Зажатый Shift двигает нас назад.

Alt+Enter- позволяет открыть некоторые окна в полноэкранном режиме.

Win+{1, 2, 3, ...}- открыть n-ное окно прикрепленное к панели задач. Обязательно к использованию!

Win+Shift+{1, 2, 3, ...}- открыть n-ное окно от имени администратора.

Win+Shift+S- сделать скриншот части экрана.

Ctrl+Shift+Esc- открыть диспетчер задач.

Alt+\<key\>- активирует навигацию в окнах многих программ. Например, сочетаниеAlt+V + H + Hпозволяет скрыть/показать скрытые файлы в проводнике.

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

Alt+PrintScreen- сделать скриншот окна.

Win+PrintScreen- сделать скриншот экрана и сохранить в папку "Изображения".

Проводник

F2- переименовать файл/папку.

Win+E- открыть проводник.

Alt+Enter- открыть свойства файла.

Ctrl+Enter- открыть папку в новом окне.

Ctrl+Shift+N- создать новую папку в текущей директории в проводнике.

Alt+Left/Alt+Right- предыдущая папка / следующая папка в истории.

Alt+Up. Переместиться на уровень вверх.

Утилиты

Magnifier

Win+(+)- увеличить часть экрана.

Win+(-)- уменьшить часть экрана.

Win+Esc- закрыть Magnifier.

Xbox Game Bar

Win+G- открыть игровое меню XBox.

Win+Alt+R- Начать/остановить запись текущего окна. R - Record.

Chrome

В хроме исправно работают многие из сочетаний, описанных вБазовые сочетания.

Ctrl+Shift+W- брат Ctrl+W. Позволяет закрыть все вкладки сразу.

Ctrl+Shift+N- открыть новое окно в режиме инкогнито. Если вам часто нужно открыть "чистое" окно браузера, то запомните это сочетание.

Ctrl+T- открыть новую вкладку и перейти к ней.

Ctrl+Shift+T- открыть ранее закрытую вкладку. В некоторых случаях это поможет восстановить историю вкладок, если браузер был принудительно закрыт.

Ctrl+Tab- перейти к следующей вкладке на панели.

Ctrl+Shift+Tab- перейти к следующей вкладке на панели.

Ctrl+{1, 2, ..., 8}- перейти к n-ной вкладке.

Ctrl+9- перейти к последней вкладке.

Ctrl+R- перезагрузить страницу.

Ctrl+Shift+R- перезагрузить страницу, без использования данных в кэше.

Ctrl+D- сохранить текущую страницу в закладках.

Ctrl+Shift+D- сохранить все открытые вкладки в закладках. Поосторожнее с этим!

Ctrl+L- фокус на адресную строку.

Сочетания мыши

MiddleMouseButton- открыть страницу по ссылке в новой вкладке.

Ctrl+Click- открыть страницу по ссылке в новой вкладке.

Ctrl+Shift+Click- открыть ссылку в новой вкладке и перейти к ней. Обычно это именно то, что нужно, если вы хотите быстро просмотреть информацию по другой ссылке.

Shift+Click- открыть ссылку в новом окне.

Меню

Ctrl+H- открыть историю браузера.

Ctrl+J- открыть страницу загрузок.

Shift+Esc- открыть диспетчер задач Chrome. Если вы не понимаете, какая страница сильно нагружает ваши ресурсы, то стоит сюда заглянуть.

Ctrl+Shift+O- открыть страницу закладок.

Developer tools

Developer tools - один из самых полезных инструментов в арсенале Web-разработчика. Посмотрим, как можно немного ускорить работу с ним в браузере Chrome.

Ctrl+Shift+J- открыть вкладку Console в инструментах разработчика

Ctrl+(backtick)- фокус на консоли. При открытом меню инструментов разработчика.

Ctrl+[,Ctrl+]- сменить вкладку на панели.

F2- редактировать элемент как html.

Ctrl+Shift+P- открыть панель команд. Сочетание, которое может заменить их все.

Ctrl+Shift+I/F12- открыть последнюю использованную вкладку в инструментах разработчика.

Ctrl+Shift+C- открыть панель элементов страницы.

Этого немного, но достаточно, чтобы пользоваться и не перегружать мозг. Больше сочетанийздесь.

Базовые сочетания плюс те, которые используются в Chrome составляют большую часть наиболее распространенных сочетаний. Это значит, что, подобные сочетания вы сможете применить в большинстве программ, с которыми работаете. Поэтому многие "интуитивные" сочетания я буду опускать.

Vimium

Чего мы хотим?Чего мы хотим?

Vimium- расширение для браузера, которое предоставляет сочетания клавиш для навигации и управления в духе редактора Vim.

Для работы с русской раскладкойнужно будет добавить "мэпы" в настройки вимиума.

Вот что это нам дает.

Переход по ссылкам черезF+<key>.Больше не нужно тянуться за мышкой, чтобы кликнуть по ссылке. Это сделает за вас Vimium. Нажмите клавишуFи на странице к каждой ссылке прикрепится название клавиши, которую нужно нажать далее, чтобы перейти по ней.

Перемещение через сочетания как в виме

Используйте привычные клавишиhjklдля движения по странице.

Панель поиска

  • Ищем везде черезo

  • Ищем в закладках черезb

  • Ищем в открытых вкладках черезT

Я не буду раскрывать все сочетания, для этого есть вот такая хорошая памятка:

Vimium hotkeysVimium hotkeys

AutoHotkey

Вначале будет многа букофф...

Хакерский редактор

Когда я писал свой скрипт для AHK, я вдохновлялся идеями, заложенными в основу редакторамозгакода Vim. Vim - это такая прикольная штуковина, которую очень любят олды и которому поклоняются все новички, услышавшие о его возможностях.

Vim (сокр. от Vi Improved, произносится вим) кошмар для случайного пользователя. Если его удаётся в конце концов закрыть, то вздыхаешь с облегчением и твёрдой уверенностью, что больше не будешь запускать эту программу ни разу в жизни. (c) Материал из Викиучебника

Так что же в нем особенного? На Хекслете есть неплохаястатья, в которой рассказано, почему Vim - это хорошо.

Я тоже считаю, что вим - это хорошо и знать основные его команды очень пригодится. Так, например, упоминание этого редактора при разговоре с разработчиками даст вам +1 к крутости. А на многих сайтах (например YouTube) используются сочетания именно из этого редактора. Однако реальность такова, что Vim - не современный инструмент, а популярность его поддерживается лишь благодаря старичкам и тем, кто любит выпендриваться.

О самом популярном в мире редакторе кода чуть позже.

Главный аргумент в пользу вима -Vim позволяет писать эффективно

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

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

Используем AHK

AutoHotkey свободно распространяемый язык для автоматизации выполнения задач в Microsoft Windows. AutoHotkey является языком программирования сценариев, приспособленным к легкому назначению и переназначению горячих клавиш, включая кнопки мыши и джойстика.

Короче говоря, AHK позволяет нам автоматизировать рутинные задачи, создавать программы с графическим интерфейсом или просто автоматически писать Sincerely Yours в конце электронного письма. Чтобы профессионально лениться с помощью AHK нужно существенно поработать головой перед этим.

На обычной клавиатуре зачастую есть такая замечательная, очень бесполезная клавиша, какCapsLock. Почему бесполезная? Да потому что единственная ее функция - зажимать вместо вас клавишуShift. Ее любят в основном тролли в интернете и те, кто часто пишут SQL запросы. Зато неудобств от нее куча. Сколько раз вы проверяли, включен ли у васCapsLockперед вводом пароля? Как минимум раз так точно, а этого уже достаточно, чтобы ночью видеть кошмары.

Вердикт - "капсу" можно найти лучшее применение.

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

Вот как выглядит часть моегоскриптадля AutoHotkey

SetCapsLockState AlwaysOff; Basic movementCapsLock & j::Send {blind}{Left}CapsLock & l::Send {blind}{Right}CapsLock & i::Send {blind}{Up}CapsLock & k::Send {blind}{Down}; Fast moveCapsLock & u::Send {blind}{Up 5}CapsLock & n::Send {blind}{Down 5}; Fast deleteCapsLock & Backspace::Send {blind}{Backspace 5}CapsLock & Delete::Send {blind}{Delete 5}; Delete wordsCapsLock & w::Send {blind}^{Backspace}CapsLock & e::Send {blind}^{Delete}

А вот что он делает

capsKeys keyboard layoutcapsKeys keyboard layout

Если в Vim сочетания клавиш опираются на семантику, то в этом скрипте я опирался на удобство.

Чтобы попробовать, вы можете:

или

Если еще не поняли, то рассказываю в чем суть: когда этот скрипт работает, ничего не меняется до тех пор, пока вы не зажмете клавишу CapsLock. С этого момента начинается магия. Какая? Рассказываю.

Особенности

Никакого больше переключения регистра.Строчные буквы по умолчанию! Это которые маленькие.

Кнопки перемещения находятся в области правой руки.Мы привыкли, что стрелочки справа, поэтому и кнопки навигации - справа.

  • Caps+J- влево

  • Caps+i- вверх

  • Caps+L- вправо

  • Caps+K- вниз

  • Caps+U- вверх пять раз

  • Caps+N- вниз пять раз

  • Caps+Y- страница вверх (PgUp)

  • Caps+B- Страница вниз (PgDn)

Зажатый капс работает как Ctrl в случае с символами X, C, V.Так просто удобнее!

Вызов контекстного меню.Caps + P- позволяет вызвать контекстное меню. Очень полезная комбинация.

Перемещаемся по словамЧерезCaps+LeftAltиCaps+Space. Одно из самых часто используемых мной сочетаний, особенно вместе с зажатым Shift. Однако здесь есть недостаток. Так как мы затрагиваем функциональную клавишу, это меняет поведение Alt. Например, мы хотим использовать сочетаниеAlt+Upв VSCode и делаем это конечно же через AHK. То естьCaps+Alt+Up, но вот проблема, как только мы зажимаем первые две клавиши, все идет к чертям. Что делать? Тут есть два варианта. Можно использовать правый Alt то естьCaps+RightAlt+Upили сначала нажимать Alt а потом остальную часть сочетания.

Удаляем эффективноВы знали, что сочетаниеCtrl+Backspace,Ctrl+Deleteудаляет целые слова вместо символов? Я тоже, до недавнего времени. В скрипте есть целая линия клавиш выделенная для удаления.

  • Caps+Q- удалить все символы слева от курсора

  • Caps+W- удалить слово слева от курсора

  • Caps+E- удалить слово справа от курсора

  • Caps+R- удалить все символы справа от курсора

Фишки

  • Caps+A- Скопировать текущую строку и вставить снизу

  • Caps+S- Выделить слово на позиции курсора

  • Caps+D- Скопировать строку и удалить. Украдено прямиком из вима.

Работает вездеРаботает как в вашем редакторе кода, так и в любом другом текстовом поле. Запомнил один раз - пользуйся везде.

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

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

VSCode

Когда дело доходит до выбора редактора кода, то тут все решают личные предпочтения. Однако есть редактор, который придется по вкусу практически каждому, и это Visual Studio Code.

VSCode - опенсорсное творение Microsoft, написанное при помощи фреймворков для JavaScript/TypeScript. Из коробки это простенький красивый редактор кода, который позволит вам в считанные секунды начать писать что вздумается. А если прикрутить к нему расширения, которые регулярно пишутся и поддерживаются огромным сообществом, то то эта малышка даст жару любой профессиональной IDE.

Навигация

Ctrl+Bоткрыть / закрыть боковую панель.

Ctrl+Shift+E- открыть меню навигации.

Ctrl+Shift+D- открыть меню запуска. Используется во время дебаггинга.

Ctrl+Shift+Fменю поиска. Позволяет искать текст по всем файлам.

Ctrl+Shift+H- открыть меню замены. Брат Ctrl+Shift+F, но с функцией замены.

Ctrl+Shift+G- открыть меню контроля версий. Если у вас установлено расширение GitLens, то оно может изменить это сочетание.

Ctrl+J- открыть/закрыть панель.

Ctrl+Shift+X- открыть меню расширений.

Ctrl+(backtick)- открыть терминал.

Ctrl+Shift+M- открыть панель ошибок.

Ctrl+Shift+U- открыть консоль вывода.

Ctrl+Shift+Y- открыть консоль отладки.

Простые сочетания

F1- открыть окошко команд. Наше все для пользователя VSCode. Почти любое действие можно выполнить с помощью этого окна.

F2переименовать определение / переменную / функцию синхронно. Одна из самых приятных возможностей в VSCode. Если вы передумали с названием переменной, это позволит изменить все места где используется эта переменная, учитывая контекст.

F8- переместиться к следующему проблемному месту в коде.

Ctrl+.- быстрое исправление ошибки. Если вы допустили какую-то распространенную ошибку, VSCode может исправить ее за вас. Очень удобно использовать в сочетании сF8.

F9- поставить точку остановки для дебаггера.

Ctrl+P- перейти к файлу.

Ctrl+R- открыть недавний проект / файл.

Ctrl+(,)- открыть настройки редактора.

Ctrl+Q- перейти в другую панель.

Ctrl+/- закомментировать строку.

Ctrl+T- переместиться к функции или переменной во всех файлах.

Ctrl+Shift+Oпереместиться к функции или переменной в текущем файле.

Ctrl+Home- переместиться к началу файла.

Ctrl+End- переместиться к концу файла.

Ctrl+Shift+\переместиться к соответствующей скобке.

Ctrl+Shift+N- открыть новое окно VSCode.

Alt+Left/Alt+Rightпереместиться к предыдущей / следующей активной строке. Когда вы скачете со строки на строку, VSCode запоминает это в своей истории, и вы можете быстро переключаться между самыми горячими местами в коде.

Alt+Up/Down- переместить строку вверх/вниз. Must have!

Alt- ускорить прокрутку страницы. Если начать прокручивать страницу и зажать Alt, то процесс пойдет немного быстрее.

Alt+Z- переключить режим переноса строк.

Shift+Alt+F- автоматическое форматирование текста. VSCode поддерживает автоматическое форматирование для большинства языков. Нажатие этой клавиши подгонит ваш код под стандарты, принятые в Code style вашего языка.

Shift+Alt+O- упорядочить импорты в соответствии со стандартами вашего языка.

Ctrl+C- скопировать текущую строку, если нет выделения, иначе работает как обычное копирование.

Ctrl+X- вырезать строку, если нет выделения, иначе работает как обычная операция Cut.

Ctrl+Shift+Up/Down- скопировать выделенные строки вверх/вниз. Полезно, если вам нужно повторить какой-то блок кода несколько раз.

Ctrl+Alt+Right- переместить активный файл в соседнюю группу редактирования. Это позволит вам параллельно просматривать два или более файлов.Ctrl+Alt+Leftдвигает его обратно.

Ctrl+0- фокус на боковую панель.

Ctrl+{1, 2, 3, ..}- фокус на первую/вторую/третью группу редакторов. Если вы параллельно просматриваете два или больше файлов, это сочетание поможет вам переключаться между ними. Однако по своему опыту скажу, что больше двух редакторов никто обычно не открывает. Поэтому у себя я поменял сочетание для работы с двумя окнами редактирования и двумя терминалами.

Alt+{1, 2,..., 8}- переключиться между активными вкладками в окне редактирования. Обязательно к запоминанию!Alt+0открывает последнюю вкладку.

Ctrl+Space- активировать автоподстановку.

Shift+Ctrl+Space- открыть подсказку для параметров функции.

Посложнее

Alt+Ctrl+Up/Down- добавить курсор на верхнюю/нижнюю строку. Одна из особенностей современных редакторов. Позволяет редактировать текст одновременно в нескольких местах. Суперфича!

Ctrl+D- добавить курсор в конец следующего вхождения данного слова.

Alt+Click- добавить курсор в позицию указателя мыши.

Shift+Alt+(Dragging)- добавлять курсоры по пути следования указателя мыши.

Shift+Alt+Right- выделение с учетом контекста. Например, у нас есть длинное выражение внутри скобок, данное сочетание позволит нам выбрать все, что находится внутри них. Последовательные нажатия расширяют область выделения.

Shift+Alt+Left- действие, противоположное Shift+Alt+Right.

Ctrl+Shift+[- свернуть блок кода. Если файл стал слишком большим, и перемещаться стало слишком сложно, то данное сочетание позволит свернуть блоки текста, которые вам сейчас не нужны.

Ctrl+Shift+]- развернуть блок кода. Противоположно Ctrl+Shift+[.

Следующее сочетание отсутствует в сборке для Windows, но я рекомендую установить его вручную. У меня этоCtrl+Shift+J.

Нет(Win) /Ctrl+J(Mac) - присоединить следующую строку к текущей. По сути, все, что делает данная команда, так это удаляет символ переноса с текущей строки. Очень удобно, если вдруг нужно сжать html файл или еще что-то.

Ctrl+Shift+L- выделить все одинаковые слова и переместить курсор к концу каждого. Сильная штука, позволяет редактировать все вхождения определенного слова. Но стоит быть аккуратнее, если это слово встречается в качестве подстроки, то оно тоже будет изменено.

Ctrl+K Z- Включить Zen Mode. Для настоящих гуру.

Демонстрация

Ну и на десерт, небольшое видео, где я наглядно показываю, как можно совместить использование скрипта capsKeys и возможности редактора VSCode. Чудес не обещаю, но суть должна быть понятна.

Заключение

В этой статье я рассмотрел способы увеличения продуктивности при написании кода или любого текста посредством использования сочетания клавиш и кое-чего еще. Мы начали с самых простых сочетаний и дошли до продвинутых вариантов использования клавиатуры. Я надеюсь эти знания не раз пригодятся вам в вашей профессиональной карьере.

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

Пишите в комментариях, если у вас есть свои любимые сочетания, не описанные в статье.

Также, если у вас есть идеи по поводу улучшения скрипта для AutoHotkey, буду рад видеть ваши pull request-ы настранице репозитория.

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

Полезные ссылки

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru