Pull to refresh
0
0
mitry @mitry

User

Send message

Действительно странная подборка. Из общих знаний подойдет Гради Буч "Объектно-ориентированный анализ и проектирование". Для С++ кроме книг Страуструпа, хорошо подойдёт Седжвик "Алгоритмы на С++". Р. Мартин "Чистый код". "Паттерны проектирования" банды четырёх. Скотт Майерс всё что попадётся, кратко и по делу пишет. И весьма интересная вещь "Принципы юнит-тестирования" Хориков.

Я забыл, как в типографике называется такая ошибка. Вроде «висячие слова». Но я не уверен.

Это называется "вдовы". Одинокие слова на последней строчке параграфа. Это не только в заголовках некрасиво.

А еще бывают "сироты" -- это одинокие строчки (и даже две или три) которые переползают на новую страницу или колонку (ну или остаются на предыдущей странице или колонке). За таким тоже надо следить.

А еще бывают "колодцы". Это когда на нескольких строчках подряд пробелы между словами выстраиваются вертикально (это действительно выглядит как колодец). Как с этим бороться в веб-верстке пока не придумано (по крайне мере не придумано мной).

Насчёт правильности не ручаюсь, но такой способ у меня работает (для android):
- установка браузера Firefox Beta for Testers
- в строке адреса вводим и переходим на about:config
- в поиске ищем network.trr.mode и изменяем значение на 2
- дальше ищем network.trr.uri и вводим https://dns.controld.com/comss (работу других DoH не проверял)
- перезагружаем приложение

Не скажу, чтобы правильный (каждому свое), но, скажем беспроблемный с пополнением и использованием, но при этом со всеми новыми моделями от openai и не только - этот телеграм бот https://t.me/syntxaibot?start=aff_1793711036. По стоимости не скажу чтобы был дороже других ботов, но функционал один из самых навороченных как для работы с чатгпт, так и с кучей других нейронок - от миджорни до flux и recraft.

Есть еще "Рецепты чистого кода" Максимилиано Контьери (O'Reilly) - относительно недавно вышедшая книга.
Если здесь есть кто-то уже прочитавший её, дайте, пожалуйста, отзыв. Интересно сравнить её и тот же "Совершенный код".
А то у меня все руки не доберутся, а хочется сразу прочитать что-то самое правильное и полезное.

Как учебник - Algorithm Design (John Kleinberg, Éva Tardos), для подготовки к интервью - Elements of Programming Interviews, как справочник - Кормена.

  • Algorithms от Sedgewick'а (с вполне практичными примерами на Java)

  • Classic Computer Science Problems in Python (тоже практичней некуда, еще и владение Python'ом подкачаете)

  • Algorithms Design Manual от Skiena (имхо, одна из самых популярных рекомендаций в FAANG'ах)

Есть одна интересная книга, называется A philosophy of software design, автор John Ousterhout, и она рассказывает о когнитивной сложности в разработке ПО и методах ее упрощения. И некоторые ее положения весьма далеки от догм энтерпрайзного классоклепания, от чего у кучи народа подгорает и бомбит. Как же так - не клепать классы на каждый чих, или писать комменты на высокоуровневую структуру и неявные связи компонент - ведь мой код написан по солид, а значит непогрешим! Бабах. Но если книженцию почитать и вдуматься, то это тот подход к разработке ПО, который мы потеряли где-то во времена становления "агильности".

P.S. Я тут погуглил, оказывается, все уже реализовано: 1, 2
Google Script Telegram webhook How-to:

1. Реализуйте в скрипте метод doPost() для обработки пост запросов.
2. Опубликуйте google script как веб приложение с доступом для всех.
3. Используя API метод setWebhook укажите адрес скрипта.

Пример
Создаем скрипт с методом doPost(e)
function doPost(e) {
  var botId = 'TELEGRAM_BOT_API_KEY';
  var content = JSON.parse(e.postData.contents);
  var message = content.message;
  var text = message.text;
  
  //Обрабатываем запрос нужным образом, например:

  UrlFetchApp.fetch('https://api.telegram.org/bot' + botId + "/sendMessage", {
      'method': 'post',
      'payload': {
          chat_id: message.chat.id,
          text: 'It Works!'
      }
  });

  //возвращаем пустой документ, главное передать телеграму 200 response code.
  return HtmlService.createHtmlOutput();
}

Публикуем как веб приложение и получаем URI скрипта. Теперь можно дописать и вызвать функцию для установки webhook.
function setWebhook() {
  var botId = 'TELEGRAM_BOT_API_KEY';
  var scriptUrl = 'YOUR_SCRIPT_URI';
  UrlFetchApp.fetch('https://api.telegram.org/bot' + botId + "/setWebhook?url=" + scriptUrl);
}




Документация по Web Apps https://developers.google.com/apps-script/guides/web

Есть расширения для сохранения в SingleFile вместе со стилями картинками и тому подобным. Я в зотеро сохраняю (zotero.org, лучше бету ставить, можно портативно, он тоже сохраняет странички в SingleFile) если нужно, по сути зотеро для сохранения файлов вместе с библиографией и сделан (у зотеро есть аддон к браузерам, остается только нажать одну кнопку, при желании можно настроить названия и каталогизацию как угодно).

Еще я бы посоветовал всем утилитку z — это такой cd, который переходит в нужную директорию по неполной информации и с учетом того, как часто вы в этой директории бывали раньше.

возможно какие-то способны (по идее кинетики, в них по слухам можно ставить пакеты от openwrt), но для меня роутер должен быть на нормальной ОС как openwrt/opensuse/opnsense/etc а заводские прошивки бодро идут на помойку истории так как не способны покрыть и половины кейсов которые мне нужны от роутера.
в моём случае (openwrt) путь до файла который качается с той репы прописывается в одном месте в конфиге (простите на память не вспомню куда именно) и всё, ровно одна строчка в конфиге.


есть ещё вот такое решение забавное, на случай если тебе не повезло жить в стране где лютуют обезьяны с гранатами есть РКН, смысл прост: получаешь bgp с забаненными адресами и ездишь на них через любой vpn куда надо настраивая маршруты как тебе душе угодно

ИМО, лучшее, что может сделать эта заметка - это сподвигнуть на то, чтобы записаться и пройти курс первой помощи. Не модной (и лишь для некоторых востребованной) тактической, а обычной, гражданской, доврачебной помощи. И лучше не в формате кино, а вживую, с инструктором и статистами.

Из личного опыта могу порекомендовать в Питере https://ucmchs.ru/cources-desc/base/ Два выходных дня по 10 часов, теория (в том числе и юридические вопросы), а, главное, практика.

Про идеальную платформу для хостинга статических сайтов.

Первое и единственное поступление 2020.06.21  +100,00 ₽. Баланс на сегодня 81,8 ₽

Ещё совсем недавно владельцы сервиса сопровождали показ баланса предположением срока на который при текущем темпе расхода хватит денег.

Видя числа выраженные в годах, я на митапе в Новосибирске назвал https://selectel.ru источником моей уверенности в завтрашнем дне.

100 - 81,8 = 18,20 (ВОСЕМНАДЦАТЬ РУБЛЕЙ ДВАДЦАТЬ КОПЕЕК) было израсходовано с 2020.06.21. На сегодня временно в контейнере объектного хранилища простенькая заглушка

https://mvit.su

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

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

https://docs.selectel.ru/cloud/object-storage/manage/host-static-site/

p.s. да простит меня RuVds, услугами котого тоже иногда пользуюсь, за рекламу конкурента. :)

 Для самых ленивых:
- Простой генератор сайтов с шаблонами - https://carrd.co/
- Свой блог на своем домене в пару кликов и бесплатно - https://hashnode.com/

Вкину пару своих расширений для YouTube. Вдруг пригодится кому.

  • YouTube Chapters In Player - просмотр глав видео прямо в плеере.

  • YouTube Timestamps - показывает комментарии с временныеми метками на таймлайне.

Оба бесплатные и опенсорсные. Сам пользуюсь ежедневно.

Так, например:
Юзерскрипт
// ==UserScript==
// @name Avoid Yandex Turbo
// @name:ru Обход Яндекс Турбо
// @description Redirect directly to target page avoiding Yandex Turbo
// @description:ru Переадресация на целевую страницу в обход Яндекс Турбо
// @namespace https://github.com/Autapomorph/userscripts
// @author Autapomorph
// @version 3.1.0
// @run-at document_start
// @match *://yandex.ru/*
// @match *://*.turbopages.org/*
// @supportURL https://github.com/Autapomorph/userscripts/issues
// @license MIT
// ==/UserScript==

(function avoidYandexTurbo() {
  function redirectWithTurboOverlay() {
    const titleHostActive = document.querySelector('.turbo-overlay__title-host_active');
    if (!titleHostActive) return;

    const titleHostActiveText = titleHostActive.textContent;
    const hostLinks = document.querySelectorAll('a[data-sc-host]');
    for (let i = 0; i < hostLinks.length; i += 1) {
      const hostLink = hostLinks[i];
      let dataCounter;
      try {
        dataCounter = JSON.parse(hostLink.getAttribute('data-counter'));
      } catch (error) {
        return;
      }

      if (dataCounter.find(e => e.indexOf(titleHostActiveText) > -1)) {
        let redirect;
        if (dataCounter[0] === 'b') {
          redirect = dataCounter[1];
        } else if (dataCounter[0] === 'w') {
          redirect = dataCounter[3];
        } else return;

        top.location.replace(redirect);
      }
    }
  }

  function redirectWithURL() {
    const urlPathname = top.location.pathname;
    const turboIndex = urlPathname.indexOf('/turbo/');
    const delimeterIndex = urlPathname.search(/\/(s|h)\//);
    const delimeterLength = 2;

    if (delimeterIndex < 0) return;

    const host =
      turboIndex === -1
        ? urlPathname.substring(1, delimeterIndex)
        : urlPathname.substring(turboIndex + '/turbo/'.length, delimeterIndex);
    const pathName = urlPathname.substring(delimeterIndex + delimeterLength);
    top.location.replace(`//${host}${pathName}`);
  }

  function main(urlPathname) {
    if (/\.*\/(s|h)\/.*/.test(urlPathname)) {
      redirectWithTurboOverlay();
      redirectWithURL();
    }
  }

  let currentURLPathname = top.location.pathname;
  setInterval(() => {
    if (currentURLPathname !== top.location.pathname) {
      currentURLPathname = top.location.pathname;
      main(currentURLPathname);
    }
  }, 1000);

  main(currentURLPathname);
})();

Как альтернативу зарубежным сервисам организации работы обратите ещё внимание на YouGile. Это Slack + Trello в одном. Для команды до 10 человек – бесплатно.

Information

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