1. JavaScript / Говнокод #27350

    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
    type User = {
        status: 'lamer' | 'junior' | 'govnokoder';
        login: string;
        iq: number;
    }
    
    type ChangeListener<T, K extends keyof T> = {
        name: `${K & string}_Listener`;
        on(newValue: T[K])
    }
    
    const UserIqListener: ChangeListener<User, 'iq'> = {
        name: "iq_Listener", //ничто другое не скомпилируется
        on(event: number) { //понятно, что string тут не скомпилируется
        }
    }
    const UserStatusListener: ChangeListener<User, 'status'> = {
        name: "status_Listener",
        on(newValue: User["status"]) {
            switch (newValue) {
                case "govnokoder": { //понятно, что неверный тип тут не скомпилируется
    
                }
            }
        }
    
    }

    Почему у нас нет "TypeScript"?

    MAKAKA, 11 Апреля 2021

    Комментарии (38)
  2. JavaScript / Говнокод #27342

    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
    function validateUSDate( strValue ) 
    {
    	  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
    	  if(!objRegExp.test(strValue))
    	    return false; //doesn't match pattern, bad date
    	  else
    	  {
    	    var strSeparator = strValue.substring(2,3); //find date separator
    	    var arrayDate = strValue.split(strSeparator); //split date into month, day, year
    	    //create a lookup for months not equal to Feb.
    	    var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,
    	                        '08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31};
    	    var intDay = (arrayDate[1]);
    	
    	    //check if month value and day value agree
    	    if(arrayLookup[arrayDate[0]] != null) 
    	    {
    	      if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)
    	        return true; //found in lookup table, good date
    	    }
    	    //check for February
    	    var intYear = parseInt(arrayDate[2]);
    	    var intMonth = parseInt(arrayDate[0]);
    	    if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
    	      return true; //Feb. had valid number of days
    	  }
    	  return false; //any other values, bad date
    }

    А вот этот шедевр ещё и работает...

    kropotor, 08 Апреля 2021

    Комментарии (0)
  3. JavaScript / Говнокод #27341

    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
    function isNumeric(str)      //for non-numeric fields
    {
    	var FlagS=0, FlagN=0;
    	var str1=new Array();
    	
    	for(var i=0;i<str.length;i++) //convert string to a char array
    	{
    		str1[i]=str.charAt(i);
    	}	
    	for(i=0;i<str1.length;i++)   //check for digits
    	{
    		if(str1[i]>='0'&&str1[i]<='9' ) 
    		{
    			FlagN=1;
    		}
    	}
    	if(FlagS==1||FlagN==1) 		//give a final decision
    	{ 
    		FlagS=FlagN=0;
    		return true;
    	}
    }

    Красота по-индийски. FlagS не понадобился, ну и хер с ним :)

    kropotor, 08 Апреля 2021

    Комментарии (73)
  4. JavaScript / Говнокод #27310

    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
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    $(".reg_button").on("click", function(){
        console.log("hello world jquery");
        $(".main").css("display", "none");
        $(".register-main").css("display", "block");
        $(`input[type="text"]`).css("width", "14vw");
        $(`input[type="password"]`).css("width", "14vw");
        $(`input[type="email"]`).css("width", "14vw");
         // Обработка нажатия на кнопку регистрации
    });
    const recovery = {
      login: "",
      email: "",
    }
    const regExp = {
      login: /^[a-z0-9_-]{5,20}$/,
      pass: /^[A-Za-z0-9_-]{6,16}$/,
      email: /^[A-Z0-9._%+-][email protected][A-Z0-9-]+.+.[A-Z]{2,4}$/i,
    }
    const state = {
      reg: {
        login: "",
        pass: "",
        email: "",
        agreement: ""
      },
      auth: {
        login: "",
        pass: "",
        agreement: false
      }
      }
    $(".back").on("click", function() {
        $(".register-main").css("display", "none");
        $(".main").css("display", "flex");
        $(`input[type="text"]`).css("width", "21.5vw");
        $(`input[type="password"]`).css("width", "21.5vw");
        // Обработка нажатия на кнопку "Назад"
    });
    $(".auth_forgotPassword").on("click", function() {
      console.log("Система восстановления пароля в разработке.")
     /* $(".main").css("display", "none");
      $(".recovery").css("display", "block");
      $(".recovery-step-one").css("display", "block");
      $(`input[type="text"]`).css("width", "14vw");
      $(`input[type="password"]`).css("width", "14vw"); */
    })
    $(".recovery-back").on("click", function() {
      $(".recovery").css("display", "none");
      $(".recovery-step-one").css("display", "none");  
      $(".main").css("display", "flex");                 // кнопка назад, в восстановления пароля.
      $(`input[type="text"]`).css("width", "21.5vw");
      $(`input[type="password"]`).css("width", "21.5vw");
    })
    $(".recovery-back2").on("click", function() {
      $(".recovery-step-two").css("display", "none");
      $(".recovery").css("display", "block");     
      $(".recovery-step-one").css("display", "block");                  // кнопка назад, в восстановления пароля.
      $(`input[type="text"]`).css("width", "14vw");
      $(`input[type="password"]`).css("width", "14vw");
    })
    // $(".recovery-button").on("click", function() {
      /*recovery.login = $(".step_login").val()
      recovery.email = $(".step_email").val()
      alt.emit("click:recovery")
      if(recovery.login == "" || recovery.email == "" )
      {
        console.log("Необходимые поля пустые!")
      }
      else {
      alt.on("recovery-step-two", (args) => {
      if(args == true) {
        $(".recovery-step-one").css("display", "none");
        $(".recovery-step-two").css("display", "block");
      }
      else {
        console.log("Введены неверные данные или аккаунта с такой почтой не существует.")
      }
      })
      }
      */
    // })
    $(".recovery_button2").on("click", function() {
      $(".recovery-step-two").css("display", "none");
      $(".recovery-step-three").css("display", "block");
    })
    $('.button-wrap').on("click", function(){
      $(this).toggleClass('button-active');
      if ($(this).hasClass('button-active')) {
        localStorage.checkbox = 1
        
      } else {
        localStorage.checkbox = 0
      }
      console.log(localStorage.checkbox)
    });
    $(".confirm-back2").on("click", () => {
      $(".authentication").css("display", "none");

    Логика работы меню авторизации :)
    Собственно первая моя верстка была, как и использование jquery)

    Seagate, 22 Марта 2021

    Комментарии (5)
  5. JavaScript / Говнокод #27300

    0

    1. 1
    2. 2
    3. 3
    // These are equivalent:
    fn`some string here`;
    fn(['some string here']);

    Джаваскриптеры переизобрели руби (ладно-ладно, скрестили с FormattableString из шарпа)

    https://styled-components.com/docs/advanced#tagged-template-literals

    Fike, 16 Марта 2021

    Комментарии (13)
  6. JavaScript / Говнокод #27299

    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
    // Since styled-components allows you to use arbitrary input as interpolations, you must be careful to sanitize that input.
    // Using user input as styles can lead to any CSS being evaluated in the user's browser that an attacker can place in your application.
    
    // This example shows how bad user input can even lead to API endpoints being called on a user's behalf.
    
    // Oh no! The user has given us a bad URL!
    const userInput = '/api/withdraw-funds'
    
    const ArbitraryComponent = styled.div`
      background: url(${userInput});
      /* More styles here... */
    `

    в процессе многолетнего пересоздания ruby on rails с нуля фронтендеры умудрились accidentally a bottle of injections

    https://styled-components.com/docs/advanced#security

    Fike, 16 Марта 2021

    Комментарии (60)
  7. JavaScript / Говнокод #27288

    +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
    function main() {
        print("Hello", 1, false, true, parseInt("01"), parseFloat("00.1"));
    }
    
    // ASM
    ; ModuleID = 'LLVMDialectModule'
    source_filename = "LLVMDialectModule"
    target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-pc-windows-msvc"
    
    @__true__ = internal constant [5 x i8] c"true\00"
    @__false__ = internal constant [6 x i8] c"false\00"
    @frmt_9481649210695450612 = internal constant [19 x i8] c"%s %d %s %s %d %f\0A\00"
    @s_3144841719139014728 = internal constant [5 x i8] c"00.1\00"
    @s_12300967985959445949 = internal constant [3 x i8] c"01\00"
    @s_1772061916968062023 = internal constant [6 x i8] c"Hello\00"
    
    declare i8* @malloc(i64)
    
    declare void @free(i8*)
    
    declare i32 @printf(i8*, ...)
    
    declare float @atof(i8*)
    
    declare i32 @atoi(i8*)
    
    define void @main() !dbg !3 {
      %1 = call i32 @atoi(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @s_12300967985959445949, i64 0, i64 0)), !dbg !7
      %2 = call float @atof(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @s_3144841719139014728, i64 0, i64 0)), !dbg !9
      %3 = fpext float %2 to double, !dbg !10
      %4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @frmt_9481649210695450612, i64 0, i64 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @s_1772061916968062023, i64 0, i64 0), i32 1, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @__false__, i64 0, i64 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @__true__, i64 0, i64 0), i32 %1, double %3), !dbg !10
      br label %5, !dbg !11
    
    5:                                                ; preds = %0
      ret void, !dbg !11
    }
    
    !llvm.dbg.cu = !{!0}
    !llvm.module.flags = !{!2}

    Продолжение писания уе..(зачеркнуто) супер компилятора с TypeScript (JavaScript) в нативный код.

    как обычно компилим просто

    set LIBPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\SDK\ScopeCppSDK\vc 15\VC\lib
    set SDKPATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\SDK\ScopeCppSDK\vc 15\SDK\lib
    tsc.exe --emit=llvm C:\temp\1.ts 2>1.ll
    llc.exe --filetype=obj -o=out.o 1.ll
    lld.exe -flavor link out.o "%LIBPATH%\libcmt.lib" "%LIBPATH%\libvcruntime.lib" "%SDKPATH%\kernel32.lib" "%SDKPATH%\libucrt.lib" "%SDKPATH%\uuid.lib"

    получаетм Ехе и грузим его. и результат

    =====================================
    и выполнение

    C:\>out.exe
    Hello 1 false true 1 0.100000

    ASD_77, 09 Марта 2021

    Комментарии (33)
  8. JavaScript / Говнокод #27274

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    var object = {a: 123, b:"abc"};
    var newObject = ko.observableProps(object);
    newObject.a(345);
    newObject.b("def");
    
    newObject.a(); => 345
    newObject.b(); => "def"

    Ко-ко-ко-ко-ко-обсервабле

    3_dar, 27 Февраля 2021

    Комментарии (4)
  9. JavaScript / Говнокод #27272

    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
    93. 93
    94. 94
    95. 95
    var utils = require('util');
    
    module.exports = class Client {
        constructor(Socket) {
    
            this.Socket = Socket;
            this.TLSSocket = require('tls');
            this.XmlParser = new require('xml2js').Parser();
            this.XmlBuilder = require('xmlbuilder');
            this.Client = this;
            this.Authorized = false;
            this.OnlineId = '1';
            this.Socket.on('data', (Packet) => this.OnData(Packet));
            this.Player = null;
            this.Status = 0;
        }
    // Авторизация.
        OnData(Packet) {
            if (Packet[0] == 0xad || Packet[1] == 0xde || Packet[2] == 0xed || Packet[3] == 0xfe) {
                var PacketBuffer = Buffer.alloc(Number(Packet.readBigInt64LE(4)));
                Packet.copy(PacketBuffer, 0, 12);
                var Query = PacketBuffer.toString();
                console.log('[CLIENT] ',Query);
                this.XmlParser.parseString(PacketBuffer.toString(), (err, result) => {
                    if (result) 
                    {
                        if (result.starttls && !this.TLSSocket.Authorized && !this.Authorized) {
                            this.Send(this.XmlBuilder.create({
                                proceed: {
                                    '@xmlns': 'urn:ietf:params:xml:ns:xmpp-tls'
                                }
                            }, {
                                    headless: true
                                }).end({
                                    pretty: false
                                }));
                            this.TLSSocket = new this.TLSSocket.TLSSocket(this.Socket, {
                                cert: global.Cert,
                                key: global.CertKey,
                                ca: global.CertBundle,
                                minVersion: 'TLSv1',
                                isServer: true
                            })
                            this.TLSSocket.once('secure', () => {
                                this.TLSSocket.Authorized = true;
                                console.log('TLS Connection established!');
                            });
                            this.TLSSocket.on('data', (Packet)=>this.OnData(Packet));
    
                        }
                        else if (result.iq && result.iq.bind) {
                            this.Send(this.XmlBuilder.create({
                                iq: {
                                    '@id': result.iq.$.id,
                                    '@type': 'result',
                                    bind: {
                                        '@xmlns': 'urn:ietf:params:xml:ns:xmpp-bind',
                                        jid: this.OnlineId
                                    }
                                }
                            }, {
                                headless: true
                            }).end({
                                pretty: false
                            }));
                        } else if (result.iq && result.iq.session) {
                            this.Send(this.XmlBuilder.create({
                                iq: {
                                    '@id': result.iq.$.id,
                                    '@type': 'result',
                                    '@to': this.OnlineId,
                                    session: {
                                        '@xmlns': 'urn:ietf:params:xml:ns:xmpp-session'
                                    }
                                }
                            }, {
                                headless: true
                            }).end({
                                pretty: false
                            }));
                        }
                        else if (result.iq && result.iq.query) {
    
                            var QueryName = Object.keys(result.iq.query[0]).filter(function (str) {
                                return str != '_' && str != '$'
                            })[0];
    
                            var QueryFunction = global.PacketFactory[QueryName];
    
                            if (QueryFunction) {
                                var Stanza = result.iq.query[0][QueryName][0];
    
                                console.log(`\x1b[32mQueryname: ${QueryName} ${utils.inspect(Stanza.$)}\x1b[0m`);
                                global.PacketFactory[QueryName].handle(this, Stanza, result.iq.$.to, result.iq.$.id);
                            }

    Nodejs вход пользователя

    Seagate, 25 Февраля 2021

    Комментарии (16)
  10. JavaScript / Говнокод #27265

    +2

    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
    function main()
    {
    	f1();
    }
    
    function f1(a = 10)
    {    
        return a;
    }
    
    // code for 1
    
    module @"1.ts"  {
      func @main() {
        %c0_i32 = constant 0 : i32
        %0 = typescript.undef : i32
        %1 = call @f1(%c0_i32, %0) : (i32, i32) -> i32
        return
      }
      func private @f1(%arg0: i32, %arg1: i32) -> i32 attributes {OptionalFrom = 1 : i8} {
        %c10_i32 = constant 10 : i32
        %c1_i32 = constant 1 : i32
        %0 = alloca() : memref<i32>
        %1 = cmpi ult, %arg0, %c1_i32 : i32
        %2 = scf.if %1 -> (i32) {
          scf.yield %c10_i32 : i32
        } else {
          scf.yield %arg1 : i32
        }
        store %2, %0[] : memref<i32>
        %3 = load %0[] : memref<i32>
        return %3 : i32
      }
    }
    
    // code for 2
    
    ; ModuleID = 'LLVMDialectModule'
    source_filename = "LLVMDialectModule"
    target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
    target triple = "x86_64-pc-windows-msvc"
    
    declare i8* @malloc(i64)
    
    declare void @free(i8*)
    
    define void @main() !dbg !3 {
      %1 = call i32 @f1(i32 0, i32 undef), !dbg !7
      ret void, !dbg !9
    }
    
    define i32 @f1(i32 %0, i32 %1) !dbg !10 {
      %3 = alloca i32, i64 ptrtoint (i32* getelementptr (i32, i32* null, i64 1) to i64), align 4, !dbg !11
      %4 = insertvalue { i32*, i32*, i64 } undef, i32* %3, 0, !dbg !11
      %5 = insertvalue { i32*, i32*, i64 } %4, i32* %3, 1, !dbg !11
      %6 = insertvalue { i32*, i32*, i64 } %5, i64 0, 2, !dbg !11
      %7 = icmp ult i32 %0, 1, !dbg !11
      br i1 %7, label %8, label %9, !dbg !11
    
    8:                                                ; preds = %2
      br label %10, !dbg !11
    
    9:                                                ; preds = %2
      br label %10, !dbg !11
    
    10:                                               ; preds = %8, %9
      %11 = phi i32 [ %1, %9 ], [ 10, %8 ]
      br label %12, !dbg !11
    
    12:                                               ; preds = %10
      %13 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
      store i32 %11, i32* %13, align 4, !dbg !11
      %14 = extractvalue { i32*, i32*, i64 } %6, 1, !dbg !11
      %15 = load i32, i32* %14, align 4, !dbg !11
      ret i32 %15, !dbg !13
    }

    История о том как я компайлер писал. (предисторию знают думаю все). Посмотрите на код и сравните с ужасным кодом на С. Это простенький javascript который тоже може быть скомпиленным в исполняемый год. а что для этого надо. просто несколько шагов.

    1) компилим код через чудо компилятор tsc.exe --emit=mlir-affine c:\1.ts



    а дальше может получить LLVM IL который можно компилировать

    2) компилим код через чудо компилятор tsc.exe --emit=mlir-llvm c:\1.ts



    а далее компилим код

    llc.exe --filetype=obj -o=out.o 1.ll


    запускаем a.exe

    и оно работает :)

    ASD_77, 19 Февраля 2021

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