С одной стороны:

Не стоит слушать актёров, что они думают о политике. Даже если они известные или великие.

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

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

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

В какой-то степени это касается певцов и певиц, не являющихся лидерами своих групп и поющих чужие песни.

С другой стороны:

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

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

Но это палка о трёх концах:

Стоит ли слушать программистов о политике?

Они любят более очевидные, понятные и простые формулировки для правил.

Не любят исключения.

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

Вывод: это хуже ядерной бомбы, с таким подходом от политики и камня на камне не останется.

Неожиданно обнаружилось, что он всё ещё не умеет в большую арифметику.

Я думал вот уже 2023 год на дворе, уже можно больше 65000 строк и всякое такое. А оказывается большие суммы вводить ещё нельзя.

Excel до сих пор оперирует денежными суммами внутри в формате Float Double, и поменять это нельзя.

Смотрите для подробностей:
https://en.wikipedia.org/wiki/Double-precision_floating-point_format

Это означает что в числе может быть 15 значащих разрядов, и хоть и можно ввести сумму в сто триллионов, но обсчитывать её с точностью до копеек уже нельзя.

1 234 567 890 123.45 – такую сумму ещё можно обсчитывать точно “до копейки”

Но если уже ввести сумму
12 345 678 901 234.56
то она автоматически превратится в
12 345 678 901 234.50

Соответственно:
1 234 567 890 123 456.78 ->1 234 567 890 123 450.00

И не будет никакой ошибки, просто страдает точность записи и вычислений.

Может это не очень существенно, но вести учёт “до копейки” по правилам бухгалтерского учёта становится невозможно.

Можно оформить данные значения как текст, что может в некоторых моментах и выручит, проводить точные вычисления всё равно не выйдет, потому что потеря точности означает, что:
1 234 567 890 123 456.78 + 1.23 даст значение 1 234 567 890 123 450.00

Кроме того, форматировать такие данные становится вручную очень тяжело, да и формулы типа =СУММ(B2:B102) будут игнорировать такие “текстовые” значения.

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

И был один главный и трое регулярнейших. И вот главный спорил с ними, просто срамота ходячая, что немаловажно, апеллировал к так называемой “норме”.

Окэ-эй, думаю я: если ты споришь в своём кругу о “норме”, а с тобой большинство не соглашается, значит “норма” не такая. Факт медицинский!

Вполне возможно, что он иногда думает, что ездить на мотоцикле с револьвером – это вариант нормы.

Всё вышеописанное не означает, что необходимо осудить его за это и бросить слушать подкаст. Нет, достаточно иметь своё собственное мнение. [+]

Сегодня пытался вспомнить, когда бросил курить. Не помню.

Если верить записи: https://entropii.net/?p=1156, то как минимум 11 лет назад.

Комаровский-то оказывается тоже бросал, вот его сегодняшнее видео на тему: https://www.youtube.com/watch?v=IxoO0lsRmpo

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

В пяти/десятиминутной доступности у меня примерно десять точек, где можно взять стаканчик.

И вот эти все кофейни, каждый во что горазд, придумывают свои маркетинговые ухищрения. У кого-то каждая шестая или седьмая чашка кофе бесплатно, у кого-то считаются только “на вынос”, у кого-то по номеру телефона, у кого-то по последним четырем цифрам, у кого-то надо печати на карту ставить, кто-то держит карточки у себя под стойкой и ставит галочки. У одной сети кофеен в разных точках отдельные базы и счётчики, поэтому бесплатные чашки не переносятся между точками. У кого-то скидка за инстаграм, у кого-то скидка за “свою” чашку, а у кое-кого за одноразовый стакан наоборот добавляют к сумме счёта. Ещё у одной по достижении 60 чашек присваивается другой уровень лояльности, хотя сильно дешевле не становится, на самом-то деле.

Вот новая кофейня решила выделиться, у них каждая пятая чашка бесплатно. Ну ОК.

В-общем идут на все любые ухищрения, чтобы ты пришёл ещё раз именно к ним.

Так вот, причём тут Microsoft казалось бы…

У меня есть подписка Microsoft 365 для семьи, в Казахстане сейчас стоит 38 990 тенге, пролонгируется автоматически и карта привязана. Срок подходит к концу. Ну думаю, что дороговато, пойду в интернете куплю подешевле. Захожу в учётную запись и там есть кнопка “Выключить периодическое выставление счетов”. Ну думаю отключу, чего уж там.

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

Ладно, думаю, уговорил, не буду отключать. И два месяца лишних получу к купленным двенадцати, и всё равно чуть позже куплю в интернете процентов на 20-25 дешевле. Вижу цену 29 990 тенге в одном уважаемом местном магазине.

PS.

У них же ещё есть какая-то программа Microsoft Rewards, можно зарабатывать бонусы и тратить. И можно даже поднять уровень своей лояльности:

To reach Level 2 status in Microsoft Rewards, you need to earn 500 points in a single month. Once you reach Level 2, you can earn up to 5,000 points per month. Level 2 members can earn five times more points on Bing.com, save up to 10% on rewards from Microsoft products and services, and get access to exclusive offers. To maintain your Level 2 status, you need to earn at least 500 points per month. As a Level 2 member, you can earn 10 points per dollar spent, plus bonus points, when you make qualifying digital purchases at the Microsoft Store.

ZDOC_3292

chatGPT

Ну допустим, я показал ему текст некоторой программы:

REPORT y_bc001_text_search.

TABLES: tadir.

SELECT-OPTIONS: s_devc FOR tadir-devclass DEFAULT 'Z*' OPTION CP.
SELECT-OPTIONS: s_objec FOR tadir-object.
SELECT-OPTIONS: s_objnm FOR tadir-obj_name DEFAULT 'Z*' OPTION CP.
PARAMETERS: p_text TYPE string.

START-OF-SELECTION.

  SELECT
    tadir~pgmid,
    tadir~object,
    tadir~obj_name,
    trdir~subc,
    tadir~devclass
    FROM tadir
    LEFT OUTER JOIN trdir ON tadir~object = 'PROG' AND tadir~obj_name = trdir~name
    INTO TABLE @DATA(lt_objects)
   WHERE tadir~devclass IN @s_devc
     AND tadir~object IN @s_objec
     AND tadir~obj_name IN @s_objnm
      AND ( tadir~object = 'PROG' OR tadir~object = 'FUGR' OR tadir~object = 'CLAS' ).

  LOOP AT lt_objects ASSIGNING FIELD-SYMBOL(<object>).
    IF <object>-object = 'PROG'  AND ( <object>-subc = '1' OR <object>-subc = 'M' ).

      DATA: lt_tpool TYPE STANDARD TABLE OF textpool WITH DEFAULT KEY.
      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = <object>-obj_name
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING FIELD-SYMBOL(<tpool>).
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.
    ELSEIF <object>-object = 'FUGR'.

      DATA: lv_fugr TYPE rs38m-programm.
      lv_fugr = 'SAPL' && <object>-obj_name.

      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = lv_fugr
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING <tpool>.
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.

    ELSEIF <object>-object = 'CLAS'.

      DATA: lv_clas TYPE rs38m-programm.
      lv_clas = <object>-obj_name.

      DATA(lv_eq_count) = 30 - strlen( lv_clas ).
      DO lv_eq_count TIMES.
        lv_clas = lv_clas && '='.
      ENDDO.
      lv_clas = lv_clas && 'CP'.

      CALL FUNCTION 'RS_TEXTPOOL_READ'
        EXPORTING
          objectname           = lv_clas
          action               = 'READ'
*         AUTHORITY_CHECK      = ' '
          language             = sy-langu
        TABLES
          tpool                = lt_tpool
        EXCEPTIONS
          object_not_found     = 1
          permission_failure   = 2
          invalid_program_type = 3
          error_occured        = 4
          action_cancelled     = 5
          OTHERS               = 6.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.

      LOOP AT lt_tpool ASSIGNING <tpool>.
        IF <tpool>-id = 'I' AND <tpool>-entry CP p_text.
          WRITE: <object>-obj_name, <tpool>-key, <tpool>-entry.
        ENDIF.
      ENDLOOP.
    ENDIF.

  ENDLOOP.

END-OF-SELECTION.

  WRITE: / 'Search completed:', p_text.

Так вот, сервис может пояснить за код, лучше чем я:

(more…)

Есть в ABAP кое-какие языковые конструкции, отсутствующие в топовых языках, по крайней мере на базовом уровне, например MOVE-CORRESPONDING.

VARYING – это одна из таких конструкций. Я изредка использовал её в базовом варианте:

DATA: BEGIN OF ls_varstr,
        cod01 TYPE char20,
        cod02 TYPE char20,
        cod03 TYPE char20,
        cod04 TYPE char20,
      END OF ls_varstr.

ls_varstr = VALUE #(
  cod01 = '001'
  cod02 = '002'
  cod03 = '003'
  cod04 = '004'
).

DATA: lv_code  TYPE char20.

DO 4 TIMES VARYING lv_code FROM ls_varstr-cod01  NEXT ls_varstr-cod02.

  WRITE: / lv_code.

ENDDO.

Результат предсказуем:

Но как иногда оказывается, у этой конструкции есть две дополнительных глубины.

Во-первых, можно крутить два поля одновременно:

DATA: BEGIN OF ls_varstr,
        cod01 TYPE char20,
        val01 TYPE char100,
        cod02 TYPE char20,
        val02 TYPE char100,
        cod03 TYPE char20,
        val03 TYPE char100,
        cod04 TYPE char20,
        val04 TYPE char100,
      END OF ls_varstr.

ls_varstr = VALUE #(
  cod01 = '001' val01 = 'First'
  cod02 = '002' val02 = 'Second'
  cod03 = '003' val03 = 'Third'
  cod04 = '004' val04 = 'Fofth'
).

DATA: lv_code  TYPE char20.
DATA: lv_value TYPE char100.

DO 4 TIMES
   VARYING lv_code FROM ls_varstr-cod01  NEXT ls_varstr-cod02
   VARYING lv_value FROM ls_varstr-val01  NEXT ls_varstr-val02.

  WRITE: / lv_code, '=', lv_value .

ENDDO.

И оказывается так тоже можно, результат не удивит:

А во-вторых, поля в последовательности могут называться как угодно.

Мне раньше казалось, что нумерация в поле очень важна: VAL01, VAL02. Магия! А вот нет. Так тоже можно:

DATA: BEGIN OF ls_varstr,
        first         TYPE char20,
        second        TYPE char20,
        i-do-not-know TYPE char20,
        wtf           TYPE char20,
      END OF ls_varstr.

ls_varstr = VALUE #(
  first         = '001'
  second        = '002'
  i-do-not-know = '003'
  wtf           = '004'
).

DATA: lv_code  TYPE char20.

DO 4 TIMES VARYING lv_code FROM ls_varstr-first  NEXT ls_varstr-second.

  WRITE: / lv_code.

ENDDO.

Если чуть подумать, то станет всё понятнее, как оно было заложено и почему. Могу проиллюстрировать на менее интуитивно понятном примере:

DATA: BEGIN OF ls_varstr,
        cod01     TYPE char20,
        val01     TYPE char100,
        cod02     TYPE char20,
        val02     TYPE char100,
        cod03     TYPE char20,
        val03     TYPE char100,
        cod04     TYPE char20,
        val04     TYPE char100,

        other     TYPE text60,
        fields    TYPE text60,
      END OF ls_varstr.

ls_varstr = VALUE #(
  cod01 = '001' val01 = 'First'
  cod02 = '002' val02 = 'Second'
  cod03 = '003' val03 = 'Third'
  cod04 = '004' val04 = 'Fofth'

  other     = 'Other~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
  fields    = 'Fields~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
).

DATA: lv_code  TYPE char20.
DATA: lv_value TYPE char100.

DO 5 TIMES
   VARYING lv_code FROM ls_varstr-cod01  NEXT ls_varstr-cod02
   VARYING lv_value FROM ls_varstr-val01  NEXT ls_varstr-val02.

  WRITE: / lv_code, '=', lv_value .

ENDDO.

Обратите внимание на DO 5 TIMES. Ха-ха? Знаете что произойдёт?

(more…)

Я раньше думал, что сами-знаете-кого не стоит слушать, потому что они лгут (что их там нет, она утонула, если бы хотели отравить, про пенсии, про мобилизацию и тому подобное).

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

Потихоньку, пока дети растут, я начал понимать несостоятельность такой аналогии.

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

Я сам часто говорю сам своей двухлетней дочери, что:

  • мы идём гулять (а не в поликлинику)
  • больно от укольчика не будет
  • надо выпить вкусный сиропчик, тогда животик сразу пройдёт
  • микробы сейчас на тебя ка-а-ак нападут (и я вам покажу откуда)
  • это самая вкусная каша на свете
  • этот дяденька очень плохой
  • это только для взрослых
  • пульт потерялся
  • если много смотреть мультики, то можно стать зомби
  • кукла Маша по тебе скучает
  • зайчик хочет спать
  • папа устал

… и тому подобное, и так далее до бесконечности.

Ну как до бесконечности… пока не подрастёт и не начнёт соображать сама.

Разве это ложь?

(more…)