Ревью одного скринкаста » комментарииhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/2013-05-25T20:26:07.158530-07:00Иван Сагалаев о программировании и веб-разработкеhttp://softwaremaniacs.org/media/sm_org/style/photo.jpgsashatim на "Ревью одного скринкаста"
2013-05-25T20:26:07.158530-07:00sashatimhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-256495Спасибо! Класное видео, всё ясно и коротко продолжайте, очень хочется побольше такого видео может из них создать видеокнигу по python учиться языку будет интереснее.
<p>Спасибо! Класное видео, всё ясно и коротко продолжайте, очень хочется побольше такого видео может из них создать видеокнигу по python учиться языку будет интереснее.aruseni на "Ревью одного скринкаста"
2013-05-16T18:56:24.638713-07:00arusenihttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-255587И да, Иван, рефакторинг шикарный, спасибо большое, интересно читать! И видео отличное. :)
<p>И да, Иван, рефакторинг шикарный, спасибо большое, интересно читать! И видео отличное. :)aruseni на "Ревью одного скринкаста"
2013-05-16T18:54:58.665693-07:00arusenihttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-255586А ещё вместо >>> l = ["a", "b", "c"] >>> for index in range(len(l)): ... print("%s: %s" % (index, l[index])) Можно писать: >>> l = ["a", "b", "c"] >>> for index, letter in enumerate(l): ... print("%s: %s" % (index, letter)) Результат тот же, а в плане производительности, потребления памяти и...
<p>А ещё вместо</p>
<pre><code>>>> l = ["a", "b", "c"]
>>> for index in range(len(l)):
... print("%s: %s" % (index, l[index]))
</code></pre>
<p>Можно писать:</p>
<pre><code>>>> l = ["a", "b", "c"]
>>> for index, letter in enumerate(l):
... print("%s: %s" % (index, letter))
</code></pre>
<p>Результат тот же, а в плане производительности, потребления памяти и так далее получается лучше.Miroff на "Ревью одного скринкаста"
2013-01-17T03:22:49.231097-08:00Miroffhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-234768Спасибо, всегда приятно посмотреть как думают другие программисты.
<p>Спасибо, всегда приятно посмотреть как думают другие программисты. Ivan Sagalaev на "Ревью одного скринкаста"
2013-01-17T00:40:02.827414-08:00Ivan Sagalaevhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-234695Ну и еще, до кучи, поправьте: "рассчётная" на "расчётная" Спасибо, поправил. Это одна из немногих ошибок, от которых всю жизнь мне не удаётся отвязаться :-).
<blockquote>
<p>Ну и еще, до кучи, поправьте: "рассчётная" на "расчётная"</p>
</blockquote>
<p>Спасибо, поправил. Это одна из немногих ошибок, от которых всю жизнь мне не удаётся отвязаться :-).Pavel на "Ревью одного скринкаста"
2013-01-16T22:28:21.211000-08:00Pavelhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-234639Ну и еще, до кучи, поправьте: "рассчётная" на "расчётная"
<p>Ну и еще, до кучи, поправьте:
"рассчётная" на "расчётная"Nikita Nemkin на "Ревью одного скринкаста"
2013-01-15T23:34:02-08:00Nikita Nemkinhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-234047Если уж использовать numpy, то по назначению: def load(self): ... self.t_data = np.asarray(small).sum(axis=-1, dtype=np.int16) ... def __mul__(self, other): return np.sum(np.abs(self.t_data - other.t_data) > Image.TRESHOLD) в 30 раз быстрее работать будет, за вычетом времени на загрузку картинок. Трехэтажные comprehensions лучше переписывать как обычные циклы. Строк получается чуть больше, но читать и...
<p>Если уж использовать numpy, то по назначению:</p>
<pre><code>def load(self):
...
self.t_data = np.asarray(small).sum(axis=-1, dtype=np.int16)
...
def __mul__(self, other):
return np.sum(np.abs(self.t_data - other.t_data) > Image.TRESHOLD)
</code></pre>
<p>в 30 раз быстрее работать будет, за вычетом времени на загрузку картинок.</p>
<p>Трехэтажные comprehensions лучше переписывать как обычные циклы. Строк получается чуть больше, но читать и изменять такой код будет проще.Ivan Sagalaev на "Ревью одного скринкаста"
2013-01-15T10:36:02.686426-08:00Ivan Sagalaevhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233771зачем тут вообще классы? О том же я в P.S. написал :-). Если получится, раскрою ещё отдельным постом. Насчёт "принято"… Скажем так, это одна из популярных парадигм, в основном в силу популярности ОО в университетском образовании. Но она никоим образом не главенствующая, многие пишут проще.
<blockquote>
<p>зачем тут вообще классы?</p>
</blockquote>
<p>О том же я в P.S. написал :-). Если получится, раскрою ещё отдельным постом.</p>
<p>Насчёт "принято"… Скажем так, это одна из популярных парадигм, в основном в силу популярности ОО в университетском образовании. Но она никоим образом не главенствующая, многие пишут проще.denizka на "Ревью одного скринкаста"
2013-01-15T01:48:59.491468-08:00denizkahttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233587review понравилось, хочу еще )) я тут из java мира и вопрос такой - а зачем тут вообще классы? Image и ImageList? ну ведь это небольшой скрипт, из пары функций. без хранения состояний. стадии обработки файлов спрятаны/разбросаны по классами (и еще в конструкторах!!). а тут фактически pipeline. ну и написать...
<p>review понравилось, хочу еще ))</p>
<p>я тут из java мира и вопрос такой -
а зачем тут вообще классы? Image и ImageList? ну ведь это небольшой скрипт, из пары функций. без хранения состояний. стадии обработки файлов спрятаны/разбросаны по классами (и еще в конструкторах!!). а тут фактически pipeline. ну и написать шаги pipeline в <strong>main</strong>. будет отчетливо видно что и как. или это так принято в питоне? классы на каждый чих?Ivan Sagalaev на "Ревью одного скринкаста"
2013-01-14T15:55:08.057024-08:00Ivan Sagalaevhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233358Макконнелл писал, что переиспользовать переменные плохо. Да, так. Но это не догма. Плохо переиспользовать пременную для другой цели. А здесь мы по сути работаем с одним объектом — картинкой — но в два шага. И значение этой переменной на первом шаге промежуточное, а вторая по сути просто апдейтит её значение....
<blockquote>
<p>Макконнелл писал, что переиспользовать переменные плохо.</p>
</blockquote>
<p>Да, так. Но это не догма. Плохо переиспользовать пременную для другой цели. А здесь мы по сути работаем с одним объектом — картинкой — но в два шага. И значение этой переменной на первом шаге промежуточное, а вторая по сути просто апдейтит её значение. В этом случае я считаю переиспользование не только допустимым, но и вполне очевидным.</p>
<p>Можно было и в одну строку всё написать, на самом деле:</p>
<pre><code>img = pImage.open(self.filename).resize((Image.BLOCK_SIZE, Image.BLOCK_SIZE), pImage.BILINEAR)
</code></pre>leventov на "Ревью одного скринкаста"
2013-01-14T14:15:59.007126-08:00leventovhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233318Макконнелл писал, что переиспользовать переменные плохо.
<p>Макконнелл писал, что переиспользовать переменные плохо.Ivan Sagalaev на "Ревью одного скринкаста"
2013-01-14T10:46:36.323853-08:00Ivan Sagalaevhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233244(grammar) попробовал :) О, спасибо! Поправил. "— coding: utf-8 —" полезен не только питону, но и емаксу :-) Я знаю, поэтому комментарий мол именно для Питона. Бобук писал код в SublimeText 2. Имеет смысл рекомендовать к использованию поддерживаемый форк Pillow. Бобук его и рекомендовал в самом скринкасте. numpy может принимать...
<blockquote>
<p>(grammar) попробовал :)</p>
</blockquote>
<p>О, спасибо! Поправил.</p>
<blockquote>
<p>"— coding: utf-8 —" полезен не только питону, но и емаксу :-)</p>
</blockquote>
<p>Я знаю, поэтому комментарий мол именно для Питона. Бобук писал код в SublimeText 2.</p>
<blockquote>
<p>Имеет смысл рекомендовать к использованию поддерживаемый форк Pillow.</p>
</blockquote>
<p>Бобук его и рекомендовал в самом скринкасте.</p>
<blockquote>
<p><code>numpy</code> может принимать <code>numpy.asarray(pil_image)</code> для PIL >= 1.1.6 и Pillow</p>
</blockquote>
<p>О, спасибо, полезно!bolk на "Ревью одного скринкаста"
2013-01-14T10:42:07.946566-08:00bolkhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233241Возвращайся, Ваня, в Россию! Совсем русский забудешь! :) Попробывал он :)
<p>Возвращайся, Ваня, в Россию! Совсем русский забудешь! :) Попробывал он :)Ilya Kutukov на "Ревью одного скринкаста"
2013-01-14T09:43:28.782788-08:00Ilya Kutukovhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233218Пройдусь по библиотечным тонкостям. Смотреть директорию в данном случае проще через glob.glob('*.jpg'), хотя неочевидность названия библиотеки может запутать читателя. Но если бы расширений было бы много, то walk и listdir удобнее. PIL стабильный, но полузаброшенный проект, хотя и был стандартом долгое время. Имеет смысл рекомендовать к использованию поддерживаемый форк Pillow....
<p>Пройдусь по библиотечным тонкостям.</p>
<p>Смотреть директорию в данном случае проще через <code>glob.glob('*.jpg')</code>, хотя неочевидность названия библиотеки может запутать читателя. Но если бы расширений было бы много, то <code>walk</code> и <code>listdir</code> удобнее.</p>
<p>PIL стабильный, но полузаброшенный проект, хотя и был стандартом долгое время. Имеет смысл рекомендовать к использованию поддерживаемый форк Pillow.</p>
<p><code>numpy</code> может принимать <code>numpy.asarray(pil_image)</code> для PIL >= 1.1.6 и Pillowpilot34 на "Ревью одного скринкаста"
2013-01-14T09:34:05.500170-08:00pilot34https://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233213Спасибо, продолжайте в том же духе. Очень полезно.
<p>Спасибо, продолжайте в том же духе. Очень полезно.Daemon на "Ревью одного скринкаста"
2013-01-14T08:21:08.332268-08:00Daemonhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233183А -*- разве для питона ставится? Я был уверен, что это подсказка emacs'у.
<p>А -*- разве для питона ставится? Я был уверен, что это подсказка emacs'у.Alex Ott на "Ревью одного скринкаста"
2013-01-14T06:08:58.392384-08:00Alex Otthttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233140"-- coding: utf-8 --" полезен не только питону, но и емаксу :-)
<p>"-<em>- coding: utf-8 -</em>-" полезен не только питону, но и емаксу :-)Glader на "Ревью одного скринкаста"
2013-01-14T05:02:05.478348-08:00Gladerhttps://softwaremaniacs.org/blog/2013/01/13/bobuk-screencast-review/#comment-233108попробывал (grammar) попробовал :)
<blockquote>
<p>попробывал</p>
</blockquote>
<p>(grammar) попробовал :)