• Компания просит уволиться из текущего места работы перед собеседованием, нормально ли?

    @Akela_wolf
    Extreme Programmer
    То есть вам они ничего не гарантируют, но хотят чтобы вы уже уволились? Скорее всего попытаются прогнуть на условия оплаты или (что вероятнее) на условия работы. Потому что вы уже уволились, работа вам нужна уже сейчас, а значит вы будете сговорчивее. Собственно это сразу показывает отношение к персоналу в данной конторе - нагибать и ставить ультиматумы. Поэтому, лично я бы после такого предложения не раздумывая сказал бы "до свидания. Хотя нет, прощайте"

    Нормальные компании не только не просят увольняться, но и, сделав официальный оффер (то есть пообещав заключить договор, а иногда даже уже заключив договор) согласны ждать 2 недели (а иногда и больше) пока сотрудник завершит дела на текущем месте работы и выйдет к ним. А не так: "вы увольняйтесь, а мы вас собеседуем. Может быть возьмем, может быть не возьмем, ничего не обещаем".
    Ответ написан
    2 комментария
  • На собеседовании сказали, что не все функции - замыкания. Так ли это?

    @lazarevBoris
    Тред просто огонь!:)
    Дело в том, что такой же спор (из 8 страниц, на эту же тему) был не так давно на другом ресурсе, где мудрый дядька под ником "javascript" объяснял окружающим (которые тоже уперлись рогом, как и многие здесь), почему в js по факту всё является замыканием.
    Поэтому было крайне интересно, чем же и здесь дело закончится.
    И в очередной раз было доказано, что где бы ни была объявлена функция (а начиная с es6 и let - и блок кода) - она образует замыкание с цепочкой внешних лексических сред (или хотя бы одной LE), что полностью соответствует определению, предысторию которого хорошо описал Александр.
    Что наглядно изобразил Alexandroppolus (надеюсь, вы не будете против, если я достану ваш пример из jsfiddle и размещу здесь, чтобы он не пропал с течением времени):

    description:
    функция, созданная внутри iframe, замкнула внутрифреймовую глобальную переменную, и продолжает работать, даже когда фрейм удалили. Кнопкой frameValue можно убедиться, что в window той переменной нет.

    html:
    <script>
      var globalValue = 1000;
      var globalCounter = function() {
        return globalValue++;
      };
    </script>
    <div>
      <button>iframe counter</button>
      <button>globalCounter</button><br >
      <button>frameValue</button>
      <button>globalValue</button>
    </div>

    JS:
    const iframeHTML = 'iframe...<' + `script>
      var frameValue = 1;
      var counter = function() {
        // debugger;
        return frameValue++;
      };
      
      window.parent.iframeCounter = counter;
    <` + '/script>';
    
    function createTempFrame() {
    	const blob = new Blob([iframeHTML], {type: "text/html"});
      const frm = document.createElement('iframe');
      frm.src = URL.createObjectURL(blob);
      
      document.body.appendChild(frm);
      
      setTimeout(() => {
      	document.body.removeChild(frm);
      }, 900);
    }
    
    window.onload = function () {
      const buttons = document.querySelectorAll('button');
      
      buttons[0].onclick = function() {
        alert(iframeCounter());
      };
    
      buttons[1].onclick = function() {
        alert(globalCounter());
      };
      
      buttons[2].onclick = function() {
        alert(window.frameValue);
      };
      
      buttons[3].onclick = function() {
        alert(window.globalValue);
      };
     
      createTempFrame();
    };


    Так что да, автор треда, который ходил на собеседование, был прав, замыкание в его примере есть.
    Ответ написан
    1 комментарий
  • Я сделал Code Review, может быть я где-то ошибся или у вас есть что добавить?

    @Sing303
    Опишу, как бы комментировал я
    public sealed class DataProvider : IDisposable
    {
        // nit: Предложил бы названия firstValue, secondValue либо более осмысленные, если возможно
        public extern int LongRunningCalculation(int value, int value2);
        public extern void Dispose();
    }
    
    // nit: сразу бы хотелось видеть уровень доступа и sealed (если класс не планируется наследовать)
    // Class2 - дать нормальное имя
    // { - перенести на 2ю строку по рекомендациям code style от microsoft (если не принято иных)
    class Class2 {
        // Синхронизация не нужна, если убрать метод Init, а Create вызвать в статическом конструкторе
        private readonly object _sync = new object();
        
        // _ht - дать осмысленное название
        // Судя по использованию, value может быть int`ом. Не зачем иметь лишний boxing и проверки на тип
        // _ht статический, значит к нему могут быть обращения из разных потоков, лучше сделать его ConcurrentDictionary
        // Прям сходу не могу сказать, но, возможно, использовал бы какой то другой тип Dictionary <key, key, val> (самописный или существующий), кажется, так было бы быстрее чем массив в ключе
        private static Dictionary<int[], object> _ht; 
    
        // nit: хотелось бы имена со смыслом
        public int GetValue(int index, int index2)
        {
            // Лишний метод, удалить. Create вызовем в static конструкторе
            Init();
            // Если ключ у нас объект, то необходимо реализовать IEqualityComparer для этого Dictionary (иначе не понятно как по нему искать)
            var key = new[] {index, index2};
            // Проверка на тип не нужна, Dictionary сделаем типа int
            if (_ht.ContainsKey(key) & _ht[key].GetType() == typeof(int))
                // приведение типов больше не нужно
                return ((int)_ht[key]);
            // nit: else не обязателен
            else
                // int не может быть null, будет ошибка, вернуть либо default, либо возвращаемое значение должно быть int?
                return null;
        }
    
        // Метод удалить, вызовем Create в статическом конструкторе без lock
        public void Init() 
        {
            if (_ht == null)
                lock (_sync)
                    Create();
        }
        
        // Нет смысла делать метод public, сделать private
        public static void Create() 
        {
            // nit: и так видно какой тип создаём, можно использовать var
            // Обернуть в using
            DataProvider provider = new DataProvider();
            
            // Тут следует инициализировать значение _ht, т.к. ранее оно нигде не создаётся
            // Не забыть передать реализацию IEqualityComparer в конструктор
            
            // nit: хотелось бы видеть использование фигурных скобок (если не принят иной code style)
            // nit: вместо int можно var
            // i и j, похоже, несут какой то смысл, можно попробовать придумать нормальное название (иначе не понятно почему 100 и 12, их можно в константы класса)
            // nit: возможно можно использовать Parallel.ForEach
            for (int i = 0; i < 100; i++)
                for (int j = 1; j <= 12; j++)
                    _ht[new [] { i, j }] = provider.LongRunningCalculation(i, j);
        }
    }

    А переписал бы так (если не убирать массив в dictionary)
    public interface IDataProvider : IDisposable
    {
        int LongRunningCalculation(int firstValue, int secondValue);
    }
    
    public sealed class DataProvider : IDataProvider
    {
        public extern int LongRunningCalculation(int firstValue, int secondValue);
        public extern void Dispose();
    }
    
    public sealed class DataProviderService
    {
        public DataProviderService(IDataProvider dataProvider)
        {
            _dataProvider = dataProvider;
        }
    
        private static readonly ConcurrentDictionary<int[], int?> _calculatedCache = new ConcurrentDictionary<int[], int?>(new CalculatedEqualityComparer());
        private readonly IDataProvider _dataProvider;
    
        public int? GetValue(int firstValue, int secondValue)
        {
            var isNotSupportedValues = firstValue > 100 || firstValue < 0 || secondValue < 1 || secondValue > 12;
            if (isNotSupportedValues)
            {
                return null;
            }
    
            var key = new[] { firstValue, secondValue };
            if (!_calculatedCache.TryGetValue(key, out var result))
            {
                result = _dataProvider.LongRunningCalculation(firstValue, secondValue);
                _calculatedCache.TryAdd(key, result);
            }
            
            return result;
        }
    }
    Ответ написан
    5 комментариев
  • Как в столбец SQL-таблицы записать массив?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    Не надо в столбец записывать массив, это идёт в разрез с принципами работы реляционных баз данных и нарушает нормализацию.
    Ответ написан
    2 комментария
  • Как добавить PHP файл в веб Visual Studio проект?

    toxa82
    @toxa82
    Так же как и любой другой файл в проект добавляете.
    Ответ написан
    3 комментария
  • Как обойти cors?

    @firecorer
    Совсем недавно занимался решением такой проблемы. Всего лишь нужно отдать необходимые HTTP заголовки клиенту.
    Пример на php:
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Accept, X-PINGOTHER, Content-Type');
    Ответ написан
    2 комментария
  • Гайд по поступлению в Беларуси?

    saboteur_kiev
    @saboteur_kiev Куратор тега IT-образование
    software engineer
    Растолковывать тебе никто не будет. Детский сад закончился, после школы ты никому не нужен. Вообще. В школе из класса в класс тебя тянули за уши. Там даже двоечников на второй год оставляют КРАЙНЕ редко. А за пределами школы - просто отчислят и все, иди ищи работу в макдональдсе или умирай с голоду.

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

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

    Такова взрослая жизнь.

    Поэтому есть родители - поговори с ними, они уже прошли многое, и если не знают профессию, то знают жизнь.
    Можно поговорить вообще о разном, и делая скидки что родители могут быть "старперами", не стоит забывать что родители как-то раздобыли дом, еду, одежду и смогли потратить ОЧЕНЬ много чтобы вырастить тебя. Это очень плохо понимается (количество усилий), потому что ты видишь и помнишь больше сейчас, чем то что было 15 лет назад.

    Если собираешься оставаться в Беларуси, ищешь учебные заведения в твоем городе или там, где в принципе можешь жить (снять квартиру, если есть деньги).

    Смотришь что там преподают. Для ИТ хорошо математические, а может есть и айтишной направленности. Не так важно какой факультет. Именно программированию все равно будешь учиться дополнительно и сам. То, что дают в институтах - это в основном академические знания, и хорошая основа там больше математика, которая мало устаревает.
    Ответ написан
    7 комментариев
  • Можно ли вычислить автора сайта?

    Griboks
    @Griboks
    Найти юридического владельца сайта очень легко. Но есть три нюанса:
    1) возможно, это подставное лицо
    2) он может жить очень очень далеко
    3) его может крышивать государство/провайдер

    Меня удивляет то, что автор такого сервиса/сайта не боится, что к ему кто-то наведается и настучит по процессору)))

    На самом деле по закону можно подать коллективный иск на обман и мошенничество. Но, как вы понимаете, если судиться с мегафоном никто не хочет, то с ноунейм фирмами тем более.
    Ответ написан
    6 комментариев
  • IOS разработка без Mac. Возможно ли?

    DevMan
    @DevMan
    без макоси вы не собирете билд под железку.
    остаётся покупка нового или б/у мака или увлекательный секас с виртуалками или хакинтошем.
    Ответ написан
  • Почему jQuery Colorpicker не запоминает прозрачность?

    Stalker_RED
    @Stalker_RED
    В шестизначном css hex color не должен быть альфа канал, там должны быть только каналы RGB. Поэтому код так и написан.
    Для RGBA там есть отдельные методы (несколько на выбор), до которых вы похоже не долистали
    https://github.com/LuanLouis/jPainter/blob/master/...
    Ответ написан
    Комментировать
  • Как полностью защитить ноутбук от взлома?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Как полностью защитить ноутбук или компьютер от взлома?
    Не включать его.
    Ответ написан
    7 комментариев
  • Где найти книги или курсы по PHP, где даётся проектирование приложений с учётом ООП?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Мне в свое время помогла проработка всех шаблонов проектирования из трех источников: "Head First Design Patterns"+refactoring.guru+designpatternsphp.readthedocs.io. Каждый шаблон разбирала и пыталась понять, почему здесь нужен паттерн, а не процедурный код, обернутый в один класс. Еще помогла книга по чистой архитектуре, но она зашла уже после паттернов. Просто важно полностью для себя понять, почему эти подходы до сих пор существуют и находить для себя два-три примера, потому что один-единственный пример для изучения может быть однобоким и даже неправильным.
    Также эти книги и темы помогают вылечиться от трудностей решения задач на фреймворках, потому что наконец-то начинаешь видеть всю структуру и взаимодействия модулей и классов, а не просто примеры из документации натягиваешь на бизнес-требования)
    Ответ написан
    3 комментария
  • Как правильно делать локализацию приложения в Laravel?

    delphinpro
    @delphinpro Куратор тега Laravel
    frontend developer
    Я "храню" язык в URL

    /about - на английском
    /ru/about - на русском
    /ar/about - на арабском
    и т.д.

    При первом заходе по IP узнаю страну и перенаправляю юзера на нужную локализацию.
    Можно первый раз определять по заголовку Accept language (мне это больше нравится)

    Использую этот пакет https://github.com/mcamara/laravel-localization
    Ответ написан
    6 комментариев
  • Недостатки видеоуроков?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Видеоуроки - как книжки "для чайников". Как правило - это много частных примеров, мало теории. Плюс к тому, обычно читать тот же текст получится быстрее, чем смотреть видео, т.к. читать можно по диагонали.
    Видеоуроки подойдут, если:
    • У вас индукционное мышление - 100 примеров лучше чем страница теории.
    • Вы воспринимаете "на слух" лучше, чем читая текст.

    Но рано или поздно наступит момент, когда документация станет родным домом, а видеоуроки будут восприниматься как потеря времени, потому что время==деньги, и час расслабона, смотря видео, станет стоить слишком дорого.
    Но не стоит вообще отказываться от таких форматов. Мой преподаватель по электронике, умнейший человек, говорил: "Не стоит гнушаться книжек 'Для чайников' - в них информация изложена кратко и максимально доступно. И этого минимума может хватить чтобы начать уже что-то делать"
    Ответ написан
    Комментировать
  • Активность сим,что видят по моему номеру?

    @x_shader
    Oracle & Coffee
    Как мы делали в похожей ситуации.

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

    БК вначале даёт оператору список номеров хороших и плохих клиентов. Оператор на базе списков и параметров выше обучает ML модель.
    Затем, когда в БК приходит новый клиент, они передают оператору номер, а тот возвращает некий ответ модели - надёжность=0.75, к примеру.

    Т.е. в этом случае никто тебе не объяснит, как прогревать. Просто твой профиль использования должен быть похож на профили других абонентов, которые раньше понравились БК.
    Но есть и случаи попроще. Оператор просто продает инфу вроде "номеру больше трёх месяцев, или нет".
    Ответ написан
    1 комментарий
  • На каком я сейчас уровне?

    1. Не умеешь пользоваться гитом, тк загрузил файлы через Upload
    2. Код невозможно проверить, тк ты закинул только cs файлы, но не приложил не менее важный csproj - не разбираешься, как собирается проект.
    3. Про свич кейс тебе уже сказали в комменте.
    Про остальное мало что можно сказать - код самый обычный, на три с минусом, не очень хороший, но и не слишком ужасный.
    С архитектурой плохо, тк детали реализации смешаны с бизнес-правилами.
    По алгоритмам нельзя оценить, тк никаких сложных алгоритмов в твоём проекте нет.

    Уровень, имхо: стажёр/младший разработчик(обязательно под менторством и наблюдением более опытного)
    Ответ написан
    5 комментариев
  • Язык программирования D. Почему отличный язык остался невостребованным?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Представьте, что вам нужно изучить иностранный язык и от выбора языка зависит сколько людей в мире вы будет понимать, какое количество текстов вы сможете прочитать, сколько вакансий вам будет доступно и какого размера зарплаты вам светят. Что выберите - английский или венгерский? Так же у языка программирования. Пока на нём нет вакансий, никто не хочет его учить, а пока никто не хочет его учить, на нём нет вакансий. Вырваться из замкнутого круга можно только двумя путями - либо язык предлагает суперконкурентное преимущество программисту, либо ему выдаёт кредит доверия гигантская корпорация. Очевидно. у D не нашлось ни того, ни другого.
    Ответ написан
    24 комментария
  • Что такое pre-backend, пребэк, бэкендовский скрипт?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Вам нужно сделать прокси для вашего сайта.
    Это просто файл php который делает запрос на СДЕК и отдает результат вашему скрипту, потому как он на вашем домене и на одном порту то CORS не ограничивает и все работает.

    Вот один из примеров
    https://dzone.com/articles/building-simple-api-proxy
    Ответ написан
    1 комментарий