пятница, 2 февраля 2018 г.

Google Guru - тест

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

Тест: Как хорошо вы умеете "гуглить"?


Введите свое имя и нажмите "Далее" чтобы начать тест


Первоначальный вид сертификата был вообще страшненький
потом стал чуть красивее

ну и в конце, тот вариант что здесь в тесте

четверг, 11 января 2018 г.

Еще немного букмарклетов

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

Преобразуется код довольно просто, хотя и там есть свои нюансы. Дабы упростить код, решено было считать за текущий год 2018, а не делать выборку по годам как это было в оригинальном посте. Собственно код выглядит так:
 javascript:(function() {
var fullzp=prompt('Введите общую сумму зарплаты','');
var raznica=fullzp-28284-fullzp*0.1;
var taxzp=raznica< 0 ? 0 : raznica*0.1;
handzp = raznica<= 0 ? fullzp-fullzp*0.1 : fullzp-raznica*0.1-fullzp*0.1-fullzp*0.01;
alert('Зарплата на руки: '+ handzp.toFixed(1) +'\n\rВ пенсионный: '+ (fullzp*0.1).toFixed(1)+'\n\rНалог: '+taxzp.toFixed(1)+'\n\rВ профсоюз 1%: '+(fullzp*0.01).toFixed(1));})();
Чтобы им воспользоваться достаточно поместить его в закладку, скопировав в поле ссылки, либо можно перетащить готовую ссылку отсюда: Расчет зарплаты Нажмите на ссылку, чтобы сразу проверить как это работает.

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

Выделить код на странице и запустить HTML
ADBlock
Increment URL - прибавить к последней цифре адреса 1
Стили вкл/выкл
Youtube verify - кажется при запрете на видео, он снимает запрет, не знаю как проверить
Hide visited ссылки
Создать нумерованный лист
Просмотреть код страницы
Преобразование текст в ссылку
Подсчитать кол-во слов в выделенном фрагменте
Aler external links
Подсветить заголовки
Индикация ссылок
Просмотр паролей

суббота, 6 января 2018 г.

Калькулятор зарплаты

В Казахстане, как и в России, а также как и в других странах, из зарплаты забираются налоги, и разнятся только проценты. В Казахстане подоходный налог составляет 10% от заработной платы. Для того чтобы рассчитать какая сумма должна быть выдана на руки, нужно взять полную заработную плату, и от нее отнять 10%. Но дело в том, что кроме налога из зарплаты забираются также пенсионные взносы, а могут быть еще и профсоюзные. Так же для уменьшения налоговых отчислений из полной заработной платы отнимается еще и минимальная заработная плата. То есть 10% подоходного берется от полной суммы минус пенсионный, минус МЗП. Для того чтобы в очередной раз попрактиковаться в javascript, я накидал очередной калькулятор

Общая зарплата:
МЗП:




Налог:
В пенсионный:
В профсоюз:
Зарплата на руки:

Далее идет пояснение как он работает на javascript. Для того чтобы пересчет осуществлялся на лету во все элементы вставляется конструкция onchange="calc()", которая вызывает скрипт calc.
Чекбокс с профессиональными взносами можно включать и выключать щелкая не только на квадрате но и по тексту, это позволяет сделать конструкция label
<input type="checkbox" id="prof" onchange="calc()">
<label for="prof" >Профсоюзные взносы 1%</label> </br>
Так же label можно использовать и для радиокнопок, каждую из них заключают в тег, без указания for (так как он используется для элементов с конкретным id). В самом скрипте переменной checkbox присваивается document.querySelector("#prof");
var checkbox = document.querySelector("#prof");
а потом появляется конструкция, которая мне очень нравится - это условие, которое заменяет стандартную конструкцию с if
profzp = checkbox.checked ? fullzp*0.01 : 0;
Если чекбокс отмечен, то profzp = fullzp*0.01, а иначе profzp = 0;
Есть много интересных конструкций, которые можно использовать есть в статье на хабре https://habrahabr.ru/post/245731/
Проверить работу скрипта можно в онлайн редакторе javascript https://js.do/samples/calculator

Математическая головоломка в Excel

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

Суть простая - нужно решить как можно больше примеров за отведенное время.
Конструкция таймера в Экселе реализована вот так:

Sub таймер()
If Range("J3").Value = 1 Then Exit Sub
Range("J6").Value = Range("J6").Value + 1
Application.OnTime Now + TimeValue("00:00:01"), "таймер"
If Range("J6").Value = 60 Then
kol = Range("B4").Value - 1
Range("K3").Value = 0
Range("J3").Value = 1
MsgBox "Кончилось время" & vbNewLine & " За минуту вы решили " & kol & " " & Range("A6").Value & "" & vbNewLine & " Поздравляем!", , "Конец игры"
End If
End Sub
Каждую секунду вызывается данная конструкция. Единица в ячейке J3 контрольная - она не дает запустить таймер еще раз, если он уже запущен. Если такого не сделать то при каждом запуске таймера будет смещаться время и за одну секунду он будет прибавлять не 1 а 2-3 и больше, в зависимости от того сколько раз запускали таймер.

Скачать саму головоломку можно тут

вторник, 2 января 2018 г.

Масштабирование сигналов онлайн


Диапазон Входа Вход Диапазон Выхода Выход
от до от до

Если датчик температуры, например, может выдавать температуру от 0 до 100 градусов, а его физический сигнал на выходе может быть 4-20 мА, то при температуре 30 градусов, сколько миллиампер он будет выдавать на выходе?

На самом деле подсчитать не сложно: Нужно всего лишь высчитать процентное соотношение и решить пропорцию. Если 30 градусов это 30% в диапазоне от 0 до 100, то теперь чтобы рассчитать выход нужно найти те же 30%, но в диапазоне от 4 до 20. Для этого от 20 отнимаем 4 = 16, умножаем 16 на 0,3 (30%) = 4,8, и теперь прибавим это значение к 4, т.к. у нас диапазон начинается с 4. В итоге на выходе будем иметь сигнал величиной 8,8 мА . 

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

На самом деле я не знаток javascript, всему научился через инет, поэтому буду писать так как делал я. Сначала я нарисовал таблицу, где мы будем вводить наши переменные,диапазоны входных и выходных сигналов, а также сам входной сигнал. Таблицу генерировал онлайн 6 столбцов диапазоны от и до + выход и 3 строки, так как некоторые столбцы объединены для наглядности. В последней строке 5 полей для ввода и одно для вывода

    <tr style="background-color: rgba(245, 245, 245, 0.9)">
        <td><input type="number" id="inputmin" title="Вход от" style="width: 100px;"></td>
        <td><input type="number" id="inputmax" title="Вход до" style="width: 100px;"></td>
        <td><input type="number" id="inputvalue" title="На входе" style="width: 100px;"></td>
        <td><input type="number" id="outmin" title="Выход от" style="width: 100px;"></td>
        <td><input type="number" id="outmax" title="Выход до" style="width: 100px;"></td>
        <td align="center" title="На выходе"><output id="outvalue"></output></td>
    </tr>

Для того чтобы при вводе чисел таблица заполнялась автоматически (не нужно нажимать кнопку посчитать) таблица обрамляется конструкцией <form onsubmit="return false;" oninput="calc()"> </form>

То есть вызывается скрипт calc() при вводе значений внутри таблицы
Сам скрипт собирает все значения из 5 полей в переменные, а потом по формуле высчитывает выходной сигнал, аналогично тому как мы это сделали сами в начале

Сначала рассчитываем сколько процентов (точнее какая часть) приходится на входной сигнал в заданном диапазоне:
xval = (ival-imin)/(imax-imin); //значение на входе - минимум делится на весь диапазон (разница между минимумом и максимом). i - это input вход

Теперь найдем такую же часть на выходе, по аналогии с первым примером про температуру:
oval = (xval*(omax-omin) + omin).toFixed(2); // o - output, умножаем коэффициент на диапазон выхода и прибавляем минимальное значение

В итоге финальная версия всей функции выглядит вот так:

<script>
function calc() {
imin = Number(document.getElementById('inputmin').value);
imax = Number(document.getElementById('inputmax').value);
ival = Number(document.getElementById('inputvalue').value);
omin = Number(document.getElementById('outmin').value);
omax = Number(document.getElementById('outmax').value);
xval = (ival-imin)/(imax-imin); 
oval = (xval*(omax-omin) + omin).toFixed(2);
document.getElementById('outvalue').innerHTML = oval;
}
</script>

То есть сначала присваиваем переменным введенные в поля данные, а потом уже делаем вычисления с этими переменными, в конце записывая в outvalue значение oval.

А вот и сам калькулятор. Если в нем вбить вход 4-20, значение 8,8, а на выход 0-100, то получим те самые 30%. Так же в нем можно преобразовать минуты в десятичные значения. если на вход подать 30 секунд (диапазон 0-60) а выход заключить в один час (0-1), то получим 0,5 часа.