Pull to refresh
41
0
Роман @WNeZRoS

Разработчик

Send message

Есть ещё средний вариант: ноутбук без дискретной видеокарты и внешняя видеокарта.
Если работа не связана с нейросетями или тяжелой графикой, то получаем компьютер на котором можно работать в любом месте. А для тяжёлых игр получаем аналог ПК, который стоит в удобном месте.

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

Выглядит всё это как переизобретение ECS в менее оптимальном виде. А пример с PickUpHealing и "Вынести хард-код в константы" говорят о том что весь этот фреймворк не удобен и лучше делать на обычных интерфейсах: это будет и быстрее работать и проверок во время компиляции больше будет.

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

В Unity на один объект можно накидать сколько угодно компонент. В Godot один объект - один скрипт. Где-то был пропозал или ещё что-то про компоненты в годот, но автор написал что компоненты это сложно для художников и их не будет. Если очень надо, то можно создавать вложенные Node со своими скриптами. У базовой Node нет своего трансформа, так что вполне можно считать это альтернативой. Но альтернатива эта не супер удобная т.к. они болтаются в дереве объектов и на них нельзя повесить ограничений чтобы как-то защитится от ошибок в компоновке.

Местоименные ссылки, во всех случаях что я видел ,ссылаются на предыдущую фразу, она просто сохраняется. Про пропуски слов не понял.
Этот код разгадал подряд примерно 15 каптч.

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

Код для консоли браузера
var colors = {
  'красн': 'R',
  'фиолет': 'P',
  'желт': 'Y',
  'зелен': 'G'
};

var sizes = {
  'средн': 'm',
  'крупн': 'l',
  'мален': 's'
};

var numbers = {
  'одна': 1,
  'один': 1,
  'одно': 1,
  'два': 2,
  'две': 2,
  'три': 3,
  'четыре': 4,
  'пять': 5,
  'шесть': 6
};

var targets = [
  { 'key': 'S', 'text': 'свек', 'kind': 'овощ', 'count': 0, 'size': '', 'color': '' },
  { 'key': 'A', 'text': 'ябло', 'kind': 'фрукт', 'count': 0, 'size': '', 'color': '' },
  { 'key': 'B', 'text': 'банан', 'kind': 'фрукт', 'count': 0, 'size': '', 'color': '' },
  { 'key': 'M', 'text': 'морк', 'kind': 'овощ', 'count': 0, 'size': '', 'color': '' }
];

var captchaText = document.getElementById('TextMsg').innerText;
var phrases = captchaText.split(/[\.,]/);

var lastTargets = undefined;
for (var phraseIndex in phrases) {
  var words = phrases[phraseIndex].toLowerCase().split(' ');

  var phraseTargets = words.find((word) => word == 'их' || word == 'он' || word == 'она' || word == 'они') !== undefined 
    ? lastTargets 
    : targets.filter((target) => {
      return words.find((word) => { return word.indexOf(target.text) == 0; }) !== undefined ||
           words.find((word) => { return word.indexOf(target.kind) == 0; }) !== undefined;
    });
  
  for(var wordIndex in words) {
    var word = words[wordIndex];
    var num = parseInt(word);
    if (!isNaN(num)) {
      phraseTargets.forEach((target) => target.count = num);
      continue;
    }
    
    num = numbers[word];
    if (num !== undefined) {
      phraseTargets.forEach((target) => target.count = num);
      continue;
    }
    
    for (var color in colors) {
      if (word.indexOf(color) == 0)
        phraseTargets.forEach((target) => target.color = colors[color]);
    }
    
    for (var size in sizes) {
      if (word.indexOf(size) == 0) {
        phraseTargets.forEach((target) => target.size = sizes[size]);
      }
    }
  }
  
  lastTargets = phraseTargets;
}

var targetElements = {};
targets.filter((target) => target.count > 0).forEach((target) => {
  targetElements[target.key + '*' + target.size + '*' + target.color] = target.count;
});

var table = document.getElementById('mainCapDiv').children[1].children[0];
var cells = table.getElementsByTagName('td');
for (var i = 0; i < cells.length; i++) {
  var cell = cells[i];
  var elemdata = cell.children[0].getAttribute('elemdata');
  if (targetElements[elemdata] > 0) {
    cell.style = 'border-color: red';
    targetElements[elemdata] = targetElements[elemdata] - 1;
  } else {
    cell.style = 'border-color: white';
  }
}

Осенью перешёл с трёх мониторов на ноутбук. Как выяснилось, такое кол-во мониторов реально необходимо крайне редко, в основном одного хватает. Занимаюсь десктопной разработкой и иногда геймдевом. Больше неудобст доставляет то, что ноутбук я покупал из того что было в наличии компактного, и 16ГБ не расширяемой оперативной памяти для меня впритык - один Rider почти целиком её забивает до 80% (после чего своп и переодические тормоза).

Если вам часто нужно много экранов и при этом портативность, то можно попробовать связку ноутбук + портативный монитор.

Непонятно от кого защищает эта каптча, Clip распознаёт нужный объект с большим отрывом.

В квадратных скобках score от модели clip-ViT-B-32 по запросу `puzzle cube`

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

Делал аналогичное приложение в 16-17 годах. Помимо описанных функций в нём ещё было определение местоположения без GPS: в сообщение кодировалась информация о вышках связи в виде ссылки на страницу. А на странице javascript декодировал эту информацию и через geo api google получал координаты.

Закончило существование оно также, но код на гитхабе всё ещё лежит.

Я участвовал в создании античита внутри игры. Как раз пытались не допустить посторонний код в процесс.
LoadLibrary и CreateRemoteThread каким-то явным способом не блокируются. Создание потоков удалось заблокировать побив PE Header процесса, но его нужно было восстанавливать при создании нужный потоков внутри игры или используемых библиотек. Эта защита продержалась день. Возможно на уровне драйвера можно и защищённее сделать.


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

Статический конструктор можно вызвать методом RuntimeHelpers.RunClassConstructor для typeof(T).TypeHandle

Последний год также смотрю тестовые задания, но на C#. Задание алгоритмическое — сериализация-десериализация, делается минут за 10 в 50 строк красивого кода (джуны растягивают на несколько часов и сотни строк кода).
Требования просты: написанный код должен решать поставленную задачу. Оформлять можно как угодно, хоть скриншот в .doc файле. Обычно я просто смотрю код, делаю код ревью. За последние полгода присланный код я запускал один раз — не мог поверить что человек прислал неработающую программу. Если в коде кол-во проблем не выходит за рамки приличия, то человек приглашается на собеседование, где ему будут также заданы вопросы про эти проблемы.
Совет "Старайтесь не сливать чужие решения" правильный. Все чужие решения сразу заметно, особенно когда в один день приходят два одинаковых теста. Я пробовал найти хорошее решение в открытых источниках, но у меня это не получилось. Если оно где-то и есть, то очень глубоко.

Предложения в пуске отключаются где-то в настройках (на Pro версии точно).
Магазин удобно использовать чтобы не следить за обновлениями программ — они ставятся автоматически.

Видеть разницу на гифке очень странно — её практически нет.
Для наглядности, вот Wireframe двух кубов, один разбит модификатором, другой операцией. Где какой?
Куб разбитый операцией уменьшен в 2 раза для соответствия размеров
image

А у операции Subdivide параметров больше чем у модификатора
У операции Subdivide есть параметр Smoothness. У модификатора сглаживаются углы внутрь, а у операции сглаживаются нарезанные вертексы наружу.
Вот так
image
Без дополений можно для сцены выставить единицы измерения, и после этого для точек можно задавать координаты в этих единицах. Так же можно в режиме редакторивания отобразить длинну рёбер, размер углов и площадь полигонов.
Скрин
image
Оно называется «симуляция одежды», хотя на самом деле это симуляция ткани — болтающейся части одежды. Даже когда её используют для юбок, бывают проблемы с улетанием далеко вверх из-за резкой анимации ног.
Подумалось сделать крестики-нолики на ftp, но нет подходящего сервера. Поэтому сделал zip (ссылка).
Скриншот
image

Здесь алгоритм противника не идеальный и его можно обыграть :)

* Так как zip просмотрщики слишком умные и сортируют списки, в основном варианте правильная сортировка достигается засчёт малозаметных пробелов. Но некоторые ещё умнее (например, Windows Explorer) и не учитывают начальные пробелы при сортировке. На этот случай есть версия с индексами.

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

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Game Developer
Lead
C#
MVVM
WPF
Software development
C++
Game Development
AR and VR development
Code Optimization