Pull to refresh
0
0

Пользователь

Send message
Если основная цель — познакомить учеников с элементами программирования в сжатые сроки, а не целенаправленно программированию обучать, то лучше все-таки подойдет Python.
Я знаю человека, который пытался учиться программированию у такого типа. После вопросов вроде «а как сделать, чтобы программа была в отдельном файле и без браузера запускалась» стало очень грустно — они на занятиях что-то там копипастили в Jupyter Notebook и даже лопатили какие-то данные в Pandas, при этом не имея практически никакого понимания о структурах и типах данных, переменных.

Python, безусловно, хороший язык. Jupyter — отличный инструмент для прототипирования, но от паскаля в данном случае было бы куда больше пользы. Он как минимум не менее выразителен, чем Python, а статическая типизация только в кассу.
Да, на удивление бесполезная фича: вводишь, например, 1500/28.8, ожидая оказаться в результатах поиска с калькулятором, а тебя вместо этого отправляет на 0.0.5.220/28.8. Хорошо, что ещё осталась отдельное поле ввода для поиска.

А меню выбора кодировки страницы тоже?


Оффтоп: вот так и работает "опенсорсность" Chromium — форкнуть-то можно, но поддерживать форк и вливать изменения из апстрима никто не в силах. Прямо печалька.

Но во многих случаях, язык позволяет избежать лишних удивлений, явно используя Function.prototype.bind или вовсе так:
setTimeout(() => this.n += 1, 1000);
Оставляя в стороне «явные» отличия в поведении обычных и стрелочных функций (от которых у Гвидо волосы на спине бы встали дыбом), this настолько не стыкуется с синтаксисом классов, что надо или выпилить bind (=сделать код обратно несовместимым), или добавить self.

Утрированный пример: допустим, есть графики D3 или highcharts, которые используют контекст в своих колбеках на всю катушку, и «старый» класс с классическим that = this, который строит конфигурацию для графика:

function Config () {
  let self = this;
  self.field = 'foo';
  
  this.getConfig = function() {
    return {
      tooltip: {
        formatter: function () {
          return 'Value of ' + self.field + ' for X=' + this.x + ' is ' + this.y;
        }
      }
    }
  }
}

Если всё это дело попытаться переписать с использованием «новых» классов, сразу возникают нестыковки:

class Config {
  constructor() {
    this.field = 'foo';
  }

  getConfig() {
    return {
      tooltip: {
        // Так потеряется значение this.field
        formatter: function () {
          return 'Value of ' + this.field + ' for X=' + this.x + ' is ' + this.y;
        },
        // Так станут недоступными this.x и this.y
        formatter: () => {return 'Value of ' + this.field + ' for X=' + this.x + ' is ' + this.y},
      }
    }
  }
}

Но как же хорошо, что в JS существует столько явных возможностей, среди которых есть даже IIFE. Так язык позволяет избежать лишних удивлений:

formatter: (self => function() {return 'Value of ' + self.field + ' for X=' + this.x + ' is ' + this.y})(this)

(Да, это потому, что либы писались ещё за царя Гороха. Но самое страшное, что так продолжают писать! Потому что пока в языке есть этот чёртов this, каждый будет вертеть им как хочет)
В это время в РКН...
image

...и в Google
image
Думайте перед тем как что-то ставить
npm install:



Думаю, если бы JS наконец обзавёлся тем, что в других языках называется «стандартной библиотекой», проблем бы немного убавилось.
Последний раз, когда я пользовался маком, в диалоге выбора файла ввести путь к директории можно было только через какой-то трёхпальцевый хоткей, а имя файла — невозможно вообще.

Зачем такое вообще нужно: в директории 9000 файлов с названиями вида eventXXXXXXXXXX.log, а у меня в буфере есть название event1217548800.log.

Кстати, примерно такая же фигня в GTK. По сравнению с ними диалоги открытия/сохранения файла в KDE/Qt/Windows — просто шедевр юзабилити.
логотип и название группа тоже украла
Если имеется в виду «украла у GOG.com», то в таком стиле делается много всего, в основном у радикально настроенных товарищей
Заголовок спойлера



И даже


Можно, но сделают 7" смартфон, который будет превращаться в планшет :)
python относительно легко «кастрируется»
Вот уж нет, совершенно точно не «легко». 10 лет назад один дядька сделал штуку, которая по задумке должна была закрывать возможность писать в файлы (github.com/tav/scripts/blob/master/safelite.py)
и попросил найти в ней уязвимости. Конец немного предсказуем: tav.espians.com/a-challenge-to-break-python-security.html

Ещё были попытки у pysandbox, но там также признали поражение:
so many restrictions have needed to be added, pysandbox cannot be used for anything «more complex than evaluating '1+(2*3)'». Basic language constructs like «del dict[key]» have been removed because they can be used to modify __builtins__ and break out of the restricted namespace
lwn.net/Articles/574215
lwn.net/Articles/574323
nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

В стандартной библиотеке был модуль rexec, но он также признан опасным и удалён в 3 версии
docs.python.org/2/library/rexec.html

PyPy пытались, но их sandbox «is not actively maintained. You will likely have to fix some issues yourself».

Наверное, единственный работающий способ — переписать интерпретатор и где-то внизу перехватывать системные вызовы (ZeroVM Python), но это совсем не имеет смысла, проще уже в контейнер засунуть.
Чересчур мощная интроспекция — python невозможно посадить в песочницу. Конечно, зависит от задачи, но в игровых скриптах возможность делать что-то такое мне видится нежелательной:

[x for x in ().__class__.__base__.__subclasses__() if x.__name__ == 'Popen'][0]('calc.exe')

Новый модный декодер MP3 на ES6

Возможно, впервые с 2000 года, МКС будет какое-то время летать без экипажа.
Т.е. экипажу придётся возвращаться на Землю на МС-09? Это достаточно безопасно, учитывая всю эту канитель с непонятной дыркой?
Был рулон поляризационной плёнки с алибабы (15 $/м²), стал Casper™ Cloaking Technology (500 $/м²)



Не перестаю удивляться способностям некоторых людей продавать что угодно.
Да, не совсем корректный термин. Химики используют «разрушение эмульсии», и сила тяжести там не единственная причина (броуновское движение, силы Ван-дер-Ваальса...)
Я тоже несколько запутан. Видимо, имеется в виду, что взвесь масла в воде без внешнего воздействия отстоится и разделится на компоненты. Согласно закону неубывания энтропии выходит, что раз система сама пришла из взвеси в разделённое состояние, то последнее имеет большую энтропию. Это довольно контринтуитивно, если мы считаем энтропию мерой неупорядоченности, ведь «вперемешку» кажется более хаотичным состоянием.
3d-secure это опция мерчанта, которой он прежде всего прикрывает свою задницу, а не клиента. Не банк-эмитент определяет, что «для этой карты обязательно надо везде вводить код из СМС» (за редким исключением вроде Индии), а именно конкретный мерчант, который решает, что неизбежное снижение конверсии от включения 3D-secure (клиент не совершил покупку т.к. банк-эмитент не поддерживает, не дошла СМС, нет телефона под рукой...) принесёт убытков меньше, чем возврат средств по позже оспоренным транзакциям (который в отсутствие 3D-secure должен выполнять мерчант).

Для очень крупных магазинов эти дополнительные заказы окупают все разборки с фродом, поэтому на AliExpress или Amazon запросто может не быть 3D-secure и ничто не мешает использовать краденную карту там. Если вы вовремя заметите лишнее списание, сходите в банк и напишете заявление — через 30 дней, возможно, деньги вернут.
Вы можете привести пример ресурса на котором статьи с 1300 комментариев загружаются на ваш компьютер без задержек
news.ycombinator.com/item?id=18064537

Information

Rating
Does not participate
Registered
Activity