Поддержка  •  Дневник  •  Без рекламы  •  О сайте  •  Реклама  •  Поставить баннер  •  Прислать  •  Хроника Гости: 6    Участники: 1  Авторизация   Регистрация 
Метод Научного Тыка
Поиск  
О сайте, обо всём что меня окружает, интересует, волнует, касается.   Amerikas Auto
Содержание
Поиск
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
2007
2006
2005
2004
2003
2002
2001

Февраль, 2023

Страница 1 из 2

« следующие заметки  1 2   предыдущие заметки »

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

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

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

В таком состоянии отослал:

Сегодня всё по красоте:

BankController.cs

using InternetBankingRESTfulService.Api;
using InternetBankingRESTfulService.Api.Core;
using Microsoft.AspNetCore.Mvc;

namespace InternetBankingRESTfulService.Web.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class BankController : ControllerBase
    {
        private InternetBankingApi BankingApi { get; }

        public BankController()
        {
            BankingApi = new InternetBankingApi();
        }

        [HttpGet("api/version")]
        public IActionResult GetApiVersion()
        {
            return Ok(BankingApi.GetApiVersion());
        }

        [HttpGet("api-version")]
        public IActionResult GetApiVersionSecond()
        {
            return Ok(BankingApi.GetApiVersion());
        }

        [HttpGet("api/calc/MD5/{value}")]
        public IActionResult CalculateMD5(string value)
        {
            return Ok(BankingApi.CalculateMD5(Helper.ReplaceDigitsByString(value)));
        }

        [HttpGet("api/calc/{value}/MD5")]
        public IActionResult CalculateMD5Second(string value)
        {
            return Ok(BankingApi.CalculateMD5(Helper.ReplaceDigitsByString(value)));
        }

        [HttpGet("api/password/strong/{value}")]
        public IActionResult PasswordStrong(string value)
        {
            return Ok(BankingApi.IsPasswordStrong(value));
        }

        [HttpGet("api/is-password-strong/{value}")]
        public IActionResult IsPasswordStrong(string value)
        {
            return Ok(BankingApi.IsPasswordStrong(value));
        }
    }
}

InternetBankingApi.cs

using InternetBankingRESTfulService.Api.Core;
using System;

namespace InternetBankingRESTfulService.Api
{
    public class InternetBankingApi : IInternetBankingApi
    {
        private readonly string _apiVersion = $"{DateTime.UtcNow:yyyy.MM.dd}.1.0";

        public string GetApiVersion()
        {
            return _apiVersion;
        }

        public string CalculateMD5(string value)
        {
            return Security.MD5Encode(value);
        }

        public bool IsPasswordStrong(string password)
        {
            return Security.IsPasswordStrong(password);
        }
    }
}

Security.cs

using System.Security.Cryptography;
using System.Text.RegularExpressions;
using System.Text;
using System;
using System.Linq;

namespace InternetBankingRESTfulService.Api.Core
{
    public static class Security
    {
        /// <summary>
        /// Returns MD5 hash string.
        /// </summary>
        /// <param name="plainText"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static string MD5Encode(string plainText)
        {
            if (string.IsNullOrEmpty(plainText))
                throw new ArgumentException("Text cannot be empty.");

            return string.Concat(MD5.HashData(Encoding.UTF8.GetBytes(plainText)).Select(x => x.ToString("x2"))).ToUpper();
        }

        /// <summary>
        /// Validate password strength.
        /// </summary>
        /// <param name="plainPassword"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static bool IsPasswordStrong(string plainPassword)
        {
            if (string.IsNullOrEmpty(plainPassword))
                throw new ArgumentException("Password cannot be empty.");

            return new Regex(@"(?=^.{12,}$)(?=.*\d)(?=.*[!@#$%^&*]+)(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$").IsMatch(plainPassword);
        }
    }
}

Helper.cs

using System.Text.RegularExpressions;

namespace InternetBankingRESTfulService.Api.Core
{
    public static class Helper
    {
        /// <summary>
        /// Replace all digits in value parameter by char.
        /// </summary>
        /// <param name="value"></param>
        /// <param name="replaceNumberBy">Default char value is 'X'.</param>
        /// <returns></returns>
        public static string ReplaceDigitsByString(string value, string replaceDigitBy = "X")
        {
            return Regex.Replace(value, @"\d", replaceDigitBy);
        }
    }
}

ApiTest.cs

using Microsoft.AspNetCore.Mvc.Testing;
using NUnit.Framework;
using System;
using System.Globalization;
using System.Threading.Tasks;

namespace InternetBankingRESTfulService.Tests
{
    public class ApiTest
    {
        [Test]
        public async Task TestApiVersion()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync("/bank/api/version");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual($"{DateTime.UtcNow.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture)}.1.0", data);
        }

        [Test]
        public async Task TestApiVersion_Second()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync("/bank/api-version");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual($"{DateTime.UtcNow.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture)}.1.0", data);
        }

        [Test]
        public async Task TestPasswordStrongIsFalse()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync($"/bank/api/password/strong/123");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual("false", data);
        }

        [Test]
        public async Task TestPasswordStrongIsTrue()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync($"/bank/api/password/strong/ALhj89*19896");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual("true", data);
        }

        [Test]
        public async Task CalculateMD5()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync($"/bank/api/calc/MD5/test-string-ABC");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual("79C8DC4F3BAEBF0A4F40517225F41A86", data);
        }

        [Test]
        public async Task CalculateMD5_SecondURL()
        {
            var factory = new WebApplicationFactory<Startup>();
            var Client = factory.CreateClient();
            var result = await Client.GetAsync($"/bank/api/calc/test-string-ABC/MD5");
            Assert.AreEqual(System.Net.HttpStatusCode.OK, result.StatusCode);
            var content = result.Content;
            var data = await content.ReadAsStringAsync();
            Assert.AreEqual("79C8DC4F3BAEBF0A4F40517225F41A86", data);
        }
    }
}

В детстве хотел себе мопед Delta, но что-то не сложилось.

Теперь мне неистово нужен NAS.

Только что закончил на DevSkiller очередной тест для вакансии, 2 ч. 30 мин. 37 вопросов + 1 практическое задание. По теории вроде норм, не совсем провально, а тест по разработке Web API закончить не успел, оставшиеся 35 минут это маленько не того. Но сделаю ход конём, закончу тестик без суеты и в понедельник зашлю по почте, типа вот, готово, прошу понять и простить. Ненавижу программить на время когда в лютом цейтноте подгорает пукан и бомбит от каждого неверного шага.

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

Впереди практически 3 дня работы над контентом. Место на диске начинает заканчиваться, но пока не критично. Не может не радовать то что инструменты управления сайтом развились настолько что можно колбасить контент не буксуя на мелочах.

В нейросети https://creator.nightcafe.studio/ попросил нарисовать картину по запросу «black cat with whiskey».

Чего-то задумалось реанимировать и развить сайт с аудио. Весь былой аудиоконтент остался на блинах поломанных хардов, всё надо поднимать заново. И наконец-то в статьях появилась «Версия для печати». В идеале было бы ещё сделать «Сохранить в PDF», но пока так, просто староверская версия для печати.

Сегодня занимался ещё одним тестом. Ограничение по времени 80 минут. 3 задания: 2 по 30мин. и 1 на 20 мин.

Задание #1.

In a Word-Search Puzzle, the player receives a rectangular-shaped grid of letters (a board) and a list of target words. The player is required to locate each target word from the list on the board.

In this question, you are asked to implement a function that receives as input a two-dimensional array of characters and a target word, and returns “true” if the target word appears in the array and “false” if it doesn’t.

For example, given the array
[
    ['b', 'a', 'n', 't'],
    ['c', 'f', 'r', 'g']
]
and the target word "ant",
the function should return "true" (because the word appears horizontally in the top row).

Note - the words must appear either horizontally or vertically (not diagonally). All the letters of the word must appear contiguously (i.e., with no unrelated letters in between).

Examples:
Input:
board = [ ['f', 'g', 'a', 'b'], ['b', 'o', 't', 't'], ['e', 'd', 'x', 'p'] ]
targetWord = "dog"
Output: true

Input:
board = [ ['g', 'h', 'c'], ['f', 'm', 'o'] ]
targetWord = "go"
Output: false

Начал делать этот тест, но потом просто забил на это. В общем ещё одна вакансия долой.

Буду готовиться к следующему тестику.

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

Вчера было техническое интервью по вакансии, нормальное такое интервью. Вопросы были адекватные, на одном из вроде простых вопросов поскользнулся: какие бывают типы куки? Я с cookies постоянно работаю, но какие типы... Печенька живёт либо до момента закрытия окна браузера, либо до истечения срока годности.
Но всё оказалось не так просто:

  • Сессионные cookie.
  • Постоянные cookie.
  • Сторонние cookie.
  • Супер-cookie.
  • Зомби-cookie.

И вот такой вопрос запросто может тебя завалить. Объём знаний в IT настолько огромный что я не знаю какая должна быть головёнка чтобы всю эту энциклопедию хранить в черепе и быстро чётко развёрнуто ответить в любое время на ЛЮБОЙ вопрос. К техническому интервью подготовиться невозможно, я уже и не особо парюсь по этому поводу.

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

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

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

Вот упыри не угомонятся, всё удаляют страницы. Пришло сообщение от Google что "Ваши URL удалены из Google Поиска в соответствии с законом DMCA". Удалили сериал The Wire. То что его сейчас нельзя посмотреть на сайте - никого не волнует. Удалить из поиска, и всё. enlightened

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

На прошлой неделе было по 1-3 интервью в день, какой будет результат пока непонятно. Сегодня было ещё 2, одно завалил. Вообще было неплохо, но интервью с клиентом не прошёл бы. Зашёл в тупик при написании Singleton. Двигался в верном направлении, но правильно не написал. А после интервью - хуяк: и через минуту всё было готово. И теоретические вопросы всегда вымораживают. Когда пишешь код фронтенда, не думаешь о том что вот это компонент, а это директива, тут хук, там вообще модуль. Так..., а что происходит под капотом async/await? Причем на прошлой неделе тест на HackerRank написал нормально, но на интервью совсем другая обстановка.

Пройти все интервью в bodyshop компании намного сложнее чем в продуктовой. Остаётся только учиться, учиться, учиться, шлифовать теорию.

Работать в любом проекте не так сложно, но пройти все круги ада интервью чтобы в проект попасть - это пиздарулю. Объём теории такой что уже даже не заморачиваюсь если на собеседовании сходу не смог на что-то ответить.

18 часов работы над блекболычем не прошли просто так. Нашлась ещё одна зачётная песенка.

Amberian Dawn - Magic Forest

Страница 1 из 2

« следующие заметки  1 2   предыдущие заметки »

Поделиться ссылкой:
Последние комментарии

месяц назад, 06:06
С Новым Годом! Скатилось, подтверждаю. Но у нас большие лопаты чтобы всё разгрести. И ухи для употребления музыкальных программ ОН. Бесконечная мысль Гидроцефала закончится только прийдя на начало. Отсюда нет выхода, есть только приход.
месяц назад, 01:15
С Новым Годом, Серж! Честно говоря, уже и ничего особо желать не хочется - всё и без наших пожеланий уверенно и планомерно скатилось в душистый анус... P.S. Та-ак, мои соседи в этом календарном году ещё не слушали ни одной вещи со "Смерти...
Пн 28.11.2022 14:33
Посмотрел обзоры, DT 880 ухи добротные. Сам пока больше склоняюсь к Grado. Но это не точно. А вот насчёт звуковухи вообще на распутье. Пока думаю какую купить: - Creative Sound Blaster AE-7 DAC 7.1 - 255 € - Creative Sound Blaster X...
Пн 28.11.2022 10:46
У меня внешняя Creative звуковая карта, да, звук более менее вытягивает, но громкости хотелось бы побольше это точно. У меня beyerdynamic dt 880 (250Ω).
Пт 25.11.2022 18:00
Это интересная инфа. В аудиокартах Creative и Asus есть усилители для наушников, но когда соберусь покупать ухи надо будет обратить на омы внимание. А то вбахаешь сотни тысяч евро и будет не то. Не то будет и всё, а ведь...
Пт 25.11.2022 09:21
Если хочешь заточенные наушники под хард-рок, то бери закрытого типа. В них бас хорошо качает. У меня Beyerdynamic открытого типа, не скажу, что баса нету, но они расчитаны на более спокойную музыку. И еще смотри сколько у них ом, т.к. при...
Ср 23.11.2022 05:45
Я куда-то задевал наушники от телефона и на их место в феврале купил Sony MDR-ZX310. За 25 евров звук добротный, до сих пор не нарадуюсь, идти по улке самое то. Но это не то. Всё ещё в планах заиметь Grado...
Пн 19.09.2022 03:17
Бема в порядке. Но нужно решить много вопросов. Из другого города сделать всё не так просто.
Чт 08.09.2022 17:27
Бамбук то хоть живой, или тока диски остались?
Вт 19.07.2022 22:13
Я просто купил себе Beyerdynamic не слушая и ничего ))
Сб 09.07.2022 11:23
Тут, видимо, как и у самурая – важен не конечный результат, а сам процесс совершенствования ”Черномяча”. =)
Вс 19.06.2022 13:09
В раздел картинок скину список концертников в .mp3, которые готовы к закачке на "Чёрномяч". У любого честно выполняющего свою работу ослика должна быть подвешена мороковка на удочке перед мордой...
Сб 18.06.2022 20:59
А, я дебила кусок, не про mp3 подумал. Годные mp3ихи тут всегда очень кстати, особенно если они подготовлены. ОН есть разные версии исполнения альбомов, и те что у меня были... они намного пижже того что сейчас на сайте. Хотя сейчас...
Сб 18.06.2022 20:26
Здесь идёт речь именно о .mp3 файлах, которые скачаны, обработаны и ждут своего часа. Качество звука, учитывая временной период, более чем сносное. Даже сказал бы: башнесносное.
Сб 18.06.2022 20:26
Здесь идёт речь именно о .mp3 файлах, которые скачаны, обработаны и ждут своего часа. Качество звука, учитывая временной период, более чем сносное. Даже сказал бы: башнесносное.
Сб 18.06.2022 13:08
Видосы, концерты и всё такое это конечно вещь. Но их много в MPG и AVI, и переснять их уже невозможно. Невозможно переснять атас угар чуму Угла и банды )) --- MPEG   .mpg Developed by the Moving Pictures Expert Group. The first popular video...
Пт 17.06.2022 19:50
Ну-у, шесть(шесть, Карл, шесть) концертников ОН с отредактированными тэгами и выровненным уровнем звука, надеюсь, послужат добротным стимулом для осуществления задуманного.
Пт 17.06.2022 12:17
Поддержка древних медиаконтейнеров была отключена специально. Идея такая что если нет видео в хорошем качестве - в плохом оно тут никому не всралось, какой бы видос ни был зачётный. Ну для совсем уж особо ценных случаев можно сделать исключение. На уровне...
Пт 17.06.2022 11:30
На тот момент закачка файла не была готова к .avi, .mpg и .mkv. Сегодня это немного доработается, вопрос будет решён. »» По альбомам целиком или по файлам отдельно решение есть? Пока нет. В начале июля начну этим заниматься, ожидается большой движ на...
Ср 15.06.2022 19:05
Попытался эксперимента ради закинуть видео в формате .mpg , но мой старый-добрый друг, Болтосос Болтососыч в виде таблички "Недопустимое расширение файла" встретил моё начинание. По альбомам целиком или по файлам отдельно решение есть?
Разработано на основе BlackNight CMS
Release v.2022-11-28
© 2000–2023 Blackball
Дизайн & программирование:
Sergeant Центр Связи с Админом Skeleton
О сайтеРеклама
Web-site performed by Sergey Drozdov