1. Куча / Говнокод #23913

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    #!/usr/bin/env escript
    %% -*- erlang -*-
    %%! -smp enable -debug verbose
    
    -include_lib("xmerl/include/xmerl.hrl").
    
    -export([main/1, install_mod/1]).
    
    -record(mod_info, { name  :: string()
                      , links :: [{file:filepath(), file:filepath()}]
                      }).
    
    main(Args) ->
        [ModeDir, GameDir] = Args,
        VirtualInstall = filename:absname(ModeDir ++ "/VirtualInstall/"),
        RealPath = filename:absname(GameDir),
        VirtualModCfg = VirtualInstall ++ "/VirtualModConfig.xml",
        io:format( "Mode dir: ~p~n"
                   "Install dir: ~p~n"
                   "Current dir: ~p~n"
                 , [VirtualInstall, RealPath, element(2, file:get_cwd())]),
        {Doc, []} = xmerl_scan:file(VirtualModCfg),
        Mods = get_mods(VirtualInstall, RealPath, Doc),
        [install_mod(I) || I <- Mods],
        ok.
    
    get_mods(VirtPath, RealPath, Doc) ->
        [ #mod_info
              { name  = xpath("/modInfo/@modName", Mod)
              , links = get_links(VirtPath, RealPath, Mod)
              }
          || Mod <- xmerl_xpath:string( "/virtualModActivator/modList/modInfo"
                                      , Doc)].
    
    get_links(VirtPath, RealPath, Doc) ->
        [{ filename:absname( unixify(xpath("/fileLink/@realPath", FL))
                           , VirtPath)
         , filename:absname( unixify(xpath("/fileLink/@virtualPath", FL))
                           , RealPath)
         }
         || FL <- xmerl_xpath:string( "//fileLink[isActive = 'True']"
                                    , Doc)].
    
    xpath(Query, Doc) ->
        case xmerl_xpath:string(Query, Doc) of
            [#xmlAttribute{value = Val}] ->
                Val
        end.
    
    unixify(Path) ->
        lists:map(
          fun($\\) -> $/;
             (A)   -> A
          end,
          Path).
    
    install_mod(#mod_info{name = Name, links = Links}) ->
        io:format("Installing ~s...~n", [Name]),
        lists:foreach(
          fun({From, To}) ->
                  filelib:ensure_dir(To),
                  file:make_symlink(From, To)
          end,
          Links).

    CHayT, 12 Марта 2018

    Комментарии (8)
  2. Куча / Говнокод #23908

    +6

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    https://www.opennet.ru/opennews/art.shtml?num=48234
    
    Создатели редактора кода Atom из компании GitHub развивают новый
    экспериментальный текстовый редактор Xray, который также построен
    с использованием фреймворка Electron, но примечателен тем, что для
    повышения надёжности и производительности ядро редактора с
    реализацией базовой логики написано на языке Rust, интерфейс
    оформлен на JavaScript/CSS с применением фреймворка React, а для
    отрисовки текста применяется WebGL.

    Чем вообще руководствуются люди, делающие IDE из кусков браузера? Нахрена там JavaScript/CSS, нахрена там React? Еще и Rust приплели зачем-то.
    Может это чтоб всякие фронтенд-разрабы возрадовались, потому что теперь их умение писать хуиту на жабаскрипте применимо для написания говноплагинов к этой хуите? А как же бекенд? Пусть дополнительно встроят туда PHP MySQL чтоб никто не ушел обиженным.

    j123123, 11 Марта 2018

    Комментарии (270)
  3. Куча / Говнокод #23901

    −7

    1. 1
    Ещё один тред обсуждения несбыточного мифического «нового ГК»

    Такие мысли появиласть в результате флеймов с 1024-- и вообще.

    На новом говнокоде вместо модерации должены быть:
    1. Механизм скрыльничества на уровне сайта/api
    2. Как на имиджбордах, все посты и комменты должны подчищаться из базы после определенного скрока давности, чтобы не нужно было вмешательство никаких админов и модераторов. Это хорошо решает проблему любых набегов. Но некоторые посты пользователи могут пометить как важные, которые не следует удалять. Для этого они должны выразить такое желание в явной форме, например, нажимая на кнопку «cохранить». Проблема в том, что ботоводы могут сохранять свои комменты и посты скриптами, поэтому нужно ввести хорошую капчу и какой-то сложно вычислимый DRM, вычисляя который ты приносишь пользу новому ГК в любой форме. Это либо вычисление биткоинов на кошелёк, с которого оплачивается хостинг, либо ещё какая-то форма принесения пользы сообществу. Вот об этом и предлагаю поговорить: в каких формах вообще можно принести пользу ГК, так, чтобы для оценки пользы и подтверждения факта принесения пользы не требовалось вмешательство модераторов и админов?

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

    vistefan, 08 Марта 2018

    Комментарии (220)
  4. Куча / Говнокод #23876

    +1

    1. 1
    2. 2
    3. 3
    Баг в railroad diagram, описывающей strling literal в JS (из книги Крокфорда Javascript: The Good Parts).
    
    https://i.imgur.com/8QFMrIQ.png

    Эквивалентно регулярке
    (\"([^\"^\\]|\\([\"\'\\\/bfnrt]|u[\d]{4}))*[^\"^\\]+\"|\'([^\'^\\]|\\([\"\'\\\/bfnrt]|u[\d]{4}))*[^\'^\\]+\')

    Ставить [ code ] боюсь, парсер уже починился?
    Ну, в общем, видно, что при таком раскладе, как на диаграмме, строковой литерал не может заканчиваться эскейп-последовательностью, что в действительности не так. Классический случай "something\n".

    vistefan, 06 Марта 2018

    Комментарии (214)
  5. Куча / Говнокод #23864

    +9

    1. 1
    Argument type mismatch

    Assertion failed

    Exception, 04 Марта 2018

    Комментарии (25)
  6. Куча / Говнокод #23861

    0

    1. 1
    https://habrahabr.ru/post/348744/

    Обнаружен пидар.

    subaru, 03 Марта 2018

    Комментарии (20)
  7. Куча / Говнокод #23856

    −2

    1. 1
    Что за браузер?

    AntiUeban, 03 Марта 2018

    Комментарии (3)
  8. Куча / Говнокод #23825

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Whether or not you check in your Pods folder is up to you, as workflows vary from project to project. We recommend that you keep the Pods directory under source control, and don't add it to your .gitignore
    
    Benefits of checking in the Pods directory
    
        After cloning the repo, the project can immediately build and run, even without having CocoaPods installed on the machine. There is no need to run pod install, and no Internet connection is necessary.
        The Pod artifacts (code/libraries) are always available, even if the source of a Pod (e.g. GitHub) were to go down.
        The Pod artifacts are guaranteed to be identical to those in the original installation after cloning the repo.

    https://guides.cocoapods.org/using/using-cocoapods.html

    Desktop, 25 Февраля 2018

    Комментарии (99)
  9. Куча / Говнокод #23823

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    let src1 = r#"
            __kernel void add1(__global float* A, __global float* BBB, __global float* B, int m, int n) 
            {
                __local float Blo[64];
                int x = get_local_id(0);
                int y = get_local_id(1);
                int i = get_global_id(0);
                int j = get_global_id(1);
                int k = get_global_id(2);
                i += k / 8;
                j += k % 8;
    
                if (i >= n || j >= m) return;
    
    
                Blo[x * 8 + y] = A[i * m + j];
    
    
    
    
                barrier(CLK_LOCAL_MEM_FENCE);
    
                float BB = 0;
    
                for (int xx = 0; xx < 8; ++xx)
                    for (int yy = 0; yy < 8; ++yy)
                    {
        
                            float c = (2 * xx + 1) * x * 3.1415926535 / 16;
                            float cc = (2 * yy + 1) * y * 3.1415926535 / 16;
                            c = cos(c);
                            cc = cos(cc);
                            BB += Blo[xx * 8 + yy] * c * cc;
    
                    }
    
                float Ci, Cj;
                if (x == 0)
                    Ci = 1 / 1.4142135623;
                else
                    Ci = 1;
    
                if (y == 0)
                    Cj = 1 / 1.4142135623;
                else
                    Cj = 1;
                B[k * m * n + i * m + j] = Ci * Cj / 4 * BB;
    
                barrier(CLK_LOCAL_MEM_FENCE);
    
                i = get_global_id(0);
                j = get_global_id(1);
    
                float summ = 0;
                for (int ii = 0; ii < 64; ++ii)
                    summ += B[ii * m * n + i * m + j];
                BBB[i * m + j] = summ / 64;
                
            }
        "#;
    
    
    let pro_que = ProQue::builder().src(src1).dims((hi, wi, 64)).build().unwrap();
    
    
       let matr11 = Buffer::builder()
            .queue(pro_que.queue().clone())
            .flags(MemFlags::new().read_only().use_host_ptr())
            .dims((hi, wi))
            .host_data(&Resr)
            .build().unwrap();
    
            let matg11 = Buffer::builder()
            .queue(pro_que.queue().clone())
            .flags(MemFlags::new().read_only().use_host_ptr())
            .dims((hi, wi))
            .host_data(&Resg)
            .build().unwrap();
    
    ...
    
        let mut kernel;
        {
                let wi = wi as i32;
                let hi = hi as i32;
                kernel = pro_que.create_kernel("add1").unwrap().arg_buf(&matr11).arg_buf(&resr11).arg_buf(&bor1).arg_scl(wi).arg_scl(hi);
                kernel.lws((8, 8)).enq().unwrap();
                kernel = pro_que.create_kernel("add1").unwrap().arg_buf(&matg11).arg_buf(&resg11).arg_buf(&bog1).arg_scl(wi).arg_scl(hi);
                kernel.lws((8, 8)).enq().unwrap();
                kernel = pro_que.create_kernel("add1").unwrap().arg_buf(&matb11).arg_buf(&resb11).arg_buf(&bob1).arg_scl(wi).arg_scl(hi);
                kernel.lws((8, 8)).enq().unwrap();
        }

    Ничего особенного, лаба по opencl, написанная на Rustе

    gorthauer87, 24 Февраля 2018

    Комментарии (8)
  10. Куча / Говнокод #23804

    0

    1. 1
    2. 2
    3D-движок, написанный на формулах MS Excel
    https://habrahabr.ru/post/348704/

    inho, 20 Февраля 2018

    Комментарии (15)