Бляди тоже ок, ага. Войти !bnw Сегодня Клубы

Ура! // обмазываюсь потихоньку, сокращаю строки кода

          ReportDataMap $!! (hm & at (ev ^. evAdId) . non mempty
                             . rdPerHourMap
                             . at (hourTS ev) . non mempty
                             . rhViews +~ 1)
          -- ReportDataMap $!! H.insertWith
          --   (\_ old -> incReportDataView (hourTS ev) old)
          --   (ev ^. evAdId)
          --   (singleViewReportData (hourTS ev))
          --   hm
#CQ5NMC / @kb / 3790 дней назад

чо там
#CQ5NMC/MNC / @krkm / 3790 дней назад
@krkm Ну типа взять мапу, у неё по ключу какому-то значение, если нету -- взять что-то "пустое", там взять поле, там снова по ключу, снова если нету -- пустое, у него увеличить поле rhViews.
#CQ5NMC/G4F / @kb --> #CQ5NMC/MNC / 3790 дней назад
@kb пиздец эта хуйня нечитаема, нахуй вы так живете
#CQ5NMC/G3U / @krkm --> #CQ5NMC/G4F / 3790 дней назад
@krkm Почему нечитаема? Очень даже читаема, если примерно каждый оператор понимаешь. Конечно, можно переписать чтоб как на js через миллиард "if-then-else"-лапши, но лучше выучить операторы.
#CQ5NMC/CGM / @kb --> #CQ5NMC/G3U / 3790 дней назад
@kb чо за мапа? мапа в смысле над каждым элементом списка?
#CQ5NMC/I2M / @krkm --> #CQ5NMC/G4F / 3790 дней назад
@krkm HashMap. В джаваскрипте это `{}`.
#CQ5NMC/NI6 / @kb --> #CQ5NMC/I2M / 3790 дней назад
@kb тогда я нихуя не понял откуда у тебя там "миллиард if-then-else-лапши"
#CQ5NMC/37V / @krkm --> #CQ5NMC/NI6 / 3790 дней назад
@krkm ну алсо нечитаемо не столько из-за операторов, сколько из-за рандомных букв вместо нормальных имен ключей
#CQ5NMC/1OO / @krkm --> #CQ5NMC/37V / 3790 дней назад
@krkm ``` report_data_map = ReportDataMap({10: PerHourMap({1400346000: ReportHourRow({"views": 0, "impressions": 1 ...})})}) ``` Код делает примерно следующее: ``` ev = SomeEvent(...) per_hour_map = report_data_map.get_data().get_by_key(ev.getAdId()) if per_hour_map is not None: hour_row = per_hour_map.get_data().get_by_key(hourTimeStamp(ev)) if hour_row is not None: new_hour_row = hour_row.copy() new_hour_row.set_data(hour_row.get_data().copy()['views'] += 1) else: new_hour_row = get_empty_hour_row()['views'] += 1 new_per_hour_map = per_hour_map.copy() new_per_hour_map.set_data() else: ``` Блять, заебался. Короче лень.
#CQ5NMC/GSP / @kb --> #CQ5NMC/I2M / 3790 дней назад
@krkm Ну, тут я отчасти согласен, отчасти -- нет. В любом более-менее крупном проекте рано или поздно начинается пиздец с именами трудно читаемый человеку извне, с другой стороны -- да, в следующем хаскеле сделают так, чтоб не приходилось всегда префиксы придумывать, и вместо rdPerHourMap можно будет сделать просто perHourMap, вместо rhViews просто views и т.п.
#CQ5NMC/QAG / @kb --> #CQ5NMC/1OO / 3790 дней назад
@kb Отчасти заебался потому что в питоне делал бы красивее, но это надо сидеть всё передумывать и переписывать, конечно же. В итоге было бы тоже норм, но пришлось бы этот "норм" самому бы нагородить и запрятать вовнутрь.
#CQ5NMC/QG9 / @kb --> #CQ5NMC/GSP / 3790 дней назад
@krkm О, понял как это в питоне описать, без кучи кода и без ифов: ``` report_data_map.get(event_id, {}).get(hour_time_stamp, {'views': 0})['views'] += 1 ``` Примерно так, только ко всему в довесок данные будут копироваться (получишь новый report_data_map). На такое питон, к сожалению, не рассчитан.
#CQ5NMC/BX5 / @kb --> #CQ5NMC/37V / 3790 дней назад
// хули я тут устроил
#CQ5NMC/FK1 / @kb / 3790 дней назад
@kb лан
#CQ5NMC/UM5 / @krkm --> #CQ5NMC/GSP / 3790 дней назад
норм
#CQ5NMC/14R / @ulidtko / 3789 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.