Мини-детектив НЕ системного администратора

Всем привет!

Меня зовут Илья. Я скорее программист и вечный-в-попытках-предприниматель чем системный администратор. Но, как известно, в стартапах ты и косец, и жнец, и на дуде игрец. Поэтому сегодня пришлось поиграть во все роли. Статья сможет помочь таким же как я начинающим администраторам, которые по воле судьбы/службы приходится заниматься сервером.

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

Итак, сегодня утром в 11:35 по минскому времени один из менеджеров написал, что сайты перестали работать. А конкретнее, сыпать ошибками.

Т.к. первоначальной настройкой сервера занимались специалисты хостинговой компании, я сразу же написал запрос им. Но получил от ворот поворот:

Что же, возможно это и не клиентоориентированно, но правильно. Не каждому же клиенту помогать с MySQL. Платной услугой пользоваться не хотелось. Ладно, будем сами.

Действительно, при заходе на сайт появлялось неприятное:

SQLSTATE[HY000]: General error: 1 Can't create/write to file '/tmp/#sql_b80_0.MYI' (Errcode: 28 - No space left on device), 

На первый взгляд все казалось очень простым — не хватает места на диске, где находится MySQL. Но с другой стороны и удивительным — только вчера на том диске было 40 Гб свободного места.

Подключаемся по SSH, смотрим:

bakharevich@server:/# df -h Filesystem      Size  Used Avail Use% Mounted on rootfs           60G   17G   40G  30% / /dev/xvda1       60G   17G   40G  30% / /dev/xvda3       79G   57G   19G  76% /home/site2.by /dev/xvda5       69G   36G   30G  55% /home/site3.by 

Странно. На рутовском диске действительно свободно 40Гб, но MySQL уверенно не хочет запускаться — нет места.

Быстрый поиск в Интернете дал результат — кроме места на диске есть ещё и ноды, которых у нас как раз-таки 0.

bakharevich@server:/# df -i Filesystem       Inodes   IUsed    IFree IUse% Mounted on rootfs          3932160 3932160        0  100% / /dev/xvda1      3932160 3932160        0  100% / /dev/xvda3      5242880 1122900  4119980   22% /home/site2.by /dev/xvda5      4587520  801087  3786433   18% /home/site3.by 

Т.е. каждый файл, директория и даже симлинк занимают ноду. Где-то в подсознании я безусловно понимал, что такое имеет место быть. Но отсутствие опыта в делах админских/железячных не дало мне сразу же подумать об этом. Хорошо, будем знать! 🙂 А пока нужно освободить часть нод, чтобы как можно скорее запустить сайты.

Первое, что я решил удалить, это сессии от PHP. Да, у людей повылетают авторизации, но это не так страшно, т.к. сайты не работают. У нас сессии хранятся на диске. Поэтому:

rm -rf /var/lib/php5/* 

А также перенастроить их сохранение на другой диск (где побольше нод) в php.ini:

session.save_path = "/path/to/new/dir/" 

Смотрим, сколько освободили нод:

bakharevich@server:/home# df -i Filesystem       Inodes   IUsed    IFree IUse% Mounted on rootfs          3932160 32928660    3500  100% / /dev/xvda1      3932160 3932160        0  100% / /dev/xvda3      5242880 1122900  4119980   22% /home/site2.by /dev/xvda5      4587520  801087  3786433   18% /home/site3.by 

Всего 3500 🙁 Но этого может хватить, чтобы запустить MySQL, а значит и временно восстановить работу сайтов.

Пробуем перезапустить MySQL:

bakharevich@server:~$ sudo service mysql start [ ok ] Starting MySQL (Percona Server) database server: mysqld . . .. 

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

Продолжаем удалять файлы. Инстиктивно я начал с /var/log/ і /var/cache/:

du --max-depth=1 /var/log/ | sort -n -r du --max-depth=1 /var/cache/ | sort -n -r 

Удалил лишнее. Стало примерно еще 3.000 нод, но этого естественно все равно очень мало. И вообще, кто мог создать такое количество файлов, чтобы использовать около 1.5 млн нод?

При дальнейшем поиске увидел папку /var/spool/exim4/input. Exim4 — почтовый сервер, который, как я понимаю, идет вместе с Debian. Попробовал подсчитать кол-во файлов в директории, но результат долго не показывался. Значит файлов там действительно очень и очень много:

ls -l /var/spool/exim4/input | wc -l 

Быстрый поиск в Интернете показал, что эта директория для писем в очереди. Гм… Это интересно, потому что ни один из наших сайтов не пользуется локальным почтовым сервером. Все переведено на «Яндекс.Почта для домена» и Google. Ладно, к этому вернемся позже. Пока нужно освободить ноды!

Просто удалять файлы в директории не хочется. Ищем правильное удаление и находим нечто подобное:

exim -bp | exiqgrep -i -f $user | xargs exim -Mrm 

Запускаю. Жду некоторое время и понимаю, что ноды не освобождаются. Быстро размышляю, что это скорее всего из-за первой команды exim -bp, которая сначала выводит список писем в очереди. Раз там более 1 млн писем, то и выводить будет долго.

Более того, к этому времени свободные ноды уже закончились. Сайты вновь остановились. Начинают писать менеджеры, приходят одна за одной SMS о неработоспособности сайтов, звонит телефон… Обстановка накаляется. Ладно! Придется действовать жестко. Удаляем напрямую:

rm -rf /var/spook/exim4/input/* 

Но не тут-то было. Ноды не высвобождаются. Удаляются ли файлы тоже не могу посмотреть — объем более миллиона не позволяет их быстро подсчитать. Скорее всего, rm * тоже сначала читает всю директорию, а потом уже начинает удаление.

Ладно, пробуем более жесткий вариант:

rm -r /var/spool/exim4/input/ 

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

Уже более спокойный и рассудительный, начал смотреть логи exim. Сначала ничего интересного… как вдруг нечто подобное:

2015-07-31 13:58:41 1ZIwuU-0007a9-Rm ** joan_galloway@site.by R=dnslookup T=remote_smtp: retry time not reached for any host after a long failure period 2015-07-31 13:58:41 1ZIwuU-0007a9-Rm joan_galloway@site.by: error ignored 2015-07-31 13:58:41 1ZIwuU-0007a9-Rm Completed 

Интересно! Как я уже писал, мы не пользуемся локальным почтовым сервером. Более того, site.by — не наш. Мы просто его временно размещаем на нашем сервере. Чем он занимается никому не известно.

Смотрю структуру сайта:

Что-то знакомое. Посмотрим index.php:

Ага, Joomla! Причем от 2013 года. Наверное воспользовались уязвимостью старых версий.

С большой надеждой, что сайт не очень популярный, открываю логи-вебсервера, чтобы найти что-то подозрительное. Сразу делаю поиск по email «joan_galloway», который был найден в логах exim. Но ничего нет… Ищем дальше. Запросы картинок, файлов стилей… И вдруг:

50.62.177.108 - - [31/Jul/2015:14:37:41 +0300] "POST /components/com_weblinks/views/categories/system.php HTTP/1.1" 404 2056 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.6)" 

Очень интересно! Некий файл system.php. Был POST запрос, поэтому параметров запроса не видно в адресе. Название очень подозрительное. Когда-то в детстве у меня тоже была такая директория на домашнем компьютере 🙂

Смотрим сам файл:

Понятно! Враг найден. Изменяем название файла и в логах exim наступает снова тишина. Наконец можно притронуться к еде, которую будущая жена поставила около меня минут 10 назад 🙂

Далее будет допрос заключенного:

— каким образом попал на сервер?
— есть ли сообщники на других сайтах/директориях?

А также нужно разобраться на нашей территории:

— проверить права к папкам
— кроме автоматической проверки свободного места настроить проверку свободных нод
— настроить exim (например, заблокировать SMTP).

Наверное, необходимо что-то еще. Буду рад комментариям/исправлениям/историям из вашей практики.

Надеюсь, кому-то статья покажется полезной.

Спасибо за внимание!

ссылка на оригинал статьи http://habrahabr.ru/post/263933/

Авто калибровка дельта принтера, на примере Prism Mini

В предыдущей статье было показано как произвести калибровку дельта принтера в ручном режиме. Но из за сложности и трудоемкости настройки решено было сделать авто калибровку. Так как финальная версия находится на этапе тестирования и изготовления, мы все же хотим облегчить жизнь нашим клиентам, и всем, кто сделал себе принтеры по этой схеме. Далее будет рассмотрен один из способов реализации авто калибровки.
Существует множество подходов, установка выдвижного щупа на эфектор с микропереключателем, FSR датчики, датчик Холла, и т.п. Но у этих систем имеется существенный недостаток — они измеряют расстояние не до сопла, а непосредственно до датчика, плюс ко всему в отдельных случаях может сбиться соосность (если датчик расположен не вместо сопла, то расчет геометрии может быть нарушен. Не говоря уже о точности).
Идеальный вариант — это фиксировать касание самого сопла о стол. И здесь можно пойти двумя путями:

  • Создать электрический контакт между HotEnd’ ом и эфектором, таким образом, что бы HotEnd был подвижен, и размыкал (или замыкал) контакт при нажиме на него .
  • Создать электрический контакт между металлическим соплом и столом.

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


Из инструмента нам понадобится:

  1. Алюминиевый скотч (по сути это алюминиевая фольга на клейкой основе, а не всякие там армирующие ленты)
  2. “Крокодил” — для подключения одного из контактов на металический корпус hot-end, в принципе можно обойтись любой скрепкой, либо закрепить конец провода подав его винтом или припаяв (сурово но эффективно)
  3. Канцелярская прищепка
  4. Штырьевая колодка 2.54 для подключения нашего импровизированного датчика к плате RAMPS 1.4 (либо в соответствующий разъем EndStop на вашей плате). Мало у кого есть обжимка для монтажа таких колодок, но можно подобную колодку найти в блоке компьютера, сняв с “пищалки” или кнопок.
  5. Паяльные принадлежности, желательно иметь активный флюс и более менее мощный паяльник.
  6. Провода, примерно метр.

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

Так же для коммутации следует изготовить провод, как писалось ранее, один из концов обжать в колодку 2.54 (или припаятся к ней), два других конца будут закреплены на радиаторе HotEnd’а и на столе с алюминиевым скотчем. Дабы подлезть к радиатору берем обычный крокодильчик и припаеваем один из концов провода к нему, для простоты пайки советую использовать кислоту, хотя с хорошим прогревом и обычной канифолью справлялся, второй же конец можно так же припаять к крокодилу, но в данном случае существует вероятность повредить скотч при закреплении, да и крокодил должен быть достаточно большим. Мы поступили следующим образом: возьмем канцелярскую прищепку и зачистим ее от краски (желательно со всех сторон). Здесь важным моментом является то, что мы будем припаивать к металлической прищепке медный провод обычным припоем (ПОС 61) и для удачной спайки как раз таки и нужен активный флюс, мы использовали обычную ортофосфорную кислоту (паяльная кислота).


Далее представлены фотографии подключения на плату и на сам принтер. Концы провода на нашем принтере подключаем к Z-max., а в прошивке необходимо указать какое нормальное состояние концевого выключателя (нашего датчика, замкнутый или разомнкутый). При данном подходе в нормальном состоянии датчик разомкнут.




Прошивка с авто калибровкой для дельта принтеров можно взять отсюда: Marlin Delta firmware with autocalibration updates. RichCattell
Настройки прошивки:
Cohfiguration.h

// Precision for G30 delta autocalibration function #define AUTOCALIBRATION_PRECISION 0.03 // mm. Точность калибровки, используемая нами была равна 0.1мм.  // Diameter of print bed - this is used to set the distance that autocalibration probes the bed at. Диаметр печатного стола, параметр используется для задания размера для авто калибровке, чем дальше расположены точки (больше диаметр), тем лучше, но при касании (в нашем случае, т.к. эфектор на магнитах) может отвалится эффектор. #define BED_DIAMETER 170 // mm  // The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. Нас интересует именно этот параметр 

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

Для запуска авто калибровки подключимся к принтеру по USB, и воспользуемся программой pronterface. Существует три вида калибровки:

  • Команда G30 — калибрует offset’s — по сути выставляет высоту до концевых выключателей.
  • Команда G30A — калибрует всю геометрию принтера, длину диагоналей, отступы концевых выключателей (высоту) и кривизну геометрии по “Tower” — башням( скорее всего имеется в виду разная высота опор принтера)
  • Команда G29 — так называемый AutoBedLevel — автоматическая калибровка кривизны стола. На дельта принтерах она работает наиболее корректно, и запускается непосредственно перед стартом печати в начальном g-code.

Соответственно наиболее актуальны последние два.
Далее представлен листинг консоли принтера без первоначальной калибровки и повторный ее запуск.
Краткий принцип калибровки:

  • Проверка / регулировка смещения endstop’ов
  • Проверка / регулировка дельта радиуса
  • Проверка ошибок геометрии башен
  • Подбор длины диагоналей> проверка геометрии башен> сверка смещений EndStop’ов. Когда первые два параметра меняются, подбирается третий и цикл повторяется до тех пор, пока не удовлетворятся все три параметра.
Листинг первоначальной калибровки — урезаны итерации с 4 по 17 т.к. там повторяется действия

Connecting... start Printer is now online. echo:Marlin 1.0.0 echo: Last Updated: Jul 31 2015 11:09:21 | Author: (RichCattell, Prism Mini) Compiled: Jul 31 2015 echo: Free Memory: 1753  PlannerBufferBytes: 1232 echo:Hardcoded Default Settings Loaded echo:Steps per unit: echo:  M92 X100.00 Y100.00 Z100.00 E156.00 echo:Maximum feedrates (mm/s): echo:  M203 X200.00 Y200.00 Z200.00 E200.00 echo:Maximum Acceleration (mm/s2): echo:  M201 X9000 Y9000 Z9000 E9000 echo:Acceleration: S=acceleration, T=retract acceleration echo:  M204 S3000.00 T3000.00 echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s),  Z=maximum Z jerk (mm/s),  E=maximum E jerk (mm/s) echo:  M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00 echo:Home offset (mm): echo:  M206 X0.00 Y0.00 Z0.00 echo:Delta Geometry adjustment: echo:  M666 A0.000 B0.000 C0.000 I0.000 J0.000 K0.000 U0.000 V0.000 W0.000 R66.00 D154.00 H230.00 echo:Endstop Offsets: echo:  M666 X0.00 Y0.00 Z0.00 echo:Z-Probe Offset: echo:  M666 P X0.00 Y0.00 Z0.00 echo:PID settings: echo:   M301 P15.09 I0.75 D76.13 echo:SD init fail Setting hotend temperature to 190.000000 degrees Celsius. Setting bed temperature to 70.000000 degrees Celsius. >>> g30 a SENDING:G30 A Starting Auto Calibration.. Calibration precision: +/-0.100mm |	Z-Tower			Endstop Offsets | 	-7.8500			X:0.00 Y:0.00 Z:0.00 | -5.2400		-8.5900		Tower Offsets | 	-6.8400			A:0.00 b:0.00 C:0.00 | -3.7200		-8.0400		I:0.00 J:0.00 K:0.00 | 	-5.6900			Delta Radius: 66.0000 | X-Tower		Y-Tower		Diagonal Rod: 154.0000    Iteration: 1 Checking/Adjusting endstop offsets // Проверка / регулировка смещения endstop'ов 			x:-3.6800 (adj:-3.6800) y:-7.9600 (adj:-7.9600) z:-7.7700 (adj:-7.7700) 			X=ERROR Y=ERROR Z=ERROR 			x:0.7500 (adj:-2.9300) y:-0.1900 (adj:-8.1500) z:-0.2200 (adj:-7.9900) 			X=ERROR Y=ERROR Z=ERROR 			x:0.1600 (adj:-2.7700) y:-0.0800 (adj:-8.2300) z:0.0500 (adj:-7.9400) 			X=ERROR Y=OK Z=OK 			x:0.0300 (adj:-2.7400) y:-0.0200 (adj:-8.2500) z:0.0100 (adj:-7.9300) 			X=OK Y=OK Z=OK |	Z-Tower			Endstop Offsets | 	-0.0300			X:-2.74 Y:-8.25 Z:-7.93 | -0.0200		0.1500		Tower Offsets | 	-0.2800			A:0.00 b:0.00 C:0.00 | -0.0300		-0.0300		I:0.00 J:0.00 K:0.00 | 	-0.1900			Delta Radius: 66.0000 | X-Tower		Y-Tower		Diagonal Rod: 154.0000 Checking delta radius //Проверка дельта радиуса Adjusting Delta Radius //Регулировка дельта радиуса 			x:-0.0600 (adj:-2.8000) y:-0.0300 (adj:-8.2800) z:-0.0500 (adj:-7.9800) 			X=OK Y=OK Z=OK 			 c: -0.2000 delta radius:66.0000 prec:0.010 tries:0 			 done:false 			x:0.0700 (adj:-2.7300) y:0.0900 (adj:-8.1900) z:0.0300 (adj:-7.9500) 			X=OK Y=OK Z=OK 			 c: -0.2100 delta radius:66.2000 prec:0.010 tries:0 			 done:false 			x:0.0600 (adj:-2.6700) y:0.0300 (adj:-8.1600) z:0.0600 (adj:-7.8900) 			X=OK Y=OK Z=OK 			 c: -0.1500 delta radius:66.4000 prec:0.010 tries:0 			 done:false 			x:0.0400 (adj:-2.6300) y:-0.0100 (adj:-8.1700) z:0.0300 (adj:-7.8600) 			X=OK Y=OK Z=OK 			 c: -0.0800 delta radius:66.6000 prec:0.010 tries:1 			 done:false 			x:0.0300 (adj:-2.6000) y:0.0400 (adj:-8.1300) z:0.0600 (adj:-7.8000) 			X=OK Y=OK Z=OK 			 c: 0.0200 delta radius:66.8000 prec:0.010 tries:2 			 done:false 			x:-0.0100 (adj:-2.6100) y:0.0200 (adj:-8.1100) z:-0.0200 (adj:-7.8200) 			X=OK Y=OK Z=OK 			 c: -0.0900 delta radius:66.7000 prec:0.010 tries:3 			 done:false 			x:-0.0000 (adj:-2.6100) y:-0.0000 (adj:-8.1100) z:-0.0000 (adj:-7.8200) 			X=OK Y=OK Z=OK 			 c: -0.0500 delta radius:66.7500 prec:0.020 tries:0 			 done:false 			x:0.0500 (adj:-2.5600) y:0.0100 (adj:-8.1000) z:0.0300 (adj:-7.7900) 			X=OK Y=OK Z=OK 			 c: -0.0400 delta radius:66.8000 prec:0.020 tries:1 			 done:false 			x:-0.0100 (adj:-2.5700) y:-0.0500 (adj:-8.1500) z:-0.0400 (adj:-7.8300) 			X=OK Y=OK Z=OK 			 c: 0.0100 delta radius:66.8500 prec:0.020 tries:1 			 done:true 			  			  			  Iteration: 2 Checking/Adjusting endstop offsets // Проверка / регулировка смещения endstop'ов 			x:-0.0000 (adj:-2.5700) y:0.0300 (adj:-8.1200) z:0.0300 (adj:-7.8000) 			X=OK Y=OK Z=OK |	Z-Tower			Endstop Offsets | 	 0.0100			X:-2.57 Y:-8.12 Z:-7.80 | 0.0100		0.1700		Tower Offsets | 	 0.0000			A:0.00 b:0.00 C:0.00 | 0.0200		-0.0200		I:0.00 J:0.00 K:0.00 | 	-0.1900			Delta Radius: 66.8500 | X-Tower		Y-Tower		Diagonal Rod: 154.0000 Checking for tower geometry errors.. //Проверка ошибок геометрии башен 			x_diff = 0.15000 			y_diff = 0.03000 			z_diff = 0.20000 			high_diff = 0.20000 			xy_equal = false 			xz_equal = true 			yz_equal = false 			Opp Range = 0.36000 			t1:Err t2:OK t3:Err 			Tower geometry OK Checking DiagRod Length //Проверка длины диагоналей 			target:0.0033 c:0.0000 adj:0.00000 			|	Z-Tower			Endstop Offsets 			| 	-0.0000			X:-2.57 Y:-8.12 Z:-7.80 			| 0.0400		0.2000		Tower Offsets 			| 	-0.0000			A:0.00 b:0.00 C:0.00 			| -0.0100		-0.0000		I:0.00 J:0.00 K:0.00 			| 	-0.2000			Delta Radius: 66.8500 			| X-Tower		Y-Tower		Diagonal Rod: 154.0000 			 			 			 Iteration: 3 Checking/Adjusting endstop offsets  // Проверка / регулировка смещения endstop'ов 			x:-0.0100 (adj:-2.5800) y:0.0300 (adj:-8.0900) z:0.0300 (adj:-7.7700) 			X=OK Y=OK Z=OK 			|	Z-Tower			Endstop Offsets 			| 	-0.0300			X:-2.58 Y:-8.09 Z:-7.77 			| 0.0300		0.1400		Tower Offsets 			| 	-0.0200			A:0.00 b:0.00 C:0.00 			| 0.0100		-0.0400		I:0.00 J:0.00 K:0.00 			| 	-0.2200			Delta Radius: 66.8500 			| X-Tower		Y-Tower		Diagonal Rod: 154.0000 Checking for tower geometry errors..  //Проверка ошибок геометрии башен 			x_diff = 0.13000 			y_diff = 0.07000 			z_diff = 0.19000 			high_diff = 0.19000 			xy_equal = true 			xz_equal = true 			yz_equal = false 			Opp Range = 0.36000 			t1:Err t2:OK t3:Err 			Tower geometry OK Checking DiagRod Length //Проверка длины диагоналей 			target:-0.0033 c:-0.0200 adj:-0.20000 			target:0.2133 c:0.2000 adj:-0.20000 			target:0.4267 c:0.4000 adj:-0.20000 			target:0.6233 c:0.6200 adj:0.00000 Diag Rod Length changed .. Homing Endstops  //Длина диагоналей изменилась... "хоумимся" - едем в нулевое положение по Endstop |	Z-Tower			Endstop Offsets | 	-0.4600			X:-2.58 Y:-8.09 Z:-7.77 | -0.4000		-0.2900		Tower Offsets | 	-0.4600			A:0.00 b:0.00 C:0.00 | -0.4500		-0.5200		I:0.00 J:0.00 K:0.00 | 	-0.6900			Delta Radius: 66.8500 | X-Tower		Y-Tower		Diagonal Rod: 153.4000  Iteration: 17 Checking/Adjusting endstop offsets x:0.0100 (adj:-3.0300) y:0.0300 (adj:-8.5000) z:0.0100 (adj:-8.2300) X=OK Y=OK Z=OK |	Z-Tower			Endstop Offsets | 	-0.0300			X:-3.03 Y:-8.50 Z:-8.23 | 0.0400		0.1200		Tower Offsets | 	-0.0300			A:0.00 b:0.00 C:0.00 | 0.0100		-0.0600		I:0.00 J:0.00 K:0.00 | 	-0.2600			Delta Radius: 66.8500 | X-Tower		Y-Tower		Diagonal Rod: 153.3453 Checking for tower geometry errors.. x_diff = 0.11000 y_diff = 0.10000 z_diff = 0.23000 high_diff = 0.23000 xy_equal = true xz_equal = false yz_equal = false Opp Range = 0.38000 Tower 3 has largest error t1:Err t2:Err t3:Err Tower3 Error: Adjusting  tower: -0.0400 opptower:-0.2700 tower radius adj:0.0000  done:false x:0.0000 (adj:-3.0300) y:0.0000 (adj:-8.5000) z:-0.0600 (adj:-8.2900) X=OK Y=OK Z=OK  tower: -0.0700 opptower:-0.1300 tower radius adj:-1.0000  done:false x:-0.0600 (adj:-3.0900) y:-0.0900 (adj:-8.5900) z:-0.0900 (adj:-8.3800) X=OK Y=OK Z=OK  tower: -0.0900 opptower:0.0900 tower radius adj:-2.0000  done:false x:-0.0500 (adj:-3.1400) y:-0.0400 (adj:-8.6300) z:-0.0700 (adj:-8.4500) X=OK Y=OK Z=OK  tower: 0.0400 opptower:0.0500 tower radius adj:-1.5000  done:true Tower Postions changed .. Homing Endstops |	Z-Tower			Endstop Offsets | 	 0.6400			X:-3.14 Y:-8.63 Z:-8.45 | 0.3300		0.4500		Tower Offsets | 	 0.0900			A:0.00 b:0.00 C:0.00 | 0.0900		0.0100		I:0.00 J:0.00 K:-1.50 | 	-0.0200			Delta Radius: 66.8500 | X-Tower		Y-Tower		Diagonal Rod: 153.3453    Iteration: 18 Checking/Adjusting endstop offsets x:0.1000 (adj:-3.0400) y:0.0600 (adj:-8.5700) z:0.6500 (adj:-7.8000) X=OK Y=OK Z=ERROR x:-0.0500 (adj:-3.0900) y:-0.0400 (adj:-8.6100) z:0.0600 (adj:-7.7400) X=OK Y=OK Z=OK |	Z-Tower			Endstop Offsets | 	-0.0000			X:-3.09 Y:-8.61 Z:-7.74 | -0.0600		0.0200		Tower Offsets | 	-0.1100			A:0.00 b:0.00 C:0.00 | -0.0000		-0.0700		I:0.00 J:0.00 K:-1.50 | 	 0.0200			Delta Radius: 66.8500 | X-Tower		Y-Tower		Diagonal Rod: 153.3453 Checking delta radius Adjusting Delta Radius x:-0.0200 (adj:-3.1100) y:-0.0300 (adj:-8.6400) z:0.0200 (adj:-7.7200) X=OK Y=OK Z=OK  c: -0.1100 delta radius:66.8500 prec:0.010 tries:0  done:false x:0.0500 (adj:-3.0600) y:0.0400 (adj:-8.6000) z:0.0100 (adj:-7.7100) X=OK Y=OK Z=OK  c: -0.0400 delta radius:67.0500 prec:0.010 tries:1  done:false x:0.0400 (adj:-3.0200) y:0.0800 (adj:-8.5200) z:0.0600 (adj:-7.6500) X=OK Y=OK Z=OK  c: -0.0000 delta radius:67.2500 prec:0.010 tries:1  done:true       Iteration: 19 Checking/Adjusting endstop offsets x:-0.0000 (adj:-3.0200) y:-0.0200 (adj:-8.5400) z:0.0100 (adj:-7.6400) X=OK Y=OK Z=OK |	Z-Tower			Endstop Offsets | 	-0.0200			X:-3.02 Y:-8.54 Z:-7.64 | -0.0600		0.0200		Tower Offsets | 	 0.0000			A:0.00 b:0.00 C:0.00 | -0.0100		-0.0300		I:0.00 J:0.00 K:-1.50 | 	 0.0200			Delta Radius: 67.2500 | X-Tower		Y-Tower		Diagonal Rod: 153.3453 Autocalibration Complete SENDING:M500 echo:Settings Stored  

Полный листинг повторной калибровки

SENDING:G30 A Starting Auto Calibration.. Calibration precision: +/-0.100mm | Z-Tower Endstop Offsets | -0.1800 X:-3.02 Y:-8.54 Z:-7.64 | -0.3000 -0.1600 Tower Offsets | -0.2200 A:0.00 b:0.00 C:0.00 | -0.2200 -0.2000 I:0.00 J:0.00 K:-1.50 | -0.1500 Delta Radius: 67.2500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Iteration: 1 Checking/Adjusting endstop offsets x:-0.2100 (adj:-3.2300) y:-0.2000 (adj:-8.7400) z:-0.1700 (adj:-7.8100) X=ERROR Y=ERROR Z=ERROR x:0.0100 (adj:-3.2200) y:0.0100 (adj:-8.7300) z:-0.0200 (adj:-7.8300) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | 0.0200 X:-3.22 Y:-8.73 Z:-7.83 | -0.1000 0.0300 Tower Offsets | 0.0000 A:0.00 b:0.00 C:0.00 | -0.0200 -0.0300 I:0.00 J:0.00 K:-1.50 | 0.0100 Delta Radius: 67.2500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Autocalibration Complete 

ссылка на оригинал статьи http://geektimes.ru/post/259600/

Дайджест: VR и AR

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


Oculus

В Сан-Франциско состоялась пресс-конференция компании Oculus, на которой прозвучали новые подробности о шлеме виртуальной реальности Oculus Rift. Компания уже обновила официальный сайт и сменила логотип.
Компания Oculus официально представила пользовательскую версию шлема виртуальной реальности Oculus Rift, которая выйдет в первом квартале 2016 года.
Игра для Oculus Rift, в которой вам придется петь в микрофон и уворачиваться от бутылок с неизвестной жидкостью, летящих в голову.
Oculus покупают израильскую компанию, специализирующуюся на технологиях считывания движений рук.
В версии Unity 5.1, помимо других новых функций и улучшений, появилась поддержка Oculus Rift.
Приложения и игры для шлема Oculus Rift будут проходить проверку на безопасность.
8 важных выводов, сделанных после разговора с CEO Oculus.
Oculus VR намерены финансировать около двух с половиной десятков игр эксклюзивно для Rift.
Во время конференции накануне E3 Oculus объявили о заключении партнерского соглашения с Microsoft.
Oculus Touch – золотой стандарт контроллера VR.
Ребрендинг Oculus VR.

Project Morpheus

Компания Sony решила принять активное участие в Electronic Entertainment Expo (E3) и продемонстрировать на выставке шлем виртуальной реальности Sony Project Morpheus, который первоначально был анонсирован еще на E3 2014.
Вторая часть интервью с Шухей Йошида, в котором он высказывает свое мнение о шлеме виртуальной реальности Morpheus.
На данный момент Sony разрабатывают около 30 игр для своего шлема виртуальной реальности Project Morpheus.
Harmonix показали визуализатор музыки для Project Morpheus.
В игре Rigs для Project Morpheus цвет используется, чтобы делать виртуальную реальность менее угнетающей.

Microsoft и HoloLens

Microsoft показали, какой может быть работа с HoloLens. Компания сделала превосходный ролик с элементами компьютерной графики, рассказывающий об изучении анатомии с помощью голографического компьютера.
Microsoft предлагают образовательным институтам США гранты на проработку новых идей для устройства HoloLens.
Microsoft продемонстрировали специальную версию Minecraft для HoloLens.
Microsoft совместно с Valve будут развивать направление VR для Windows 10.
Статья о том, с какими компаниями сотрудничает Xbox в направлении VR.
Компания Microsoft выделит полмиллиона долларов для призовых мест в конкурсе на лучший научный проект для HoloLens.
Опыт игры в Minecraft при помощи HoloLens.
Обширное интервью с CEO Microsoft Сатья Наделла, в котором он рассказывает о планах компании на ближайшее время и о том, что ожидается от первого запуска HoloLens.
Object Theory собираются разрабатывать приложения дополненной реальности для Microsoft HoloLens.
Очки дополненной реальности HoloLens взорвались на пути к Международной космической станции.
Интервью с техническим директором Microsoft Майком Шрепфером о дронах, VR, носимой электронике и будущем компании в Сиэтле.

Это интересно

Российская компания Lostroom, занимающаяся созданием квест-комнат, разработала сетевую игру, которая полностью проходит в виртуальной реальности.
Кейс Speech Center: особенности разработки обучающего VR-сервиса на Unity.
Глава N3TWORK Нейл Янг думает, что индустрия пока не готова к виртуальной или дополненной реальности и, возможно, не будет готова еще лет 5.
Джон Уокер, редактор Rock Paper Shotgun, написал о том, что будет с виртуальной реальностью.
Samsung Electronics объявили о начале продаж обновленных очков виртуальной реальности Samsung Gear VR Innovator Edition. Они полностью оптимизированы для смартфонов нового поколения Samsung Galaxy S6 и Samsung Galaxy S6 Edge.
Magic Leap – другой взгляд на устройства виртуальной реальности.
The Void – парк виртуальных аттракционов, в котором оказаться хотел бы каждый.
VR Kit от Razer получил поддержку Android и теперь может отслеживать местоположение.
Один из лучших игроков NFL этого года будет готовиться к очередному сезону при помощи устройств виртуальной реальности.
Ким Либрери и Рэй Дэвис о том, как необходимо использовать Unreal Engine в VR.
Конференция E3 показала, чего не хватает VR.
Краткая история Nintendo Virtual Boy в цитатах.
CEO Ubisoft считает, что устройства виртуальной реальности очень похожи на Wii, если говорить об их доступности.
Размышления VR-разработчика о перспективах и направлениях развития отрасли.
Видео: разработка для VR – уроки, полученные на Valve & HTC VR Game Jam.
Бесплатные очки виртуальной реальности от Valve для разработчиков.
Дополненная реальность против виртуальной: что лидирует?
Gunnar Optiks: Eyewear – яркое будущее игровых очков.
ASTRO Gaming делают игровые бренды частью человеческой жизни.
Сооснователь Merge Эндрю Трикетт об объединении виртуальной и дополненной реальностей.
Марк Цукерберг рассказал о том, почему Facebook инвестирует в VR.
Epic: VR – это круто, но будущее за AR.
Epic Games: в работе над VR недостатка новых идей и энтузиазма не наблюдается.
Фильм «Терминатор: Генезис» привносит виртуальную реальность на YouTube.

Игры

Хит Steam Ark: Survival Evolved будет доступен для Project Morpheus и Oculus Rift.
Новый режим мультиплеера для Halo 5: Guardians был показан на E3 с помощью HoloLens.
Battlezone 1998 будет переиздана для ПК и устройств виртуальной реальности.
Полет над Азеротом в интерактивном трейлере фильма Warcraft.
Keep Talking and Nobody Explodes – игра, в которой вам придется обезвреживать бомбу.
Virtual Borders Arizona – проект, в котором с помощью очков виртуальной реальности можно побывать в аризонской пустыне и почувствовать себя нелегальным эмигрантом.
Три удивительных проекта на базе Unity и VR.

ссылка на оригинал статьи http://habrahabr.ru/post/263929/

Очередной сбой в работе социальной сети «Вконтакте»

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

Последний заметный сбой в работе произошел 10 июня, но тогда работа сети была восстановлена достаточно оперативно.

Пользователи Твиттера как всегда отреагировали бурно:

Твиттер-аккаунт пресс-секретаря «Вконтакте» Георгия Лобушкина пока молчит, хотя обычно при помощи его он держит общественность в курсе темпов работ по восстановлению работоспособности сети и сообщает о причинах сбоя.

Пока же официальной информации о причинах неполадок не поступало.

ссылка на оригинал статьи http://geektimes.ru/post/259602/

Скорость как привычка: лучшее из статьи бывшего топ-менеджера Google

Дейв Жирард (Dave Girouard), CEO сервиса для контроля личных финансов Upstart и бывший президент направления бизнес-приложений Google, написал статью о том, как сделать скорость основой успеха бизнеса. Мы приводим здесь главные мысли этого материала.

При прочих равных скорость — ключ к успеху

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

Google — быстрый. General Motors — медленные. Стартапы быстры, а медленные компании все делают медленно. Понятно, что скорость — это плюс.

По мнению Жирарда, успешные руководители могут выработать привычку быть быстрым («это как здоровое питание и зарядка»). Если распространить эту привычку и на других членов команда, тогда компания значительно повысить свою конкурентоспособность (именно поэтому мы в 1cloud стараемся делать работу клиентов с системой быстрее, например, заказать виртуальный сервер можно с помощью простого калькулятора на главной странице сайта).

Ниже несколько советов о том, как это сделать.

Принятие решений

Как говорил генерал Джордж Паттон, «средний план, исполненный быстро, лучше отличного плана, который будет исполнен на следующей неделе». Процесс принятия решений (а затем их «перепринятия» по второму кругу) занимает огромное количество времени. Победить это можно одним способом, необходимо заранее определять, когда нужно принять решение — не всегда нужна спешка.

В итоге, решения, которые можно принять прямо сейчас должны приниматься в течение 10 минут. Несмотря на то, что часто достичь консенсуса и убедить всех членов команды в необходимости осуществления конкретных шагов, пользоваться «правом босса», решая все в одиночку, стоит редко. Только так можно сохранить комфортную рабочую обстановку в коллективе.

Исполнение решений

Огромное количество решений на совещаниях принимается без прописывания для них даты исполнения. Это огромная ошибка! Более того, даже когда дедлайн установлен, с огромной долей вероятности он выбран наполовину интуитивно, сотрудник просто «прикинул, сколько это примерно займет».

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

Знаменитая история — однажды руководитель Apple Тим Кук на совещании высказал недовольство срывом графика производство iPhone в Китае, сказав, что кому-то нужно будет поехать и разобраться на месте. Спустя пять минут от взглянул на ответственного сотрудника и спросил «А ты почему еще здесь?». Сотрудник (Сабих Кхан), пулей вылетел из переговорной, взял такси в аэропорт, билет на ближайший рейс и улетел, даже не заезжая домой переодеться. И проблема решилась максимально быстро.

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

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

Нужно бороться с когнитивной перегрузкой

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

Жирард расскзывает об опыте работы в Google — его команда работала над проектом по разделению энтерпрайз-сервисов от приложений для обычных пользователей. Все было так сложно, что каждое совещание начиналось с 30 минут, посвященных обзору того, что уже было сделано.

После такого мозг просто кипел.

Часто вся сложность заключается в какой-то одной части проекта. К примеру, в новой компании Жирарда Upstart много внимания нужно уделять соответствию различных стандартам и правилам, установленным регулирующими органами. Мало что можно сделать, пока до конца неясно, разрешено ли это законом. Часто однозначного ответа сразу не найти, и необходимы долгие «танцы с бубном».

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

Конкуренцию можно использовать для ускорения

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

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

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

Жирард говорит, что когда его команда в Google запускала Google Apps, то главным конкурентом на рынке бизнес-приложений был Microsoft со своим Office. Много часов Жирард думал о том, что можно сделать лучше конкурента — одним из выбранны преимуществ стала простота модели оплаты. Google предложил клиентам цену в $50 за сотрудника за год — в сравнении с прайс-листом Microsoft на 20 листа А4 простота просто бросалась в глаза.

Мы не особенно долго спорили, какой должна быть цена — $45, $50 или $55. Решили где-то за полчаса. Куда важнее было то, что мы хотели сказать людям: «Мы, может, и не бесплатные, но это точно самый простой вариант для вас».

Без поддержки никуда

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

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

Существуют разные способы того, как это делается. Некоторые говорят, что уже работали с конкурентом этой компании, который активно развивается, и «вам, ребята, тоже не надо бы отставать». Кто-то просто берет на вооружение честность («Для нас этот контракт реально важен, так что нужно, чтобы вы справились с задачей, парни»).

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

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

Вопросы — лучшее оружие против инерции

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

В Upstart я задаю множество сложных вопросов и делаю это очень быстро, большинство из них связаны со временем. Я знаю, что мы хорошо работаем и не особенно «тормозим», но не премину уточнить, почему определенная задача занимает ровно столько времени. Может все-таки есть способ решить ее быстрее?

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

Как только вы становитесь медленнее, вас обгоняют.

ссылка на оригинал статьи http://megamozg.ru/post/18098/