Эрогономичная клавиатура Microsoft Sculp Ergonomic. Мнение программиста.

884

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

Немного предыстории

С довольно давнего времени я был немалым фанатом яблочной продукции и сейчас неплохо отношусь, правда не ко всем линейкам товаров и тем более не к текущим ценникам на продукцию. Но мне всегда нравились клавиатуры Apple, как по дизайну и минимализму, так и по технической составляющей. Механизм бабочки прекрасен.

На данный момент у меня есть клавиатура 1-ого поколения. Ей я уже пользуюсь лет пять. Она в прекрасном состоянии.

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

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

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

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

Об эргономике и биомеханике

Пару слов о мышке.

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

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

По мышке собственно все.
Главное, чтобы она была подобной формы.

О клавиатуре.

По клавиатуре положение чуть более тяжелое. Я тестировал и определил два типа нагрузки.

  1. Печатная нагрузка
  2. Непечатная нагрузка.

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

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

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

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

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

Естественное положение вы видите на картинке.

Есть модели клавиатур такого плана.

Есть некоторые самоделки. Мне не очень нравится механика и высокий ход клавиш, хотя идея интересная. Но цена такого занятия около 10-15 тыс. рублей.

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

О Microsoft Sculpt

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

Скажу вкратце, приехала коробка, довольно большая. В ней собственно три вещи: клавиатура, numpad и мышка. Ну и понятная инструкция.

Первые впечатления положительные. Хорошая, качественная сборка.
Мышка удобная, что самое прикольное — silent, то есть клики приглушенные. Колесико также работает тихо и плавно. Есть пару удобных дополнительных клавиш: win и back.

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

Нумпад. Мне он в принципе не особо был нужен. Просто шел в комплекте. Но я приспособил для доп. клавиш и расположил слева. Иногда удобнее нажимать enter или delete левой рукой и не тянуться.

Собственно сама клавиатура.
Качество сборки понравилось. Как говорили в отзывах, у этой модели достаточно низкий (ноутбучный) ход клавиш. Это для меня огромный плюс. Несмотря на то, что клавиши мембранные, ход у них приятный, как у бабочки.

Но стоит сказать, что не все клавиши такого вида. Верхние другого хода — более жестковатые. Не знаю зачем так сделали, может из технических соображений. Мне не очень, но не критично.
И еще — это пробел. Он отличается. Ход у него похож на механический. В нем есть небольшой минус — в отличие от других клавиш, пробел немного «лязгает» при нажатии, как если вспомнить старые клавиатуры. Мне это так же не очень понравилось, хотя критичным недостатком не назвал бы. Думаю, возможно, тут тоже были технические издержки.

Первое впечатление — непривычно, конечно. Расположение иное, руки располагаются немного по другому. Так как между половинами есть разделение, приходится более чисто использовать 10-ти пальцевый метод. На привыкание ушло 2-3 дня.

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

После месяца использования.
Как будто всегда с ней работал. Уже привык. Стали меньше напрягаться кисти, руки и лопатки. Усовершенствовалась печать 10-ти пальцевым методом, так как нет возможности читерить. Иногда чуть путаюсь, когда сажусь за ноутбук или другие клавиатуры, но не критично, ничего не забывается. Это как разные языки, когда садишься, то переключаешься.

Плюсы:

  1. Качество — цена, с учетом что идет набор клавиатура + мышка. За 6 тысяч считаю отличным предложением.
  2. Эргономика, соответственно вклад в здоровье.
  3. Без проводов.

Замечания:

  1. Чуть громоздкая
  2. Лязгающий пробел
  3. Необычный формфактор, но это понятно, требует привыкание и использование 10-ти пальцевого метода печати.


+1
 

October CMS System\Models\MailSetting, Mail not found

493

У меня в компоненте возникла ошибка, что данные классы не были найдены.

Соответсвенно помогли импорты. Хотя в примерах импорты не указывались.



use System\Models\MailSetting as MailSetting;
use Mail;
0
 

Установка Express.js приложение на VPS с Nginx, PM2 и Ubuntu 18.04

730

0. Подготовка

Нам понадобится:

  • VPS с Ubuntu 18.04 и root доступом
  • Putty или другой SSH клиент
  • Шаблон простого Node.js + Express.js сервера (Я буду использовать этот)
  • Необязательно: домен с DNS записями с привязкой к вашему VPS

1. Создаем пользователя

Мы хотим создать нового пользователя с правами “sudo”, потому что это плохая практика использования root — пользователя в рабочей среде.

Я для примера создам пользователя с именем lukas.

# creating new user
adduser lukas# providing superuser rightsusermod -aG sudo lukas

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

sudo apt-get update
sudo apt-get upgrade

2. Node.js

Есть много путей для установки node.js, но я предпочитаю  NVM (Node.js Version Manager). Мы установим node.js 10ой версии.

Примечание, на момент выхода перевода актуальная версия node.js 14 lts.

Мы загрузим установочный скрипт с curl (или альтернативно можно использовать wget). Так создастся папка .nvm в каталоге вашего пользователя. Внутри этой папки будут храниться ваши Node.js установки.

# this command will download install script with curl
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash# or use wget
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

Выйдем и залогинимся обратной. После этого надо убедится, что nvm стал доступен.

# check if installed
nvm --version
==> 0.33.11# list available Node.js versions
nvm ls-remote# choose one version and install it
# example of v10.4.1 installation
nvm install v10.4.1# check if installed properly
node --version
==> v10.4.1

NVM-это мощный инструмент, который позволяет устанавливать несколько версий node.js и переключаться между ними по своему усмотрению. Вы можете использовать команду “help” или обратится к документации  github page.

# check more nvm usage
nvm --help

Создаем простой сервер с Express.js

# go to your user's directory
cd /home/lukas# create folder simpleServer
mkdir simpleServer# go inside
cd simpleServer# create package.json
npm init -y# install Express.js
npm install express

Создайте файл с этим текстом внутри и сохраните его. Вы можете использовать nano или любой другой редактор.

# open nano
nano server.js# to save, press Ctrl + X ==> Y ==> Enter
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send("Hello World!");
});

const port = 3000;
const server = app.listen(port, () => {
  console.log(`Listening on http://localhost:${port}`);
});
# start server
node server.js
==> Listening on http://localhost:3000

Если вы зайдете на ваш сайт с портом 3000 (например http://dzen-code.ru:3000) , вы должны увидеть “Hello World!” в окне браузера.

3. PM2

Если вы сейчас закроете свой SSH-клиент, ваш веб-сайт перестанет работать. Нам понадобиться какой-то инструмент, который будет поддерживать наш сервер “живым”. Скажите привет PM2!

# globally install PM2
npm install pm2 -g# check if installed properly
pm2 -V
==> 2.10.4

PM2 будет поддерживать наш сервер в фоновом режиме, и если он упадет, PM2 автоматически перезапустит его.

# start our server with PM2
pm2 start server.js# check <YourVPSIpAddress>:3000 if your server is running

Сделаем запуск PM2 со стартом сервера

Если мы сейчас перезагрузим VPS, наш сервер не запустится. Сначала мы должны включить его. Документация тут.

pm2 startup
# this will generate another command that you need to run# We also need to save what processes
# should get started with pm2
pm2 save# reboot VPS and check if your website is up
sudo reboot

Как и NVM, PM2-это очень мощный инструмент, который может сделать гораздо больше, чем это. Можете ознакомится  с официальной документацие и “help” командой.

# get help!
pm2 help

4. Nginx

Установим Nginx:

sudo apt-get install nginx# check if installed
sudo nginx -v
==> nginx version: nginx/1.14.0 (Ubuntu)

Создадим конфигурационный файл нашего сервера

cd /etc/nginx/sites-availablesudo nano simpleServer

Внутрь файла поместим данный кусок кода

server {
listen 80;
server_name <YourVPSIpAddress>; location / {
proxy_pass http://localhost:3000/;
}
}

Если у вас установлен домен, то пропишите его таким образом:

# ...
server_name www.example.com example.com;
# ...

Более подробная информация Nginx documentation.

Финальные шаги

# check if your configuration is ok
sudo nginx -t# enable your configuration
sudo ln -s /etc/nginx/sites-available/simpleServer /etc/nginx/sites-enabled# restart nginx
sudo systemctl restart nginx

Ваш сервер должен быть доступен по вашему домену или ip <YourVPSIpAddress>.

Перевод https://medium.com/@panzelva/deploying-express-js-website-to-vps-with-nginx-pm2-and-ubuntu-18-04-8c5d32593211

+1
 

Запуск приложения node.js в фоновом режиме на сервере

671

Допустим у вас есть приложение или как в моем случае телеграм бот. И хочется его разместить на сервере. И в формате демона/сервиса.

Я предложу способ которым пользуюсь сам. Вообще есть несколько вариантов для этого. Н я остановился на пакете PM2.
Довольно красивая утилита и информативная.

Сначала соотвественно устанавливаем глобально пакет.

$ npm install pm2 -g

Далее заходим в директорию с нашим скриптом и через команду запускаем приложение в фоновый режим.

$ pm2 start bot.js

Ну и собственно все. Можно посмотреть наш результат. Выведется информация по запущенным приложениям.

$ pm2 list

Доп. информация соотвественно в доке https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

0
 

WordPress, как получить слаг(путь) текущей страницы. (Wp how to get slug/path current page)

1 118

Предлагаю удобный сниппет. С его помощью можно легко получить текущий URL-адрес страницы на вашем сайте WordPress независимо от отображаемой страницы.

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

Так вернется полностью url. аналог функции get_site_url().

global $wp;
$current_url = home_url( add_query_arg( array(), $wp->request ) );

Так к примеру, если страница http://mysite.com/some-post, то вернется только слаг some-post.

global $wp;
$current_slug = add_query_arg( array(), $wp->request );

0
 

ERROR: for resume Cannot start service resume: OCI runtime create failed: container_linux.go:349: starting container process caused

578
ERROR: for resume Cannot start service resume: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"process_linux.go:432: running prestart hook 0 caused \\\"error running hook: exit status 2, stdout: , stderr: fatal error: runtime: out of memory\\\\n\\\\nruntime stack:\\\\nruntime.throw(0x5626704ce57f, 0x16)

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

Сервер был нулевый изначально. SWAP не был настроен.
Расширил память, установил все запустилось.

Можно было перейти на тариф другой, но цена кусалась, поэтому решил этим вариантом.

Хорошая инструкция
https://losst.ru/nastrojka-swap-v-ubuntu-16-04

0
 

October Сms как получить все посты в шаблоне

634

Пример на стандартном плагине Blog от RainLab.
Допустим надо вывести посты не на страничке «все посты», а на другой и допустим не все количество? а только 15-ть.

Для этого вы воспользуемся классом плагина Post, непосредственно в нужной нам страничке в php блоке в хуке onStart. Получим все посты и занесем в переменную posts.

==
use RainLab\Blog\Models\Post;

function onStart()
{
    $this['posts'] = Post::orderBy('created_at', 'desc')->get();
}
==

Далее с этой переменной делаем что нам необходимо.
Во первых получим первые 15ть постов, во вторых через twig выведем их название в цикле.

==
use RainLab\Blog\Models\Post;

function onStart()
{
    $this['posts'] = Post::orderBy('created_at', 'desc')->limit(15)->get();
}
==

 {% for post in posts %}
  {{post.title}}
 {% endfor %}

0
 

Сброс триального периода PhpStrom, WebStorm, IntellijIdea и др для Mac OS. Вечный триал.

1 501

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


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

А пользоваться пробным периодом никто не запрещает.
🙂

Суть скрипта заключается в том, что он сбрасывает все данные касающиеся пробного периода (evaluated period), но при этом сохраняет настройки IDE, проекты, кэш.

Если вам нужен скриптик, предлагаю постучаться ко мне в телеграмм. Вышлю его и инструкцию.

Всем приятного кодинга!

+3
 

Woocommerce. Как получить данныe товаров (заголовок, описание, картинку, цену и тд).

627

Для этого нам потребуется woocommerce класс WC_Product{}(ссылка на документацию), а точнее его объект с использованием id продукта.

$wc_product = wc_get_product( $post->ID );

А дальше стоит переместиться на страницу документации и ознакомиться с методами. Я приведу пример вывода базовой информации.

Используя объект $wc_product, выводим заголовок (title):

 $title = $wc_product->get_name()

ссылку (get_permalink):

 $permalink = $wc_product->get_permalink()

короткое описание (short_description):

 $short_description = $wc_product->get_short_description()

цена (price):

 $price_html = $wc_product->get_price_html()
+1
 

Деплой October CMS с Docker

988

October — это бесплатная самостоятельная платформа CMS с открытым исходным кодом, основанная на PHP-фреймворке Laravel. Эта статья научит вас, как развернуть October CMS с помощью docker, но если вы хотите получить дополнительную информацию об использовании October CMS, то я бы рекомендовал перейти на страницу туториалов.

Разверните сервер Ubuntu 18.04 с объемом оперативной памяти не менее 1 ГБ. Добавьте немного подкачки, если вы находитесь на чем-то вроде DigitalOcean, который использует локальные твердотельные накопители.

Шаги

Разверните сервер Ubuntu 18.04 с объемом оперативной памяти не менее 1 ГБ.

Установите docker и docker-compose.

Скачайте October CMS последней версии:

wget https://github.com/octobercms/october/archive/v1.1.0.tar.gz
tar --extract --gzip --file v1.1.0.tar.gz
rm v1.1.0.tar.gz
mv -i october-1.1.0 octobercms

Создайте файл docker-compose.yml на вашем сервере в папке с проектом (отредактируйте DB_PASSWORD и MYSQL_PASSWORD на что-то другое).

version: '2.2'
services:
  web:
    container_name: web
    restart: always
    image: aspendigital/octobercms:latest
    ports:
      - 80:80
    environment:
      - DB_TYPE=mysql
      - DB_HOST=db #DB_HOST should match the service name of the database container
      - DB_DATABASE=octobercms
      - DB_USERNAME=octobercms
      - DB_PASSWORD=octobercms
    volumes:
      - $HOME/octobercms/plugins:/var/www/html/plugins
      - $HOME/octobercms/storage/app:/var/www/html/storage/app
      - $HOME/octobercms/storage/logs:/var/www/html/storage/logs
      - $HOME/octobercms/themes:/var/www/html/themes

  db:
    image: mariadb
    container_name: db
    restart: always
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 1
      MYSQL_DATABASE: octobercms
      MYSQL_USER: octobercms
      MYSQL_PASSWORD: octobercms
    volumes:
       - $HOME/volumes/mysql/data:/var/lib/mysql

Старт сервисов по порядку

Для начала поднимаем базу данных, чтобы убедиться, что она готова, поэтому запустите ее самостоятельно:

docker-compose up db

Когда она запустится то консоль выведет:

[Note] mysqld: ready for connections.

Далее запускаем приложение:

docker-compose up web

Настраиваем права

Веб-пользователь должен иметь возможность редактировать содержимое папок plugins, storage и themes, поэтому выполните следующие команды:

docker-compose exec web chown -R www-data /var/www/html/plugins
docker-compose exec web chown -R www-data /var/www/html/storage/app
docker-compose exec web chown -R www-data /var/www/html/storage/logs
docker-compose exec web chown -R www-data /var/www/html/themes

Запускаем миграции

Теперь выполните следующую команду для запуска миграции базы данных (создайте структуры таблиц и т. д.).

docker-compose exec web php artisan october:up

Заходим в админку

Переходим по ссылке /backend к URL-адресу. Затем войдите в систему с вашем именем пользователя и паролем.

Перевод статьи: https://blog.programster.org/deploy-october-cms-with-docker

+2