Last login: Mon Dec 31 08:27:51 on ttys004
tmp $ diff web2py-spell-1.txt web2py-spell-2.txt
6c6
< +''Ease of use''. This means reducing the learning and deployment time as well as devlopment and maintenance costs. This is why ``web2py`` is a full-stack framework without dependencies. It requires no installation and has no configuration files. Everything works ''out of the box'', including a web server, database and a web-based IDE that gives access to all the main features. The API includes just 12 core objects, which are easy to work with and memorize. It can interoperate with most web servers, databases and all Python libraries.
---
> +''Ease of use''. This means reducing the learning and deployment time as well as development and maintenance costs. This is why ``web2py`` is a full-stack framework without dependencies. It requires no installation and has no configuration files. Everything works ''out of the box'', including a web server, database and a web-based IDE that gives access to all the main features. The API includes just 12 core objects, which are easy to work with and memorize. It can interoperate with most web servers, databases and all Python libraries.
15c15
< +This code embeds a fully working wiki with tags, search, tag cloud, permissions, media attachments, adn oembed support:
---
> +This code embeds a fully working wiki with tags, search, tag cloud, permissions, media attachments, and oembed support:
27,28c27,28
< +- Easy for users to learn server-side web development without compromising functionality. For this reason, web2py requires no installation and no configuration, has no dependencies (except for the source code distribution, which requires Python 2.5 and its standard library modules), and exposes most of its functionality via a Web interface, incuding an Integrated Development Environment with Debugger and database interface.
< +- web2py has a small footprint and is very fast. It uses the Rocket``rocket``:cite WSGI web server developed by Timothy Farrell. It is as fast as Apache with mod_wsgi, supports ssl and IPv6.
---
> +- Easy for users to learn server-side web development without compromising functionality. For this reason, web2py requires no installation and no configuration, has no dependencies (except for the source code distribution, which requires Python 2.5 and its standard library modules), and exposes most of its functionality via a Web interface, including an Integrated Development Environment with Debugger and database interface.
> +- web2py has a small footprint and is very fast. It uses the Rocket``rocket``:cite WSGI web server developed by Timothy Farrell. It is as fast as Apache with mod_wsgi, and supports SSL and IPv6.
70c70
< + label='what is yout name?',
---
> + label='what is your name?',
89c89
< +You code is likely to include hardcoded strings such as "What is your name?". You should be able to customize strings without editing the code and in particular insert translations for these strings in different languages. In this wasy if a visitor has the language preference of the browser set to "Italian", web2py will use the Italian translation for the strings, if available. This feature of web2py is called "internationalization" and it is described in more detail in the next chapter.
---
> +You code is likely to include hardcoded strings such as "What is your name?". You should be able to customize strings without editing the code and in particular insert translations for these strings in different languages. In this way if a visitor has the language preference of the browser set to "Italian", web2py will use the Italian translation for the strings, if available. This feature of web2py is called "internationalization" and it is described in more detail in the next chapter.
91c91
< +Here we just observe that in order to use this feature you should markup strings that need stranslation. This is done by wrapping a a quoted string in code such as
---
> +Here we just observe that in order to use this feature you should markup strings that needs translation. This is done by wrapping a a quoted string in code such as
118c118
< +Once the strings are indentified and marked up, web2py takes care of almost evrything else. The admin interface also provides a page where you can translate each string in the languages you desire to support.
---
> +Once the strings are identified and marked up, web2py takes care of almost everything else. The admin interface also provides a page where you can translate each string in the languages you desire to support.
197c197
< +Here we assume we are starting from cratch from a simple clone of the "welcome" application called "wikidemo". Edit the controller and replace the "index" action with
---
> +Here we assume we are starting from scratch from a simple clone of the "welcome" application called "wikidemo". Edit the controller and replace the "index" action with
253,255c253,255
< +- ``render`` which defaults to ``'markmin'`` but can be set equal to ``'html'``. It termines the syntax of the wiki. We will discuss the makrmin wiki markup later. If you change it to HTML you may want to use a wysiwyg javascript editor such as TinyMCE of NicEdit.
< +- ``manage_permissions``. This is set to ``False`` by default and only recognizes permissions for "wiki-editor" and "wiki-author". If you change it to ``True`` the create/edit page will give the option to specify by names the groups whose members have permssion to read and edit the page. In this case is a group "everybody" to give read permission to everybody.
< +- ``force_prefix``. If set to something like ``'%(id)s-'`` it will restict authors (not editors) to create page with a prefix like "[user id]-[page name]". The prefix can contain the id ("%(id)s") or the username ("%(username)s") or any other field from the auth_user table, as long as the corresponding column contains valid string that would pass URL validation.
---
> +- ``render`` which defaults to ``'markmin'`` but can be set equal to ``'html'``. It termines the syntax of the wiki. We will discuss the markmin wiki markup later. If you change it to HTML you may want to use a wysiwyg javascript editor such as TinyMCE of NicEdit.
> +- ``manage_permissions``. This is set to ``False`` by default and only recognizes permissions for "wiki-editor" and "wiki-author". If you change it to ``True`` the create/edit page will give the option to specify by names the groups whose members have permission to read and edit the page. In this case is a group "everybody" to give read permission to everybody.
> +- ``force_prefix``. If set to something like ``'%(id)s-'`` it will restrict authors (not editors) to create page with a prefix like "[user id]-[page name]". The prefix can contain the id ("%(id)s") or the username ("%(username)s") or any other field from the auth_user table, as long as the corresponding column contains valid string that would pass URL validation.
257c257
< +- ``menugroups``. This defaults to ``None`` and it indictates that wiki management menu (search, create, edit, etc.) is always displayed. You can set it to a list of group names whose members only can see this menu, for exmaple ``['wiki-editor','wiki-author']``. Notice that even if the menu is exposed to everybody does not mean everybody is allowed to perform actions listed in the menu since they are regulated by the access control system.
---
> +- ``menugroups``. This defaults to ``None`` and it indicates that wiki management menu (search, create, edit, etc.) is always displayed. You can set it to a list of group names whose members only can see this menu, for example ``['wiki-editor','wiki-author']``. Notice that even if the menu is exposed to everybody does not mean everybody is allowed to perform actions listed in the menu since they are regulated by the access control system.
283c283
< +``auth.wiki`` is more powerful than the barebone MARKMIN helpers. In fact it supports oembed and components.
---
> +``auth.wiki`` is more powerful than the barebones MARKMIN helpers, supporting oembed and components.
299c299
< +This call the join function passed as extra with parameters ``a,b,c=1,2,3`` and will be redered as ``1-2-3``.
---
> +This call the join function passed as extra with parameters ``a,b,c=1,2,3`` and will be rendered as ``1-2-3``.
309c309
< +- If the URL points to a Youtube page, a Viemo page, or a Flickr page, web2py contacts the corrsponding web service and queries it about the propor way to embed the contect. This is done using the ``oembed`` protocol.
---
> +- If the URL points to a Youtube page, a Vimeo page, or a Flickr page, web2py contacts the corresponding web service and queries it about the proper way to embed the content. This is done using the ``oembed`` protocol.
349c349
< +This is implemeneted in the web2py file ``gluon.contrib.autolinks`` and specifically in the function ``expand_one``. You can extend oembed support by registering more services. This is done by appending an entry to the ``EMBED_MAPS`` list:
---
> +This is implemented in the web2py file ``gluon.contrib.autolinks`` and specifically in the function ``expand_one``. You can extend oembed support by registering more services. This is done by appending an entry to the ``EMBED_MAPS`` list:
352c352
< +from gluon.contrib.autlinks import EMBED_MAPS
---
> +from gluon.contrib.autolinks import EMBED_MAPS
373c373
< +Similarly you can use the wiki menu to upload a media file (for example an image) linked to the page. The "manage media" page will show all files you have uploaded and will show the proper expression to link the media file. If, for example you upload a file "test.jpg" with title "beach", the link expression will somthing like:
---
> +Similarly you can use the wiki menu to upload a media file (for example an image) linked to the page. The "manage media" page will show all files you have uploaded and will show the proper expression to link the media file. If, for example you upload a file "test.jpg" with title "beach", the link expression will something like:
394c394
< +- - Countact us > \@////contactus
---
> +- - Contact us > \@////contactus
397c397
< +Each line a menu item. We used double dash for nested menu ites. The ``>`` symbols separates the menu item title from the menu item link.
---
> +Each line a menu item. We used double dash for nested menu items. The ``>`` symbols separates the menu item title from the menu item link.
407c407
< +Notice that there is nothing special with the word "sidebar". Any wiki page can be retrieved and emebdded in any point in your code. This allows you mix and match wiki functionalities with regular web2py functionalities.
---
> +Notice that there is nothing special with the word "sidebar". Any wiki page can be retrieved and embedded in any point in your code. This allows you mix and match wiki functionalities with regular web2py functionalities.
445c445
< +This allows the visitor interact with the component via Ajax without reloadin the host page that embeds the widget. Basically the action is called via Ajax, inherits the stile of the host page, and capture all forms submissions and flash messages so that thye are handled within the current page. On top of this the ``SQLFORM.grid`` widget uses digitally signed URLs to restrict access. More informaiton about components can be found in chapter 13.
---
> +This allows the visitor interact with the component via Ajax without reloading the host page that embeds the widget. Basically the action is called via Ajax, inherits the stile of the host page, and capture all forms submissions and flash messages so that they are handled within the current page. On top of this the ``SQLFORM.grid`` widget uses digitally signed URLs to restrict access. More information about components can be found in chapter 13.
456c456
< +Most users will be able to build relatively complex applications simply by using ``auth.wiki`` to create pages and menus, and embedded custom components into wiki pages. Wiki can be tough as a mechanism to allow members of the group to create pages but they calso be though as a way to develop applications in a modular way.
---
> +Most users will be able to build relatively complex applications simply by using ``auth.wiki`` to create pages and menus and embedded custom components into wiki pages. Wikis can be thought of as a mechanism to allow members of the group to create pages, but they can also be thought of as a way to develop applications in a modular way.
475,476c475,476
< +If you run web2py from source and you have ``pyhton-git`` installed, you can install applications directly from git reporsitory using the ``.git`` URL in the upload form. In this case you will also be used to user the admin interface to push changes back into the repository.
< +If the Google App Engine SDK is installer the admin ''site'' page shows a button to push your applications to GAE. If ``python-git`` is installed, there is also a button to push your application to Open Shift. To install applications on ``heroku`` or other hosting system you should look into the "scripts" folder for the appropriate script.
---
> +If you run web2py from source and you have ``python-git`` installed, you can install applications directly from git repository using the ``.git`` URL in the upload form. In this case you will also be used to user the admin interface to push changes back into the repository.
> +If the Google App Engine SDK is installer the admin ''site'' page shows a button to push your applications to GAE. If ``python-git`` is installed, there is also a button to push your application to Open Shift. To install applications on ``Heroku`` or other hosting system you should look into the "scripts" folder for the appropriate script.
480c480
< +##### Intergated debugger
---
> +##### Integrated debugger
490c490
< +and frontend, with a JSONRPC-like stream protocol. ``qdb``:cite
---
> +and frontend, with a JSON-RPC-like stream protocol. ``qdb``:cite
507c507
< +Notice that the admin application includes "plugin_jqmodile" which packages jQuery Mobile. When admin is accessed from a mobile devide, this is detected by web2py and the interface is displayed using a mobile friendly layout.
---
> +Notice that the admin application includes "plugin_jqmodile" which packages jQuery Mobile. When admin is accessed from a mobile device; this is detected by web2py and the interface is displayed using a mobile-friendly layout.
629c629
< +``response.headers``: a ``dict`` for HTTP response headers. Web2py sets some headers by default, including "Content-Length", "Content-Type", and "X-Powered-By" (set equal to web2py). Web2py also sets the "Cache-Control", "Expires", and "Pragma" headers to prevent client-side caching, except for static file requests, for which client-side caching is enabled. The headers that web2py sets can be overwritten or removed, and new headers can be added (e.g., ``response.headers['Cache-Control'] = 'private'``). You can remove a header removing its key from the response.headers dict, e.g.``del response.headers['Custom-Header']``, however web2py's default headers will be re-added just before returning the response. To avoid this behaviour, just set the header value to None, e.g. to remove the default Content-Type header, ``response.headers['Content-Type'] = None``
---
> +``response.headers``: a ``dict`` for HTTP response headers. Web2py sets some headers by default, including "Content-Length", "Content-Type", and "X-Powered-By" (set equal to web2py). Web2py also sets the "Cache-Control", "Expires", and "Pragma" headers to prevent client-side caching, except for static file requests, for which client-side caching is enabled. The headers that web2py sets can be overwritten or removed, and new headers can be added (e.g., ``response.headers['Cache-Control'] = 'private'``). You can remove a header removing its key from the response.headers dict, e.g.``del response.headers['Custom-Header']``, however web2py's default headers will be re-added just before returning the response. To avoid this behavior, just set the header value to None, e.g. to remove the default Content-Type header, ``response.headers['Content-Type'] = None``
632c632
< +``response._caller``: this is a function that wraps all action calls. It defaults to the idenity function but it can be modifed in order to catch special types of exception of do extra logging;
---
> +``response._caller``: this is a function that wraps all action calls. It defaults to the identity function, but it can be modifed in order to catch special types of exception to do extra logging;
656c656
< +``compression_level`` is an optionl ``zlib`` encryption level.
---
> +``compression_level`` is an optional ``zlib`` encryption level.
675c675
< +In the case multiple languages are requested, for example "it-it, fr-ft", web2py tries to locate "it-it.py" and "fr-fr.py" translation files. If none of the requested files is present, it tries to fallback on "it.py" and "fr.py". If these files are not present it defaults to "default.py". If this is not present either, it default to no-translation. The more genral rule is that web2py tries "xx-xy-yy.py", "xx-xy.py", "xx.py", "default.py" for each of the "xx-xy-yy" accepted languages trying to find the closest match to the visitor's preferences.
---
> +In the case multiple languages are requested, for example "it-it, fr-ft", web2py tries to locate "it-it.py" and "fr-fr.py" translation files. If none of the requested files is present, it tries to fallback on "it.py" and "fr.py". If these files are not present it defaults to "default.py". If this is not present either, it default to no-translation. The more general rule is that web2py tries "xx-xy-yy.py", "xx-xy.py", "xx.py", "default.py" for each of the "xx-xy-yy" accepted languages trying to find the closest match to the visitor's preferences.
688c688
< +prevents T from dynamically updating langauge files.
---
> +prevents T from dynamically updating language files.
692c692
< +It is possible that the same string appers in different contexts in the application and needs different translations based on context. In order to do this, one can add comments to the original string. The comments will not be rendered but will be used by web2py to determine the most appropriate translation. For example:
---
> +It is possible that the same string appears in different contexts in the application and needs different translations based on context. In order to do this, one can add comments to the original string. The comments will not be rendered but will be used by web2py to determine the most appropriate translation. For example:
695,696c695,696
< +T("hello world ## first occurence")
< +T("hello world ## second occurence")
---
> +T("hello world ## first occurrence")
> +T("hello world ## second occurrence")
699c699
< +The text folloing the ``##``, including the double ``##``, are comments.
---
> +The text following the ``##``, including the double ``##``, are comments.
716c716
< +English has one singular form and one plural form. The plural form is constructed by adding a "-s" or "-es" or using an exceptional form. web2py provides a way to define pluralization rules for each languages, as well as exceptions to the default rules. In fact web2py already knows pluralization rules for many languages. It knows, for example, that Slovenian has one singular form and 3 plural forms (for x==1, x==3 or x==4 and x>4). These ules are encoded in "gluon/contrib/plural_rules/*.py" files and new files can be created. Explicit pluralizations for words are created by editing pluralization files using the administrative interface.
---
> +English has one singular form and one plural form. The plural form is constructed by adding a "-s" or "-es" or using an exceptional form. web2py provides a way to define pluralization rules for each languages, as well as exceptions to the default rules. In fact web2py already knows pluralization rules for many languages. It knows, for example, that Slovenian has one singular form and 3 plural forms (for x==1, x==3 or x==4 and x>4). These rules are encoded in "gluon/contrib/plural_rules/*.py" files and new files can be created. Explicit pluralizations for words are created by editing pluralization files using the administrative interface.
820c820
< +#### Translations, plurlaization, and MARKMIN
---
> +#### Translations, pluralization, and MARKMIN
871c871
< +When an application is in development, static file can change often, therefore web2py sends static files with no cache headers. This has the side-effect of "forcing" the browser to request static files at every request. This resulst in low performance when loading the page.
---
> +When an application is in development, static file can change often, therefore web2py sends static files with no cache headers. This has the side-effect of "forcing" the browser to request static files at every request. This results in low performance when loading the page.
879c879
< +A manual approach consists of creating subfolders for different versions of static files. For example an early version of "layout.css" can be made available at the URL "/myapp/static/css/1.2.3/layout.css". When you cahnge the file, you create a new subfolder and you link it as "/myapp/static/css/1.2.4/layout.css".
---
> +A manual approach consists of creating subfolders for different versions of static files. For example an early version of "layout.css" can be made available at the URL "/myapp/static/css/1.2.3/layout.css". When you change the file, you create a new subfolder and you link it as "/myapp/static/css/1.2.4/layout.css".
881c881
< +This procedure works but it is pedantic since everytime you update the css file, you must remember to move it to another folder, change the url of the file in your layout.html and deploy.
---
> +This procedure works but it is pedantic since every time you update the css file, you must remember to move it to another folder, change the URL of the file in your layout.html and deploy.
892c892
< +Notice tha URL starts with "/myapp/static/", followed by a version number composed by an underscore and 3 integers separated by a period (as descrived in [[SemVer
http://semver.org/]]), then followed by the filename. Also notice that you do not have to create a "_1.2.3/" folder.
---
> +Notice that the URL starts with "/myapp/static/", followed by a version number composed by an underscore and 3 integers separated by a period (as described in [[SemVer
http://semver.org/]]), then followed by the filename. Also notice that you do not have to create a "_1.2.3/" folder.
961c961
< +The task is schduled with
---
> +The task is scheduled with
1041c1041
< +Another nice addition, you can set how many times the function can raise an exception (i.e. requesting data from a sloooow webservice) and be queued again instead of stopping in **FAILED** status with the parameter ``retry_failed`` (default = 0, -1 = unlimited).
---
> +Another nice addition, you can set how many times the function can raise an exception (i.e. requesting data from a slow webservice) and be queued again instead of stopping in **FAILED** status with the parameter ``retry_failed`` (default = 0, -1 = unlimited).
1075c1075
< +scheduler.queur_task(
---
> +scheduler.queue_task(
1115c1115
< +Notice that halpers can be repeated using the multiplication operator:
---
> +Notice that helpers can be repeated using the multiplication operator:
1233c1233
< +- It uses a modified version of Twitter Boostrap for flexible layouts which works on mobile devices and re-arranges columns to fit small screens.
---
> +- It uses a modified version of Twitter Bootstrap for flexible layouts which works on mobile devices and re-arranges columns to fit small screens.
1239c1239
< +- "css/bootstrap.min.css" contains the Twitter Boostrap CSS style ``bootstrap``:cite ``Bootstrap``:inxx
---
> +- "css/bootstrap.min.css" contains the Twitter Bootstrap CSS style ``bootstrap``:cite ``Bootstrap``:inxx
1299c1299
< +- ``uploadfs`` allows you specify a different filessystem where to upload files, including an Amazon S3 storage or a remote FTP storage. This option requires PyFileSystem installed. ``uploadfs`` must point to ``PyFileSystem``. ``PyFileSystem``:inxx ``uploadfs``:idxx
---
> +- ``uploadfs`` allows you specify a different file system where to upload files, including an Amazon S3 storage or a remote FTP storage. This option requires PyFileSystem installed. ``uploadfs`` must point to ``PyFileSystem``. ``PyFileSystem``:inxx ``uploadfs``:idxx
1311c1311
< +The argument is in raw SQL and thefeore engine specific.
---
> +The argument is in raw SQL and therefore engine specific.
1428c1428
< +Row objects can be conbined at the Python level. Here we assume:
---
> +Row objects can be combined at the Python level. Here we assume:
1465c1465
< +Sort takes an optional argment ``reverse=True`` which an obvious meaning.
---
> +Sort takes an optional argument ``reverse=True`` which an obvious meaning.
1696c1696
< +When the ``cache`` argument is set but ``cacheable=False`` (default) only the database results are cached, not the actual Rows object. When the ``cache`` argument is used in conjuction with ``cacheable=True`` the entire Rows object is cached and this results in much baster caching:
---
> +When the ``cache`` argument is set but ``cacheable=False`` (default) only the database results are cached, not the actual Rows object. When the ``cache`` argument is used in conjunction with ``cacheable=True`` the entire Rows object is cached and this results in much baster caching:
1706c1706
< +Notice that the alterantive notation of using a table object as field type will fail in this case, because it uses a variable ``db.person`` before it is defined:
---
> +Notice that the alternative notation of using a table object as field type will fail in this case, because it uses a variable ``db.person`` before it is defined:
1844c1844
< +The DAL supports geographical APIs using PostGIS (for PostgreSQL), spatialite (for SQLite), and MSSQL and Spatial Extensions. This is a feature that was sponosred by the Sahana project and implemented by Denes Lengyel.
---
> +The DAL supports geographical APIs using PostGIS (for PostgreSQL), spatialite (for SQLite), and MSSQL and Spatial Extensions. This is a feature that was sponsored by the Sahana project and implemented by Denes Lengyel.
1887c1887
< +You can also do the same more explicitely using ``st_astext()``:
---
> +You can also do the same more explicitly using ``st_astext()``:
1917c1917
< +3,"POLYGNON ((0 0, 150 0, 150 150, 0 150, 0 0))"
---
> +3,"POLYGON ((0 0, 150 0, 150 150, 0 150, 0 0))"
2157c2157
< +For a single mail account, this is the code recommended to start imap support at the app's model
---
> +For a single mail account, this is the code recommended to start IMAP support at the app's model
2161c2161
< +# Set port as 993 for ssl support
---
> +# Set port as 993 for SSL support
2166c2166
< +Note that ``<imapdb>.define_tables()`` returns a dictionary of strings mapping dal tablenames to the server mailbox names with the structure ``{<tablename>: <server mailbox name>, ...}``, so you can get the actual mailbox name in the IMAP server.
---
> +Note that ``<imapdb>.define_tables()`` returns a dictionary of strings mapping DAL tablenames to the server mailbox names with the structure ``{<tablename>: <server mailbox name>, ...}``, so you can get the actual mailbox name in the IMAP server.
2177c2177
< +The first can be useful to retrieve imap query sets by the native email service mailbox
---
> +The first can be useful to retrieve IMAP query sets by the native email service mailbox
2186c2186
< +Here's a list of imap commands you could use in the controller. For the examples, it's assumed that your imap service has a mailbox named ``INBOX``, which is the case for Gmail(r) accounts.
---
> +Here's a list of IMAP commands you could use in the controller. For the examples, it's assumed that your IMAP service has a mailbox named ``INBOX``, which is the case for Gmail(r) accounts.
2210c2210
< +**Note**: It's strongly adviced that you keep the query results below a given data size threshold to avoid jamming the server with large select commands. As of now, the messages are retrieved entirely by the adapter before any filter by field can be applied.
---
> +**Note**: It's strongly advised that you keep the query results below a given data size threshold to avoid jamming the server with large select commands. As of now, the messages are retrieved entirely by the adapter before any filter by field can be applied.
2230c2230
< +Note that using the message's id as reference is not recommended, because sequence numbers can change with mailbox mantainance operations as message deletions. If you still want to record references to messages (i.e. in another database's record field), the solution is to use the uid field as reference whenever supported, and retrieve each message with the recorded value.
---
> +Note that using the message's id as reference is not recommended, because sequence numbers can change with mailbox maintenance operations as message deletions. If you still want to record references to messages (i.e. in another database's record field), the solution is to use the uid field as reference whenever supported, and retrieve each message with the recorded value.
2250c2250
< +And of course, it's possible to feed a form helper with the appropiate sequence id value
---
> +And of course, it's possible to feed a form helper with the appropriate sequence id value
2283c2283
< +**WARNING**: As row id's are mapped to email sequence numbers, make sure your imap client web2py app does not delete messages
---
> +**WARNING**: As row id's are mapped to email sequence numbers, make sure your IMAP client web2py app does not delete messages
2287c2287
< +Standard ``CRUD`` database operations are not supported. There's no way of defining custom fields or tables and make inserts with different data types because updating mailboxes with IMAP services is usually reduced to posting flag updates to the server. Still, it's possible to access those flag commands trough DAL IMAP inteface
---
> +Standard ``CRUD`` database operations are not supported. There's no way of defining custom fields or tables and make inserts with different data types because updating mailboxes with IMAP services is usually reduced to posting flag updates to the server. Still, it's possible to access those flag commands through the DAL IMAP interface
2295c2295
< +Here we delete messages in the imap database that have mails from mr. Gumby
---
> +Here we delete messages in the IMAP database that have mails from mr. Gumby
2303c2303
< +It is possible also to mark messages for deletion instead of ereasing them
---
> +It is possible also to mark messages for deletion instead of erasing them
2311c2311
< +- ``auth_cas`` is used for Central Autheticatication Service (CAS). Every web2py application is a CAS provider and can optionally be a CAS consumer.
---
> +- ``auth_cas`` is used for Central Authentication Service (CAS). Every web2py application is a CAS provider and can optionally be a CAS consumer.
2321c2321
< +The ``password`` field of the ``db.auth_user`` table defaults to a ``CRYPT`` validator, which needs and ``hmac_key``. On legacy web2py applications you may see an extra argument passed to the Auth constructor: ``hmac_key = Auth.get_or_create_key()``. The latter is a function that read the hmac kay from a file "private/auth.key" within the application folder. If the file does not exist it creates a random ``hmac_key``. If multiple apps share the same auth database, make sure they also use the same ``hmac_key``. This is no loger necessary for new applications since passwords are salted with an individual random salt.
---
> +The ``password`` field of the ``db.auth_user`` table defaults to a ``CRYPT`` validator, which needs and ``hmac_key``. On legacy web2py applications you may see an extra argument passed to the Auth constructor: ``hmac_key = Auth.get_or_create_key()``. The latter is a function that read the HMAC key from a file "private/auth.key" within the application folder. If the file does not exist it creates a random ``hmac_key``. If multiple apps share the same auth database, make sure they also use the same ``hmac_key``. This is no loger necessary for new applications since passwords are salted with an individual random salt.
2324c2324
< +- **register** allows users to register. It is integrated with CAPTCHA, although this is disabled by default. This is also integrated with a client-side entropy calculator defined in "web2py.js". The calculator indictates the strenght of the new password. You can use the ``IS_STRONG`` validator to prevent web2py from accepting weak passwords.
---
> +- **register** allows users to register. It is integrated with CAPTCHA, although this is disabled by default. This is also integrated with a client-side entropy calculator defined in "web2py.js". The calculator indicates the strength of the new password. You can use the ``IS_STRONG`` validator to prevent web2py from accepting weak passwords.
2374c2374
< +although we do not suggest doing so. Notice that ``create_user_groups`` is not a boolean (althought it can be ``False``) but it defaults to:
---
> +although we do not suggest doing so. Notice that ``create_user_groups`` is not a boolean (although it can be ``False``) but it defaults to:
2412c2412
< +- Defines functions to the entropy calcluation and input validation of the password field.
---
> +- Defines functions to the entropy calculation and input validation of the password field.
2539,2541c2539,2541
< +Browsers can decompress content on-the-fly, so compressing content for those browsers saves your bandwith and theirs, lowering response times.
< +Nowadays pretty much all the webservers can compress your content on-the-fly and send it to the browsers requesting gzipped content.
< +However, for static files, you are wasting CPU cycles to compress over and over the same content.
---
> +Browsers can decompress content on-the-fly, so compressing content for those browsers saves your bandwidth and theirs, lowering response times.
> +Nowadays most web servers can compress your content on the fly and send it to the browsers requesting gzipped content.
> +However, for static files, you are wasting CPU cycles to compress the same content over and over.
2572c2572
< +The path prefix "/path/to/myfolder" will be hidden to the visitors. For example a file called "/path/to/myfolder/a/b.txt" and repaced with "base/a/b.txt". The "base" prefix can be specified using the ``basename`` argument of the Expose function. Using the argument ``extensions`` can specify a list of file extensions to be listed, other files will be hidden. For example:
---
> +The path prefix "/path/to/myfolder" will be hidden to the visitors. For example a file called "/path/to/myfolder/a/b.txt" and replaced with "base/a/b.txt". The "base" prefix can be specified using the ``basename`` argument of the Expose function. Using the argument ``extensions`` can specify a list of file extensions to be listed, other files will be hidden. For example:
2660c2660
< +Mind that in the case of Stripe and
Authorize.net your program will be accepting credit cards information. You do not have to store this information and we advise you not to because of the legal requirements involved (check with Visa or Mastercard), but there are times when you may want to store the information for recurrent payments or to reproduce the Amazon one-click pay button.
---
> +Mind that in the case of Stripe and
Authorize.net your program will be accepting credit cards information. You do not have to store this information and we advise you not to because of the legal requirements involved (check with Visa or MasterCard), but there are times when you may want to store the information for recurrent payments or to reproduce the Amazon one-click pay button.
tmp $