На Code.org у детей не сохранилась домашняя работа: кончился 32-битный индекс


    Задание из вступительного курса «Введение в информатику» на платформе Code Studio

    Сайт для обучения программированию Code.org попал в неловкую ситуацию. Из-за «технических проблем» на платформе Code Studio утром 20 января с 9:19 до 10:33 PST работы школьников по программированию — весь написанный код и другие действия на сайте — не удалось сохранить.

    Технический директор образовательного сайта Джереми Стоун (Jeremy Stone) оперативно опубликовал объяснение произошедшего: «До нынешнего времени мы хранили работы по программированию учеников в таблице с 32-битным индексом, — написал он. — Эта база данных может хранить только 4 млрд строк информации об активности. Мы не осознавали, что приближаемся к этому лимиту, и таблица заполнилась».

    «Сейчас мы сделали новую таблицу активности студентов, которая сохраняет учебный прогресс. С новой таблицей мы перешли на 64-битный индекс, который позволяет хранить до 18 квинтиллионов строк информации, — объяснил технический директор. — Положительной стороной является то, что новая таблица сможет хранить информацию об учебных работах миллионы лет».

    Из-за проблемы с переносом данных сайт вообще на некоторое время ушёл в офлайн, что могло обеспокоить 16 миллионов учеников, которые проходили там задания и сохраняли результаты. Позже учебная платформа по программированию вернулась в строй с частично восстановленными данными.

    Администрация пояснила, что код, созданный между 9:19 до 10:33 PST, сохранить не получилось, он потерян безвозвратно. Кроме того, на время переноса данных из старой таблицы в новую некоторый сохранённый ранее код был временно недоступен. Но в течение суток программисты Code.org закончили перенос данных, и вся сохранённая информация пользователей снова появилась в их аккаунтах.

    Code.org — некоммерческая организация и сайт, который помогает школьникам и другим начинающим ученикам освоить основы программирования. На сайте размещена бесплатные уроки программирования. Сайт открылся в январе 2013 года с первоначальной целью составить каталог компьютерных курсов в школах США. Основатель проекта Хади Партови (Hadi Partovi) тогда заметил, что в 90% американских школ вообще не преподаётся программирование, хотя это «фундаментальная дисциплина». Инициатива получила всеобщую поддержку. В феврале 2013 года в рекламе Code.org снялись Билл Гейтс, Марк Цукерберг, Джек Дорси и другие программисты и предприниматели — все они говорили, как важно научиться программировать.

    В декабре 2013 года Code.org запустил общенациональный конкурс Hour of Code Challenge, в котором предлагалось принять участие всем студентам и школьникам страны. Участники решали простые задачки на программирование: нужно было написать небольшой фрагмент кода на визуальном «детском» языке программирования Blocky, чтобы достичь поставленной цели. После запуска конкурса в нём поучаствовал даже тогдашний президент США Барак Обама, а также руководители крупнейших ИТ-компаний, в том числе Microsoft и Apple. В общей сложности около 20 млн участников написали более 600 млн строк кода.

    Поскольку в большинстве школ отсутствовали уроки программирования, организаторы Code.org начали решать эту проблему. С 2014 года там открылись курсы программирования, в которых могла участвовать любая школа. К 2017 году обучение на Code.org прошли более 51 тыс. учителей информатики. Были заключены партнёрские соглашения со 120 учебными округами и множеством школ на обучение школьников на сайте Code.org. По опросу учителей, 99% из них рекомендуют вступительный курс «Введение в информатику» (20-часовые курсы по основам информатики для всех возрастов, доступны на русском языке).

    По текущей статистике, на учебной платформе Code Studio зарегистрированы 506 546 учителей информатики и 16 472 129 учеников.

    Сейчас организаторы национальной американской программы ставят перед собой цель устранить неравенство в информатике: привлечь в программирование девочек и меньшинства (афроамериканцев и латиноамериканцев), добавить информатику во все 12-е классы американских школ и заставить власти всех 50 штатов признать информатику базовым учебным предметом (20 штатов уже сделали это). Code.org теперь вышел за пределы Америки: сейчас курсы программирования доступны на 45 языках мира, в том числе на русском.


    Наверное, когда проект создавали в 2013 году, организаторы не рассчитывали на такую популярность, поэтому изначально спроектировали 32-битный индекс для учебной платформы. Мол, 4 млрд строк должно быть достаточно для каждого.

    Если посмотреть на эту проблему философски, то 20 января 2017 года ученики на курсах программирования получили по-настоящему ценный практический урок из реального мира. Изначальный выбор архитектуры проекта может иметь непредвиденные последствия для внедрения, управляемости и жизнеспособности проекта в долговременной перспективе. К тому же, этот случай поощрит детей к размышлениям, как избежать рисков, вызванных надзором некоторых взрослых. И что облаку нельзя доверять на 100%.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 43

      –7

      Задним числом все умны, но неужели нельзя было сделать триггер на 90% для оповещения DBA/SA?

        +22
        В этом и состоит главная проблема алертинга — правила алертинга появляются после инцидентов, а не до. Всё очень сложно предусмотреть заранее.
          –10

          О, серьёзно? То есть проблема с теми же айпишниками и системным временем никого ничему не научила и за четыре года эволюции проекта никто не осознал, что аудитория как-то разрослась?

            0
            Предварительный рефакторинг не нужен.

            Думаю создатели ресурса изначально не предполагали, что он станет настолько популярным. А потом навалились другие таски, и никто не задумывался, тем более что бэкапы небось все время делают — ведь по сути никто не пострадал.
            0

            Но неужели никто из админов не заметил, что в одной из таблиц стало 4 млрд строк?

              0
              В ней могло быть и меньше 4. Но для этого всё равно надо иногда смотреть внутрь базы.
            +15

            Такой триггер не имеет смысла. Тот, кто знает о возможной проблеме — он сразу закладывает 64 бита. А тот кто не знает — он и про триггер не догадается.

            +4
            Нигде нет информации, сколько конкретно из 16 млн школьников хотя бы залогинилось 20 января?

            Баг конечно забавный и поучительный, но «потеря домашней работы» явно не критичная…
              +1
              Тут критична не столь «потеря домашней работы», а тот факт что в продукте для пользователей затаился подобный баг. А если вместо кода школьников хранилась бы история болезней пациентов? В общем мотать на ус.
                –1
                Кажется продукт некоммерческий. С чего бы им вообще кому либо что либо обещать? Они делают проект из альтруистических побуждений. А вы с них ещё чего-то требуете.
                  0
                  Если я альтруистически делаю автомобиль — у него не должны на 100т.км пробега отваливаться колеса. Особенно когда им пользуются другие. И продукт для пользователей != коммерческий продукт.
                    0
                    Никто никому ничего не должен.
                    К слову, ребята достойно вышли из положения. Не зассали. Спокойно объявили о произошедшем инциденте, признали свои ошибки, закрыли сервис, внесли корректировки и отчитались.
                    Профессионально и вполне качественно.
              –7
              Если посмотреть на эту проблему философски, то 20 января 2017 года ученики на курсах программирования получили по-настоящему ценный практический урок из реального мира.

              Думаю что некоторые поняли то, что нужно в программках просто для каждой переменной давать float/строку.
                +1
                А лучше BLOB
                  +17
                  И потом получать оценку в 4.9999999997 балла.
                    +5
                    С отбрасыванием дробной части вместо округления в формировании ведомостей и других учебных документов
                    0
                    А зарплату надо считать на PHP и JS, с переменными типа float/строка, желательно ещё и чередуя типы на разных этапах вычислений.
                  • UFO just landed and posted this here
                    • UFO just landed and posted this here
                      • UFO just landed and posted this here
                          +1
                          Конечно зависит, любое «золотое правило» имеет исключения. Вот только проблема с 32-битным ключом возникает намного чаще, чем проблема из-за того, что ключ был bigint, даже сложно представить, когда это будет иметь существенное отрицательное влияние.
                          • UFO just landed and posted this here
                          +1

                          Только не индексы, а суррогатные ключи.

                          • UFO just landed and posted this here
                              0

                              Что такое, по-вашему, "тип индекса"? В моем мире у индексов нет типов...

                              • UFO just landed and posted this here
                                  +1

                                  Это называется "внешний ключ", а не "внешний индекс".

                            0
                            вроде бы UUID тоже хорошо работает, и от подобных проблем неплохо застрахован
                              0

                              Там свои приколы. Например, куча утилит для ORM для генерации модели по базе или базы по модели не понимает как это UUID может генерироваться на стороне СУБД. А это обычно требуется если его надо сделать последовательным.


                              А последовательным его делать надо, чтобы записи в кластерный индекс были локальные, а не по всему объему...

                            +8

                            "Я сделал домашку, но 32-битный индекс переполнился" :-)

                              +7

                              Тебе все равно никто не поверит.jpg

                              • UFO just landed and posted this here
                                –1
                                  +4

                                  Дааа, вот также помню в X-COM: UFO Defense, качаешь солдат качаешь, качаешь-качаешь, а потом у них характеристики становятся больше 255 и их приходится отправлять в отставку

                                    0
                                    во времена Sega в игре Dune2 замечал такой баг, хотя может это было сделано специально, если купить много юнитов то вражеские башни стреляют дальше ракетниц и захватить базу становится сложнее.
                                      +3
                                      Ну тогда уж вспомним еще Цивилизацию, где когда ИИ играл за Индию и прокачивал максимальный пацифизм, переменная агрессии переполнялась через ноль до максимального значения, у Ганди сносило крышу, и он шел всех кромсать в капусту…
                                      0
                                      Не в отставку, а в элитный отряд, который пойдет на штурм марсианской базы в конце. Единственное нужно успеть отравить в резерв за одну миссию до переполнения одной из критически важных характеристик типа скорости (у меня 1м чаще всего переполнялось здоровье, которое ближе к концу игры уже не важно — энергоброню редко пробивают, а когда это все-таки случается урон здоровью обычно небольшой).
                                      0
                                      Кстати, хороший повод объяснить детям, что такое разрядность числа, и в каких случаях нужно использовать 32-битные, а в каких 64-битные числа. Хорошо запомнится, особенно тем, у кого домашка пропала. На чужих ошибках тоже нужно учиться.
                                        0
                                        Подскажите пожалуйста на скрине Code.org русскоязычный интерфейс, но зарегался/зашел все англ.
                                        Я правильно понял, что скрин получили транслейтом сайта?
                                        Есть какой-нибудь подобный ресурс на русском (чтобы ре мог все сам, самостоятельно)?
                                          0
                                          На Code.org внизу справа выбирается язык.

                                          +2
                                          Так кто должен извлечь урок?
                                          Взрослый: Агаа! Так-так. Буду аккуратнее и сделаю бэкапы.
                                          Ребенок: Моё творчество пропало. Прграммировання полно факапов и это урок. Ок. Пойду пока поиграю в мяч.
                                            0
                                            в контру
                                            –1
                                            Yet another code bite the 32-bits indexes.

                                            Уж сколько лет твердили свету — не использовать 32-битные id'шники… Но воз и ныне там.

                                            Only users with full accounts can post comments. Log in, please.