?

Log in

No account? Create an account
Sova_2

epoxyde


Кто рисовал? Какой-то бес, который жил всего чуток.


JavaScript – решение задач – Счастливый билет
Sova_2
epoxyde

О счастливых билетах знают все. Кто-то их ест, кто-то считает это шляпой, кто-то решает задачи на #Javascript

Дано: значение типа number вида 123456.
Требуется: определить, является ли билет, номер которого дан, счастливым по способу «левая и правая половины». То есть, счастливым будет тот билет, у которого сумма первых трех цифр номера равна сумме последних трех цифр. Решение в спойлере:

[РЕШЕНИЕ]

  1. function isLucky(n) {

  2. var a = n

  3. .toString()

  4. .split("")

  5. .map(Number);

  6. var arr1 = a.slice(0, a.length / 2);

  7. var arr2 = a.slice(a.length / 2);

  8. var sum1 = arr1.reduce(function(sum, current) {

  9. return sum + current;

  10. }, 0);

  11. var sum2 = arr2.reduce(function(sum, current) {

  12. return sum + current;

  13. }, 0);

  14. //console.log(a);

  15. // console.log(arr1);

  16. // console.log(arr2);

  17. // console.log(sum1);

  18. // console.log(sum2);

  19. if (sum1 == sum2) {

  20. return true;

  21. } else {

  22. return false;

  23. }

  24. }

Заметьте, что в коде много закомментированных console.log(). Это промежуточные проверки, которые показывают, все ли я делаю правильно и что получается на промежуточных этапах. Формально решение всегда требует return, но мое решение до последнего выводит требуемый результат в console.log().

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


JavaScript – решение задач, продложение
Sova_2
epoxyde

Продолжаю решать задачи на Codesignal. Для меня они сложные. Но, как выяснилось, основная сложность заключается в правильном определении места, где нужно объявить нужную переменную. Причем, я уже, кажется, разобрался с const, let, var и неплохо ориентируюсь в том, где применяется каждая. Хотя по-началу было вообще непонятно, зачем такое разделение. Сейчас все гораздо понятнее. А на уровне порядка действий вообще все понятно. Вот, например, задача, которая попалась сегодня:

Дан массив из строк:

["a", "abc", "cbd", "zzzzzz", "a", "abcdef", "asasa", "aaaaaa"]

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

[Решение]

function allLongestStrings(inputArray)
  {
    var finalArr = []
    var lengths = []


      for (var i = 0; i < inputArray.length; i++)  
      {
        lengths.push (inputArray[i].length);
        var maxLength = Math.max(...lengths)
      }
       inputArray.forEach (function (item, i,)
      {
        if (inputArray[i].length == maxLength)
          {
          finalArr.push (inputArray[i]);
          }
      })
   console.log (finalArr);
};
 
allLongestStrings (["a", "abc", "cbd", "zzzzzz", "a", "abcdef", "asasa", "aaaaaa"]);




Насколько могу судить, это не самое изящное решение. Возвращается массив:

["zzzzzz", "abcdef", "aaaaaa"]

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

Ну, вот, примерно так все движется с #javascript . Параллельно по-немногу пытаю CSS и еще реже – React. Последний пока только на уровне понимания принципа работы и установки либов.


Итальянское и вино вообще в российских магазинах
Sova_2
epoxyde

Я вино не пью. Не от слова «вообще», а от слова «практически». Во-первых, алкоголь – не моя тема. Водку я не пил никогда. Пиво – пару раз в объеме 0,5 литров и еще раз десять пробовал разные сорта напитка в количестве пары глотков. Коньяки, виски и прочие крепкие напитки не пил, не пью и пить не буду, хотя и люблю шоколад с коньяком и кофе с коньяком. Но вино я пью. Иногда. Редко. Раза два-три в год мы на двоих или троих-четверых, как получается, по бокалу вина пьем. Немецкие товарищи убеждали меня и продолжают убеждать, что сладкое вино – это не фонтан и пить нужно только полусухое или сухое. Но это для выше стоящих в этой иерархии. Я пью только сладкое.

DSC_4580.jpg

Вино мы возим исключительно из ЕС. То есть, в России ничего из винного не покупаем. И даже не заходим в соответствующие отделы в магазинах. Однако же на днях зашли в Ашан и я посмотрел, что там предлагают. Откровенно разочарован. У нас нет нормального вина. Конечно, в каких-нибудь специализированных магазинах оно есть, но в Ашане и Ленте ничего нет.

А что я считаю хорошим вином? Во-первых, это итальянские и немецкие вина. Французкие – тоже хорошо. Во-вторых, вино должно быть «с категорией», то есть, среди итальянских – это категории DOC и DOCG. Не ниже DOC однозначно. Немецкие – это мозельские белые вина (красные вина из Германии проходить мимо). Рейнские вина – тоже ничего, но мозельские лучше.

В Вологде итальянские вина или только называются итальянскими, или категории IGT (Indicazione Geografica Tipica) – это низшая категория, ее можно пить только в тех случаях, когда ничего другого из Италии не пили вообще. В Италии в самом деревенском магазине вин категории DOC – масса. Купить DOCG – не проблема. Стоят они от 6 до 12 евро и выше. А у нас продается, пардон, какое-то пойло, да еще по цене, которая совершенно неадекватна для их качества. IGT стоит по 700-800 рублей. Такое вино в Италии стоит на самой нижней полке и стоит по 2 евро за литровую бутылку. Его пьют вместо воды, условно и не считают его хорошим.

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

Вот, это вино на фото ниже я купил в штатном магазине в итальянской глубинке. Оно категории DOCG и стоит 8 евро за бутылку (640 рублей на наши рубли). О нем можно говорить, его можно пить даже при том, что я не являюсь любителем каких-то вин, кроме сладких. С ним даже натюрморт получился офигенным.

DSC_4585.jpg

В общем, хотел про вина в Вологде, получилось про вина в Италии. Потом расскажу про вина в Германии. Пейте хорошее вино. Пусть не часто, но хорошее. Лучше потратить 1000-1500 рублей в России на настоящее итальянское или немецкое и выцедить бокал, чем покупать поделия за 300-400-600 рублей и думать, что пьете что-то стоящее. Еще лучше – ехать (лететь) на места производства и там пробовать. Разницу почувствуете с первого глотка. После того, как меня испортила Европа, пить что-то в России я не могу вообще.


Фреска Лоренцетти Амброджо
Sova_2
epoxyde

В Сиенне, в ратуше Паллацо Пубблико, есть фреска Лоренцетти, которая поделена на две части. В одной из них, которая называется «Плоды доброго правления» кроме всех прочих признаков благоденствия имеется занятная деталь: вооруженные солдаты и явно пленные или арестованные люди. Вряд ли это просто преступники. Среди них есть старики и молодые, одетые хорошо и совсем бедно. Практически наверняка это и есть те, кто власти не угоден.

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

Еще раз: благоденствие и армия – это неделимые вещи. Благоденствие и борьба с противниками этого «доброго» правления – неделимые вещи. При этом фреска приводится, как пример отражения представлений о правильном устройстве мира. Просто вспомните об этом, когда кто-то будет вам говорить, что «благоденствие» – это демократия и невозможность наказаний оппозиционеров.


JavaScript – решение задач
House_fuck
epoxyde

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

1. Для произвольно указанного года в интервале от 1 до 2019 вывести век, которому этот год принадлежит.

[РЕШЕНИЕ]

  1. function centuryFromYear(year) {

  2. var i = Math.ceil(year / 100);

  3. console.log (i);

  4. };

  5. centuryFromYear(2254);

2. Проверить произвольно указанную строку на свойство палиндрома и при соответствии вывести true. Иначе – вывести false.

[РЕШЕНИЕ]

  1. function checkPalindrome(inputString) {

  2. if (inputString == inputString.split("").reverse().join("")) {

  3. console.log ('Its a palindrome');

  4. return 'true';

  5. } else {

  6. console.log ('Its not a palindrome');

  7. return 'false';

  8. }

  9. };

  10. checkPalindrome ('basa');

3. В произвольном массиве перемножить последовательно попарно все элементы и вывести максимальный результат.

[РЕШЕНИЕ]

  1. function multArrayElem(inputArray) {

  2. var array1 = [];

  3. for (var i = 0; i < (inputArray.length - 1); i++) {

  4. // var mult = (inputArray [i] * inputArray[i+1]);

  5. // console.log (mult);

  6. array1.push(inputArray [i] * inputArray[i+1]);

  7. //console.log (array1);

  8. }

  9. return Math.max(...array1);

  10. };

  11. multArrayElem ([2,-2,4,8,2,-8,12,36,-8,-32,100,400]);

4. Вычислить площадь фигуры с длинной стороны, равной произвольной n.

[РЕШЕНИЕ]

  1. function shapeArea(n) {

  2. var square = 2 * (Math.pow(n,2)) - (n * 2) + 1;

  3. //console.log (square);

  4. return square;

  5. };

  6. // shapeArea(2);

В решениях присутствуют закомментированные строки. Это мои черновики для проверки кода (как правило, для вывода результатов в консоль). Изящностью решения пока не отличаются, конечно. По правилам проверки требуется именно return, хотя в обычной ситуации я стараюсь делать вывод в document.Element.

Попутно для себя открыл #Slack. Выяснилось, что при наличии даже пары сотен человек в воркспейсе любой вопрос находит ответ за несколько минут. По меньшей мере, это относится к #JavaScript .

Итог: программирование уже не кажется страшным. Трудным – да, сложным – да. Но страшным уж


Ищу верстальщика (работа официальная)
Sova_2
epoxyde

Вот, и пришло время, когда я сам могу дать объявление о поиске сотрудников. Нет, бизнес я не открыл, работаю все там же. Но нам нужен:

Верстальщик, который умеет в InDesign. Сначала условия:

– полный рабочий день (8:00 – 17:00);
– никаких переработок, никаких выходов в выходные и праздники (все официально, строго и вообще);
– все переработки оплачиваются или компенсируются часами (но бывают они редко);
– полный отпуск (без деления), оплачивается, никаких выходов на работу в отпуске;
– оплата (ставка + северные + надбавка института) – около 17000 р.;
– иногда бывают доплаты за переработку.

Как правило, индексация ЗП западывает или не проводится. Но, все же, ЗП немного растет чуть-чуть. Основной плюс работы – отсутствие авралов (при грамотной самоорганизации), ночных дежурств и всего того, что не любят в частном секторе. Плюсом – официальное трудоустройство со всеми вытекающими. Если вступите в профсоюз, будут подарки детям на Новый год, подарки вам на ДР, ну, и кой-чего еще.

Новый компьютер и рабочее место прилагаются. Обед – 1 час, в который к вам никто не придет и не будет просить работать. Работа в центре города, доехать удобно, уехать несколько сложнее. Полная лояльность к велосипедистам, стоянка для велосипедов на территории. Если ездите на автомобиле, стоянка тоже на территории. Если договориться (а договориться легко), можно оставлять машину на стоянке на выходные и в отпуске, если оставить негде. Территория огорожена.

Теперь, что требуется от вас:

– знание InDesign на уровне
– – запустить, закрыть;
– – создать файл, сохранить файл;
– – создать книгу, сохранить книгу;
– – добавить файлы в книгу, сохранить книгу;
– – расположить файлы в книге, как надо, пронумеровать страницы;
– – уметь сделать шаблон;
– – уметь сделать свои стили текста и таблиц;
– – скопировать стили из файла в файл;
– – сделать таблицу при необходимости;
– – понимать мастер-страницы и делать их.

– общие знания
– – минимальное понимание дизайна (все уже сделано до вас и можно ничего не делать);
– – понимать разницу между " - " и " – " и ставить нужное, где нужно;
– – уметь ставить « », где нужно;
– – понимать разницу между RGB и CMYK (практически не потребуется);

– и еще кое-что
– – знать и уметь в Word и Excel на уровне отредактировать график и создать свой;
– – общие сведения о PDF;
– – немного Photoshop (только на уровне «сделать ярче-контрастнее-насыщеннее» и «убрать фон»);
– – хорошо, если умеете в Illustrator;

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

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

Вот, так как-то.


JavaScript – день какой-то
Sova_2
epoxyde

Нашел себе на Udemy курс по #Javascript. Сижу, слушаю, смотрю. Пока суть да дело, нашел еще себе среду для написания кода. Он (код) пока у меня кривой и простой (в смысле, даже простой код кривой). Но с Visual Studio Code стало существенно проще не только писать, но и воспринимать написанное. Никак не могу привыкнуть писать комментарии к коду, так как сейчас все кажется понятным, а комментировать пару строчек – кажется глупым занятием. Скорее всего, убедить себя в необходимости "//" я смогу только через пару месяцев.


Таллин
Sova_2
epoxyde

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

Когда в прошлом году мы были в Хельсинки и Стокгольме, меня удивил один факт, который замечают очень немногие (или замечают, но не делают на этом акцент): оба города стоят на скалах. В прямом смысле – на скалах. Скальное основание – оно очень удобно для постройки городов. Кроме того, что строить на таком удобнее, оно куда лучше дренируется, чем подзолы большей части европейской территории России. На таких основаниях очень удобно строить дороги (да, процесс подготовки тяжел и требует даже взрывных работ, но в результате будет лучше). Если обратить внимание на трассу «Скандинавия» в России, то она при своем возрасте находится в хорошем состоянии. Во многом благодаря тому, что построена на скалах, а не на болотине.

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

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

Таллин не особо отличается от таких же по размерам городов России. Хотя, нет, отличается в худшую сторону. Учитывая, что это столица Эстонии, в нем очень много пережитков. Вот, например, типичный Таллин:

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

Кроме того, что на фото попался примечательный экземпляр, можно увидеть, что на улицах Таллина примерно то же самое, что и у нас. Это при условии, что снега выпадает немного, а ветер с Финского залива несколько дней дул «дайбоже». Вот, кстати, жилые новые кварталы, которые у нас по какой-то причине не строятся.

А, вот, еще типичный Таллин:

Ничего выдающегося в плане обустройства городской среды. Абсолютно ничего. Я бы сказал, что в некоторых случаях (во многих) тут все наоборот: кривые улицы, много одностороннего движения, мало парковок, даже платных. Для пешеходов узкие тротуары и практически никаких указателей с названиями улиц. Даже номера домов есть не везде. Кстати, много рекламы и графитти.

В целом, Таллин не впечатлил никак. С таким же успехом можно съездить в Питер или Москву. Разве, только, заграница. Но эстонцы вежливые, услужливые и весьма приветливые.


Нам пора с этим заканчивать
House_eyes
epoxyde

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

Во-первых, немецкая система штрафов, когда после нескольких нарушений можно лишиться водительского удостоверения и пойти топтать землю своими ногами. Это должны быть несгораемые нарушения, которые будут преследовать нарушившего всю жизнь. Скажем, на превышение на 5 км/час это не действует. Но на +15-20 км/час и выше – сразу да. Три таких превышения (или других грубых нарушения ПДД), которые зафиксированы непосредственно патрулем ДПС с составлением протокола на конкретного водителя, приводят к лишению права управления ТС на полгода. Следующие три – на год. Еще три – навсегда.

Во-вторых, нам крайне необходима новая система отслеживания поведения водителя. Пора перевести водительские удостоверения на электронную основу, чтобы в карточку была зашита RFID-метка с ID водителя. Чтобы, садясь в машину, человек однозначно идентифицировал себя для бортового компьютера, который должен записывать все параметры поездки с момента запуска двигателя и до момента его остановки. Через определенные интервалы времени (скажем, месяц или два) все данные должны отправляться в страховую компанию и ГИБДД. В случае выявления нарушений порядка управления (скажем, езда без ID), владелец наказывается отстранением от управления. Управление ТС без ID или с чужим ID – лишение права управления на год сразу, без вариантов.

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

И штрафы... штрафы, наконец, должны быть драконовскими. И растущими по мере усугубления нарушения. Например, 500 для превышения на 15 км/час, 5000 – для превышения на 25 км/час, 8000-10000 тысяч – для +35-40 км/час. Большие зафиксированные превышения – лишение права управления на полгода. И никаких 50% скидки. За превышение в населенном пункте километров, скажем, на 15 в час – сразу 10 тысяч рублей, а больше – плюсом и лишение права управления. Проехал на красный – тысяч 15. Пешеход потащился на красный пешеходный – тоже десятка. Все должны быть равны, я считаю и все должны наказываться строго.

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

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


JavaScript – Новый год
Sova_2
epoxyde

После новогодних праздников и эстонских злоключений я снова сел за #JavaScript. И все еще бьюсь в него как рыба об лед. Пришло время поколотиться в массивы. После просмотра основ был запилен такой скрипт (так как я тренируюсь в CodePen, тут нет части, которая описывает элементы HTML):


  1. var array1 = ['ананас', 'апельсин','морковь','молоко','сыр','колбаса','рис','масло','гречка','картофель','курица','палтус',];

  2. var resFld = document.getElementById('result');

  3. var iterr = document.getElementById('iterration');

  4. var selItm = document.getElementById('selectItem');

  5. var indexNum = document.getElementById('indexnumber');



  6. array1.forEach(function(item, i) {

  7. iterr.innerHTML += i+1 + '. ' + item + '</br>' });


  8. indexNum.oninput = function(){

  9. if (indexNum.value < array1.length) {resFld.innerHTML = array1[indexNum.value];

  10. }

  11. else {

  12. resFld.innerHTML = ('В массиве нет элемента с таким номером,')

  13. + '</br>' + ('так как в массиве всего ') + '<b>' + array1.length + '</b>' + (' элементов')

  14. }

  15. };

Что же он делает? Он создает массив (пока его приходится создавать руками, но у меня есть план на этот счет), попутно выводит его в виде списка в элемент <р id="iterration"> с номерами (не с номерами элементов в массиве, а с номерами списка, то есть, не с "0", а с "1" (для этого значение номера элемента i увеличивается на единицу в i + 1). После этого из поля ввода <inрut id="indexnumber"> забирается введенное значение и в элемент <р id="result"> выводится соответствующий элемент массива, если введенный номер не больше количества элементов массива.

Если же значение поля <inрut id="indexnumber"> больше, чем количество элементов в массиве, в <p id="result"> выводится сообщение, что «В массиве нет элемента с таким номером, так как в массиве всего Х элементов» (Х – количество элементов массива).

Скрипт бесполезен чуть менее, чем полностью. Но он спланирован и написан полностью самостоятельно, не по какому-то уроку. Теперь нужно выяснить, как добавлять в массив значения поля <inрut> и других элементов.

Такие дела, товарищи.