1

(690 відповідей, залишених у Розваги та гумор)

https://www.youtube.com/watch?v=rZDiYgQAXqs

ReAl написав:

запис числа у формі a⋅10b при фіксованій точності мантиси a.

До речі, в першому рядку таблиці потрібно було записати значення функції оберненої до log2(n), тобто 2^x, де x я брав з третього рядка таблиці. І компютер відмовлявся обчислювати 2^(c*10^p) навіть наближено.
Тоді виникло питання, як число 2^(c*10^p) представити у вигляді a*10^b, де b - ціле, a - дійсне між 1 і 10 (10 не включається).
a*10^b = 2^(c*10^p),
log2(a*10^b) = c*10^p,
log2(a) + log2(10^b) = c*10^p,
ln(a)/ln(2) + ln(10^b)/ln(2) = c*10^p,
ln(a) + ln(10^b) = ln(2)*c*10^p,
ln(a) + b*ln(10) = ln(2)*c*10^p,
b*ln(10) = ln(2)*c*10^p - ln(a),
b = ln(2)/ln(10)*c*10^p - ln(a)/ln(10),
b = log10(2)*c*10^p - log10(a),
c і p - відомі, a - не відоме, але ми знаємо, що a < 10, тобто log10(a) < 1, тому можемо записати що
b = floor(log10(2)*c*10^p),

b = floor(ln(2)/ln(10)*c*10^p)

, де floor(x) повертає найбільше ціле число менше за (або рівне) x.
Тепер b - відоме і можна знайти a :
log2(a) = c*10^p - log2(10^b),
log2(a) = c*10^p - b*log2(10),
a = 2^(c*10^p - b*log2(10)),

a = 2^(c*10^p - b*ln(10)/ln(2))
yooll написав:

Які саме вирази використовувалися для nlgn та n!?

Для x(n) = n*log2(n) обернена функція :
n(x) = ln(2)*x/W(ln(x)*x),
де W(x) - функція Ламберта, загалом вона багатозначна, але я використовував тільки основну гілку. Її можна наближено обчислити використовуючи ряди з коефіцієнтами, де чисельники A227831, а знаменники A095996.

Значення функції x(n) = n! при великих n досить добре наближує формула Стірлінга.
Для апроксимації обернена функція :
n(x) = ln(x/sqrt(2*pi))/W(exp(-1)*ln(x/sqrt(2*pi)))-1/2.

yooll написав:

І взагалі, а що саме розумієте під факторіалом нецілого числа? Гамма-функцію?

Так, n! = Gamma(n+1).

upd: Якщо цікавить виведення оберненої функції для Стірлінга, то можна глянути на stackexchange.

Вивести обернені функції для "n!" і "n*log2(n)" було дуже не просто.
Вийшло якось так :

{
    "log2(n)": {
        "sec" : "9.90065 * 10^301029",
        "min" : "5.49337 * 10^18061799",
        "hour": "2.45658 * 10^1083707984",
        "day" : "2.33332 * 10^26008991625",
        "mont": "1.09460 * 10^780269748761",
        "year": "4.49744 * 10^9499784191165",
        "cent": "1.97973 * 10^949978419116565"
    },
    "sqrt(n)": {
        "sec" : "1.00000 * 10^12",
        "min" : "3.60000 * 10^15",
        "hour": "1.29600 * 10^19",
        "day" : "7.46496 * 10^21",
        "mont": "6.71846 * 10^24",
        "year": "9.95882 * 10^26",
        "cent": "9.95882 * 10^30"
    },
    "n": {
        "sec" : "1.00000 * 10^6",
        "min" : "6.00000 * 10^7",
        "hour": "3.60000 * 10^9",
        "day" : "8.64000 * 10^10",
        "mont": "2.59200 * 10^12",
        "year": "3.15576 * 10^13",
        "cent": "3.15576 * 10^15"
    },
    "n*log2(n)": {
        "sec" : "6.27461 * 10^4",
        "min" : "2.80141 * 10^6",
        "hour": "1.33378 * 10^8",
        "day" : "2.75514 * 10^9",
        "mont": "7.18708 * 10^10",
        "year": "7.98160 * 10^11",
        "cent": "6.86565 * 10^13"
    },
    "n^2": {
        "sec" : "1.00000 * 10^3",
        "min" : "7.74596 * 10^3",
        "hour": "6.00000 * 10^4",
        "day" : "2.93938 * 10^5",
        "mont": "1.60996 * 10^6",
        "year": "5.61761 * 10^6",
        "cent": "5.61761 * 10^7"
    },
    "n^3": {
        "sec" : "1.00000 * 10^2",
        "min" : "3.91486 * 10^2",
        "hour": "1.53261 * 10^3",
        "day" : "4.42083 * 10^3",
        "mont": "1.37365 * 10^4",
        "year": "3.16010 * 10^4",
        "cent": "1.46679 * 10^5"
    },
    "2^n": {
        "sec" : "1.99315 * 10^1",
        "min" : "2.58384 * 10^1",
        "hour": "3.17453 * 10^1",
        "day" : "3.63303 * 10^1",
        "mont": "4.12372 * 10^1",
        "year": "4.48430 * 10^1",
        "cent": "5.14869 * 10^1"
    },
    "n!": {
        "sec" : "9.44560 * 10^0",
        "min" : "1.11663 * 10^1",
        "hour": "1.27888 * 10^1",
        "day" : "1.39966 * 10^1",
        "mont": "1.52488 * 10^1",
        "year": "1.61463 * 10^1",
        "cent": "1.77570 * 10^1"
    }
}

5

(14 відповідей, залишених у Windows)

Torbins написав:

зайдіть в Панель керування > Видалення програм, і видаляйте усе, що не знаєте.

Порада "не дуже". Потрібно розуміти, що коли користувач заходить в "Панель керування" > "Видалення програм" > вибирає програму і клікає "Видалити", то операційна система запускає на виконання файл, який в більшості випадків був створений самим інсталятором. І якщо інсталятор був створений спеціально для встановлення вірусу, то він подбав про те, щоб при видаленні (через панель) лише зробити вигляд наче все успішно видалено, а фактично це повторний запуск вірусу.

Значно ефективніше буде вбивати процеси, видаляти файли, чистити реєстр (в першу чергу "Run" і "RunOnce").
+ поради форумчан вище.

/KIT\ написав:
leofun01 написав:

Я бачив багато сайтів, які грузять процесори (і навіть відеокарти) користувачів через javascript.

Наведіть мені, будь-ласка, приклади сайтів, які грузять відеокарти.

На сайті можуть використовуватися Canvas, WebGL, Flash Player, Unity Web Player. Без спеціальних налаштувань, всі вони використовують саме відеокарту, а не тільки ЦП.

7

(11 відповідей, залишених у Бази даних)

Обережно, наведені нижче приклади працюють для MySQL.
Для PostgreSQL імена системних функцій і синтаксис можуть відрізнятися.
Вам потрібно щось таке :

DELIMITER $$
DROP PROCEDURE IF EXISTS proc_last_n_years$$
CREATE PROCEDURE proc_last_n_years(n INT)
BEGIN
    DECLARE cnt INT DEFAULT 0;
    CREATE TEMPORARY TABLE t ( year INT );
    WHILE cnt < n DO
        INSERT INTO t
            SELECT YEAR(CURDATE()) - cnt;
        SET cnt = cnt + 1;
    END WHILE;
    Select * FROM t;
END$$
DELIMITER ;

А потім викликати з заданою кількістю років :

CALL proc_last_n_years(10);

8

(6 відповідей, залишених у C/C++)

Спочатку вам сюди: 1, 2.
А потім і на формули можна глянути: 3.

upd: І не забудьте дописати { конструктори, оператори } { копіювання, переміщення }, щоб не дивуватися чому на виході неочікувані значення. (cc, co, mc, mo)

Smolenkov_BN, конкретно в цьому випадку все набагато простіше. В браузері достатньо відключити javascript і більше ніякий сайт не нагрузить процесор.
Я бачив багато сайтів, які грузять процесори (і навіть відеокарти) користувачів через javascript.
Хтось майнить криптовалюти, хтось проводить розподілені обчислення ...

10

(7 відповідей, залишених у Just English)

Be careful with parameters.
xhttp.open("GET", "/url/", true);
here true value as last parameter mean that this request has been sent asynchronously.

11

(7 відповідей, залишених у Just English)

Open page
https://www.w3schools.com/js/tryit.asp? … yjson_ajax
in your browser and replace code by this:

<!DOCTYPE html>
<html>
<body>
<h2>XMLHttpRequest + JSON</h2>

<script>
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.body.innerHTML += '<pre>' + this.responseText + '</pre>';
      var myObj = JSON.parse(this.responseText);
      document.body.innerHTML += '<p>' + myObj.name + '</p>';
      document.body.innerHTML += '<p>' + myObj.age + '</p>';
      document.body.innerHTML += '<p>' + myObj.pets[1].name + '</p>';
    }
  };
  xhttp.open("GET", "https://www.w3schools.com/js/json_demo.txt", true);
  xhttp.send();
</script>

</body>
</html>

and press "Run".

It's very simple example that will show you how it work.
javascript.enabled = true (required).

12

(6 відповідей, залишених у Алгоритми та структури даних, технології)

"Чи існує число, хеш-функція якого дорівнює ... (чому би то не було) ?"
Питання з ряду "Чи існує життя на інших планетах ?"
Теоретично мало би існувати, але доки воно не знайдено, то нема про шо говорити.
Якщо вам дійсно важливо знати відповідь на своє питання, то треба написати програму, яка буде шукати таке число. Або знайти готові таблиці хешів.

Уявіть, що ви вже знайшли таке число. Що ви з ним будете робити ?
Або уявіть, що такого числа не існує. Це вплине на щось ?

yooll написав:
public interface I12 : I1, I2{ 
}
public class CC:I12,C{
}
I12 c=new CC();

Це геніально. Воно працює, саме так як треба.
Тільки там в наслідуванні спочатку клас, а потім інтерфейс:

public interface I12 : I1, I2 { }
public class CC : C, I12 { }
I12 c = new CC();
koala написав:

1. Тримати одразу два посилання на об'єкт як на I1 і на I2. На жаль, є ризик втрати цілісності, але виглядає найпродуктивніше.

Можна як варіант, але це вже буде не те що мені потрібно. Потрібен саме один об'єкт, бо потім я буду його повертати зі своєї функції.

koala написав:

2. Погратися із вказівниками в unsafe. Не певен що щось вийде, але подумати в цей бік можна.

Попробував зробити через конвертацію вказівників і компілятор навіть схавав. Але на етапі виконання вилетів ексепшн і прокляв мене до третього коліна.

koala написав:

3. Інкапсулювати варіант (1):

public class CC
{
  public I1 as_i1() { return (I1)c; }
  public I2 as_i2() { return (I2)c; }
  private C c;
  //і ще конструктор
}
CC i = new CC(...);
i.as_i1().f1();
i.as_i2().f2();
//i.f3(); - помилка
//i.as_c().f3(); - помилка

Так, i.as_I1() писати довше за просто i, зате працює.

А от це мені дуже подобається. Доведеться пожертвувати деякими можливостями, але це дуже гарний варіант.

koala написав:

4. Ще можна подивитися на operator перетворення типів, але він, схоже, не вміє повертати інтерфейси.

Вже пробубвав explicit перетворення

I12 i = (I12)c;    // Runtime Error

і компілятор cхавав, але був ексепшн на етапі виконання.

koala написав:

Можете пояснити, чому виникло питання? Може, ви щось взагалі не так робите. Чому треба маскувати методи C? А може, просто бібліотека крива... Якийсь конкретний приклад.

Я боявся, що доведеться відповідати на це питання.
Ідея приховування частини методів в C# прийшла після довгої роботи з C++, там можна було зробити private наслідування одного класу і public наслідування ще кількох класів, які були предками одного класу (того самого). І взагалі в C++ завжди було кілька рішень для будь-якої проблеми, хоть і через костилі, але то вже інша тема.

- Нащо їх маскувати ?
Бо ті, хто будуть використовувати мій код, повинні отримувати об'єкт, який не буде крашити всю програму. Якщо вони отримають об'єкт оригінального класу, то є такий ризик.
Майже впевнений, що бібліотека крива, але точно не скажу, бо source'ів не бачив.

А ще в C# нема friend методів і іноді це страшенно бісить.

FakiNyan написав:

дуже не вчитувався, але може type union отой мона заюзати?
https://github.com/dotnet/csharplang/issues/399

Автор запитання там пише, що є об'єднання і перетини типів в TypeScript і питає, чи є щось таке в C#.
І це якраз те що мені потрібно.
Але там йому відповіли, що в C# такого нема. Ніби то тому, що C# строго типізований, але це аж ніяк не перешкода. Реальна перешкода - це MSIL.
Висновок: MSIL -гавно, C# - гавно, і я - гавно. Треба створити свою мову програмування.
Що ж, відповідь я отримав. Дякую.

16

(7 відповідей, залишених у Оцінка сайтів)

karmeljuk написав:

ніби нічого критичного око не муляє

А мені муляє Fatal Error ось тут і тут.

Є бібліотека стороннього розробника, в тій бібліотеці є класи та інтерфейси, наприклад:

namespace SomeSpace
{
    public interface I1
    {
        void f1();
    }
    public interface I2
    {
        void f2();
    }
    public class C : I1, I2 //, ...
    {
        public void f1() { }  // implement I1.f1();
        public void f2() { }  // implement I2.f2();
        public void f3() { }  // implement other interface member.
        // ...
    }
}

Я підключив цю бібліотеку до свого проекту і створив екземпляр класу C, далі я хочу помістити (присвоїти) цей екземпляр в змінну такого типу, який дозволить викликати (через крапку) будь-які властивості і методи інтерфейсів I1, I2, і не дозволить викликати інші властивості і методи класу C.
В ідеалі я б хотів, щоб це виглядало як в наступному прикладі в стрічках перед "// Error N", де N - це цифра.

using SomeSpace

namespace MySpace
{
    public interface I12 : I1, I2
    { }
    public class Program
    {
        public static void Main(string[] args)
        {
            C c = new C();
            I1 i1 = c;       // OK
            I2 i2 = c;       // OK

        //  I12 i = c;       // Error 1
        //  I1, I2 i = c;    // Error 2
        //  {I1, I2} i = c;  // Error 3

            i.f1();  // OK
            i.f2();  // OK
        //  i.f3();  // Error here is OK
        }
    }
}

Звичайно, що Visual Studio на таке свариться (якщо розкоментувати рядки з Error 1, 2, 3), каже щоб я йшов туди, куди сам часто посилаю, на офіційну документацію по синтаксису.
Я знаю, що це можна реалізувати наступним способом:

using SomeSpace

namespace MySpace
{
    public interface I12 : I1, I2
    { }
    public class CC<T> : I12
        where T : I1, I2
    {
        private T _t;
        public CC(T t) { _t = t; }
        public void f1() { _t.f1(); }  // implement I1.f1();
        public void f2() { _t.f2(); }  // implement I2.f2();
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            C c = new C();
            I1 i1 = c;       // OK
            I2 i2 = c;       // OK

            I12 i = new CC<C>(c);  // OK

            i.f1();  // OK
            i.f2();  // OK
        //  i.f3();  // Error here is OK
        }
    }
}

Але тепер уявіть собі, що насправді інтерфейси мають не один метод, а від 20 до 50 методів. Це означає, що я мушу написати від 40 до 100 стрічок коду тільки для того, щоб досягнути поставленої цілі, і це тільки в одному класі. Дибілізм же. Гарного рішення я не знайшов.

Якщо хтось знає, як це культурно зробити, підкажіть.

18

(1 відповідей, залишених у Web-сервери)

Якщо потрібен сильно спрощений варіант регулярного виразу, то можна записати так:

([A-Za-z]{2,8}(\-[A-Za-z]{2,8})*|x(\-[0-9A-Za-z]{1,8})+)

або так:

([A-Za-z]{2,8}(\-[A-Za-z]{2,8})*)

Але вони вже далекі від описаного на початку і будуть пропускати невалідні, або наоборот - не пропустять валідні Language-Tag'и.

Недавно я шукав інформацію про формати позначень мов, щоб написати обробник http-запитів на одному сайті (для таких полів http-заголовків як "Accept-Language"), і знайшов трохи корисної інформації, якою хочу поділитись. Просто залишу посилання тут.
Accept-Language (rfc7231)
Language Tag (rfc5646)
ISO 639-2 (.txt);
3-буквенні коди мовних сімейств і груп : Alpha-3 code for language families and groups.

upd:
Створив регулярний вираз для перевірки на валідність Language-Tag:

(([A-Za-z]{2,3}(\-[A-Za-z]{3}(\-[A-Za-z]{3}){0,2})?|[A-Za-z]{4,8})(\-[A-Za-z]{4})?(\-([A-Za-z]{2}|[0-9]{3}))?(\-([0-9A-Za-z]{5,8}|[0-9][0-9A-Za-z]{3}))*(\-[0-9A-WYZa-wyz](\-[0-9A-Za-z]{2,8})+)*(\-x(\-[0-9A-Za-z]{1,8})+)?|x(\-[0-9A-Za-z]{1,8})+|en\-[A-Z]{2}\-oed|i\-[a-z]{3,8}|sgn(\-[A-Z]{2}){2}|[a-z]{2,3}(\-[a-z]{3,8})+)

"майже строго" по стандарту.

Етапи формування регулярного виразу

1)

#    langtag
#        language
#            2*3ALPHA
                [A-Za-z]{2,3}
#            ["-" extlang]
#                3ALPHA
                    [A-Za-z]{3}
#                *2("-" 3ALPHA)
                    (\-[A-Za-z]{3}){0,2}
#            / 4ALPHA / 5*8ALPHA
                [A-Za-z]{4,8}
#        ["-" script]
#            4ALPHA            # ISO 15924
                [A-Za-z]{4}
#        ["-" region]
#            2ALPHA            # ISO 3166-1
                [A-Za-z]{2}
#            / 3DIGIT        # UN M.49 code
                [0-9]{3}
#        *("-" variant)
#            5*8alphanum
                [0-9A-Za-z]{5,8}
#            / (DIGIT 3alphanum)
                [0-9][0-9A-Za-z]{3}
#        *("-" extension)
#            singleton 1*("-" (2*8alphanum))
                [0-9A-WYZa-wyz](\-[0-9A-Za-z]{2,8})+
#        ["-" privateuse]
#            "x" 1*("-" (1*8alphanum))
                x(\-[0-9A-Za-z]{1,8})+
#    / privateuse
#        "x" 1*("-" (1*8alphanum))
            x(\-[0-9A-Za-z]{1,8})+
#    / grandfathered
#        irregular
            en\-[A-Z]{2}\-oed
            |i\-[a-z]{3,8}
            |sgn(\-[A-Z]{2}){2}
#        / regular
            [a-z]{2,3}(\-[a-z]{3,8})+

2)

#Language-Tag
#    langtag
#        language
            ([A-Za-z]{2,3}(\-[A-Za-z]{3}(\-[A-Za-z]{3}){0,2})?|[A-Za-z]{4,8})
#        ["-" script]
            (\-[A-Za-z]{4})?
#        ["-" region]
            (\-([A-Za-z]{2}|[0-9]{3}))?
#        *("-" variant)
            (\-([0-9A-Za-z]{5,8}|[0-9][0-9A-Za-z]{3}))*
#        *("-" extension)
            (\-[0-9A-WYZa-wyz](\-[0-9A-Za-z]{2,8})+)*
#        ["-" privateuse]
            (\-x(\-[0-9A-Za-z]{1,8})+)?
#    / privateuse
        x(\-[0-9A-Za-z]{1,8})+
#    / grandfathered
#        irregular
            (en\-[A-Z]{2}\-oed|i\-[a-z]{3,8}|sgn(\-[A-Z]{2}){2})
#        / regular
            [a-z]{2,3}(\-[a-z]{3,8})+

3)

#Language-Tag
#    langtag
        ([A-Za-z]{2,3}(\-[A-Za-z]{3}(\-[A-Za-z]{3}){0,2})?|[A-Za-z]{4,8})(\-[A-Za-z]{4})?(\-([A-Za-z]{2}|[0-9]{3}))?(\-([0-9A-Za-z]{5,8}|[0-9][0-9A-Za-z]{3}))*(\-[0-9A-WYZa-wyz](\-[0-9A-Za-z]{2,8})+)*(\-x(\-[0-9A-Za-z]{1,8})+)?
#    / privateuse
        x(\-[0-9A-Za-z]{1,8})+
#    / grandfathered
        (en\-[A-Z]{2}\-oed|i\-[a-z]{3,8}|sgn(\-[A-Z]{2}){2}|[a-z]{2,3}(\-[a-z]{3,8})+)

4)

#Language-Tag
    (([A-Za-z]{2,3}(\-[A-Za-z]{3}(\-[A-Za-z]{3}){0,2})?|[A-Za-z]{4,8})(\-[A-Za-z]{4})?(\-([A-Za-z]{2}|[0-9]{3}))?(\-([0-9A-Za-z]{5,8}|[0-9][0-9A-Za-z]{3}))*(\-[0-9A-WYZa-wyz](\-[0-9A-Za-z]{2,8})+)*(\-x(\-[0-9A-Za-z]{1,8})+)?|x(\-[0-9A-Za-z]{1,8})+|en\-[A-Z]{2}\-oed|i\-[a-z]{3,8}|sgn(\-[A-Z]{2}){2}|[a-z]{2,3}(\-[a-z]{3,8})+)

20

(1 відповідей, залишених у Хостинг та домени)

doktopau6ojiut написав:

мені потрібно дуже багато доменів з сайту sedo.com

Для чого ?
Щоб розмістити рівно одну сторінку на кожному домені з написом "продається" ?