Обновить
4
Dark Daskin@darkdaskin

Разработчик C#

Отправить сообщение

Аналог (int)(object)value без боксинга будет таким:


public static int CastToInt2<T>(T v)
{
     return __refvalue(__makeref(v), int);
}

Оба варианта работают только когда typeof(T) == typeof(int). Для непрямых приведений (например, из double к int) можно написать что-то вроде:


public static int CastToInt2<T>(T v)
{
    if (typeof(T) == typeof(int))
        return __refvalue(__makeref(v), int);
    else if (typeof(T) == typeof(double))
        return (int) __refvalue(__makeref(v), double);
    // Similar conditions vor all possible casts
    else
        throw new InvalidCastException();
}

Боксинг всё равно будет. Компилятор генерирует такой код:


public static int CastToInt<T>(T v)
{
    if (Test.<>o__0<T>.<>p__0 == null)
    {
        Test.<>o__0<T>.<>p__0 = CallSite<Func<CallSite, object, int>>.Create(Binder.Convert(CSharpBinderFlags.ConvertExplicit, typeof(int), typeof(Test)));
    }
    return Test.<>o__0<T>.<>p__0.Target(Test.<>o__0<T>.<>p__0, v);
}

Где Target имеет тип Func<CallSite, object, int>. А при первом вызове к тому же будут созданы новые объекты.

А когда вы слышите выражение "Отправить SMS", вы тоже занудствуете, что SMS — это служба, и отправить её куда-то невозможно?
По-моему, большинству прочитавших статью вполне очевидно, что под UEFI подразумевается UEFI-based firmware.
А про то, что UEFI — это спецификация, в середине статьи всё же упоминается. Возможно, стоит и в начале вместо "прошивка UEFI" написать "прошивка на основе UEFI", чтобы не возникало двоякого понимания этой фразы.

Некоторые сайты подобным образом дорисовывают туда разную информацию, например, количество уведомлений. Пример кода.

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

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


WebAssembly — не панацея, поскольку неспособен работать с DOM, так что писать обвязку на JavaScript всё равно придётся.

По умолчанию режим выходного узла в Tor выключен. А вот некоторые браузерные расширения, например, Hola, как раз работают как выходные узлы и с ними можно и нарваться.


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

Устойчивость к ASIC обычно достигается использованием большого количества RAM, а для приличной производительности требуется большой объём кэш-памяти. На большинстве умных устройств с этим негусто. Bitcoin же можно майнить на любом железе, да хоть на листе бумаги.

Моё почтовое отделение какое-то время присылало извещения, а на обратной стороне — чьи-то паспортные данные и информация о посылках.

В C# итератором обычно называют реализацию IEnumerator с использованием yield return. Так что в контексте статьи не всякий перечислитель является итератором.

А как этот датчик реагирует на различные источники освещения?
На днях пробовал измерять освещённость встроенным датчиком смартфона. В помещениях с люминесцентными или светодиодными лампами показания похожи на правду, а вот в помещении с галогенными лампами показывает 4 люкс — то же значение он выдаёт и если датчик закрыть пальцем. Только при поднесении к лампе вплотную показания начинают расти.

В своп можно скинуть хоть вообще всю память. Если к участку памяти приложение активно обращается, он тут же подтянется обратно, если нет, то в свопе и останется. Это можно сделать и принудительно, например, используя функцию Reduce working set в Process Hacker.
Заморозить приложение можно используя тот же Process Hacker. После этого из свопа оно уже не вылезет до разморозки.
Правда, некоторые приложения на такое обращение плохо реагируют и обратно уже не поднимаются, приходится перезапускать.
А UWP-приложения Windows 10 автоматически замораживает ещё с релиза.

Кука лежит на edit.telegra.ph.

Редактирование идёт через отдельный домен, на котором HTTPS имеется. Так что куки утащить не выйдет.
Хотя связать пост с автором всё равно можно, если наблюдать за трафиком в момент написания или редактирования поста, установив корреляцию между последним запрошенным URL и наличием трафика в HTTPS-соединении.
В то время, как я отказался от него в пользу uBlock Origin, Adblock Plus был на первом месте по потреблению ресурсов. Где-то попадалась демо-страница, на которой разница в производительности была отчётливо видна (AdBlock Plus вешает браузер, uBlock с теми же подписками справляется), что и сподвигло меня сменить расширение.

Офис довольно давно умеет распознавать текст. Используя бесплатную OneNote, получить текст из PDF можно в 2 клика:


  1. Вставка -> Распечатка.
  2. ПКМ по любой странице -> Копировать текст со всех страниц.

Аналогично можно распознавать и другие форматы, например DJVU, открыв документ в соответствующем приложении и отправив на печать на виртуальный принтер OneNote.

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

Кстати, промисы из разных библиотек прекрасно комбинируются друг с другом.


Promise.resolve(1).then(v => q.resolve(v + 1)).then(v => jQuery.Deferred().resolve(v + 1)).then(v => console.log('done', v))

выведет done 3, как и ожидалось.

В случае SPA от адреса в браузере толку мало, если разработчик не предусмотрел его смену при навигации внутри приложения.

У лямбд более громоздкий синтаксис. Требуется явно указывать тип делегата, из-за чего нельзя воспользоваться анонимным типом. Кроме того, если лямбда рекурсивна, требуется двойная инициализация переменной.


Пример из статьи на C# 6 выглядит так:


public int Fibonacci(int x)
{
    if (x < 0) throw new ArgumentException("Не надо негатива!", nameof(x));

    Func<int, Tuple<int, int>> Fib = null;
    Fib = i =>
    {
        if (i == 0) return Tuple.Create(1, 0);
        var p = Fib(i - 1);
        return Tuple.Create(p.Item1 + p.Item2, p.Item1);
    };

    return Fib(x).Item1;
}

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Бэкенд разработчик
Старший
C#
.NET
ASP.NET
WPF
SQL
Git
ООП
Английский язык
Разработка программного обеспечения
.NET Core