Switch to full style
Программы, software, hardware, warez, cracks и все что с этим связано.
Ответить

Python & Django

Чт фев 23, 2006 14:09 pm

Это к основным темам лаборатории

Python -- язык с простым синтаксисом и мощными возможностями. В основном заточен под объектно-ориентированое программирование, но с не меньшим успехом можно писать в как в процедурном, так и в функциональном стиле.
Код:
print "hellow, orld!"

hellow, orld!

Как и в других языках на букву P, присутствует динамическая типизация.
Код:
a=1
a="ля" * 4
print a

ляляляля

Практически все типы являются объектами. Это даёт возможность писать меньше кода и он будет более читабельным:
Код:
for line in open('myfile.txt').readlines():
    print line


В отличие от Perl, с его "вы можете сделать это несколькими путями", Python придерживается парадигмы "есть только один действительно хороший способ". Поэтому программы, написаные на этом языке очень легко "читать". И, что меня больше всего радует, это то, что там нет $всяких @магических . символов с %мутными ^(правилами -> использования)
Код:
my_array = "это массив слов".split()    # ['это', 'массив', 'слов']
my_array[0] = 'там'                            # ['там', 'массив', 'слов']
my_array.insert(1, 'есть')                    # ['там', 'есть', 'массив', 'слов']

Код будет выполнять ровно то, что написано. Ровно так, как задумывалось. И никаких дополнительных возможных трактовок.


Django -- одна из немногих "матёрых" платформ для написания приложений с использованием стиля MVC. Если кто не знает, то это разделение приложения на части, при котором создаётся чёткая связь между данными, логикой и интерфейсом. Для сайтов типа "превед мир! Эта васин сает. тута маи фотки." это конечно излишне, но для более менее серьёзных приложений типа портала, магазина или даже чуть более продвинутого блога, такое разделение уже становится необходимым.

Сколько раз вы пробовали читать сайты написаные на PHP год назад или другим человеком? Сколько раз вы потом махали рукой со словами "нувсёнафик. с нуля проще переписать." ? Сколько раз вы слышали от заказчика "а можно вот эту штучку переместить вот сюда, а там добавить такую вот формочку" ? Сколько раз вы меняя вид календаря обрушивали структуру меню?
С Django всё становится намного проще. Так как компоненты лежат в разных местах, независимые друг от друга, вы можете смело править всё что нужно. Без предварительных поисков по всему коду. А если PHP-код лежит в куче с HTML это вообще туши свет.

В Django имеется три основных части: (в порядке выполнения запроса)
    * непосредственно обработчик поступившего запроса. функция, которая решает что выдавать и откуда.
    * интерфейс к базе данных. обработчик берёт из неё данные для отображения страницы. Или вставляет туда данные из форм. Поддерживается автоматическая проверка правильности данных.
    * механизм шаблонов. в конце обработчик обычно отправляет полученые данные в подходящий шаблон. сформированая страница отправляется браузеру.

При этом практически для всех распространённых случаев использования сайта уже написаны стандартные обработчики, что позволяет очень сильно сэкономить на строчках кода, отладке, а значит и времени.

В Django есть ещё два важных аспекта это автоматическая страница администрирования и кэширование.
Как только вы описали модель данных и создали соотв-щие таблицы (всё автоматизировано), вы можете зайти на админку и начать вводить данные (в это время, коллега может продолжать заниматься структурой сайта).
Если у вашего сайта много посетителей, огромная база или слабенький комп, то вы можете включить встроеное кэширование, что сильно сокращает нагрузку и позволяет даже тяжёлым сайтам выживать даже при попадании на slashdot.org или dirty.ru

Ну и много ещё разных маленьких вкусностей и приятностей, которые уже настолько привычны, что уже и не упомнишь.. 8)

Чт фев 23, 2006 18:37 pm

Очень мало о джанго. Если тебе это нравится не значит что будет нравится другим.

Чт фев 23, 2006 19:59 pm

Мало потому что надо полноценную презентацию разворачивать. Мёртвый код он както мало вдохновляет... Постараюсь нарисовать что-нибудь.

До самой встречи (ориентировочно через недели 2-3) выложу материалы в локалке.

Пт фев 24, 2006 0:09 am

gosha писал(а):Очень мало о джанго. Если тебе это нравится не значит что будет нравится другим.
Здесь всё есть. Оказалось, что Django - одна из многих.

Пт фев 24, 2006 0:51 am

Screaming Lord писал(а):Оказалось, что Django - одна из многих


"Питон это единственный язык, в котором web-framework'ов больше чем ключевых слов" ((=

Основное отличие от многих в том, что пока остальные говорят "вот ещё чуть-чуть и у нас будет то, это и вот то" у Django уже есть солидный опыт применения в сайтах с многотысячной аудиторией. Кроме того Django предоставляет унифицированую среду, в отличие от конгломератов от разных поставщиков. Впрочем, это всё гибкое и можно свободно заменить компоненты... но как-то не хочется (: Очень уж всё удобное.

Вт фев 28, 2006 22:11 pm

Дотнет не подкачал и заимел своих Python'цев:

IronPython
Open Source Python for .NET
Python Scripting for .NET

Ср мар 01, 2006 15:49 pm

питон-то он питон... но вызывать зубодробительные конструкции из дотнетных библиотек с таким же успехом можно и на VB :P

Ср мар 01, 2006 17:49 pm

Я бы вот с удовольствием бы послушал про Ruby. Желательно тех кто реально пользовался и может объективно сравнить.
Пока я слышал много реплик, что во многом Ruby лучше чем Perl и Python.

Чт мар 02, 2006 12:21 pm

Puppet писал(а):во многом Ruby лучше чем Perl и Python.

Во многом, это в чём конкретно? (: Интересно же... Может я не тот язык выучил?.. ((=

Чт мар 02, 2006 12:45 pm

Ну вот мнение одного авторитетного специалиста Gonzalo Garramuno почему он использует именно Ruby...
Он писал порт языка Ruby в Maya - rubyMEL и еще много чего...

What is Ruby?
-------------

Ruby is a scripting language that borrows a lot of the good features of Perl,
Python and Smalltalk. It was born in Japan, as a need to have a language that
would be better than Python and Perl.
Its syntax is similar to Python, but it has built-in regex a la Perl and
every single thing in Ruby is an object, like Smalltalk.
In some ways, it addresses some of the common complaints of those languages.
Unlike Perl or Python, Ruby uses native garbage collection.
This makes writing extensions much more cleaner than for those languages.
Also, the internal code of Ruby is extremely clean and small, unlike Perl
which is a nightmare to read or python which has also grown a tad out of
proportion by now.
Ruby currently (v1.8) lags behind both Perl and Python in terms of speed, but
it has been catching up on each release. However, in my experience, ruby OO
easily beats Perl's performance and often puts Python in trouble, too.
Unlike the first thing I wrote some years ago, ruby now has exploded in the
number of libraries available to it and contains probably the best system of
any language for upgrading and keeping up to date libraries.


But Ruby? Why Ruby!!!??? Why not Perl/Python/TCL/Java/Lisp/C#/VB?
---------------------------------------------------------------------

Because for me, for one or another reason, those languages don't fit
the bill. Ruby, in my opinion, can integrate in a MUCH nicer way
with MEL than any of those languages. Python and Perl would be my 2nd
and 3rd option respectively. I discard python because I HATE, HATE, HATE
whitespace as a syntax and would not want to have to deal with stuff
like that in the scriptEditor.
Perl I discarded due to its bad OO support in comparison to the other two
and perl6 being still in limbo.
I see Ruby as the language that will keep growing, together
with python.
Some people will like python better. Others, like me, having tried
python did not like it at all and want to stay away from it, even if
I respect some of the really good technical things about it.

Чт мар 02, 2006 14:56 pm

Ну, это обычное IMHO. За и против можно в инете нарыть массы мнений. Единственное, что я там увидел реально "за", это просто то, что Ruby больше подходит к его задаче. А раз подходит, значит язык более правильный... ДЛЯ ЭТОЙ ЗАДАЧИ.

А про отступы это все гонят по-началу (((:
Просто есть задачи, под которые НАДО содержать програмный комплекс в стерильной чистоте и порядке (большинство!), а есть задачи, где нужно просто написать это и не париться(типа отдать команду и т.н. one-liners).

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

ПС: А вообще, sutra56680.php :arrow:

Пт мар 03, 2006 12:49 pm

Ну да, это просто одно из мнений...
Вот я и хотел бы послушать, может кто еще чего скажет интересного...
Я просто тоже вот раздумываю по поводу изучения одно из этих языков, пока вот выбор мой между Python и Ruby. Это для меня, так сказать, просто для общего развития, потом может и пригодится в реальной работе :)
Но по ходу дела тут практически никто не работал с этими языками или просто не хотят говорить ничего.

Пт мар 03, 2006 14:34 pm

Оказывается в Ruby нет нормального юникода. А есть туча библиотек и шаманских способов (в духе brute-C) обхода этой проблемы. При чём обещали ещё год назад всё починить... ): Вот такой-вот show-stopper..

Пт мар 03, 2006 16:08 pm

Puppet писал(а):Я просто тоже вот раздумываю по поводу изучения одно из этих языков, пока вот выбор мой между Python и Ruby. Это для меня, так сказать, просто для общего развития, потом может и пригодится в реальной работе :)
Если хочешь что-то изучить, изучи лучше вот это - пригодится 100%. А вот Python или Ruby - сомневаюсь.

Пт мар 03, 2006 18:18 pm

вот, дейсвтительно интересная ссылка. но думаю что такая книга хороша не только для С, но и для SQL, PHP и других языков. Насколько я сейчас понимаю, быьт без C хорошим и хорошо оплачиваемым програмистом очень не сложно.

PS. Но С все равно рулез ;-)

Пт мар 03, 2006 19:42 pm

Если хочешь что-то изучить, изучи лучше вот это - пригодится 100%. А вот Python или Ruby - сомневаюсь.

Ну это так сказать для повышения качества програмирования, а не для его изучения :)
А вот скриптовые языки типа Python, Ruby или Perl могут реально пригодиться в производстве.

А за линку на книгу спасибо, если увижу в продаже может куплю.

Пн мар 06, 2006 19:20 pm

Если кому то интересно, вот небольшой кусок из доки по Ruby о разнице между языками:

Python and Ruby are both object oriented languages that provide a smooth transition from procedural to OO programming styles. Smalltalk, by contrast, is object only - you can’t do anything until you understand objects, inheritance and the sizable Smalltalk class hierarchy. By providing procedural training wheels, Python and Ruby ``fix’’ one of the features that may have kept Smalltalk out of the mainstream. The two languages differ by approaching this solution from opposite directions.

Python is a hybrid language. It has functions for procedural programming and objects for OO programming. Python bridges the two worlds by allowing functions and methods to interconvert using the explicit ``self’’ parameter of every method def. When a function is inserted into an object, the first argument automagically becomes a reference to the receiver.

Ruby is a pure OO language that can masquerade as a procedural one. It has no functions, only method calls. In a Ruby method the receiver, also called self, is a hidden argument like ``this’’ in C++. A ``def’’ statement outside of a class definition, which is a function in Python, is actually a method call in Ruby. These ersatz functions become private methods of class Object, the root of the Ruby class hierarchy. Procedural programming is neatly solved from the other direction - everything is an object. If the user doesn’t grok objects yet, they can just pretend that ``def’’ is a function definition and still get useful work done.

Ruby’s OO purity provides a number features that Python lacks or is still working toward: a unified type/class hierarchy, metaclasses, the ability to subclass everything, and uniform method invocation (none of this len() is a function but items() is a method rubbish). Ruby, like Smalltalk, only supports single inheritance, but it does have a very powerful mix-in concept: a class definition may include a module, which inserts that module’s methods, constants, etc. into the class.

Ruby, again like Smalltalk, provides closures and code blocks and uses them to the same good effect. The Ruby collection classes and iterators are outstanding, much more powerful and elegant than the ad hoc solutions that Python is sprouting (lambdas and list comprehensions).

Ruby’s syntax and design philosophy are heavily influenced by Perl. It has a lot of syntactic variability. Statement modifiers (if, unless, while, until, etc.) may appear at the end of any statement. Some key words are optional (the ``then’’ in an ``if’’ statement for example). Parentheses may sometimes be elided in method calls. The receiver of a method may usually be elided. Many, many things are lifted directly from Perl. Built in regular expressions, $_ and friends, here documents, the single-quoted / double-quoted string distinction, $ and @ prefixes to distinguish different kinds of names and so forth.

If you like Perl, you will like Ruby and be right at home with its syntax. If you like Smalltalk, you will like Ruby and be right at home with its semantics. If you like Python, you may or may not be put off by the huge difference in design philosophy between Python and Ruby/Perl.

Ruby is much more complex than Python but its features, for the most part, hang together well. Ruby is well designed and full of neat ideas that might be mined for P3K. I’m not sure how many Python programmers will be attracted to it though - it hasn’t won me over (yet). But it is worthy of serious study and could be a real threat to Perl.

Вот еще кстати интересная табличка:
http://www.approximity.com/ruby/Compari ... _java.html

Пн мар 06, 2006 20:38 pm

Puppet писал(а):Python is a hybrid language. It has functions for procedural programming and objects for OO programming.

А ещё в нём есть возможности функционального програмирования. (map, filter, lambda и пр.)

Puppet писал(а):Python bridges the two worlds by allowing functions and methods to interconvert using the explicit ``self’’ parameter of every method def.

Это вполне по-питонски: explicit is better than implicit. Хотя метаклассы у него... мда...

Puppet писал(а):Ruby’s OO purity provides a number features that Python lacks or is still working toward: a unified type/class hierarchy,

Это они на свой Object намекают? Питон в этом отношении более в стиле unix-минимализма.

Puppet писал(а):metaclasses

Метаклассы есть давно уже. Они с каким-то старым питоном сравнивают...

Puppet писал(а):the ability to subclass everything

Есть такая возможность. Сам периодически использую базовые классы в качестве основы/шаблона для своих.

Puppet писал(а):uniform method invocation (none of this len() is a function but items() is a method rubbish).

len(obj) и obj.items() просто для принципиально разных случаев. Поэтому одно функция, а другое метод. Не всегда нужна "униформа".

Puppet писал(а):a class definition may include a module, which inserts that module’s methods, constants, etc. into the class.

Да, в питоне хоть нельзя создать класс, базой для которого является не абстрактная идея, а объект -- модуль. Это "мешать кислое с тапком". Не просто две идеи, а идея с объектом. нафик-нафик.

Puppet писал(а):Ruby, provides closures and code blocks

Этого да, некоторым нехватает.

Puppet писал(а):more powerful and elegant than the ad hoc solutions that Python is sprouting (lambdas and list comprehensions).

Опять неверное сравнение. Лямбды и генераторы список совсем для разного нужны чем closures.

Puppet писал(а):Ruby’s syntax and design philosophy are heavily influenced by Perl.

ДА! ДА! ДА! Именно. Bingo!
Это пожалуй единственная причина, почему я даже не стал изучать Ruby и RoR. Перловая каша в больших проектах просто невыносима. :evil:

Puppet писал(а):It has a lot of syntactic variability.

Целая серия гвоздей в гроб в общем-то хорошего языка Ruby:

Puppet писал(а):Statement modifiers (if, unless, while, until, etc.) may appear at the end of any statement.

Гвоздь! Представьте себе, как вы читаете код в отладчике. Читаете, читаете, читаете... А потом вдруг р-р-раз!, и оказывается, что это всё выполнятся не будет. Вы когда-нибудь пробовали забивать гвозди шляпкой вперёд?

Puppet писал(а):Some key words are optional

Гвоздь! Нктр бкв мжн н псть! Офигительная радость - гвозди без шляпок.

Puppet писал(а):Parentheses may sometimes be elided in method calls.

Гвоздь! Смотрите в код а там написано нечто и непонятно, толи это переменная, толи метод... Продолжение предыдущего гвоздя.

Puppet писал(а):The receiver of a method may usually be elided. Many, many things are lifted directly from Perl. Built in regular expressions, $_ and friends, here documents, the single-quoted / double-quoted string distinction, $ and @ prefixes to distinguish different kinds of names and so forth.

Много чего ещё можно не писать. Да можно вообще программу не писать! :P
А самое главное, это её потом не читать. А то будет перелом мозга.

Puppet писал(а):Ruby is much more complex than Python but its features,

Наши гвозди, такие же гибкие и мягкие как и перловые! Ими практически нельзя пораниться! Офигительное достоинство для гвоздя.

Питон это один из немногих языков, на которых пишешь со скоростью мысли. Совершенно не думая о том, как эту мысль завернуть в код.
Поэтому питон так лёгок для изучения и применения.

Puppet писал(а):Вот еще кстати интересная табличка:

По ней выходит, что никакой разницы в возможностях между P и R нет.. ((8

Пн мар 06, 2006 22:30 pm

wiz, а ты сам какие языки пробовал использовать, ну с какими знаком? ruby пробовал или ты комментируешь исходя из предоставленной здесь информации? Мне просто интересно.
Просто с одной стороны я тут читаю что все (ну или много чего) плохо, а с другой стороны слышу восторженные крики наших програмистов о ruby :) что все круто :) И все идет к тому что ruby возможно станет скоро нашим штатным скриптовым языком :)

А по поводу нечитабельности ruby кода я вот не уверен, что там так же как в перле :) слышал как раз обратное, про чистый и читабельный код.
Я не хочу ни с кем спорить мне просто интересна информация.

Кстати, тут читал доку по руби и наткнулся вот на что:

Ruby is interpreted - The parser creates an a syntax tree that is walked. Future plans for Ruby are to move it closer to a compiled language. These include projects to create a RubyVM (code-named Rite) as well as Cardinal (Ruby frontend for the ParrotVM).

Кто нибудь знает такое есть или планируется в каком нибудь другом языке?

Вт мар 07, 2006 13:03 pm

Puppet писал(а):wiz, а ты сам какие языки пробовал использовать, ну с какими знаком?

активно практиковал: паскаль/дельфи, c, perl, php, python, JS, SQL, русский :lol:
читал/правил: x86 asm, basic, lua, lisp, bash
остальные на уровне "понимаю"

Puppet писал(а):ruby пробовал или ты комментируешь исходя из предоставленной здесь информации?

ruby я проходил туториал ихний и читал код, style guide и пр. документы.

Puppet писал(а):Просто с одной стороны я тут читаю что все (ну или много чего) плохо а с другой стороны слышу восторженные крики наших програмистов о ruby :)

А какой у них язык до этого был? Если перл/си, то я их понимаю. Ruby будет удобней.

Puppet писал(а):что все круто :) И все идет к тому что ruby возможно станет скоро нашим штатным скриптовым языком :)

"Скриптовым языком" это да. Это как раз его ниша. Тут он питон, пожалуй, разруливает. Для меня Ruby скорее как Lua, внутрений язык приложения.
Python гораздо ближе к универсальному (скажем так "неспецифичному") языку типа Java для написания приложений и систем. На нём так и пишут: сначала вся система доводится до рабочего состояния на Python, а потом точечная оптимизация (полуавтоматизированая) узких мест на C. В результате сложные места описаны максимально просто, а требовательные - максимально экономно. По-моему это весьма здравый подход. (=

Puppet писал(а):А по поводу нечитабельности ruby кода я вот не уверен, что там так же как в перле :) слышал как раз обратное, про чистый и читабельный код.

Будем надеяться (%

Puppet писал(а):Ruby is interpreted - The parser creates an a syntax tree that is walked. Future plans for Ruby are to move it closer to a compiled language.

Ага. Оно заметно медленней питона и остальных языков по тестовым замерам.

Puppet писал(а):These include projects to create a RubyVM (code-named Rite) as well as Cardinal (Ruby frontend for the ParrotVM). Кто нибудь знает такое есть или планируется в каком нибудь другом языке?

Ну виртуальные машины они почти у всех скриптов есть. А ParrotVM это изначально-перловая VM, созданая для Perl6, но оказалось, что в неё можно практически любой язык всунуть. Она ещё в глубокой разработке, но весьма скоро уже будут первые плоды. Эдакий ".Org" (как .Net, но от сообщества) :roll:

Вт мар 07, 2006 13:24 pm

Ага, спасибо за ответы...

А какой у них язык до этого был? Если перл/си, то я их понимаю. Ruby будет удобней.

Ну как такового штатного скриптового языка у нас до этого не было, так использовали немного С, Perl, Mel, Alfred script и cmd для разных целей, но это все по мелочи, а так все рулилось в основном программами, а не скриптами.
Сейчас просто система усложняется, например, разрабатывается система управления толпами и тут нужно дать пользователю управлять этой системой задавая различные условия и тп. Вот это и есть один из случаев где мы хотим использовать ruby, потому как вроде руби хорошо встраивается, tcl это вроде делает лучше, но его не будем трогать :)
Так же ruby мы наверное будем использовать для запуска разных команд, приложений и тп. для парсинга и редактирования достаточно больших фаилов на лету, проверки синтаксиса....

Лично я имею небольшой опыт работы на C++ и Mel(тут смесь C, Perl и еще чего то), поэтому я хотел бы изучать языки со схожей идеалогией, чтобы так сказать сильно не переучиваться :)

Вт мар 07, 2006 14:21 pm

Puppet писал(а):поэтому я хотел бы изучать языки со схожей идеалогией, чтобы так сказать сильно не переучиваться :)

"Я хочу измениться, но так, чтобы при этом всё осталось по-старому." :P

Раз у вас там уже собралась партия "рубистов", то тебе будет тяжело учиться питону или ещё чему-нибудь (:

Кстати, заметил, что адепты Ruby очень экзальтировано относятся к своему языку. Недаром в Японии существует древняя традиция сект. :twisted: :P
Ответить