• Скрипт проверки whois от регистратора REG.RU не даёт пользователям занимать "красивые" домены?

    @spaceatmoon
    reg.ru вполне себе надёжная контора. Истёкшие домены не выкупает, пару раз так выкупал свои же. Другое дело, что процесс покупки домена это заявка, а не покупка. В один и тот же момент может быть несколько заявок на покупку домена от разных регистраторов. Кто раньше, того и тапки.

    У меня так был один момент, проверял на разных регистраторах, 2 из трёх включая reg.ru показывало что не занято, а вроде nic.ru показывал, что занято. В итоге я успешно зарегал домен на reg.ru.
    Ответ написан
  • Какое условие поставить при недосутпности адреса в curl?

    @spaceatmoon
    Используй всегда ограничение на время ожидания ответа.

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); //5 секунд
    Ответ написан
  • Как посмотреть сайт на Full HD, если экран HD?

    @spaceatmoon
    Попробуй тогда Firefox. Там появляется горизонтальный скролл.
    Ответ написан
    Комментировать
  • Как работает косвенное обращение в WPF Storyboard?

    @spaceatmoon
    Ответы:
    https://coderedirect.com/questions/533715/round-br...
    https://stackoverflow.com/questions/3737458/why-do...

    Storyboard.TargetProperty="Background.Color"
    Программе заранее известен этот объект и будет связан с другим кодом на этапе компиляции.

    Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)"


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

    https://metanit.com/sharp/wpf/13.php
    Ответ написан
    Комментировать
  • Не получается конвертировать htaccess в nginx. Как это сделать?

    @spaceatmoon
    server {
        listen 80;
        server_name site-name.ru;
        root /var/www/site-name.ru/public;
    
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-Content-Type-Options "nosniff";
    
        index index.php;
    
        charset utf-8;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
    
        error_page 404 /index.php;
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }
    Ответ написан
    Комментировать
  • Есть ли простой способ откатить все изменения в рабочей директории к последнему коммиту?

    @spaceatmoon
    Есть даже круче, я так откатывал неудачные rebase.
    Нам нужны 3 команды
    git reflog позволяет просматривать историю операций с репозиторием.
    get reset --hard "HEAD@{число}" с помощью этой команды мы можем вытянуть любое состояние репозитория
    git cherry-pick эта команда позволяет вытащить любой коммит по хэшу, будь-то из другой ветки, истории

    git cherry-pick "HEAD@{3}" - так мы вытащили наш запрятанный коммит
    Ответ написан
    3 комментария
  • Почему не возращает токен?

    @spaceatmoon Автор вопроса
    Нашёл ошибку. Для трейта HasApiTokens указан неверный пакет.
    use Laravel\Sanctum\HasApiTokens;
    А должно быть так
    use Laravel\Passport\HasApiTokens;

    https://stackoverflow.com/a/69561615/17078920
    Ответ написан
    Комментировать
  • Как получить значение из адреса в памяти?

    @spaceatmoon
    Пробовал этот гайд?
    https://www.codeproject.com/Articles/670373/Csharp...

    Только вот программу замени на эту. OllyDbg сильно устарела и не работает с 64 битными программами.
    https://x64dbg.com
    Ответ написан
    Комментировать
  • В чeм разница и как правильно сделать?

    @spaceatmoon
    Для одиночного вызова разницы никакой. Однако по логике, вызов конструктора намного сильнее тормозит программу, нежели просто вызвать функцию Next.

    DateTime timeStart = DateTime.Now;
    for (int i = 0; i < 10000; i++)
    {
        int random = new Random().Next(1, 10);
    }
    DateTime timeStop = DateTime.Now;
    Console.WriteLine("new Random().Next(1, 10) - {0}", timeStop - timeStart);
    //
    timeStart = DateTime.Now;
    Random random1 = new Random();
    for (int i = 0; i < 10000; i++)
    {
        int dig = random1.Next(1, 10);
    }
    timeStop = DateTime.Now;
    Console.WriteLine("random.Next(1, 10) - {0}", timeStop - timeStart);

    new Random().Next(1, 10) - 00:00:00.0209561
    random.Next(1, 10) - 00:00:00.0001170
    Ответ написан
    2 комментария
  • Как упростить код в один метод c#?

    @spaceatmoon
    Что мешает сделать так?
    public static void Move(Robot robot, int width, int height, Direction direct)
            {
                for (int i = 0; i < width - 3; i++)
                    robot.MoveTo(direct);
            }
    Ответ написан
  • Как указать контекст для Razor страниц?

    @spaceatmoon Автор вопроса
    Обновил VS 2019 до версии 16.11.3. Проблема ушла.
    Ответ написан
    Комментировать
  • Требуется код ревью. Как правильно составить логику меню?

    @spaceatmoon
    Из очевидного на мой взгляд:
    1. Нет валидации, а лучше вообще не давать заполнять произвольными данными. Лучше заменить на словарь где в консоли вместо "Введите должность" будет "Выберете из предложенных вариантов" и напротив каждой должности своё число.
    public void SetNewPos()
            {
                Console.Write($"Введите должность для {Fullname}\nТекущая: {Position}\nНовая: ");
                this.Position = Console.ReadLine();
            }

    2. Тоже самое для статусов пункт 1.
    3. Вместо простых типов используй объекты для валидации
    private BirthdateFormat Birthdate { get; set; }   //Дата рождения
            private FullnameRules Fullname { get; set; }    //ФИО
            private Department DepartmentCode  { get; set; }  //Отдел
            private CompanyPosition Position { get; set; }    // Должность
            private int Salary { get; set; }         //Зарплата
            private int Expirience { get; set; }     //Стаж
            private StatusDict Status { get; set; }      //Состояние

    Вместо отдельных классов типа StatusDict можно их сделать enum, но тут всё равно нужна валидация
    public class A {
    		
    		public StatusDict StatusCode {get; set;}
    	
    		public enum StatusDict
    		{
    			Open = 1,
    			Close
    		}
    		
    		public A(int code)
    		{
    			StatusCode = (StatusDict)code;
    		}
    	}

    4. Не делай так. Это бессмысленная операция. При объявленных типах там и так будет 0, "", false в зависимости от типа. Да и вообще эта перегрузка создаёт дыру в системе, где неопределённый сотрудник с такими значениями плавает в базе.
    public Employee()
            {
                this.Fullname = "0";
                this.Department = "0";
                this.Salary = 0;
                this.Expirience = 0;
                this.Position = "0";
                this.Birthdate = "0";
            }

    5. Очень плохо.
    //Бесконечный цикл для работы меню
                for (; ; )

    Не сильно знаком с C#, возможно куратор подскажет. Я бы заменил на goto и дело с концом;
    Repeat:
                var key = Console.ReadKey();
                if (key.KeyChar == '1' || key.KeyChar == '3')
                {
                    return;
                }
                else
                {
                    goto Repeat;
                }

    7. Много шаблонного кода.
    8. Нет проверок на выход за пределы границ массивов
    9. При вводе такой строки 1,2,бобёр валится ошибка. Нет валидации.
    Convert.ToInt32(Console.ReadLine());
    10. Зачем в коде очевидные комментарии? Комментировать нужно сложные вещи.
    Попробовал облегчить твоё меню. Могу отметить, что зная меню, можно спуститься сразу на нужный этаж.
    Repeat:
                Console.Clear();     //Очищает консоль после отработки функции
                string input;
                string currentLevel;
                Console.WriteLine("Выберите функцию");
                Console.WriteLine("1 Получить информацию");
                Console.WriteLine("2 Изменить должность");
                Console.WriteLine("3 Измеить отдел");
                Console.WriteLine("4 Изменить стаж");
                Console.WriteLine("5 Изменить зарплату");
                Console.WriteLine("6 Изменить статус");
                Console.WriteLine("0 Выход");
                //Двух уровневое меню реализованное c помощью линейного switch
                currentLevel = "";
                Command:
                //input = Console.ReadLine();
                currentLevel += Console.ReadLine();
                Console.WriteLine(currentLevel);
                switch (currentLevel)
                {
                    case "1":
                        Console.WriteLine("Выберите количество \n1 Все \n2 Один \n3 Несколько");
                        goto Command;
                    case "11":
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Employers[i].PrintInfo();
                            Console.WriteLine("___________________________");
                        }
                        Console.ReadKey();  //Костыль который не позволяет моментально очистить вывод
                        break;
                    case "12":
                        int c12input;
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Console.Write(i + 1 + " ");
                            Employers[i].PrintName();
                        }
                        Console.WriteLine("Выберите сотрудника");
                        c12input = Convert.ToInt32(Console.ReadLine());
                        Employers[c12input - 1].PrintInfo();
                        Console.WriteLine("___________________________");
                        break;
                    case "13":
                        Console.WriteLine("Выберите сотрудника");
                        Console.WriteLine("0 для возврата в предыдущее меню\n-------");
                        for (int i = 0; i < Employers.Length; i++)
                        {
                            Console.Write(i + 1 + " ");
                            Employers[i].PrintName();
                        }
                        Console.WriteLine("___________________________");
                        int c13input;
                        while ((c13input = Convert.ToInt32(Console.ReadLine())) != 0) //пока не введен 0, можно вводить индексы сотрудников
                        {
                                Employers[c13input - 1].PrintInfo();
                                Console.WriteLine("___________________________");
                        }
                        break;
               }
              goto Repeat;
    Ответ написан
    2 комментария
  • Как прописать в договоре на создание сайта, что таким подобным проектом мы заниматься не будем?

    @spaceatmoon
    Подобное требование просто абсурдно. Максимум что он может требовать, так это то, что вы после сдачи проекта отчуждаете все права на код заказчику.

    Мой совет. Потратьте 3 тысячи на юриста и пусть он вам составит ТИПОВОЙ договор на оказание услуг.
    Ответ написан
    Комментировать
  • Какая самая перспективная и востребованная отрасль в С#?

    @spaceatmoon
    Вначале писал как ответ на ваш вопрос про разные языки и решил отдельным ответом сделать.


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

    Минус PHP в отсутствии однородности экосистемы. В РФ есть 3 главных фреймворка Symfony, Laravel, Yii2 и дальше 0.5% другие. Каждый из них тянет лямку на себя и составляют долю по грубому 33%. Каждый фреймворк богат на возможности, решают одну и туже проблему, но это всё равно что react/vue/angular. Свои подходы, методы и быть профессионалом в каждом нельзя. Соответственно список вакансий уже не такой большой как кажется, ведь потом явно появится какое-то предпочтение. Например у меня в blacklist однозначно стоит Yii2.

    Также минус PHP в его направленности чисто на веб. Рано или поздно устаешь и хочешь возможности сделать обычное Windows приложение, игру, бинарник. Ведь PHP сильно зажат в этом плане, даже не так, там в принципе ничего нет на эту тему и не будет никогда. Только веб, но он прекрасен местами.

    Ещё можно рассмотреть Python/Django.

    В любом случае стоит ориентироваться на удалённую работу если вы не в СПБ и Москве. Лично в моём мухосранске какую технологию не выбери, максимум 1-3 контора нормальная. Остальные что-то мутят или в подвале сидят.

    Выбирай по зову сердца, иначе тошнить уже будет на 2 неделю. Я сейчас изучаю C# в частности asp.net, wpf. Даже по этим направлениям информации выше крыши.
    Ответ написан
    Комментировать
  • Как дождаться загрузки YouTube selenium + phantom.js (c#)?

    @spaceatmoon
    По скриншотам всё у тебя находит. У тебя искомый элемент динамический и подгружается отдельно. Тем более у тебя нет проверки на количество элементов.

    using OpenQA.Selenium;
    using OpenQA.Selenium.Firefox;
    using OpenQA.Selenium.Support.UI;
    ....
    ....
    ....
    using (IWebDriver driver = new FirefoxDriver())
                {
                    WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
                    driver.Navigate().GoToUrl("https://www.youtube.com");
                    wait.Until(web => {
                        var result = driver.FindElements(By.CssSelector("ytd-rich-item-renderer"));
                        return result.Count > 70;
                    });
                    var result = driver.FindElements(By.CssSelector("ytd-rich-item-renderer"));
                    foreach (var element in result)
                    {
                        Console.WriteLine(element.Text);
                    }
                }


    Я попробовал так. Когда я скролю браузер, подгружаются элементы и как только их становится больше 70 тут же переходит к следующему блоку кода.
    Ответ написан
    Комментировать
  • Код не идёт дальше в c#?

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

    Я попробовал переписать часть с битвой, чтобы одинаково рандомно каждый из игроков бил за один ход другого.
    // процесс битвы
    		while(true)
    			{
    				randatk1 = rnd1.Next(0,101);
    				randatk2 = rnd1.Next(0,101);
    				Console.WriteLine("h1 = " + hp1);
    				Console.WriteLine("h2 = " + hp2);
    				Console.WriteLine("Current chance h1 = " + randatk1);
    				Console.WriteLine("Current chance h2 = " + randatk2);
    				
    				if (randatk1 > randatk2)
    				{
    					if (randwar1 > randatk1){
    						hp2 = hp2 - 1;
    						Console.WriteLine("atack player 1");
    					}
    				}
    				else
    				{
    					if (randwar2 > randatk2){
    						hp1 = hp1 - 1;
    						Console.WriteLine("atack player 2");
    					}
    				}
    			
    				Console.WriteLine("All attacks repelled");
    				if (hp1 <= 0 || hp2 <= 0)
    				{
    					if (hp1 <= 0)
    					{
    						Console.WriteLine("2 team win");
    					}
    					else
    					{
    						Console.WriteLine("1 team win");
    					}
    					break;
    				}
    				
    			}
    Ответ написан
    Комментировать
  • В каких областях программирования недостаток специалистов и много платят, и можно работать на удаленке?

    @spaceatmoon
    Бери любой язык где есть хоть какая-то работа здесь и сейчас. Учи месяц каждый день. Иди на собеседование, не прошёл, учи 2 недели и повторяй попытки. Только так. Пробуй вначале самые слабые позиции, даже если это бесплатная стажировка.
    Ответ написан
  • IT компании + судимость?

    @spaceatmoon
    Там где нет СБ дороги открыты, даже в крупных компаниях СБ по пальцам. Да и просто не афишируй сам факт. Там же вроде как отмечаться надо, если это не в рабочие часы компании, то вообще проблем никаких не должно быть. Говори, что на лфк ходишь, спина болит.
    Ответ написан
    5 комментариев