Как стать автором
Обновить
62
0.1
Михаил @michael_v89

Программист

Отправить сообщение
Можно вот так еще:
31
-
(3) * (m == 2)
+
(1) * (m == 2) * ((y % 4 == 0) - (y % 100 == 0) + (y % 400 == 0))
-
(1) * (m == 4 || m == 6 || m == 9 || m == 11)
У меня вообще не получается писать что-то для вызова кода, пока я не написал сам код. Потому что в процессе написания и поиска решения переберешь с десяток вариантов. А если что-то уже написал для вызова, то потом придется менять. Это отвлекает, и пока меняешь, основная мысль может исчезнуть.
Расскажу просто для прикола.
Надо было сделать договор на банковское обслуживание. Карта была заблокирована, девочка операционист сделала новую Маэстро Социальная. Через пару дней звонил в техподдержку, авторизовывался по этой карте, спросили кодовое слово. Оп-па. При заведении карты ничего не спрашивали по этому поводу. Называю то, которое обычно ставлю, не подходит. Называю еще раз, может невнятно произнес, не подходит. Вспоминаю, что где-то слышал, что Сбербанк ставит по умолчанию кодовое слово = год рождения. Называю год рождения, подходит. Вот так я взломал собственную карту.
Как вариант — в бинокль с балкона многоэтажки напротив)
Добавлю информацию по работе с календарями пользователей.

Например, example@mail.com — это email пользователя, имя основного календаря обычно совпадает с email. Просто так поставить событие пользователю в календарь не получится. Надо предоставить доступ для сервисного аккаунта. Есть 2 варианта — предоставление доступа вручную и domain-wide authority.

Когда генерируем API key, там же генерируются 2 параметра:

Client ID:
123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz.apps.googleusercontent.com
Email address:
123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com

Предоставление доступа вручную:
Надо чтобы пользователь сам зашел в календарь и добавил разрешение вносить изменения для сервисного аккаунта (Email address).
Настройки — Календари — [Название календаря] — Открытие общего доступа к этому календарю — Общий доступ для отдельных пользователей
Пользователь: 123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com
Настройки разрешений: Вносить изменения

Domain-wide authority:
Если в компании используется свой домен для рабочей почты пользователей, можно настроить авторизацию по всему домену. Приложение при этом совершает действия как бы от имени пользователя (impersonate).
Это делается через консоль администратора домена: admin.google.com. Для предоставления доступа используется Client ID.
Подробно написано здесь developers.google.com/identity/protocols/OAuth2ServiceAccount в разделе Delegating domain-wide authority to the service account.

В коде надо добавить установку свойства sub (email пользователя, которым мы прикидываемся):
$credentials = new Google_Auth_AssertionCredentials(
    $service_email,  // 123456789012-abcdef1g2hijkl34mn56opqrstuvwxyz@developer.gserviceaccount.com
    $scope,          // https://www.googleapis.com/auth/calendar
    file_get_contents($p12Path)
);
$credentials->sub = $user_email;  // example@mail.com
Вот так прочитаешь все это, найдешь хорошую вакансию,
а там используется Yii (потому что не у всех IQ больше 120),
PostgreSQL (по некоторым причинам),
Smarty (или вообще без отдельного шаблонизатора),
nginx-ом управляют сениоры (которые давно там работают и хорошо знают проект).

Вообще, мне кажется, в статье описан middle, который ближе к senior, почему автор и отсеял 90% кандидатов. Вот тут есть хорошее описание.
Здесь уровни после 30-го зашифрованы и расшифровываются ключом, так что просто обойти проверку не поможет)
Мы в универе начинали с одновременного изучения C++ и Pascal. В C++ изучали в основном подмножество C, просто написание учебных программ без использования стандартной библиотеки. Он мне показался более понятным и удобным, чем Pascal. Но сейчас я пишу на более «высокоуровневых» языках.
Скрытый текст
В принципе, это неплохой язык для начального обучения, если не лезть в дебри метапрограммирования и сложных ООП абстракций. Потом уже можно переходить на другие языки, с пояснениями в плане «в C++ надо было делать так, а в этом языке это делается вот так, и это удобнее». Для начинающих будет более понятно, зачем придумали сборщики мусора, динамическую типизацию, и как устроена работа со строками. А то я пару раз сталкивался с вопросами вида «а почему C++ сам int в строку не конвертирует?».

C++ хороший язык, но правильно писать на нем достаточно сложно. Надо знать много технических нюансов.
Хм… Да, вы правы. Задумался о целых числах, и упустил из виду, что могут быть строки вида 0000(01), или вообще непериодические. Хотя, если под дробью подразумевать отношение двух целых чисел a / b, то это множество счетно.
На самом деле, во множестве бесконечных двоичных строк есть 2 взаимно не пересекающихся множества:
0000(0)
1000(0)
0100(0)
1100(0)
...
...
0111(0)
1111(0)

и
1111(1)
0111(1)
...
...
1100(1)
0100(1)
1000(1)
0000(1)


Каждое из них счетно, и может быть соспоставлено множеству целых чисел (особено наглядно это видно по первому). Бесконечная диагональная строка нулей из первого множества в инвертированном виде принадлежит второму множеству.
Мне почему-то кажется, что наследовать красную ячейку от ячейки — это примерно то же самое, как наследовать квадрат от прямоугольника. Если не секрет, какая была реальная задача?
Так суть же не в этом. Можно отдельно функцию lsl() определить. Я к тому, что многобукв много дополнительных слов и названий переменных. Ну и регистр символов постоянно меняется.
Как-то слишком многословно…
c++
class RC
{
    int rc, n;
    
public:

    RC(int x, int n)
    {
        rc = x << n;
        this.n = n;
    }
    
    void set(int x)
    {
        rc = x << n;
    }
    
    int asr1(int x, int n)
    {
        if (x > 0) x += (1 << (n - 1));
        return asr(x, n);
    }
    
    int asr2(int x, int n)
    {
        if (x > 0) x += ((1 << n) - 1);
        return asr(x, n);
    }
    
    int update(int x)
    {
        rc += asr2((x << n) - rc, n);
        return asr1(rc, n);
    }
    
    int get()
    {
        return asr1(rc, n);
    }
}


Дайте угадаю, автор недавно закончил универ и практически не писал достаточно больших приложений?) Просто у меня пару раз тоже такие мысли возникали. Давно когда-то…
(достаточно больших — это хотя бы несколько разработчиков и несколько десятков тысяч строк кода)
У полосы прокрутки есть еще такой плюс (возможно, не на всех системах). Читаешь текст где-то в середине, нужно на несколько секунд вернуться наверх, посмотреть картинку/схему/текст, и вернуться назад на то место где читал. Тянешь скроллбар вверх, не отпуская смотришь что нужно, уводишь мышь далеко в сторону, он сам возвращается обратно.
А так идея прикольная.
Да, наверно я был неправ. Спасибо за разъяснение.
Чем это помешает работе индексов?
Дата-время не всегда имеет достаточную точность.
Про счетчики — если у нас будет один централизованный счетчик на всю базу, то при вставке записи с большим id он будет и меняться соответственно. Как автоинкремент в таблице mysql.
В любом случае, спасибо за информацию.
Ну у него тоже свои недостатки есть. Поэтому я подумал о другом подходе. Ну и в целом, попытался взглянуть на идентификаторы с другой точки зрения.
Но считать этот адрес идентификатором объекта — нельзя

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

Информация

В рейтинге
3 061-й
Откуда
Россия
Зарегистрирован
Активность