Очень жаль, хоть и ожидаемо.
Ковид, его побочки, война и инфляция — четыре всадника нашего очередного апокалипсиса.
(далее…)против Энтропии
Очень жаль, хоть и ожидаемо.
Ковид, его побочки, война и инфляция — четыре всадника нашего очередного апокалипсиса.
(далее…)Сегодня пытался вспомнить, когда бросил курить. Не помню.
Если верить записи: 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.
Ну допустим, я показал ему текст некоторой программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
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. |
Так вот, сервис может пояснить за код, лучше чем я:
(далее…)Есть в ABAP кое-какие языковые конструкции, отсутствующие в топовых языках, по крайней мере на базовом уровне, например MOVE-CORRESPONDING.
VARYING — это одна из таких конструкций. Я изредка использовал её в базовом варианте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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. |
Результат предсказуем:
Но как иногда оказывается, у этой конструкции есть две дополнительных глубины.
Во-первых, можно крутить два поля одновременно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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. Магия! А вот нет. Так тоже можно:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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. |
Если чуть подумать, то станет всё понятнее, как оно было заложено и почему. Могу проиллюстрировать на менее интуитивно понятном примере:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
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. Ха-ха? Знаете что произойдёт?
(далее…)Недавно упомянули эту шутку в одном моём любимом подкасте, загуглил ответ, для меня открылись бездны смысла.
Для того, чтобы корова меньше ела и давала больше молока, (далее…)
Я раньше думал, что сами-знаете-кого не стоит слушать, потому что они лгут (что их там нет, она утонула, если бы хотели отравить, про пенсии, про мобилизацию и тому подобное).
Это вроде как вслушиваться в слова звонящего вам мошенника, который уверяет, что он следователь, что ваши деньги в опасности и их срочно необходимо защитить, перечислив на специальный защищённый счёт.
Потихоньку, пока дети растут, я начал понимать несостоятельность такой аналогии.
Сами-знаете-кто говорят такое, просто чтобы им было удобнее делать то, что они планировали, чтобы внимающие им поменьше шумели и привлекали к себе внимание, а окружение при этом считало бы их приличными людьми.
Я сам часто говорю сам своей двухлетней дочери, что:
… и тому подобное, и так далее до бесконечности.
Ну как до бесконечности… пока не подрастёт и не начнёт соображать сама.
Разве это ложь?
Ищу. Система же умная, подсказывает:
Профессионалы фигнёй не занимаются, очевидно.
PS. Удивительно, как личная текущая ситуация влияет на восприятие окружающей действительности. Мир всегда сложнее и разнообразнее, чем нам кажется.
В пробке может прибежать мысль:
Ведь я по делу еду, а вы все куда? Почему вам дома/на работе не сидится?
Не все знают, но не обязательно писать Z-программы. Подсказываю: можно вместо этого писать и Y-программы во избежание чего-бы-то-ни-было.
Частичная означает «на пол-шишечки».