Pull to refresh
64
0
Иван @Aivean

User

Send message

Ну-ну, и какие ж это меры?

Наверное, как-то так.
Правда, только двумя массивами, без битовой магии, вроде той, что описана в статье, вряд ли получится добиться однородного распределения. А вот четырьмя (как в моей демке), получается неплохо.
Не обязательно 320x200 хранить. Достаточно 320x4: вот, набросал на скорую руку демку.
2. Отсортировать и простейший бинарный поиск. А для большого количества длинных слов оптимально использовать Trie.

3. Неверно. Решение в два прохода и O(N) дополнительной памяти.

4. Если честно, я не понял условие. Объясните?
Если требуется посчитать количество атомов каждого элемента в формуле, то как, например, «Fe» влезет в ключ типа `Character`?

5. Из контекста очевидно, что «прогул» также считается «опозданием», и что учитываются только три опоздания подряд.
Интерес представляет дополнительная часть при таком условии. Может быть, можно придумать аналитическую формулу, но я бы решал ее динамикой.
А что ты считаешь real-time аналитикой? Например, почему кафка+вертика не может быть real-time?
Очень экзотичный сценарий вы выбрали для исследования.

Если задача — единожды вставить элемент в середину списка, то, по сути, не важно, какая реализация списка используется — обе операции будут O(n).

Если задача — вставлять элементы в середину в цикле (как делаете это вы в своем тесте), то логично использовать для этой цели LinkedList через ListIterator, так как в этом случае каждая вставка будет O(1).

Если же задача предполагает вставку элементов в разные «случайные» места по сложной логике, то, опять же, логично будет за один проход расчитать будущие позиции, затем создать на их основе новый список (примерно как это делается при сортировке подсчетом).
Спасибо за статью, узнал кое-что новое (Infix types) и повторил старое, но редкоиспользуемое.

Парочка замечаний:
  • В примере с факториалом точка с запятой нужна, чтобы компилятор не искал «второй» операнд на следующей строке. Альтернатива странно смотрящейся точке с запятой будет просто одна пустая строка перед «println».
  • Почему-то в начале статьи вы пишете implicit с «d» на конце
  • Я знаю, что в комментариях не принято писать о TYPO, но все же, исправьте «type constcructor»

Мой комментарий следует читать иронично. Я подразумевал как раз то, что вы озвучили:
вы будете и си называть препроцессором ассемблера?

Где грань между «синтаксическим сахаром» и фичей, которая позволяет использовать новый подход в программировании?

Простой пример, ленивая инициализация.
В Java я ее использую только тогда, когда затраты на ее написание оправданы. Хотя, если задуматься, то это очень мощный механизм, который иногда дает хороший прирост производительности и уменьшает затраты памяти. В Scala это одно ключевое слово «lazy». С его использованием нет проблем, оно не мешает читаемости кода. Таким образом, выходит, что Scala поощряет использовании такого подхода, а Java — нет. Хотя, фактически, синтаксический сахар.
Не понял, что именно не сработает?
Так скала по сути и есть препроцессор, который обрабатывает наш код так, как надо (+ либы).
Еще пара мыслей по поводу equals/hashCode в java и scala:

В java существуют определенные правила и соглашения, как нужно писать equals/hashCode. В 99% случаев при написании приложений и необходимости переопределять equals/hashCode приходится генерировать «стандартный» код с помощью IDE. Более того, обычно необходимость написания equals/hashCode нестандартно или в нарушении conventions сигнализирует о недостатке дизайна приложения.

Так вот, то, что в java приходится делать средствами IDE, причем каждый раз заново при изменении сигнатуры класса, в Scala отдали на откуп компилятору. Причем то, что case class запрещено наследовать решает проблему работы equals/hashCode при наследовании.
Например, так:
  case class CDate(ms: Long) {
    def +(i: Long) = new {
      def day = CDate(i * 1000 * 3600 * 24 + ms)
    }
  }

  val now = CDate(System.currentTimeMillis())
  val nowWithDayAdded = now + 1 day


Этот способ не лишен недостатков, например, не получится написать
  val someTimeInFuture = now + 1 day + 1 day
То, что вы написали и case class — не одно и то же. Ключевое слово «case» автоматически добавляет в класс множество полезных вещей, превращающий объекты этого класса в универсальные DTO.
Навскидку, генерируется конструктор, equals/hashCode, apply/unapply (для pattern matching), copy (очень полезный аналог clone), toString. И, кстати, case classes are immutable.
Вы правы в том, что Скала позволяет легче выстрелить себе в ногу.

Это верно и для перегрузки операторов. Но если не злоупотреблять, то можно получить довольно красивые вещи, например,
val tomorrow = today + 1 day
Checked исключений нет, потому что Scala пропагандирует принцип «let it fail» (inspired by Erlang). То есть, если вы явно видите, что определенные ваши действия могут привести к исключению, и вы можете его обработать «на месте», то вы его обрабатываете, в противном случае исключение уходит «наверх», где кто-нибудь о нем позаботится, будь это caller или servlet container.
Кстати, я, кажется, понял, почему автору не понравилась погода. Если автор жил в Сан Франциско — то да, погода там не очень. Постоянные туманы, холодно и дождливо даже летом. Но это только в Сан Фране, в остальной долине это не так :)
Я прошу прощения за ошибки, опечатки и битые ссылки, я плохо выспался :)
Yosemite
Point Lobos
По-моему, некоторые «недостатки» надуманные.

1. Цены на недвижимость.
Да, они выше, чем в среднем по штатам и рассчитаны на IT специалистов с высокими зп. Но дом можно купить и за вменяемые деньги, если не гнаться за престижным районом. К тому же, если важно именно купить дом, а не, например, снимать аппартменты, то можно рассмотреть вариант ипотеки, ставка по которой гораздо более вменяемая по сравнению с Украиной или Россией.

2. Налоги.
Налог в 25-30% выглядит диким для человека, который привык не платить ничего. Но, во-первых, в долине, просто посмотрев вокруг, вы видите, что налоги не пропадают в чьем-то кармане, во-вторых, «высокий налог» для наемного работника — это иллюзия, связанная с неправильной точкой зрения. Просто мысленно уменьшайте зарплаты на 25%, точно так же, как делаете с ценой без НДС в магазине.

3. Погода и природа
Я не понимаю, как можно считать погоду в долине недостатком. Всегда комфортная температура (до 25°С днем летом и 12°С днем зимой). Дожди в основном зимой. В часе езды в одну сторону — океан (в 4+ часов езды, если хочется купаться), в 4-х часах езды в другую сторону — снежные горы. В часе езды куча заповедников с огромными редвудами и секвоями.
Те «выжженные пустоши», что на приведенной картинке — это похоже на Golden Hills. А как насчет пейзажей из действительно красивых мест, вроде Point Lobos, Yosemite? В целом же природа в долине очень необычна и разнообразна. В «деревнях» обычно все усажено зеленью, хайвеи часто усажены по бокам цветами и проходят через живописные леса.

4. Радикалы
По-моему, пункт надуманный. Если вы начинаете высказывать странные взгляды, то закономерно будете считаться странным человеком. Другое дело, что в Калифорнии за ваши странные взгляды вас вряд ли побьют, как это может произойти в «более диких странах».

5. Инфраструктура
Да, есть определенные проблемы. Хайвеи старые, им более 50 лет, за это время появилось множество выбоин, которые, почему-то, не спешат заделывать. Есть пробки в час пик. Но есть и положительные моменты. Если говорить только про личный транспорт, то есть выделенная полоса (carpool) для экологичных машин и мотоциклов. В час пик она движется довольно резво. Выбирайте, или хотите 5 литров под капотом или быстро ездить в час пик. Или мотоцикл. В долине рай для мотоциклистов. Во-первых, карпулы, во-вторых, нет снега и мало дождей. В-третьих, не запрещено ездить между полосами.
Кроме этого, еще есть caltrain, для кого-то он может быть решением.

По остальным пунктам мне сказать особо нечего, очень уж они субъективные. Людям, которым не нравится видеть рядом с собой успешных людей, нужно ехать в бедные страны, а не в долину.

В конце выскажу свою мысль. Пассивные люди не добьются успеха в долине. Долина кипит жизнью и поощряет тех, кто старается взять от жизни максимум. Тут огромные возможности, но нужно быть активным и уметь пользоваться головой, чтобы использовать их. Поэтому людям с советским менталитетом тут сложно.
Для Pebble есть watchfaces, которые постоянно считают шаги и отображают их количество (если нужно это делать именно постоянно, иначе — есть приложения). Кроме того, использование Pebble для спорта имеет преимущества: вес, время жизни батареи, неслепнущий экран. Русский язык решается сейчас очень просто, буквально в несколько кликов, с помощью pebblebits.
Спасибо, клевая штука. Не без недостатков, но лучше, чем другие. Скажите, как вы ее нашли? У меня так и не получилось найти ее в гугле, даже зная название проекта.

Information

Rating
Does not participate
Registered
Activity