Deprecated: Optional parameter $default declared before required parameter $err_msg is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 1401

Deprecated: Optional parameter $memorize declared before required parameter $err_msg is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 1401

Deprecated: Optional parameter $default declared before required parameter $err_msg is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 2320

Deprecated: Optional parameter $memorize declared before required parameter $err_msg is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 2320

Deprecated: Creation of dynamic property GeneralSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Creation of dynamic property AbstractSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Optional parameter $coll_ID declared before required parameter $selected_value is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/collections/model/_blog.funcs.php on line 1942

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home4/tylering/public_html/b2e/inc/links/model/_link.funcs.php on line 1024

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home4/tylering/public_html/b2e/inc/links/model/_link.funcs.php on line 1024

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home4/tylering/public_html/b2e/inc/links/model/_link.funcs.php on line 1024

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /home4/tylering/public_html/b2e/inc/links/model/_link.funcs.php on line 1024

Deprecated: Optional parameter $action declared before required parameter $read_only_list is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/maintenance/model/_maintenance.funcs.php on line 624

Deprecated: Optional parameter $overwrite declared before required parameter $read_only_list is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/maintenance/model/_maintenance.funcs.php on line 624

Deprecated: Optional parameter $renderers declared before required parameter $params is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 2013

Deprecated: Optional parameter $current_renderers declared before required parameter $params is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 2158

Deprecated: Optional parameter $current_renderers declared before required parameter $params is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 2336

Deprecated: Creation of dynamic property UserSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_init_login.inc.php on line 81

Deprecated: Optional parameter $prefix declared before required parameter $dbIDname is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/_core/model/dataobjects/_dataobjectcache.class.php on line 133

Deprecated: Creation of dynamic property CollectionSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 467

Deprecated: Optional parameter $chapter_mode declared before required parameter $item_index is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/items/model/_itemlistlight.class.php on line 2404

Deprecated: Optional parameter $params declared before required parameter $content_is_displayed is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/items/model/_itemlistlight.class.php on line 2593

Deprecated: Creation of dynamic property ItemList2::$filterset_name is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlistlight.class.php on line 114

Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 1407

Deprecated: preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php on line 1407

Deprecated: Optional parameter $dbprefix declared before required parameter $dbIDname is implicitly treated as a required parameter in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 76

Deprecated: Creation of dynamic property ItemQuery::$dbtablename is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 78

Deprecated: Creation of dynamic property ItemQuery::$dbprefix is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 79

Deprecated: Creation of dynamic property ItemQuery::$dbIDname is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 80

Deprecated: Creation of dynamic property ItemQuery::$Blog is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 231

Deprecated: Creation of dynamic property ItemQuery::$cat_array is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 232

Deprecated: Creation of dynamic property ItemQuery::$cat_modifier is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 233

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: Creation of dynamic property ItemQuery::$assignees_logins is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 525

Deprecated: Creation of dynamic property ItemQuery::$author_assignee is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 557

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: Creation of dynamic property ItemQuery::$m is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 842

Deprecated: Creation of dynamic property ItemQuery::$w is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 843

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Deprecated: Creation of dynamic property Item::$objtype is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 164

Deprecated: Creation of dynamic property Item::$datestart is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemlight.class.php on line 175

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 40

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 405

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 406

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 407

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/inc/_core/_template.funcs.php on line 408

Deprecated: Creation of dynamic property ItemQuery::$dbtablename is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 78

Deprecated: Creation of dynamic property ItemQuery::$dbprefix is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 79

Deprecated: Creation of dynamic property ItemQuery::$dbIDname is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 80

Deprecated: Creation of dynamic property ItemQuery::$Blog is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 231

Deprecated: Creation of dynamic property ItemQuery::$cat_array is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 232

Deprecated: Creation of dynamic property ItemQuery::$cat_modifier is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 233

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: Creation of dynamic property ItemQuery::$assignees_logins is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 525

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10535

Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/_core/_misc.funcs.php on line 10540

Deprecated: Creation of dynamic property ItemQuery::$m is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 842

Deprecated: Creation of dynamic property ItemQuery::$w is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_itemquery.class.php on line 843

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/skins/_rss2/index.main.php on line 45

Warning: Cannot modify header information - headers already sent by (output started at /home4/tylering/public_html/b2e/inc/_core/_param.funcs.php:1401) in /home4/tylering/public_html/b2e/skins/_rss2/index.main.php on line 46
Switched Keys - Category: "Information Technology" https://tylerhosting.com/b2e/dbell.php Switched Keys, the blogs of Dana Bell of Tyler, Texas en-US http://blogs.law.harvard.edu/tech/rss 60 Import Lexicon for Android https://tylerhosting.com/b2e/dbell.php/import-lexicon-for-android Wed, 22 May 2019 04:00:00 +0000 Dana Bell Information Technology Scrabble 407@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property tinymce_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property calendar_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property calendar_plugin::$dbtable is deprecated in /home4/tylering/public_html/b2e/plugins/_calendar.plugin.php on line 53

Deprecated: Creation of dynamic property calendar_plugin::$dbprefix is deprecated in /home4/tylering/public_html/b2e/plugins/_calendar.plugin.php on line 54

Deprecated: Creation of dynamic property calendar_plugin::$dbIDname is deprecated in /home4/tylering/public_html/b2e/plugins/_calendar.plugin.php on line 55

Deprecated: Creation of dynamic property quicktags_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property auto_anchors_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property shortlinks_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property custom_tags_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property archives_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property archives_plugin::$dbtable is deprecated in /home4/tylering/public_html/b2e/plugins/_archives.plugin.php on line 54

Deprecated: Creation of dynamic property archives_plugin::$dbprefix is deprecated in /home4/tylering/public_html/b2e/plugins/_archives.plugin.php on line 55

Deprecated: Creation of dynamic property archives_plugin::$dbIDname is deprecated in /home4/tylering/public_html/b2e/plugins/_archives.plugin.php on line 56

Deprecated: Creation of dynamic property email_elements_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property financial_contribution_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property inlines_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property ping_b2evonet_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property ping_pingomatic_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property twitter_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property webmention_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property webmention_plugin::$ping_service_process_message is deprecated in /home4/tylering/public_html/b2e/plugins/webmention_plugin/_webmention.plugin.php on line 52

Deprecated: Creation of dynamic property webmention_plugin::$ping_service_setting_title is deprecated in /home4/tylering/public_html/b2e/plugins/webmention_plugin/_webmention.plugin.php on line 53

Deprecated: Creation of dynamic property autolinks_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property videoplug_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property auto_p_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property mermaid_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property texturize_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property nofollow_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property content_blocks_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property table_contents_plugin::$classfile_path is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_plugins.class.php on line 413

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<p>My <a href="http://www.tylerhosting.com/b2e/dbell.php/creating-otcwl2018-for-hoot" target="_blank">last post</a> explained how to create a lexicon from the new NASPA word list (NWL2018) for the Android app. At that time you had to create a new database with the PC version of the program and transfer that to the Android device. Since then I've developed an import lexicon tool in the app. You will still create the lexicon on the PC, but instead of transferring the database you transfer the exported lexicon.</p> <p>Follow the steps in the first two parts of the instructions through phase 2 to create the lexicon.</p> <h3>Alternate phase 3</h3> <p>Instead of configuring it for Android, select Export Lexicon to save the lexicon to file and then transfer that file to emulated storage on the Android device.</p> <div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure3.png?mtime=1550872053"><img class="loadimg" style="width: 35%; float: right; margin-top: 10px;" title="" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure3.png?mtime=1550872053" alt="" width="968" height="638" /></a></div> <h2>PART 3 (Importing the Lexicon)</h2> <p>Open Hoot and go to Tools. Select Import Lexicon. Note that it says it is a <strong>beta</strong> feature. While it repeatedly works successfully for me when done correctly, there may be some errors that it doesn't catch. If you're importing into a custom database, make a backup first. In one test, Hoot did quit with an error but after restarting Hoot the new lexicon was successfully created. It's a feature you won't need often, but with new lexicons for TWL and Collins this year, I figure some of you might need it.</p> <p>The Import Lexicon screen will be displayed for the lexicon details. Select the file, give a name for the lexicon, and enter the details you would like to store for it, but don't include a copyright symbol in the notice. That would make it impossible to Export.  </p> <p><em>Pay attention to language and Tile Set</em>. The language links the words to the stored definitions. The Tile Set is used to calculate and store the scores. Then press the button to Import Lexicon.</p> <p><em>Wait!</em> Importing the lexicon and calculating the scores will take some time depending on the power of your device. On my S7, the lexicon for CSW19 was imported in less than five minutes. After the lexicon is created you will have to go to Settings to select the lexicon.</p> <h3>Other Lexicons</h3> <p>The Hoot download page has a collection of preconfigured lexicons you can use. However, it doesn't include the most commonly used lexicons (TWL and Collins) since distribution is limited. TWL (aka NWL2018) can be downloaded by members from the NASPA website.</p> <p> </p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/import-lexicon-for-android">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>
Deprecated: Creation of dynamic property shortlinks_plugin::$current_Item is deprecated in /home4/tylering/public_html/b2e/plugins/shortlinks_plugin/_shortlinks.plugin.php on line 169

Deprecated: Creation of dynamic property shortlinks_plugin::$link_types is deprecated in /home4/tylering/public_html/b2e/plugins/shortlinks_plugin/_shortlinks.plugin.php on line 171

Deprecated: Creation of dynamic property autolinks_plugin::$setting_nofollow_auto is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 439

Deprecated: Creation of dynamic property autolinks_plugin::$setting_autolink_defs_coll_db is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 442

Deprecated: Creation of dynamic property autolinks_plugin::$setting_autolink_urls is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 443

Deprecated: Creation of dynamic property autolinks_plugin::$setting_autolink_emails is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 444

Deprecated: Creation of dynamic property autolinks_plugin::$setting_autolink_username is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 445

Deprecated: Creation of dynamic property autolinks_plugin::$setting_autolink_tag is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 446

Deprecated: Creation of dynamic property PluginSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Creation of dynamic property PluginSettings::$plugin_ID is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_pluginsettings.class.php on line 36

Deprecated: Creation of dynamic property PluginSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Creation of dynamic property PluginSettings::$plugin_ID is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_pluginsettings.class.php on line 36

Deprecated: Creation of dynamic property autolinks_plugin::$replacement_link_array is deprecated in /home4/tylering/public_html/b2e/plugins/_autolinks.plugin.php on line 341

Deprecated: Creation of dynamic property videoplug_plugin::$video_width is deprecated in /home4/tylering/public_html/b2e/plugins/videoplug_plugin/_videoplug.plugin.php on line 152

Deprecated: Creation of dynamic property videoplug_plugin::$video_height is deprecated in /home4/tylering/public_html/b2e/plugins/videoplug_plugin/_videoplug.plugin.php on line 153

Deprecated: Creation of dynamic property PluginSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Creation of dynamic property PluginSettings::$plugin_ID is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_pluginsettings.class.php on line 36

Deprecated: Creation of dynamic property PluginSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121

Deprecated: Creation of dynamic property PluginSettings::$plugin_ID is deprecated in /home4/tylering/public_html/b2e/inc/plugins/model/_pluginsettings.class.php on line 36

Deprecated: Creation of dynamic property auto_p_plugin::$use_auto_br is deprecated in /home4/tylering/public_html/b2e/plugins/_auto_p.plugin.php on line 126

Deprecated: Creation of dynamic property auto_p_plugin::$add_p_in_block is deprecated in /home4/tylering/public_html/b2e/plugins/_auto_p.plugin.php on line 127

Deprecated: Creation of dynamic property auto_p_plugin::$skip_tags is deprecated in /home4/tylering/public_html/b2e/plugins/_auto_p.plugin.php on line 128

Deprecated: Creation of dynamic property nofollow_plugin::$setting_rel_options is deprecated in /home4/tylering/public_html/b2e/plugins/_nofollow.plugin.php on line 159

Deprecated: Creation of dynamic property nofollow_plugin::$setting_target_options is deprecated in /home4/tylering/public_html/b2e/plugins/_nofollow.plugin.php on line 172

My last post explained how to create a lexicon from the new NASPA word list (NWL2018) for the Android app. At that time you had to create a new database with the PC version of the program and transfer that to the Android device. Since then I've developed an import lexicon tool in the app. You will still create the lexicon on the PC, but instead of transferring the database you transfer the exported lexicon.

Follow the steps in the first two parts of the instructions through phase 2 to create the lexicon.

Alternate phase 3

Instead of configuring it for Android, select Export Lexicon to save the lexicon to file and then transfer that file to emulated storage on the Android device.

PART 3 (Importing the Lexicon)

Open Hoot and go to Tools. Select Import Lexicon. Note that it says it is a beta feature. While it repeatedly works successfully for me when done correctly, there may be some errors that it doesn't catch. If you're importing into a custom database, make a backup first. In one test, Hoot did quit with an error but after restarting Hoot the new lexicon was successfully created. It's a feature you won't need often, but with new lexicons for TWL and Collins this year, I figure some of you might need it.

The Import Lexicon screen will be displayed for the lexicon details. Select the file, give a name for the lexicon, and enter the details you would like to store for it, but don't include a copyright symbol in the notice. That would make it impossible to Export.  

Pay attention to language and Tile Set. The language links the words to the stored definitions. The Tile Set is used to calculate and store the scores. Then press the button to Import Lexicon.

Wait! Importing the lexicon and calculating the scores will take some time depending on the power of your device. On my S7, the lexicon for CSW19 was imported in less than five minutes. After the lexicon is created you will have to go to Settings to select the lexicon.

Other Lexicons

The Hoot download page has a collection of preconfigured lexicons you can use. However, it doesn't include the most commonly used lexicons (TWL and Collins) since distribution is limited. TWL (aka NWL2018) can be downloaded by members from the NASPA website.

 

]]>
https://tylerhosting.com/b2e/dbell.php/import-lexicon-for-android#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=407
Creating OTCWL2018 (NWL18) for Hoot https://tylerhosting.com/b2e/dbell.php/creating-otcwl2018-for-hoot Wed, 20 Feb 2019 04:53:00 +0000 Dana Bell Information Technology Scrabble 406@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/howl.png?mtime=1550873441"><img class="loadimg" style="width: 15%; float: right; margin-top: 10px;" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/howl.png?mtime=1550873441" alt="" width="192" height="192" /></a></div> <p><em>Update: The NASPA lexicons are now identified as NWL2018 or NWL18 (NWL2020 for new lexicon effective in 2021). It is also included in the Hoot Android app, so you don't need to create it unless you really want to. I'm leaving this post to show how you could create other lexicons.</em></p> <p>I've neglected this blog a bit since I started working on the Hoot Android app. Now that the new North American Scrabble word list it out, I feel I should preset a succinct demonstration on how to create a lexicon for OTCWL2018 (OWL4). The first caveat is that it is up to you to get the new word list. It is available to members to download from the NASPA website. It is also worth mentioning that it is copyrighted and may not be legally shared with others.</p> <h2>PART 1 (Getting the list)</h2> <p>You can get the list by going to <a href="http://scrabbleplayers.org">http://scrabbleplayers.org</a>. Then login (or join if you haven't) and go to Members and then Member Services</p> <div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4download.png?mtime=1550873202"><img class="loadimg" style="width: 75%; margin-top: 10px;" title="" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4download.png?mtime=1550873202" alt="" width="1340" height="337" /></a></div> <p>Scroll to Downloads and select <strong>OTCWL2018 (Windows text)</strong></p> <p>Remember where you save it...</p> <h2>PART 2 (Creating the lexicon)</h2> <p>Next you will need to have the PC program Hoot installed. If you don't, you can go to <a href="http://www.tylerhosting.com/hoot/downloads.html">http://www.tylerhosting.com/hoot/downloads.html</a> to get the latest version. Download the latest Version 3 Installer, Install and run it.</p> <h3>Phase 1</h3> <div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4creation2.png?mtime=1550871991"><img class="loadimg" style="width: 35%; float: right; margin-top: 10px;" title="" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4creation2.png?mtime=1550871991" alt="" width="674" height="632" /></a></div> <p>To create the lexicon, follow these steps</p> <ul> <li>Go to Settings &gt; Create Lexicon</li> <li>Select One per line</li> <li>Search and use the file you downloaded</li> <li>Enter OWL4 or OTCWL2018 for Lexicon Name</li> <li>Select en for Language</li> <li>Complete other fields as desired</li> <li>(Under Lexicon Notice, enter Copyright information)</li> <li>Create Lexicon (This should only take a minute or two)</li> <li>Close Window</li> </ul> <h3>Phase 2</h3> <div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure2.png?mtime=1550872053"><img class="loadimg" style="width: 35%; float: right; margin-top: 10px;" title="" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure2.png?mtime=1550872053" alt="" width="968" height="638" /></a></div> <p>To show hooks, probability, playability, anagrams, etc, you will need to configure the lexicon. Follow these steps</p> <ul> <li>Go to Settings &gt; Configure Lexicons</li> <li>Select the lexicon you created</li> <li>Select all the boxes in the right column</li> <li>(Download playability Ratings from <a href="http://www.tylerhosting.com/hoot/downloads/OSPD4OPlay.zip">http://www.tylerhosting.com/hoot/downloads/OSPD4OPlay.zip</a>)</li> <li>Select Begin</li> <li>When finished, close the screen.</li> </ul> <p>I use to say wait 30-45 minutes, depending on computer speed. Mine actually took 19 minutes.</p> <p>Note that if the program doesn't stay in the foreground, the status box may stop being updated, but it is still working. Just wait.</p> <h3>Phase 3 (for Android use)</h3> <div class="image_block"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure3.png?mtime=1550872053"><img class="loadimg" style="width: 35%; float: right; margin-top: 10px;" title="" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/owl4configure3.png?mtime=1550872053" alt="" width="968" height="638" /></a></div> <p>In order to prepare it for Android use, there is another step. If you forget, the app will do this but it will take longer. Follow these steps.</p> <ul> <li>Go to Settings &gt; Configure Lexicons (When Phase 2 is complete Configure for Android Use will be enabled)</li> <li>Select Configure for Android Use</li> <li>Select Begin</li> <li>This also only takes a minute or two</li> </ul> <p>Optionally, you can take additional steps to reduce the size of the database before you put it on your phone. See below </p> <h3><em>Alternate Phase 3, PART 3</em></h3> <p>The Hoot app has improved considerably since this post, so it's much easier to add new lexicons.</p> <p>Once you have created the lexicon on the desktop, instead of moving the database to the device, you can just export the lexicon to a file. Then in the Android app, go to the dot menue &gt; Tools &gt; Import Lexicon. Select that file, fill in the blanks, and Begin Import. When it's done, you're done. You just have to select the new lexicon in Settings.</p> <p>Note: You can't export a copyrighted lexicon such as the NWL20 that is included in the Hoot distribution.</p> <h2>PART 3 (Using the database)</h2> <p>To use the database in the Android app you will have to copy it to internal storage, or the emulated SD Card. Hoot can't read from an actual SD Card. This may be the most difficult for some. There are several ways to get it there, including using a file manager app, sending via Bluetooth, or Emailing it. If you use email on your phone, emailing it may be the easiest way.</p> <p><em>Send database</em>: You can find the location of the database on your computer by looking at Settings &gt; Databases. Once you find it, right click and Send To: mail recipient and send it to the email on your phone. </p> <p><em>Prepare a location</em>: You will need to decide where to put the database. My suggestion is to find or create the folder <strong>Documents</strong> and store it there. In a Samsung Galaxy S7 for example, you can run the Files app. It opens first to Downloads. Select the sandwich menu (three lines) and select the emulated SD Card (internal storage). From the three dots menu, select New folder and create the folder Documents.</p> <p><em>Save database</em>: Then open the email on your phone to save the database and select this folder.</p> <p><em>Select database</em>: Open the Hoot app and from the three dots select Settings, then Database, and find the file you just saved.</p> <p><em>Select lexicon</em>: You can then select the lexicon.</p> <h3>Minimize Database Size (Optional)</h3> <p>In order to reduce the size of the database you can take steps in the PC program to delete unused lexicons, and then recover the space they used. If you are using a new database, this may not be necessary.</p> <p>Go to Settings &gt; Configure Lexicons. For each lexicon you don't want in the database, select and Delete Lexicon</p> <p>Go to Settings &gt; Databases. Compact Database</p> <p> </p> <p> </p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/creating-otcwl2018-for-hoot">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>

Update: The NASPA lexicons are now identified as NWL2018 or NWL18 (NWL2020 for new lexicon effective in 2021). It is also included in the Hoot Android app, so you don't need to create it unless you really want to. I'm leaving this post to show how you could create other lexicons.

I've neglected this blog a bit since I started working on the Hoot Android app. Now that the new North American Scrabble word list it out, I feel I should preset a succinct demonstration on how to create a lexicon for OTCWL2018 (OWL4). The first caveat is that it is up to you to get the new word list. It is available to members to download from the NASPA website. It is also worth mentioning that it is copyrighted and may not be legally shared with others.

PART 1 (Getting the list)

You can get the list by going to http://scrabbleplayers.org. Then login (or join if you haven't) and go to Members and then Member Services

Scroll to Downloads and select OTCWL2018 (Windows text)

Remember where you save it...

PART 2 (Creating the lexicon)

Next you will need to have the PC program Hoot installed. If you don't, you can go to http://www.tylerhosting.com/hoot/downloads.html to get the latest version. Download the latest Version 3 Installer, Install and run it.

Phase 1

To create the lexicon, follow these steps

  • Go to Settings > Create Lexicon
  • Select One per line
  • Search and use the file you downloaded
  • Enter OWL4 or OTCWL2018 for Lexicon Name
  • Select en for Language
  • Complete other fields as desired
  • (Under Lexicon Notice, enter Copyright information)
  • Create Lexicon (This should only take a minute or two)
  • Close Window

Phase 2

To show hooks, probability, playability, anagrams, etc, you will need to configure the lexicon. Follow these steps

I use to say wait 30-45 minutes, depending on computer speed. Mine actually took 19 minutes.

Note that if the program doesn't stay in the foreground, the status box may stop being updated, but it is still working. Just wait.

Phase 3 (for Android use)

In order to prepare it for Android use, there is another step. If you forget, the app will do this but it will take longer. Follow these steps.

  • Go to Settings > Configure Lexicons (When Phase 2 is complete Configure for Android Use will be enabled)
  • Select Configure for Android Use
  • Select Begin
  • This also only takes a minute or two

Optionally, you can take additional steps to reduce the size of the database before you put it on your phone. See below 

Alternate Phase 3, PART 3

The Hoot app has improved considerably since this post, so it's much easier to add new lexicons.

Once you have created the lexicon on the desktop, instead of moving the database to the device, you can just export the lexicon to a file. Then in the Android app, go to the dot menue > Tools > Import Lexicon. Select that file, fill in the blanks, and Begin Import. When it's done, you're done. You just have to select the new lexicon in Settings.

Note: You can't export a copyrighted lexicon such as the NWL20 that is included in the Hoot distribution.

PART 3 (Using the database)

To use the database in the Android app you will have to copy it to internal storage, or the emulated SD Card. Hoot can't read from an actual SD Card. This may be the most difficult for some. There are several ways to get it there, including using a file manager app, sending via Bluetooth, or Emailing it. If you use email on your phone, emailing it may be the easiest way.

Send database: You can find the location of the database on your computer by looking at Settings > Databases. Once you find it, right click and Send To: mail recipient and send it to the email on your phone. 

Prepare a location: You will need to decide where to put the database. My suggestion is to find or create the folder Documents and store it there. In a Samsung Galaxy S7 for example, you can run the Files app. It opens first to Downloads. Select the sandwich menu (three lines) and select the emulated SD Card (internal storage). From the three dots menu, select New folder and create the folder Documents.

Save database: Then open the email on your phone to save the database and select this folder.

Select database: Open the Hoot app and from the three dots select Settings, then Database, and find the file you just saved.

Select lexicon: You can then select the lexicon.

Minimize Database Size (Optional)

In order to reduce the size of the database you can take steps in the PC program to delete unused lexicons, and then recover the space they used. If you are using a new database, this may not be necessary.

Go to Settings > Configure Lexicons. For each lexicon you don't want in the database, select and Delete Lexicon

Go to Settings > Databases. Compact Database

 

 

]]>
https://tylerhosting.com/b2e/dbell.php/creating-otcwl2018-for-hoot#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=406
Hoot - the Android app https://tylerhosting.com/b2e/dbell.php/hoot-the-android-app Tue, 09 Oct 2018 21:12:00 +0000 Dana Bell Information Technology Scrabble 405@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<div style="border-style: solid; border-color: #096; padding: 10px 15px 0px 15px; margin-bottom: 5px;"> <p style="padding: 0px; margin: 0px;">New! Two Android apps of <a href="http://www.tylerhosting.com/hoot/" target="_blank">Hoot </a>are now under development. Each app includes a database with the installed lexicon, and the ability to use external databases. <em><strong>Update: </strong></em> The first release of the Hoot app is now available on Google Play. The search screen is a modification of the Combination search in the PC version and has sort options. Click on the link to get the them on Google Play. Please provide feedback with problems, suggestions.<br /><br /></p> <table style="padding: 0px;" cellspacing="0" cellpadding="0"> <tbody> <tr> <td> <p style="text-align: center;"><strong>North American lexicon</strong></p> <p style="margin: 0px; padding: 0px; text-align: center;"><a href="https://play.google.com/store/apps/details?id=com.tylerhosting.hoot.wj2" target="_blank"><img style="margin: 0px; padding: 0px;" src="http://www.tylerhosting.com/hoot/google-play-badge.png" alt="Get Beta" width="40%" /></a><br /> <span style="margin: 0p; padding: 0px; font-size: smaller;">Google Play and the Google Play logo are trademarks of Google LLC.</span></p> </td> <td> <p style="text-align: center;"><strong>Collins lexicon</strong></p> <p style="margin: 0px; padding: 0px; text-align: center;"><a href="https://play.google.com/store/apps/details?id=com.tylerhosting.hoot.collins" target="_blank"><img style="margin: 0px; padding: 0px;" src="http://www.tylerhosting.com/hoot/google-play-badge.png" alt="Get Beta" width="40%" /></a><br /> <span style="margin: 0p; padding: 0px; font-size: smaller;">Google Play and the Google Play logo are trademarks of Google LLC.</span></p> </td> </tr> </tbody> </table> </div> <p>After two years working on Hoot, the desktop version, I started working on an app for Android. While I've wanted to build one much sooner, the computer limitations prevented me from getting much done. My computer was more than a decade old, and had no upgrade options available. After going from a system with 1.5 GB to one with 32 GB, and other improvements, I decided I could begin work. In the meantime, Android Studio and the emulators have improved so much that getting work done on it was a pleasure and I was able to get the beta ready in just over a month. I have a long list of things I want to do with it so app development will probably continue for another year.</p> <p>Writing an Android app is a lot like creating a dynamic web page. With the web you need to learn formatting with HTML/CSS, and write code in PHP or Javascript. With Android development you need to learn an Android version of <a href="http://www.tellmewhatis.com/xml">XML</a>, and write code in Java. While XML is a simple concept, the language is new and complex, with many caveats. Once I learn it more, I'll begin to appreciate it more. While there is an abundance or resources available for learning Android development, much of it is old and uses out-dated concepts, and deprecated methods. Improving my skill involves both learning what to do and how to do it, as well as learning what not to do and how not to do it, now.</p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/hoot-the-android-app">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>

New! Two Android apps of Hoot are now under development. Each app includes a database with the installed lexicon, and the ability to use external databases. Update: The first release of the Hoot app is now available on Google Play. The search screen is a modification of the Combination search in the PC version and has sort options. Click on the link to get the them on Google Play. Please provide feedback with problems, suggestions.

North American lexicon

Get Beta
Google Play and the Google Play logo are trademarks of Google LLC.

Collins lexicon

Get Beta
Google Play and the Google Play logo are trademarks of Google LLC.

After two years working on Hoot, the desktop version, I started working on an app for Android. While I've wanted to build one much sooner, the computer limitations prevented me from getting much done. My computer was more than a decade old, and had no upgrade options available. After going from a system with 1.5 GB to one with 32 GB, and other improvements, I decided I could begin work. In the meantime, Android Studio and the emulators have improved so much that getting work done on it was a pleasure and I was able to get the beta ready in just over a month. I have a long list of things I want to do with it so app development will probably continue for another year.

Writing an Android app is a lot like creating a dynamic web page. With the web you need to learn formatting with HTML/CSS, and write code in PHP or Javascript. With Android development you need to learn an Android version of XML, and write code in Java. While XML is a simple concept, the language is new and complex, with many caveats. Once I learn it more, I'll begin to appreciate it more. While there is an abundance or resources available for learning Android development, much of it is old and uses out-dated concepts, and deprecated methods. Improving my skill involves both learning what to do and how to do it, as well as learning what not to do and how not to do it, now.

]]>
https://tylerhosting.com/b2e/dbell.php/hoot-the-android-app#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=405
Images in b2evolution https://tylerhosting.com/b2e/dbell.php/images-in-b2evolution Sat, 12 Aug 2017 03:04:00 +0000 Dana Bell Information Technology Site Small Talk Design Computing 394@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<p>Many years ago I started using <a href="http://b2evolution.net/">b2evolution</a> for my blog even though it was not the most popular platform. I'm still using it. Although it is complex, it gives me options that don't exist in other platforms. Now that it has expanded to include other types of collections (photo blogs, manuals, etc), it is even more complex. Unfortunately, the image insertion routines in b2evolution are quite inflexible, and I suspect that is one reason it will never be very popular.</p> <p>The guide says you should attach the image where you want it, but it doesn't include the file in the page markup and instead includes a tag that identifies the image. The logic presented in the on-line forums is that you can adjust the stylesheet and php to apply uniformly to all images. You can put the image in different sections (teaser, cover, in-line) of the post and it supposedly is more efficient that way.</p> <h3>The Issue</h3> <p>Although you have multiple options for placement (vertically) in a post, if it's an in-line image you can't see it in the editor. Instead you see . Additionally you can't modify the formatting of the image. That's where the problems resides. If b2evolution included the code in-line (like it used to) I could modify the HTML/CSS to format the image. </p> <p>Emulating a print publication, I like to wrap text around some images, and like adjusting the size to make it look more balanced. Well, there is a way to include the markup, but it's not intuitive.</p> <h3>The Work Around</h3> <p>I've discovered after inserting all my images that there is a viable workaround to get the code into the post, something that used to be an option in the editor in past versions.</p> <p>1. Go to the b2e Back-office and select Files &gt; Browse and upload the images for the post. I prefer to put them in the root collection folder, not the quick-uploads.<br /> <br />2. From the post, attach any image to the post (ideally an inline). The easiest way is to select Attach existing files and select one. You won't be including that in the post, but you will be using that image to get to other files you would like to insert. If an image tag is inserted into the post you can delete it if you want. </p> <p> <a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/attachimage.png?mtime=1502468848"><img src="http://www.tylerhosting.com/b2e/media/blogs/dbell/attachimage.png?mtime=1502468848" alt="" width="431" height="56" /></a></p> <p>3. Position your cursor at the point in your post where you want to include one of your uploaded images.</p> <p>4. Go to the attached image in the Images and Attachments section and click on the Locate file icon (bull's eye).</p> <div class="image_block" style="float: right; margin-left: 20px;"><a href="http://www.tylerhosting.com/b2e/media/blogs/dbell/locateimage.png?mtime=1502468848"><img class="loadimg" src="http://www.tylerhosting.com/b2e/media/blogs/dbell/locateimage.png?mtime=1502468848" alt="" width="115" height="121" /></a> </div> <p>5. When the Attach files dialog box is displayed find the file you really want. You may have to change folders to find it. Again, I prefer to use images in the root collection folder.</p> <p>6. Check the box for the file to select it. Don't press Attach. </p> <p>7. Finally, at the bottom, with selected files: change the option to Insert IMG/link into post and press Go.</p> <h3>Formatting Images </h3> <p>The main reason I want the code in the post is so I can customize the image. In order to do that switch to Markup view and find the image's code. It'll begin with something like</p> <blockquote> <pre>&lt;div class="image_block"&gt;&lt;a href=".."&gt;</pre> </blockquote> <p>Two of the modifications that I generally make are to position the image and resize the image to look good in the post. By positioning, I generally float it left or right.</p> <h4>Floating Images</h4> <p>In markup, find the image markup as noted above and change the div to add</p> <blockquote> <pre>style="float:right"</pre> </blockquote> <p>so it looks like this</p> <blockquote> <pre>&lt;div class="image_block" style="float:right"&gt;&lt;a href=".."&gt;</pre> </blockquote> <p>If you are floating, it might also be necessary to adjust the margins by changing it to </p> <blockquote> <pre>style="float:right; margin-left:20px"</pre> </blockquote> <h4>Resizing</h4> <p>The image should show the actual size in the img tag and would look something like this.</p> <blockquote> <pre>width="431" height="56" /&gt;</pre> </blockquote> <p>If the size is not appropriate for the post, I simply change the width to a percentage and drop the height so it would look something like this</p> <blockquote> <pre>width="35" /&gt;</pre> </blockquote> <p>I have used b2evolution for many years, and find it useful for multiple blogs, but I guess these kinds of challenges are one reason it is not so popular as a blogging platform.</p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/images-in-b2evolution">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>
Many years ago I started using b2evolution for my blog even though it was not the most popular platform. I'm still using it. Although it is complex, it gives me options that don't exist in other platforms. Now that it has expanded to include other types of collections (photo blogs, manuals, etc), it is even more complex. Unfortunately, the image insertion routines in b2evolution are quite inflexible, and I suspect that is one reason it will never be very popular.

The guide says you should attach the image where you want it, but it doesn't include the file in the page markup and instead includes a tag that identifies the image. The logic presented in the on-line forums is that you can adjust the stylesheet and php to apply uniformly to all images. You can put the image in different sections (teaser, cover, in-line) of the post and it supposedly is more efficient that way.

The Issue

Although you have multiple options for placement (vertically) in a post, if it's an in-line image you can't see it in the editor. Instead you see . Additionally you can't modify the formatting of the image. That's where the problems resides. If b2evolution included the code in-line (like it used to) I could modify the HTML/CSS to format the image. 

Emulating a print publication, I like to wrap text around some images, and like adjusting the size to make it look more balanced. Well, there is a way to include the markup, but it's not intuitive.

The Work Around

I've discovered after inserting all my images that there is a viable workaround to get the code into the post, something that used to be an option in the editor in past versions.

1. Go to the b2e Back-office and select Files > Browse and upload the images for the post. I prefer to put them in the root collection folder, not the quick-uploads.

2. From the post, attach any image to the post (ideally an inline). The easiest way is to select Attach existing files and select one. You won't be including that in the post, but you will be using that image to get to other files you would like to insert. If an image tag is inserted into the post you can delete it if you want. 

 

3. Position your cursor at the point in your post where you want to include one of your uploaded images.

4. Go to the attached image in the Images and Attachments section and click on the Locate file icon (bull's eye).

 

5. When the Attach files dialog box is displayed find the file you really want. You may have to change folders to find it. Again, I prefer to use images in the root collection folder.

6. Check the box for the file to select it. Don't press Attach. 

7. Finally, at the bottom, with selected files: change the option to Insert IMG/link into post and press Go.

Formatting Images 

The main reason I want the code in the post is so I can customize the image. In order to do that switch to Markup view and find the image's code. It'll begin with something like

<div class="image_block"><a href="..">

Two of the modifications that I generally make are to position the image and resize the image to look good in the post. By positioning, I generally float it left or right.

Floating Images

In markup, find the image markup as noted above and change the div to add

style="float:right"

so it looks like this

<div class="image_block" style="float:right"><a href="..">

If you are floating, it might also be necessary to adjust the margins by changing it to 

style="float:right; margin-left:20px"

Resizing

The image should show the actual size in the img tag and would look something like this.

width="431" height="56" />

If the size is not appropriate for the post, I simply change the width to a percentage and drop the height so it would look something like this

width="35" />

I have used b2evolution for many years, and find it useful for multiple blogs, but I guess these kinds of challenges are one reason it is not so popular as a blogging platform.

]]>
https://tylerhosting.com/b2e/dbell.php/images-in-b2evolution#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=394
Hoot With a Ribbon, MDI, and Inheritance https://tylerhosting.com/b2e/dbell.php/hoot-with-a-ribbon Sun, 05 Mar 2017 04:55:00 +0000 Dana Bell Information Technology Computing 382@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<p>I just released a new beta version of <a title="Hoot Scrabble study tools" href="http://www.tylerhosting.com/hoot/" target="_blank">Hoot</a>. While it is fully functioning, it does involve significant changes in the way Hoot works. With version 1.9.0, Hoot employs an MDI (Multiple document interface). Previously, Hoot opened new windows for different types of searches. These windows filled the taskbar and were scattered across the desktop. With MDI all windows are contained in the program's main menu.</p> <p>Another significant difference is the use of inherited forms. While users should not care, it does mean the code is smaller and (theoretically) faster. For me, it means changes can be made to the interface easier.</p> <p>Finally, the new Hoot includes a ribbon, like you might have seen in Microsoft Office applications beginning in 2007. While this ribbon is not from Microsoft, it is a very good look-alike. All of this may sound boring, but for a developer it is a little fascinating, figuring out how things work, as well as how to work around limitations.</p> <h2>Multiple Document Interface</h2> <p>With the MDI I could avoid creating new form for each call and instead open them as child windows. Other than setting the appropriate flags on the parent form, the only thing I had to do different is open the forms appropriately for the MDI. One standard way to open such forms is with code like what I've used. This also cascades the new form over the last active child.</p> <blockquote> <pre>private void OpenChild(Form child)<br /> {<br /> child.MdiParent = this;<br /> Form last = new Form();<br /> if (this.MdiChildren.Count() &gt; 0)<br /> foreach (Form f in this.MdiChildren)<br /> if (f == this.ActiveMdiChild)<br /> {<br /> last = f;<br /> child.Location = new Point(last.Location.X + 25, last.Location.Y + 25);<br /> break;<br /> }<br /> child.Show();<br /> }</pre> </blockquote> <p>If I want to insure only one copy of that form is used I simply check for the form name among the children.</p> <blockquote> <pre>private void OpenOneChild(Form child)<br /> {<br /> if (!(FindChild(child.Name) == null))<br /> {<br /> child.Activate();<br /> return;<br /> }<br /> OpenChild(child);<br /> }</pre> <pre>private Form FindChild(string name)<br /> {<br /> foreach (Form f in this.MdiChildren)<br /> {<br /> if ((string)f.Text == name)<br /> return (f);<br /> }<br /> return null;<br /> }</pre> </blockquote> <p>Of course, if I wanted to open a form from a child window, I would use a different method.</p> <blockquote> <pre>private void OpenSibling(Form child)<br /> {<br /> child.MdiParent = this.ParentForm;<br /> Form last = new Form();<br /> if (this.ParentForm.MdiChildren.Count() &gt; 0)<br /> foreach (Form f in this.ParentForm.MdiChildren)<br /> if (f == this.ParentForm.ActiveMdiChild)<br /> {<br /> last = f;<br /> child.Location = new Point(last.Location.X + 25, last.Location.Y + 25);<br /> break;<br /> }<br /> child.Show();<br /> }</pre> </blockquote> <p> </p> <h2>Inheritance</h2> <p>When I mentioned Inherited forms on one discussion board one of the responses started with "ouch, ouch, ouch". Well, it's not so bad. With inheritance in C# you can't normally pass parameters to an inherited form, so I found a workaround. While inherited forms apparently can't take parameters in their constructors, at least not directly, you can access the controls of the inherited form and force a parameter.</p> <p>1. Add a label named lblTrigger (public or protected)<br />2. Add an event to the label for the TextChanged event</p> <blockquote> <pre>private void lblTrigger_TextChanged(object sender, EventArgs e)<br /> {<br /> switch (lblTrigger.Text)<br /> {<br /> case "Hooks": ShowHooks(); break;<br /> case "Words": HideHooks(); break;<br /> case "Slides": btnSlideShow_Click(sender, e); break;<br /> case "ChangeLanguage": PopulateResources(); break;<br /> }<br /> lblTrigger.Text = "Trigger";<br /> }</pre> </blockquote> <p>3. Change that label from the ribbon or another form</p> <blockquote> <pre>public static void SetTrigger(string text, System.Windows.Forms.Form frm) {<br /> if (frm == null)<br /> return;<br /> foreach (System.Windows.Forms.Control ctl in frm.Controls)<br /> {<br /> if (ctl.Name.Equals("lblTrigger"))<br /> ctl.Text = text;<br /> }<br /> }</pre> </blockquote> <p>You're not limited to one label, either. You can add parameters to use with a different label. That's what I've done using lblParameters included in one of the code segments below. Set the parameters, then "pull" the trigger.</p> <p>In one case "SavedSearch" is the text I set for the trigger.</p> <blockquote> <pre>case "SavedSearch": OpenFromRecent(); break;</pre> </blockquote> <p>That then calls this method which simulates a button click on the form.</p> <blockquote> <pre>private void OpenFromRecent()<br /> {<br /> specs = Utilities.LoadSearch(lblParameters.Text);<br /> if (specs == null)<br /> return;<br /> cboSearchType.SelectedIndex = Array.IndexOf(english, specs.searchtype);<br /> if (!(cboSearchType.SelectedIndex == -1))<br /> {<br /> txtSearch.Text = specs.letters;<br /> cboMin.SelectedIndex = specs.minLen - 1;<br /> cboMax.SelectedIndex = specs.maxLen - 1;<br /> cboBegin.Text = specs.prefix;<br /> cboEnd.Text = specs.suffix;<br /> txtFilter.Text = specs.filter;<br /> }<br /> btnSearch_Click(this, EventArgs.Empty);<br /> }</pre> </blockquote> <h2>Ribbon</h2> <p>The ribbon I am using in this project is the one mentioned in the Code Project article at <a title="C# Ribbon" href="https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs" target="_blank">https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs</a>. It's a third-party ribbon for C#, not WPF or other Microsoft. While it looks and performs well, there is a limited documentation for it. The intellisense and integration with Windows is good, and many items are similar. One of my biggest challenges was determining how to use the Recent Items list.</p> <h3>Recent items</h3> <p>One thing that was not so easy to understand was the use of the Recent Items list in the Orb menu. Determining how to create recent items dynamically, however, was one of the biggest accomplishments recently. My last blog entry touched on recent items and using the C# .Designer file to figure out how to create them. Actual implementation was a little more difficult. With my implementation I created a new class with properties of the recent item that I would use.</p> <h4>The Recent Item</h4> <blockquote> <pre>public RecentItem(string tag, string text)<br /> {<br /> ItemID = 0;<br /> ItemTag = tag;<br /> ItemText = text;<br /> UserID = Properties.Settings.Default.User;<br /> }</pre> </blockquote> <p>The text is the filename. The tag indicates the type of item since the items are not identified by file extension. ItemID will be updated when saved to the database. The database fields are similar to the class fields.</p> <h4>Loading Items on form load:</h4> <blockquote> <pre>.. <br />List&lt;RecentItem&gt; load = new List&lt;RecentItem&gt;(); <br />load = DBManager.LoadRecentItems(); <br />AddRecentItems(load); // see below <br />ribbonMain.OrbDropDown.RecentItems.Reverse(); <br />..</pre> </blockquote> <p>Reverse is used to put latest items at the top. The ID is set by the database using autonumber so the oldest items have the lowest ID and are loaded first.</p> <blockquote> <pre> private void AddRecentItems(List&lt;RecentItem&gt; recentItems) {<br /> foreach (RecentItem item in recentItems)<br /> DBManager.OrbAddRecentItem(item); // see below<br /> }</pre> </blockquote> <h4>Adds items to Recent Items from database</h4> <blockquote> <pre>public static void OrbAddRecentItem(RecentItem recent)<br /> {<br /> frmHootGold top = (frmHootGold)System.Windows.Forms.Application.OpenForms["frmHootGold"];<br /> RibbonOrbRecentItem adder = new RibbonOrbRecentItem();<br /> adder.Tag = recent.ItemTag;<br /> adder.Text = recent.ItemText;<br /> adder.Value = recent.ItemID.ToString();<br /> top.ribbonMain.OrbDropDown.RecentItems.Add(adder);<br /> adder.Click += new System.EventHandler(top.OrbRecent_Click); // see below<br /> }</pre> </blockquote> <p>When the items are added to the list, either as new items or when loaded from the database, the click event is set.</p> <h4>Calling Form</h4> <p>A separate method is used when actually adding a new item that has one difference to add the new item to the list that has already been sorted in descending order.</p> <blockquote> <pre> public static void OrbInsertRecentItem(RecentItem recent)<br /> ..<br /> top.ribbonMain.OrbDropDown.RecentItems.Insert(0, adder);</pre> </blockquote> <p>That's done from one of the child windows with code segment something like this</p> <blockquote> <pre>RecentItem adder = new RecentItem("SavedSearch", searchFile);<br />DBManager.AddRecentItem(adder);<br />DBManager.OrbInsertRecentItem(adder);</pre> </blockquote> <h4>The Recent Item List</h4> <p>When a user clicks an item on the Recent list, the following method uses the trigger and parameters mentioned earlier to pass that information to a new child form.</p> <blockquote> <pre>public void OrbRecent_Click(object sender, EventArgs e)<br /> {<br /> RibbonOrbRecentItem item = (RibbonOrbRecentItem)sender;<br /> Form form = new Form();<br /> switch (item.Tag.ToString())<br /> {<br /> case "SavedSearch": form = new frmCombo(); break;<br /> case "Textfile": form = new frmTextfiles(); break;<br /> }<br /> OpenChild(form);<br /> MDIUtils.SetParms(item.Text, form);<br /> MDIUtils.SetTrigger((string)item.Tag, form);<br /> }</pre> </blockquote> <p>One of the things I learned about Recent Items is that there is no obvious way to enable user-deletion of items. I notice Word doesn't have that either, nor does Windows, so I decided not to worry about it.</p> <p>If you use this in a program you may notice that the items are added to Windows list of Recent Items, but it's not because of this method. It's simply because they were files that "you" opened. Anyway, this is my contribution to the C# Ribbon knowledge base.</p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/hoot-with-a-ribbon">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>
I just released a new beta version of Hoot. While it is fully functioning, it does involve significant changes in the way Hoot works. With version 1.9.0, Hoot employs an MDI (Multiple document interface). Previously, Hoot opened new windows for different types of searches. These windows filled the taskbar and were scattered across the desktop. With MDI all windows are contained in the program's main menu.

Another significant difference is the use of inherited forms. While users should not care, it does mean the code is smaller and (theoretically) faster. For me, it means changes can be made to the interface easier.

Finally, the new Hoot includes a ribbon, like you might have seen in Microsoft Office applications beginning in 2007. While this ribbon is not from Microsoft, it is a very good look-alike. All of this may sound boring, but for a developer it is a little fascinating, figuring out how things work, as well as how to work around limitations.

Multiple Document Interface

With the MDI I could avoid creating new form for each call and instead open them as child windows. Other than setting the appropriate flags on the parent form, the only thing I had to do different is open the forms appropriately for the MDI. One standard way to open such forms is with code like what I've used. This also cascades the new form over the last active child.

private void OpenChild(Form child)
{
child.MdiParent = this;
Form last = new Form();
if (this.MdiChildren.Count() > 0)
foreach (Form f in this.MdiChildren)
if (f == this.ActiveMdiChild)
{
last = f;
child.Location = new Point(last.Location.X + 25, last.Location.Y + 25);
break;
}
child.Show();
}

If I want to insure only one copy of that form is used I simply check for the form name among the children.

private void OpenOneChild(Form child)
{
if (!(FindChild(child.Name) == null))
{
child.Activate();
return;
}
OpenChild(child);
}
private Form FindChild(string name)
{
foreach (Form f in this.MdiChildren)
{
if ((string)f.Text == name)
return (f);
}
return null;
}

Of course, if I wanted to open a form from a child window, I would use a different method.

private void OpenSibling(Form child)
{
child.MdiParent = this.ParentForm;
Form last = new Form();
if (this.ParentForm.MdiChildren.Count() > 0)
foreach (Form f in this.ParentForm.MdiChildren)
if (f == this.ParentForm.ActiveMdiChild)
{
last = f;
child.Location = new Point(last.Location.X + 25, last.Location.Y + 25);
break;
}
child.Show();
}

 

Inheritance

When I mentioned Inherited forms on one discussion board one of the responses started with "ouch, ouch, ouch". Well, it's not so bad. With inheritance in C# you can't normally pass parameters to an inherited form, so I found a workaround. While inherited forms apparently can't take parameters in their constructors, at least not directly, you can access the controls of the inherited form and force a parameter.

1. Add a label named lblTrigger (public or protected)
2. Add an event to the label for the TextChanged event

private void lblTrigger_TextChanged(object sender, EventArgs e)
{
switch (lblTrigger.Text)
{
case "Hooks": ShowHooks(); break;
case "Words": HideHooks(); break;
case "Slides": btnSlideShow_Click(sender, e); break;
case "ChangeLanguage": PopulateResources(); break;
}
lblTrigger.Text = "Trigger";
}

3. Change that label from the ribbon or another form

public static void SetTrigger(string text, System.Windows.Forms.Form frm) {
if (frm == null)
return;
foreach (System.Windows.Forms.Control ctl in frm.Controls)
{
if (ctl.Name.Equals("lblTrigger"))
ctl.Text = text;
}
}

You're not limited to one label, either. You can add parameters to use with a different label. That's what I've done using lblParameters included in one of the code segments below. Set the parameters, then "pull" the trigger.

In one case "SavedSearch" is the text I set for the trigger.

case "SavedSearch": OpenFromRecent(); break;

That then calls this method which simulates a button click on the form.

private void OpenFromRecent()
{
specs = Utilities.LoadSearch(lblParameters.Text);
if (specs == null)
return;
cboSearchType.SelectedIndex = Array.IndexOf(english, specs.searchtype);
if (!(cboSearchType.SelectedIndex == -1))
{
txtSearch.Text = specs.letters;
cboMin.SelectedIndex = specs.minLen - 1;
cboMax.SelectedIndex = specs.maxLen - 1;
cboBegin.Text = specs.prefix;
cboEnd.Text = specs.suffix;
txtFilter.Text = specs.filter;
}
btnSearch_Click(this, EventArgs.Empty);
}

Ribbon

The ribbon I am using in this project is the one mentioned in the Code Project article at https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs. It's a third-party ribbon for C#, not WPF or other Microsoft. While it looks and performs well, there is a limited documentation for it. The intellisense and integration with Windows is good, and many items are similar. One of my biggest challenges was determining how to use the Recent Items list.

Recent items

One thing that was not so easy to understand was the use of the Recent Items list in the Orb menu. Determining how to create recent items dynamically, however, was one of the biggest accomplishments recently. My last blog entry touched on recent items and using the C# .Designer file to figure out how to create them. Actual implementation was a little more difficult. With my implementation I created a new class with properties of the recent item that I would use.

The Recent Item

public RecentItem(string tag, string text)
{
ItemID = 0;
ItemTag = tag;
ItemText = text;
UserID = Properties.Settings.Default.User;
}

The text is the filename. The tag indicates the type of item since the items are not identified by file extension. ItemID will be updated when saved to the database. The database fields are similar to the class fields.

Loading Items on form load:

.. 
List<RecentItem> load = new List<RecentItem>();
load = DBManager.LoadRecentItems();
AddRecentItems(load); // see below
ribbonMain.OrbDropDown.RecentItems.Reverse();
..

Reverse is used to put latest items at the top. The ID is set by the database using autonumber so the oldest items have the lowest ID and are loaded first.

 private void AddRecentItems(List<RecentItem> recentItems) {
foreach (RecentItem item in recentItems)
DBManager.OrbAddRecentItem(item); // see below
}

Adds items to Recent Items from database

public static void OrbAddRecentItem(RecentItem recent)
{
frmHootGold top = (frmHootGold)System.Windows.Forms.Application.OpenForms["frmHootGold"];
RibbonOrbRecentItem adder = new RibbonOrbRecentItem();
adder.Tag = recent.ItemTag;
adder.Text = recent.ItemText;
adder.Value = recent.ItemID.ToString();
top.ribbonMain.OrbDropDown.RecentItems.Add(adder);
adder.Click += new System.EventHandler(top.OrbRecent_Click); // see below
}

When the items are added to the list, either as new items or when loaded from the database, the click event is set.

Calling Form

A separate method is used when actually adding a new item that has one difference to add the new item to the list that has already been sorted in descending order.

 public static void OrbInsertRecentItem(RecentItem recent)
..
top.ribbonMain.OrbDropDown.RecentItems.Insert(0, adder);

That's done from one of the child windows with code segment something like this

RecentItem adder = new RecentItem("SavedSearch", searchFile);
DBManager.AddRecentItem(adder);
DBManager.OrbInsertRecentItem(adder);

The Recent Item List

When a user clicks an item on the Recent list, the following method uses the trigger and parameters mentioned earlier to pass that information to a new child form.

public void OrbRecent_Click(object sender, EventArgs e)
{
RibbonOrbRecentItem item = (RibbonOrbRecentItem)sender;
Form form = new Form();
switch (item.Tag.ToString())
{
case "SavedSearch": form = new frmCombo(); break;
case "Textfile": form = new frmTextfiles(); break;
}
OpenChild(form);
MDIUtils.SetParms(item.Text, form);
MDIUtils.SetTrigger((string)item.Tag, form);
}

One of the things I learned about Recent Items is that there is no obvious way to enable user-deletion of items. I notice Word doesn't have that either, nor does Windows, so I decided not to worry about it.

If you use this in a program you may notice that the items are added to Windows list of Recent Items, but it's not because of this method. It's simply because they were files that "you" opened. Anyway, this is my contribution to the C# Ribbon knowledge base.

]]>
https://tylerhosting.com/b2e/dbell.php/hoot-with-a-ribbon#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=382
Programmatically - Let Designer show you https://tylerhosting.com/b2e/dbell.php/programmatically-let-designer-show-you Mon, 27 Feb 2017 23:48:00 +0000 Dana Bell Information Technology Computing 381@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<p>The web is full of queries about how to accomplish something programmatically. This can't help with all of them, but if it has to do with C# in Visual Studio, this might guide you in the right direction. Visual Studio is robust enough to do a lot of things for you, but sometimes you need a variation of one of those automatic features. Well, it's easy to determine that than it might appear.</p> <p>When VS creates an item, it does it with code. Finding how it's done may be as simple as looking at the code behind, i.e. in the form's .Designer file. Specifically, it answers the common questions:<br />What's the name of the class you use to create the item?<br />What's the name of the parent class, and how do you add an item to it?</p> <p>Here's a couple of examples:</p> <p>Example 1: I have a form that inherits from another form. The base form includes a complex context menu so derived forms do not have to duplicate that work repeatedly. But there are a couple of forms that need some additional items added to the list. How can I dynamically add items to that context menu for some forms?</p> <p>In order to see what Designer does, add the items to a copy of the base form in design mode (or look at a previously added item). In my case, there were items name popLoadSearch, popSaveSearch, and a separator.</p> <p>Then, open the .Designer file and search for the names. Each was found four times. You can verify some of the statements by looking at the properties of the previously added items. The first set were statements that create the objects and the rest configured the objects and added them to the context menu collection. This is what I found. </p> <h4>Create objects</h4> <blockquote> <pre>this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();<br />this.popLoadSearch = new System.Windows.Forms.ToolStripMenuItem();<br />this.popSaveSearch = new System.Windows.Forms.ToolStripMenuItem();</pre> </blockquote> <h4>Configure objects</h4> <blockquote> <pre>// <br />// toolStripSeparator1<br />// <br />this.toolStripSeparator1.Name = "toolStripSeparator1";<br />this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6);<br />// <br />// popLoadSearch<br />// <br />this.popLoadSearch.Name = "popLoadSearch";<br />this.popLoadSearch.Size = new System.Drawing.Size(165, 22);<br />this.popLoadSearch.Text = "Load Search";<br />this.popLoadSearch.Click += new System.EventHandler(this.popLoadSearch_Click);<br />// <br />// popSaveSearch<br />// <br />this.popSaveSearch.Name = "popSaveSearch";<br />this.popSaveSearch.Size = new System.Drawing.Size(165, 22);<br />this.popSaveSearch.Text = "Save Search";<br />this.popSaveSearch.Click += new System.EventHandler(this.popSaveSearch_Click);</pre> </blockquote> <h4>Add objects to collection</h4> <blockquote> <pre>this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {<br />this.popLoadSearch,<br />this.popSaveSearch});</pre> </blockquote> <h4>Declare variables</h4> <blockquote> <pre>private System.Windows.Forms.ToolStripMenuItem popLoadSearch;<br />private System.Windows.Forms.ToolStripMenuItem popSaveSearch;<br />private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;</pre> </blockquote> <p>Yes, this looks backward since variables have to be declared before they are used but in Designer the commands are contained in the InitializeComponent method, while the declarations are in the class.  Just remember to move the declarations to the top, and preferably instantiate them at the same time. I also noticed the command to size the menustrip, so I figure I needed to change that too.</p> <blockquote> <pre>this.contextMenuStrip1.Size = new System.Drawing.Size(166, 484);</pre> </blockquote> <p>After removing some reference terms (this., private, Systems.Windows.Forms.), renaming the separator, and compressing some of the commands, this is what my addition looks like. I include a command in the form load method to execute this.</p> <blockquote> <pre>private void AddContextItems()<br />{<br /> // Declare Variables<br /> ToolStripSeparator topSeparator = new ToolStripSeparator();<br /> ToolStripMenuItem popLoadSearch = new ToolStripMenuItem();<br /> ToolStripMenuItem popSaveSearch = new ToolStripMenuItem();<br /> // Configure objects<br /> topSeparator.Name = "Separator";<br /> topSeparator.Size = new System.Drawing.Size(162, 6);<br /> // popLoadSearch<br /> popLoadSearch.Name = "popLoadSearch";<br /> popLoadSearch.Size = new System.Drawing.Size(165, 22);<br /> popLoadSearch.Text = "Load Search";<br /> popLoadSearch.Click += new System.EventHandler(popLoadSearch_Click);<br /> // popSaveSearch<br /> popSaveSearch.Name = "popSaveSearch";<br /> popSaveSearch.Size = new System.Drawing.Size(165, 22);<br /> popSaveSearch.Text = "Save Search";<br /> popSaveSearch.Click += new System.EventHandler(popSaveSearch_Click);<br /> //add objects to collection<br /> this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {<br /> topSeparator,<br /> popLoadSearch,<br /> popSaveSearch});<br /> // resize the menu<br /> this.contextMenuStrip1.Size = new System.Drawing.Size(166, 534); // 484 + 22 + 22 + 6<br /> }</pre> </blockquote> <p>Of course, I also had to create the methods assigned to the Click method of each.</p> <p>Example 2: For my program <a title="Hoot Word Game Study Tool" href="http://www.tylerhosting.com/hoot/" target="_blank">Hoot</a> I'm adding a Ribbon wrapper for C# WinForms and I need to dynamically add new recent items to the Orb menu. You can read about this Ribbon at <a title="Easily Add a Ribbon into a WinForms Application (C#)" href="https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs" target="_blank">https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs</a>. Other than the basic introduction for getting started there's not much documentation since it's not officially Microsoft (like WPF), so I have to figure things out. The Orb menu includes a list of items that are commonly used in other programs to list recent items opened. I want to do that but don't know the classes or methods to use. Intellisense is not always the easiest way to figure that out, so I create an item in design mode called OrbRecent and look for it in the Designer code.</p> <h4>Instantiation</h4> <blockquote> <pre>this.OrbRecent = new System.Windows.Forms.RibbonOrbRecentItem();</pre> </blockquote> <h4>Add to collection</h4> <blockquote> <pre>this.ribbonMain.OrbDropDown.RecentItems.Add(this.OrbRecent);</pre> </blockquote> <h4>Configuration</h4> <blockquote> <pre>// <br />// OrbRecent<br />// <br />this.OrbRecent.Image = ((System.Drawing.Image)(resources.GetObject <br /> ("OrbRecent.Image")));<br />this.OrbRecent.SmallImage = ((System.Drawing.Image)(resources.GetObject <br /> ("OrbRecent.SmallImage")));<br />this.OrbRecent.Text = "Recent";</pre> </blockquote> <h4>Declaration</h4> <blockquote> <pre>private System.Windows.Forms.RibbonOrbRecentItem OrbRecent;</pre> </blockquote> <p>Now that I know how VS created and added the item to the collection, I can create a method to do that dynamically, and adjust it to my future needs. I will add it to my Utilities class and use a database table to store the entries. Of course, I'll have to reverse sort the entries so the most recent are on top, and to keep the list at a reasonable size I will need to monitor the size and remove old items. </p> <blockquote> <pre>AddRecent(string spec) {<br /> RibbonOrbRecentItem adder = new RibbonOrbRecentItem();<br /> adder.Text = spec;<br /> this.OrbRecent.Image = ((System.Drawing.Image)(resources.GetObject <br /> ("OrbRecent.Image")));<br /> this.OrbRecent.SmallImage = ((System.Drawing.Image)(resources.GetObject <br /> ("OrbRecent.SmallImage")));<br /> ribbonMain.OrbDropDown.RecentItems.Add(spec);<br />}</pre> </blockquote> <p>Visual Studio's Designer code taught me that.</p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/programmatically-let-designer-show-you">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>
The web is full of queries about how to accomplish something programmatically. This can't help with all of them, but if it has to do with C# in Visual Studio, this might guide you in the right direction. Visual Studio is robust enough to do a lot of things for you, but sometimes you need a variation of one of those automatic features. Well, it's easy to determine that than it might appear.

When VS creates an item, it does it with code. Finding how it's done may be as simple as looking at the code behind, i.e. in the form's .Designer file. Specifically, it answers the common questions:
What's the name of the class you use to create the item?
What's the name of the parent class, and how do you add an item to it?

Here's a couple of examples:

Example 1: I have a form that inherits from another form. The base form includes a complex context menu so derived forms do not have to duplicate that work repeatedly. But there are a couple of forms that need some additional items added to the list. How can I dynamically add items to that context menu for some forms?

In order to see what Designer does, add the items to a copy of the base form in design mode (or look at a previously added item). In my case, there were items name popLoadSearch, popSaveSearch, and a separator.

Then, open the .Designer file and search for the names. Each was found four times. You can verify some of the statements by looking at the properties of the previously added items. The first set were statements that create the objects and the rest configured the objects and added them to the context menu collection. This is what I found. 

Create objects

this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.popLoadSearch = new System.Windows.Forms.ToolStripMenuItem();
this.popSaveSearch = new System.Windows.Forms.ToolStripMenuItem();

Configure objects

// 
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6);
//
// popLoadSearch
//
this.popLoadSearch.Name = "popLoadSearch";
this.popLoadSearch.Size = new System.Drawing.Size(165, 22);
this.popLoadSearch.Text = "Load Search";
this.popLoadSearch.Click += new System.EventHandler(this.popLoadSearch_Click);
//
// popSaveSearch
//
this.popSaveSearch.Name = "popSaveSearch";
this.popSaveSearch.Size = new System.Drawing.Size(165, 22);
this.popSaveSearch.Text = "Save Search";
this.popSaveSearch.Click += new System.EventHandler(this.popSaveSearch_Click);

Add objects to collection

this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.popLoadSearch,
this.popSaveSearch});

Declare variables

private System.Windows.Forms.ToolStripMenuItem popLoadSearch;
private System.Windows.Forms.ToolStripMenuItem popSaveSearch;
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;

Yes, this looks backward since variables have to be declared before they are used but in Designer the commands are contained in the InitializeComponent method, while the declarations are in the class.  Just remember to move the declarations to the top, and preferably instantiate them at the same time. I also noticed the command to size the menustrip, so I figure I needed to change that too.

this.contextMenuStrip1.Size = new System.Drawing.Size(166, 484);

After removing some reference terms (this., private, Systems.Windows.Forms.), renaming the separator, and compressing some of the commands, this is what my addition looks like. I include a command in the form load method to execute this.

private void AddContextItems()
{
// Declare Variables
ToolStripSeparator topSeparator = new ToolStripSeparator();
ToolStripMenuItem popLoadSearch = new ToolStripMenuItem();
ToolStripMenuItem popSaveSearch = new ToolStripMenuItem();
// Configure objects
topSeparator.Name = "Separator";
topSeparator.Size = new System.Drawing.Size(162, 6);
// popLoadSearch
popLoadSearch.Name = "popLoadSearch";
popLoadSearch.Size = new System.Drawing.Size(165, 22);
popLoadSearch.Text = "Load Search";
popLoadSearch.Click += new System.EventHandler(popLoadSearch_Click);
// popSaveSearch
popSaveSearch.Name = "popSaveSearch";
popSaveSearch.Size = new System.Drawing.Size(165, 22);
popSaveSearch.Text = "Save Search";
popSaveSearch.Click += new System.EventHandler(popSaveSearch_Click);
//add objects to collection
this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
topSeparator,
popLoadSearch,
popSaveSearch});
// resize the menu
this.contextMenuStrip1.Size = new System.Drawing.Size(166, 534); // 484 + 22 + 22 + 6
}

Of course, I also had to create the methods assigned to the Click method of each.

Example 2: For my program Hoot I'm adding a Ribbon wrapper for C# WinForms and I need to dynamically add new recent items to the Orb menu. You can read about this Ribbon at https://www.codeproject.com/articles/364272/easily-add-a-ribbon-into-a-winforms-application-cs. Other than the basic introduction for getting started there's not much documentation since it's not officially Microsoft (like WPF), so I have to figure things out. The Orb menu includes a list of items that are commonly used in other programs to list recent items opened. I want to do that but don't know the classes or methods to use. Intellisense is not always the easiest way to figure that out, so I create an item in design mode called OrbRecent and look for it in the Designer code.

Instantiation

this.OrbRecent = new System.Windows.Forms.RibbonOrbRecentItem();

Add to collection

this.ribbonMain.OrbDropDown.RecentItems.Add(this.OrbRecent);

Configuration

// 
// OrbRecent
//
this.OrbRecent.Image = ((System.Drawing.Image)(resources.GetObject
("OrbRecent.Image")));
this.OrbRecent.SmallImage = ((System.Drawing.Image)(resources.GetObject
("OrbRecent.SmallImage")));
this.OrbRecent.Text = "Recent";

Declaration

private System.Windows.Forms.RibbonOrbRecentItem OrbRecent;

Now that I know how VS created and added the item to the collection, I can create a method to do that dynamically, and adjust it to my future needs. I will add it to my Utilities class and use a database table to store the entries. Of course, I'll have to reverse sort the entries so the most recent are on top, and to keep the list at a reasonable size I will need to monitor the size and remove old items. 

AddRecent(string spec) {
RibbonOrbRecentItem adder = new RibbonOrbRecentItem();
adder.Text = spec;
this.OrbRecent.Image = ((System.Drawing.Image)(resources.GetObject
("OrbRecent.Image")));
this.OrbRecent.SmallImage = ((System.Drawing.Image)(resources.GetObject
("OrbRecent.SmallImage")));
ribbonMain.OrbDropDown.RecentItems.Add(spec);
}

Visual Studio's Designer code taught me that.

]]>
https://tylerhosting.com/b2e/dbell.php/programmatically-let-designer-show-you#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=381
Cool Searches in Hoot https://tylerhosting.com/b2e/dbell.php/cool-searches-in-hoot Thu, 02 Feb 2017 23:07:00 +0000 Dana Bell Information Technology Site Small Talk Scrabble 379@https://tylerhosting.com/b2e/
Deprecated: Creation of dynamic property Item::$cache_has_content_parts is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 4911

Deprecated: Creation of dynamic property Item::$renderers_validated is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 11107

Deprecated: Creation of dynamic property Item::$pages is deprecated in /home4/tylering/public_html/b2e/inc/items/model/_item.class.php on line 2412

Deprecated: Creation of dynamic property ItemSettings::$count_col_key_names is deprecated in /home4/tylering/public_html/b2e/inc/settings/model/_abstractsettings.class.php on line 121
<p>The latest version of Hoot has some cool search options. Hoot is one of many study tools you can use to study words for Scrabble™ and other word games. It's a free PC tool with a lot of standard search options that can help you increase your word knowledge. You can read about it at <a title="Hoot" href="/hoot/" target="_blank">http://www.tylerhosting.com/hoot/</a>.</p> <p>The newer versions of Hoot include the Combination search that allows user to search from several options and limit that search by beginning or ending letters and the number of letters. You can also filter the search to only show words containing certain letters. Some of the options are important in Scrabble™ word study and include anagrams and anagram-related searches(subanagrams, superanagrams, blank anagrams), prefixes/suffixes, extensions, etc. Also in Combination are the occasionally used but often unremarkable options to search for misspells and transpositions. Although all of these searches are useful, there are a few other options that are downright "cool", at least to me.</p> <h3>Compound Words</h3> <div class="image_block"><a href="/b2e/media/blogs/dbell/coolcompound.png?mtime=1486072698"><img class="loadimg" style="width: 30%; float: right; margin: 5px;" src="/b2e/media/blogs/dbell/coolcompound.png?mtime=1486072698" alt="" /></a></div> <p>Within the combination search you can now search for compound words. A compound word is a word made up of two other words. Experienced players realize that most words have other words within it. For example, ELEVATOR contains AT, EL, OR, TO, LEV, TOR, VAT, LEVA, and LEVATOR. You would find these with a Subwords search. A compound word in Hoot, on the other hand, is a word that is make up of two words of equal or almost equal length.</p> <p>Searching for compound words is as simple as selecting the word length and pressing Search. The results can be displayed with the two words separated by a bullet, such as HIGH•WAYS, HIGH•TOPS, and HILL•TOPS. You can search for words of any length longer than 3 letters. You can even search for 14 letter words composed of two seven-letter words. COUNTER•MEASURE is one of them. Incidentally, the word COUNTER-COUNTER-MEASURE is composed of three seven-letter words. That would be a fun sequence of plays in Superscrabble. Of course you can limit the search based on prefix/suffix also.</p> <h3>Conjugate</h3> <div class="image_block"><a href="/b2e/media/blogs/dbell/coolconjugate.png?mtime=1486072699"><img class="loadimg" style="width: 30%; float: right; margin: 5px;" src="/b2e/media/blogs/dbell/coolconjugate.png?mtime=1486072699" alt="" /></a></div> <p>This is an option designed for French lexicons. A similar option may be added for inflexions of words in English but it would not be as nearly useful.To conduct this search use a French lexicon like ODS5 (you won't get much from an English lexicon), and enter a regular verb in the search field. Searching will return all the valid conjugations of that verb. For example, using CHERCHER (French for to search) the list will show 36 words including<br />CHERCHA<br />CHERCHE<br />CHERCHAI<br />CHERCHAS<br />CHERCHAT<br />CHERCHEE<br />CHERCHER<br />CHERCHES<br />CHERCHEZ<br />..<br />CHERCHASSIONS</p> <p>Conjugate is also an option in slide shows so you could study a whole collection of verbs. Simply <br />search for words ending in ER, RE, or IR, view in slide show, and select the Conjugate subsearch.</p> <div class="image_block"><a href="/b2e/media/blogs/dbell/coolconjugateslides.png?mtime=1486072698"><img class="loadimg" style="margin: 15px; width: 90%;" src="/b2e/media/blogs/dbell/coolconjugateslides.png?mtime=1486072698" alt="" /></a></div> <p>Actually, the slide show subsearches are pretty cool in themselves, but they've been there for a while and it's not a new thing to word study. Lexpert inspired me to include it; in fact, that was the inspiration to start developing Hoot in the first place.</p> <h3>Pattern</h3> <p>Another search in Combination is the pattern search. This is pretty easy to use for basic searches. <strong>E*</strong> would find words beginning with the letter E. <strong>????</strong> would show all of the four letter words. In Hoot, you can even use c, v, or numbers for letter sets. The lowercase c stands for consonant, the lowercase v for vowel, and numbers for the letter value. <strong>cc*</strong> would find words beginning with two consonants. <strong>???8</strong> would find four letter words ending in a 8 point letter (APEX, HADJ). Of course, you could build your own letter set. <strong>???[WYZ]</strong> would find four letter words ending in W, Y, or Z. <strong>*(Y|ER)</strong> would find all words ending in Y or ER. The Hoot <a href="/hoot/help/pattern.html" target="_blank">documentation</a> has more specifics if you wish them.</p> <h4>Cool Patterns</h4> <p>But there are also some "cool" searches you can do with the more advanced features of regular expressions. First, including letters in parentheses creates a group, and you can refer to that group later with a \ and the group number. Here's how you might use it.</p> <p>Words that end in a double letter:<br /><strong>*(c)\1 </strong>lists all the words that end in a consonant doubled, including OFF, BILL, BIRR, BOSS, BRRR and over a hundred others. You could limit that to four letter words with <strong>??(c)\1</strong>.</p> <p>Words containing several of the same letter:<br /><strong>*(?)*\1*\1*\1* </strong>lists all the words that contain four or more of the same letter, such as ASSESS, BEEBEE, HOOPOO, and MACADAMIA.</p> <p>A repeating sequence:<br /><strong>*(???)*\1* </strong>lists all the words that have a three character sequence repeated in the word, such as ATLATL, RINGING, TARTARS, GUITGUIT, and INSULINS.</p> <h3><br />Parallel</h3> <div class="image_block"><a href="/b2e/media/blogs/dbell/coolparallel.png?mtime=1486072700"><img class="loadimg" style="width: 30%; float: right; margin: 5px;" src="/b2e/media/blogs/dbell/coolparallel.png?mtime=1486072700" alt="" /></a></div> <p>In a different search window (Front and Back) there are options to search for hooks and extensions, with front and back displayed in separate lists. The cool option in this search window is the Parallel search. This will simply show words that can be played parallel to the word entered. This could be most used following a high probability play with common (1 point) letters.</p> <p>For the word IODATES, there are 57 words that can be played in front, and 7 in the back. The parallel play calculates based on overlapping all or all but one letter. Of course, shorter words could also overlap part of the initial play. Being able to follow up an initial bingo with another bingo that overlaps would really be cool.</p> <h3>Letter Studies</h3> <p>One of the search projects that is still in development is letter studies. This window shows searches for a selected letter or custom set of letters. It begins with a list of words containing the letter <br />and displays them in multiple lists. Shorts, High Fours, High Fives, High Prob Sevens and Eights, and Prefix/Suffix searches.</p> <h4>Odd Second Letter</h4> <div class="image_block"><a href="/b2e/media/blogs/dbell/coolletterstudies.png?mtime=1486072699"><img class="loadimg" style="width: 50%; float: right; margin: 5px;" src="/b2e/media/blogs/dbell/coolletterstudies.png?mtime=1486072699" alt="" /></a></div> <p>One of the lists displayed that's cool is the list of words that begin with an odd second letter, that is, that few words have. Here's an explanation. The letter H is commonly followed by a vowel. For the letter H, the odd second letters would be M or W, and include the words <br />HM, HMM, HWAN</p> <p>For M, the list of words with odd second letters includes<br />MM, MHO, MBIRA, MNEMONIC, MRIDANGA</p> <p>For J, JNANA is one of the words.</p> <h4>Unique Hook</h4> <p>There is also a Custom list in Letter Studies, where you can select one of the searches to execute. One of the options is "Is Unique Hook", where words are displayed that include the letter as the ONLY hook. For the J, there is<br />IMMY<br />NANAS<br />ARGONS<br />OCULARLY</p> <p>When it comes to playing serious Scrabble™, Words with Friends™, and other word games, players must learn to master their language in many different ways. These are just some of the cool options available in Hoot.</p><div class="item_footer"><p><small><a href="https://tylerhosting.com/b2e/dbell.php/cool-searches-in-hoot">Original post</a> blogged on <a href="http://www.tylerhosting.com/b2e/">Switched Keys</a>.</small></p></div>
The latest version of Hoot has some cool search options. Hoot is one of many study tools you can use to study words for Scrabble™ and other word games. It's a free PC tool with a lot of standard search options that can help you increase your word knowledge. You can read about it at http://www.tylerhosting.com/hoot/.

The newer versions of Hoot include the Combination search that allows user to search from several options and limit that search by beginning or ending letters and the number of letters. You can also filter the search to only show words containing certain letters. Some of the options are important in Scrabble™ word study and include anagrams and anagram-related searches(subanagrams, superanagrams, blank anagrams), prefixes/suffixes, extensions, etc. Also in Combination are the occasionally used but often unremarkable options to search for misspells and transpositions. Although all of these searches are useful, there are a few other options that are downright "cool", at least to me.

Compound Words

Within the combination search you can now search for compound words. A compound word is a word made up of two other words. Experienced players realize that most words have other words within it. For example, ELEVATOR contains AT, EL, OR, TO, LEV, TOR, VAT, LEVA, and LEVATOR. You would find these with a Subwords search. A compound word in Hoot, on the other hand, is a word that is make up of two words of equal or almost equal length.

Searching for compound words is as simple as selecting the word length and pressing Search. The results can be displayed with the two words separated by a bullet, such as HIGH•WAYS, HIGH•TOPS, and HILL•TOPS. You can search for words of any length longer than 3 letters. You can even search for 14 letter words composed of two seven-letter words. COUNTER•MEASURE is one of them. Incidentally, the word COUNTER-COUNTER-MEASURE is composed of three seven-letter words. That would be a fun sequence of plays in Superscrabble. Of course you can limit the search based on prefix/suffix also.

Conjugate

This is an option designed for French lexicons. A similar option may be added for inflexions of words in English but it would not be as nearly useful.To conduct this search use a French lexicon like ODS5 (you won't get much from an English lexicon), and enter a regular verb in the search field. Searching will return all the valid conjugations of that verb. For example, using CHERCHER (French for to search) the list will show 36 words including
CHERCHA
CHERCHE
CHERCHAI
CHERCHAS
CHERCHAT
CHERCHEE
CHERCHER
CHERCHES
CHERCHEZ
..
CHERCHASSIONS

Conjugate is also an option in slide shows so you could study a whole collection of verbs. Simply
search for words ending in ER, RE, or IR, view in slide show, and select the Conjugate subsearch.

Actually, the slide show subsearches are pretty cool in themselves, but they've been there for a while and it's not a new thing to word study. Lexpert inspired me to include it; in fact, that was the inspiration to start developing Hoot in the first place.

Pattern

Another search in Combination is the pattern search. This is pretty easy to use for basic searches. E* would find words beginning with the letter E. ???? would show all of the four letter words. In Hoot, you can even use c, v, or numbers for letter sets. The lowercase c stands for consonant, the lowercase v for vowel, and numbers for the letter value. cc* would find words beginning with two consonants. ???8 would find four letter words ending in a 8 point letter (APEX, HADJ). Of course, you could build your own letter set. ???[WYZ] would find four letter words ending in W, Y, or Z. *(Y|ER) would find all words ending in Y or ER. The Hoot documentation has more specifics if you wish them.

Cool Patterns

But there are also some "cool" searches you can do with the more advanced features of regular expressions. First, including letters in parentheses creates a group, and you can refer to that group later with a \ and the group number. Here's how you might use it.

Words that end in a double letter:
*(c)\1 lists all the words that end in a consonant doubled, including OFF, BILL, BIRR, BOSS, BRRR and over a hundred others. You could limit that to four letter words with ??(c)\1.

Words containing several of the same letter:
*(?)*\1*\1*\1* lists all the words that contain four or more of the same letter, such as ASSESS, BEEBEE, HOOPOO, and MACADAMIA.

A repeating sequence:
*(???)*\1* lists all the words that have a three character sequence repeated in the word, such as ATLATL, RINGING, TARTARS, GUITGUIT, and INSULINS.


Parallel

In a different search window (Front and Back) there are options to search for hooks and extensions, with front and back displayed in separate lists. The cool option in this search window is the Parallel search. This will simply show words that can be played parallel to the word entered. This could be most used following a high probability play with common (1 point) letters.

For the word IODATES, there are 57 words that can be played in front, and 7 in the back. The parallel play calculates based on overlapping all or all but one letter. Of course, shorter words could also overlap part of the initial play. Being able to follow up an initial bingo with another bingo that overlaps would really be cool.

Letter Studies

One of the search projects that is still in development is letter studies. This window shows searches for a selected letter or custom set of letters. It begins with a list of words containing the letter
and displays them in multiple lists. Shorts, High Fours, High Fives, High Prob Sevens and Eights, and Prefix/Suffix searches.

Odd Second Letter

One of the lists displayed that's cool is the list of words that begin with an odd second letter, that is, that few words have. Here's an explanation. The letter H is commonly followed by a vowel. For the letter H, the odd second letters would be M or W, and include the words
HM, HMM, HWAN

For M, the list of words with odd second letters includes
MM, MHO, MBIRA, MNEMONIC, MRIDANGA

For J, JNANA is one of the words.

Unique Hook

There is also a Custom list in Letter Studies, where you can select one of the searches to execute. One of the options is "Is Unique Hook", where words are displayed that include the letter as the ONLY hook. For the J, there is
IMMY
NANAS
ARGONS
OCULARLY

When it comes to playing serious Scrabble™, Words with Friends™, and other word games, players must learn to master their language in many different ways. These are just some of the cool options available in Hoot.

]]>
https://tylerhosting.com/b2e/dbell.php/cool-searches-in-hoot#comments https://tylerhosting.com/b2e/dbell.php?tempskin=_rss2&disp=comments&p=379

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 932

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 933

Deprecated: Creation of dynamic property Hit::$is_lynx is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 571

Deprecated: Creation of dynamic property Hit::$is_firefox is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 572

Deprecated: Creation of dynamic property Hit::$is_gecko is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 573

Deprecated: Creation of dynamic property Hit::$is_IE is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 574

Deprecated: Creation of dynamic property Hit::$is_winIE is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 575

Deprecated: Creation of dynamic property Hit::$is_macIE is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 576

Deprecated: Creation of dynamic property Hit::$is_chrome is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 577

Deprecated: Creation of dynamic property Hit::$is_safari is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 578

Deprecated: Creation of dynamic property Hit::$is_opera is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 579

Deprecated: Creation of dynamic property Hit::$is_NS4 is deprecated in /home4/tylering/public_html/b2e/inc/sessions/model/_hit.class.php on line 580