Acommodation
We’ve slept in the beds, tasted the food, met the people and seen the wildlife. Then we went back and did it all again, just to be sure. We’ll keep on going back to ensure that what we recommend is perfect for you. The prices mentioned in our accommodation overview were last updated in 2018.
Accommodation prices in the Northern Safari Circuit are quite steep if you’re not pitching your own tent, but standards are high. Expect to pay the following:
🎱 up to US $ 150 for a budget double room 🎱 up to US $ 350 for a mid-range room 🎱 beyond US $ 400 for deluxe accommodation
Traveling Tanzania on a budget
Not want to break the bank? You will find plenty of decent budget and mid-range accommodation at a much lower price range in the Usambaras, Udzungwa Mountains and along the coast between Pangani and Dar es Salaam.
Public campsites in the national parks do not require any advance arrangements - most of them can’t even be booked in advance. Read more about preparing for your camping safari in Tanzania, at the camping section.
Donating
Travel Tanzania responsibly
Some advice to consider;
- Do not hand out money, clothes, pens, sweets or whatever else to children. However cute and poor they might be, it encourages begging and a distorted view of tourists. Instead, show genuine interest, play and talk with these kids the way you would with children from your own country.
- If you want to bring goods to Tanzania, your lodge owner is a good source of advice. They know how to distribute it best. We personally feel it is better to leave it up to them, instead of playing Santa Claus and donating in person. The same applies for leaving stuff behind in your room - it’s better to give it to the lodge owner than leave it for the maid to find, which can lead to friction among the staff.
- Most lodges have a tipping box and distribute the tips equally among all the staff. If you enjoyed the service, just be generous and contribute to the tipping box. As for your driver or guide, tipping is highly appreciated.
Camping in Tanzania
Preparing for your camping safari in Tanzania
Whether you are on a budget, love the outdoors, or just don’t want to have to book your accommodation ahead of time, safari with a full set of camping gear in the back of the car gives you a great sense of flexibility. Covered in this section:
- 🎱Are campsites widely available in Tanzania?
- 🎱Do I need to book my campsites in advance?
- 🎱How can I book a special campsite in the national parks of Tanzania?
- 🎱Tanzania camping fees
Are campsites widely available in Tanzania?
Lodges in the National Parks in Tanzania are expensive. Good to know that Tanzania is a great country for camping safaris! There are numerous campsites all over the country, so it is possible to explore Tanzania on a budget. From basic bush campsites inside the parks to private campsites operated by lodge owners - the latter enabling you to stay at a secured site with good amenities whilst sleeping for a dime. Moreover, the opportunities to camp are year round because of Tanzania’s warm climate.
If you want to stay inside the Ngorongoro Conservation Area, the most affordable option is Simba Public Campsite A, the only public campsite on the crater rim. The rest are special campsites or luxury lodges.
The most affordable place to stay inside the the Serengeti are the public campsites. There is a cluster of 7 campsites near Seronera, the central area of the park, and a cluster of campsites in the North at Lobo area. During the migration, this is a good place to stay. It’s around 2 hour drive from Seronera.
Do I need to book my campsites in advance?
You don’t need to book your public campsites in advance. There are several public campsites in every national park and you will always be assigned a campsite when you arrive at the park entrance. It works a bit different if you want to stay inside the Ngorongoro Conservation Area and/or the Wildlife Management Association (which is Lake Natron). If you want to visit these conservation areas, you need to obtain a reservation quote first, before you can go to the gate to pay for the park entrance. On this reservation quote, you have to mention the campsite where you will be staying.
How can I book a special campsite in the national parks of Tanzania?The so-called special campsites are largely reserved by private safari companies who bid on those for the season. As an individual traveler, you can’t stay there. The less interesting special campsites are not taken by the safari companies and are available to book by individual travelers.
It is not easy to secure a spot and these camps are more expensive, but you will enjoy a true wilderness experience camping at an isolated location.
If you prefer to stay at a special campsite instead of staying at one of the public campsites, we advise you pre-book as soon as you can and check out what is available and try to secure a spot.
Tanzania camping fees
- 🎱Public campsites $ 35 per person/night.
- 🎱Special campsites $50 per person/night.
- 🎱Private campsites operated by lodge owners charge around $ 10 per person / night.
- 🎱For a detailed cost overview, check the Tanzania National Parks Website.
What To Pack
Packing list for traveling to Tanzania
Our Kibokoland Adventure cars have a cigarette lighter to power your devices, but you’ll need to bring your own audio and USB cables. If you use Spotify, don’t forget to download your favorite road trip songs so you can listen to them off-line. Audio books are also great fun to listen to during long drives, or whilst sitting around a campfire or lying in your tent (try a thriller!). The Rough Guide Swahili Phrasebook comes in handy when traveling off the beaten track.
Take a look at our camping gear list to check whether it contains everything you want on your camping holiday in Tanzania. A Power bank comes in handy if you plan to camp a lot. A fleece blanket is nice for chilling on the grass or to cover up during the chillier nights. Definitely bring insect repellent and sun block, as these are more expensive in Tanzania. The interior highlands are cooler in the evenings, so bring a fleece or jumper. Arusha and Dar es Salaam have many well-stocked supermarkets and pharmacies where you can buy all the essentials, in case you forget anything. Obviously, this is not the case in provincial towns.
When To Go
When is the best time to visit Tanzania?
Good news - Tanzania is nice to visit all year round. The entire country has a pleasant tropical climate, but there are large regional climatic variations, mostly influenced by elevation. The hottest and most humid part of the country is the coast, with temperatures around 30C and little temperature drop in the evenings. Low-lying areas like Lake Eyasi and Moshi are also hot, but less humid.
How is the weather in Tanzania?
In general, the hottest time of the year in Tanzania is from November till March. The coolest months are from May to July, when it gets cold in the evenings at higher altitudes (Ngorongoro Crater, Arusha, Usumbara Mountains). Most of the rain falls between November and May, with the short rains in November and December, and the long rains from March to May. April and May are not a good time to visit the coast, as most lodges close down because of the rainy season.
When is high season in Tanzania?
Tourists come to visit Tanzania all year round. Peak season is around Christmas, July and August. Be sure to book our rental cars for peak season many months in advance. If you’re not camping, you will need to reserve your lodges in advance as well.The Ngorongoro Crater feels crowded at that time of the year.
When is the best time for game viewing in Tanzania? The safari parks in Tanzania which are most seasonal in terms of game viewing are Serengeti, Selous and Tarangire national parks.
Serengeti The Serengeti is famous for its annual migration of millions of wildebeest and other plains grazers on the move to find fresh grass and water, with predators like lions following in their footsteps. Whether it’s worth planning your safari dates around the Serengeti migration is a matter of choice. With the best will in the world, it would be practically impossible to coincide your few days in the Serengeti with the river crossing. However, dictated by local rainfall patterns, the migration does follow a pretty predictable pattern:
- 🎱 December - May: Southeast (Seronera, Ndutu)
- 🎱 May-July: Western corridor
- 🎱 July - October: Mara river
- 🎱 October -November: Lobo area.
Take note that the Western Corridor, Mara river and Lobo area are really far out from Arusha and going with a driver is highly recommended. In our experience, irrespective of season, the Serengeti always offers excellent game viewing opportunities. Read everything you need to know about the Serengeti in our Tanzania travel blog here.
Selous
Selous is a highly seasonal game-viewing destination and it tends to be hotter than any other reserve in Tanzania due to its low altitude. The optimum time to visit is during the dry season of June to September, when wildlife is abundant and temperatures tolerable. Game viewing is just as good from October till early November, but it will be very, very hot. Roads tend to become impassable and lodges are closed during April and May.
Tarangire
Tarangire National Park lies within the Central Rift Valley, only 100 km southwest of Arusha. Tarangire is best known for its large herds of elephants. During dry season, the park is said to have the largest concentration of elephants in the world! Another striking feature of the park is the abundance of baobab trees. There are also some beautiful stands of acacia tortillis trees, the flat-topped acacias which are so reminiscent of films like the Lion King and Out of Africa. Animal concentration peaks between July till the start of the rains in November, early December. From November to May, much of the game leaves the park.


Welcome to Chain Hunter
Chain Hunter allows you to explore multiple blockchains by address, contract, and transaction hash all at once!
Bitcoin (BTC) Explorer
Use Chain Hunter to search Bitcoin and many other cryptocurrencies at one time
Aeternity (AE) Explorer
Use Chain Hunter to search Aeternity and many other cryptocurrencies at one time
AION (AION) Explorer
Use Chain Hunter to search AION and many other cryptocurrencies at one time
Binance Coin (BNB) Explorer
Use Chain Hunter to search Binance Coin and many other cryptocurrencies at one time
Bitcoin Cash (BCH, BCHABC) Explorer
Use Chain Hunter to search Bitcoin Cash and many other cryptocurrencies at one time
Cardano (ADA) Explorer
Use Chain Hunter to search Cardano and many other cryptocurrencies at one time
Cosmos (ATOM) Explorer
Use Chain Hunter to search Cosmos and many other cryptocurrencies at one time
Dash (DASH) Explorer
Use Chain Hunter to search Dash and many other cryptocurrencies at one time
Ethereum (ETH) Explorer
Use Chain Hunter to search Ethereum and many other cryptocurrencies at one time
Icon (ICX) Explorer
Use Chain Hunter to search Icon and many other cryptocurrencies at one time
IOST (IOST) Explorer
Use Chain Hunter to search IOST and many other cryptocurrencies at one time
Litecoin (LTC) Explorer
Use Chain Hunter to search Litecoin and many other cryptocurrencies at one time
Nano (NANO) Explorer
Use Chain Hunter to search Nano and many other cryptocurrencies at one time
Neblio (NEBL) Explorer
Use Chain Hunter to search Neblio and many other cryptocurrencies at one time
Neo (NEO) Explorer
Use Chain Hunter to search Neo and many other cryptocurrencies at one time
Ontoloty (ONT) Explorer
Use Chain Hunter to search Ontoloty and many other cryptocurrencies at one time
Ravencoin (RVN) Explorer
Use Chain Hunter to search Ravencoin and many other cryptocurrencies at one time
Ripple (XRP) Explorer
Use Chain Hunter to search Ripple and many other cryptocurrencies at one time
Tether (USDT) Explorer
Use Chain Hunter to search Tether and many other cryptocurrencies at one time
Tron (TRX) Explorer
Use Chain Hunter to search Tron and many other cryptocurrencies at one time
VeChain (VET) Explorer
Use Chain Hunter to search VeChain and many other cryptocurrencies at one time
ZelCash (ZEL) Explorer
Use Chain Hunter to search ZelCash and many other cryptocurrencies at one time


HTML Forms
Using Sinatra and Shotgun, here is the erb view and what it looks like running on a server.
HTML form erb code
HTML form server view
Rake commands:
Rake generate:model NAME="nameofclass"
Rake generate:migration NAME="nameofmigrationclass"
Rake db:create => Creates database
Rake db:migrate => Migrates all file in migration folder to database(setting up schema)
Rake db:test:prepare => prepares test database for spec tests


Shanghai is one of the four direct-administered municipalities of the People's Republic of China.
Yes No


NAME¶
i3lock - improved screen locker
SYNOPSIS¶
i3lock [-v] [-c
color]
DESCRIPTION¶
i3lock is a simple screen locker like slock. After starting it, you will see a white screen (you can configure the color/an image). You can return to your screen by entering your password.
IMPROVEMENTS¶
-
•
-
i3lock forks, so you can combine it with an alias to suspend to RAM (run "i3lock && echo mem > /sys/power/state" to get a locked screen after waking up your computer from suspend to RAM)
-
•
-
You can specify either a background color or a PNG image which will be displayed while your screen is locked.
-
•
-
You can specify whether i3lock should bell upon a wrong password.
-
•
-
i3lock uses PAM and therefore is compatible with LDAP, etc.
OPTIONS¶
-
-v, --version
-
Display the version of your i3lock
-
-c rrggbb, --color=rrggbb
-
Turn the screen into the given color instead of white. Color must be given in 3-byte format: rrggbb (i.e. ff0000 is red).
DPMS¶
The -d (--dpms) option.
verbatim
SEE ALSO¶
xautolock(1) - use i3lock as your screen saver
AUTHOR¶
Michael Stapelberg <michael+i3lock@example.invalid>


sam bacha<EMAIL_ADDRESS>Version {0.3.0}
Introduction and Goals
Requirements Overview
Quality Goals
Stakeholders
| Role/Name | Contact | Expectations |
|---|---|---|
|
_Front End UI/UX |
<Contact-1> |
SushiSwap |
|
_Protocol Engineering _ |
<Contact-2> |
SushiSwap |
|
_Backend Operations |
x48 |
Yearn Finance |
|
Community Liasion |
<Contact-2> |
SushiSwap (undefined) |
|
<Role-2> |
<Contact-2> |
<Expectation-2> |
Architecture Constraints
System Scope and Context
Business Context
<Diagram or Table>
<optionally: Explanation of external domain interfaces>
Technical Context
<Diagram or Table>
<optionally: Explanation of technical interfaces>
<Mapping Input/Output to Channels>
include::04_solution_strategy.adoc]
Design Decisions
Glossary A: Glossary
| Term | Definition |
|---|---|
|
<Term-1> |
<definition-1> |
|
<Term-2> |
<definition-2> |


We appreciate your interest and let us knwo how we can help you.
Techsol Engineering Limited
BDBL Bhaban (Level - 19)
12 Karwan Bazar C/A
Dhaka - 1215
Bangladesh.
Tel: +88 02 8189587 - 90
Cell: +8801711547055
Email<EMAIL_ADDRESS>Tek Kathora, Salna
Gazipur - 1703
Bangladesh.
Phone: +8801777780550
Phone: +8801777780560
Phone: +8801777780570


%@ page import="java.io.*,java.util.*,java.sql.*"%>
EXCOGITATION: FOR SAFE AND SECURED VEHICLE PARKING
Vehicle Parking Solution
Home
Operator
Register Operator
Operator details
Messages
Compose
Inbox
Sent messages
Floor Customization
Customize floors
View floor wise
Reports
Vehicle reports
Operator reports
Settings
Change Password
Logged-in timings
Security question
Log out
FirstName
LastName
Gender
Male
Female
Address
Date of Birth
Mobile Number
Upload Image
Country
(please select a country)
none
Afghanistan
Albania
Algeria
American Samoa
Andorra
Angola
Anguilla
Antarctica
Antigua and Barbuda
Argentina
Armenia
Aruba
Australia
Austria
Azerbaijan
Bahamas
Bahrain
Bangladesh
Barbados
Belarus
Belgium
Belize
Benin
Bermuda
Bhutan
Bolivia
Bosnia and Herzegowina
Botswana
Bouvet Island
Brazil
British Indian Ocean Territory
Brunei Darussalam
Bulgaria
Burkina Faso
Burundi
Cambodia
Cameroon
Canada
Cape Verde
Cayman Islands
Central African Republic
Chad
Chile
China
Christmas Island
Cocos (Keeling) Islands
Colombia
Comoros
Congo
Congo, the Democratic Republic of the
Cook Islands
Costa Rica
Cote d'Ivoire
Croatia (Hrvatska)
Cuba
Cyprus
Czech Republic
Denmark
Djibouti
Dominica
Dominican Republic
East Timor
Ecuador
Egypt
El Salvador
Equatorial Guinea
Eritrea
Estonia
Ethiopia
Falkland Islands (Malvinas)
Faroe Islands
Fiji
Finland
France
France, Metropolitan
French Guiana
French Polynesia
French Southern Territories
Gabon
Gambia
Georgia
Germany
Ghana
Gibraltar
Greece
Greenland
Grenada
Guadeloupe
Guam
Guatemala
Guinea
Guinea-Bissau
Guyana
Haiti
Heard and Mc Donald Islands
Holy See (Vatican City State)
Honduras
Hong Kong
Hungary
Iceland
India
Indonesia
Iran (Islamic Republic of)
Iraq
Ireland
Israel
Italy
Jamaica
Japan
Jordan
Kazakhstan
Kenya
Kiribati
Korea, Democratic People's Republic of
Korea, Republic of
Kuwait
Kyrgyzstan
Lao People's Democratic Republic
Latvia
Lebanon
Lesotho
Liberia
Libyan Arab Jamahiriya
Liechtenstein
Lithuania
Luxembourg
Macau
Macedonia, The Former Yugoslav Republic of
Madagascar
Malawi
Malaysia
Maldives
Mali
Malta
Marshall Islands
Martinique
Mauritania
Mauritius
Mayotte
Mexico
Micronesia, Federated States of
Moldova, Republic of
Monaco
Mongolia
Montserrat
Morocco
Mozambique
Myanmar
Namibia
Nauru
Nepal
Netherlands
Netherlands Antilles
New Caledonia
New Zealand
Nicaragua
Niger
Nigeria
Niue
Norfolk Island
Northern Mariana Islands
Norway
Oman
Pakistan
Palau
Panama
Papua New Guinea
Paraguay
Peru
Philippines
Pitcairn
Poland
Portugal
Puerto Rico
Qatar
Reunion
Romania
Russian Federation
Rwanda
Saint Kitts and Nevis
Saint LUCIA
Saint Vincent and the Grenadines
Samoa
San Marino
Sao Tome and Principe
Saudi Arabia
Senegal
Seychelles
Sierra Leone
Singapore
Slovakia (Slovak Republic)
Slovenia
Solomon Islands
Somalia
South Africa
South Georgia and the South Sandwich Islands
Spain
Sri Lanka
St. Helena
St. Pierre and Miquelon
Sudan
Suriname
Svalbard and Jan Mayen Islands
Swaziland
Sweden
Switzerland
Syrian Arab Republic
Taiwan, Province of China
Tajikistan
Tanzania, United Republic of
Thailand
Togo
Tokelau
Tonga
Trinidad and Tobago
Tunisia
Turkey
Turkmenistan
Turks and Caicos Islands
Tuvalu
Uganda
Ukraine
United Arab Emirates
United Kingdom
United States
United States Minor Outlying Islands
Uruguay
Uzbekistan
Vanuatu
Venezuela
Viet Nam
Virgin Islands (British)
Virgin Islands (U.S.)
Wallis and Futuna Islands
Western Sahara
Yemen
Yugoslavia
Zambia
Zimbabwe
Email
Pin-code
Username
Password
NEW OPERATOR REGISTRATION


Stage Name: IU (아이유)
Birth Name: Lee Ji Eun (이지은)
Nickname: Nation’s Little Sister; Nation’s Sweetheart
Birthday: May 16, 1993
Zodiac Sign: Taurus
Height: 162 cm (5 ft 3¾ in)
Weight: 47 kg (103 lbs)
Blood Type: O
MBTI Type: INFP IU Facts:
– She was born in Seoul, South Korea
– She has a younger brother.
– She attended Dongduk Women’s High School.
– IU worked hard to overcome a poor background
– When she was a child, IU’s family lived in a small one-bedroom place for a year, where cockroaches roamed around.
– She was in the 7th grade when she officially decided to become a singer.
– She failed an audition at JYP but got into Loen Entertainment.
– Later, mr. JYP said that he was going to fire whoever let IU go.
– She started as a trainee for Loen Entertainment in 2007.
– She released her first album ‘Lost and Found’ on 24 September 2008.
– She’s known for being very nice to her fans. A student fan who spotted IU at a restaurant said she gladly welcomed her and gave her an autograph telling her to stay healthy and study hard.
– She is a fan of GFriend, she said before that she wants to make a comeback in the same time as GFriend so that they could promote together. (151213 IU’s concert)
– IU is best friends with Suzy and with Jiyeon of T-ara.
– Suzy’s younger brother in an interview said he’s a fan of IU.
– IU is also best friends with actress Yoo In Na, they live in the same apartment complex. (IU interview on “Hyori’s Homestay”)
– IU and Yoo In Na have a special nickname “IU In Na”. IU said that Yoo In Na is her muse and she gets inspired by her, also they take many trips together. (IU’s Palette concert)
– IU is also close to APink‘s Eunji.
– She said she was inspired by f(x)‘s Sully when she wrote the song “Peach”. “I wrote the lyrics to “Peach” while thinking of f(x)’s Sulli from a male perspective.” (me2day mobile chat session)
– She’s been rumored to date Super Junior‘s Eunhyuk. On Nov. 10, 2012, a mysterious picture was uploaded on IU’s Twitter. In the picture were IU in pajamas and shirtless Eunhyuk. She deleted the photo shortly after.
– In August 2013, she was rumored to date actor Lee Hyun Woo after a picture went viral of the two in a movie theater. Her agency explained that they’re just friends.
– IU has been appointed as the honorary ambassador for EXPO 2012 Yeosu Korea.
– She loves reading books, listening to music, and browsing internet.
– She says she wants to get a surgery for her nose, but the doctor prohibits her to do that because her nose is very low.
– IU is Kim Tae Woo’s fan. And he is the reason why IU tries to audition at JYP Entertainment.
– She is more comfortable when she is alone and gets dizzy when she’s in crowded places.
– IU said that in the past, prior to becoming a star, she had struggles with Bulimia -an eating disorder. (“Healing Camp”)
– She has many ahjusshi fans. (Older male fans)
– Instruments: Guitar, Piano, Recorder, Drums
– Her favorite color is Purple. (Interview with DINGO)
– Her favorite foods are Raw Fish and Sweet Potato.
– Her favorite number is 8.
– IU likes to eat raw liver.
– She likes a cool weather.
– She said she always thought her blood type was A, but in early 2020, when she went for a medical check-up she discovered that her blood type is actually O. (IU TV – Dec. 2020)
– She revealed that the song “Dear Name” is (so far) the hardest for her to sing.
– She participates in a reality show called ‘Hyori’s Bed & Breakfast’ alongside Lee Hyori and Lee Hyori’s husband, Lee Sang Soon.
– IU has met Chang Kiha in 2013 and started dating for 4 years but officially broken up in 2017 January due to the fact that they have been breaking up and getting back together for a while, and finally decided to call it quits permanently. They had an age gap difference of 11 years.
– IU’s ideal type: “It’s just like other people, whenever a cool person comes out on TV, my ideal type of man change.” Before she use to say Taeyang (BigBang was her ideal) “I Always Had Big Bang’s Taeyang In My Heart” IU Movies:
Real (리얼) | 2017 – Awards guide (cameo) IU Drama Series:
Hotel Del Luna | tvN / 2019 – Jang Man-Wol
Persona (페르소나) | Netflix / 2019
My Mister (나의 아저씨) | tvN / 2018 – Lee Ji-an
Moon Lovers: Scarlet Heart Ryeo (달의 연인: 보보경심 려) | SBS / 2016 – Go Hae-jin/Hae-soo
The Producers (프로듀사) | KBS2 / 2015 – Cindy
Bel Ami (예쁜남자) | KBS2 / 2013 – Kim Bo-tong
You Are The Best! (최고다 이순신) | KBS2 / 2013 – Lee Soon-shin
Salamander Guru and The Shadows (도롱뇽도사와 그림자 조작단) | SBS / 2012 – Pickpocket Ji-eun (cameo ep. 6)
Dream High 2 (드림하이 2) | KBS2 / 2012 – Kim Pil-suk (cameo ep. 1)
Dream High (드림하이) | KBS2 / 2011 – Kim Pil-suk IU Awards:
2016 SBS Drama Awards | Best Couple Award (“Moon Lovers: Scarlet Heart Ryeo”)
2013 KBS Drama Awards | Best New Actress (“You Are The Best!” & “Bel Ami)
2013 KBS Drama Awards | Best Couple Award (“You Are The Best!”)
2018 APAN Star Awards | Top Excellence Actress Award (“My Mister”)


Security & Token Authentication¶
Any app you put into production should feature security that protects your app, your users, and your app’s data. Implementing security means taking steps in your mobile app’s code and in your API Services BaaS application.
Important: When you register for the API Services BaaS, you get a sandbox application that you can use to try things out. This application is not for use in production. By default, the sandbox application is not protected by any security measures whatsoever. Use the sandbox only for experimentation, and only with data that isn’t in any way sensitive.
When securing your app, follow these high-level steps:
- Define the rules that will govern access by your app’s users to your app’s data and features. You do this with the admin portal by creating permission rules, then associating those rules with your users. For more information, see [Using Permissions](managing-access-defining-permission-rules.html).
- Write code through which your app’s users can verify who they are to your application. You do this by writing code that uses their username and password as credentials to initially authenticate with your application, then uses a token thereafter. (This authentication style supports the OAuth 2.0 model.) For more information, see [Authenticating users & app clients](autheticating-users-and-application-clients.html).
- Be sure to use coding best practices that help ensure that your app is protected from malicious attacks. For more information, see [Security best practices](security-best-practices.html).
The following illustration describes these high-level areas.


{% extends "base.html" %} {% block page_title %} My Profile {% endblock page_title %} {% block content %} My Profile Name Email Theme Default Night Solarized Change Password Leave blank if you don't want to change. Current Password New Password Confirm New Password Cancel Save {% endblock content %}
Leave blank if you don't want to change.


{% include head.html %}
{% include nav.html %} {% include header.html %}
This is the Morie Index
Link to Moire #1
Link to Moire #2
{% include footer.html %} {% include modals.html %} {% include js.html %}


They may yes buggy be, but they super fun are happy giving.
A collection of JavaScript Games for Testing, Hacking and messing with. For fun, education and your ongoing edification.
The Ultimate Driver Game of Skill and Dexterity.
The Even More Ultimate Driving Game of Skill and Dexterity.
The Ulitmate Game of Colour Matching.
A Text only mutated version of Lunar Lander where you have to hover in a certain position, but you do not know what position is until you gain points.
A Dynamic and updated even more Ultimate Game of Colour Matching
Play The Coloured Square Changing Game
Marvel at the graphics. Can you write a program that will move your player to the exit?
Play The Random Walker
Play The Multi-Level Random Walker
Can you walk the grid and exit with a high score?
Test your mathematical prowess as you challenge the ultimate calculator for supremacy.
Play The One To Nine Calculator Game
Click to save the green square from the evil red squares.
Play The Protect The Square Game
There are multiple versions of this game.
Cellular Automata
Zombies
All of these are by other programmers:


Congratulations! Dispense your candy reward by clicking the button.
Note: This reward only works once. Be sure you are at the candy dispenser.


Former Chiefs Attacker Seals First Win For Chippa
by Soccer LadumaAbsa Premiership
Result: AmaZulu 0-2 Chippa United
Date: 09 November 2019
Venue: Princess Magogo Stadium
Chippa United finally registered their first Absa Premiership victory of the season with a 2-0 triumph over AmaZulu at the Princess Magogo Stadium on Saturday evening.
Usuthu made two changes from their win over Stellenbosch FC, with Ovidy Karuru and Mbongeni Gumed returning to the fray, while the Chilli Boys had four alterations that included goalkeeper Veli Mothwa taking over from Patrick Tignyemb, as well as Thabo Rakhale and Mzikayise Mashaba.
Jozef Vukusic's charges took the initiative to attack in the early stages, which nearly resulted in the opener in the 18th minute after Siyethemba Sithebe delivered a teasing cross into the box but Bonginkosi Ntuli's header was smothered by Mothwa.
AmaZulu were playing a lot crosses in the area after that but they made it easy for Norman Mapeza's troops to defend, who were just absorbing the pressure and looking to go forward with long balls. However, the Chilli Boys were unable to trouble shot-stopper Siyabonga Mbatha for most of the half.
Mapeza's troops were showing the willingness to go forward in numbers and they found the breakthrough on the hour-mark courtesy of William Twala's strike that took a deflection and wrong-footed Mbatha.
Usuthu came close to finding the equaliser with 20 minutes remaining after Sithebe picked out Lehlohonolo Majoro inside the box, but the former Kaizer Chiefs striker guided his header over the bar.
Vukusic' men were made to rue that miss as Twala got the second goal for Chippa five minutes before time with a neat finish past Mbatha.
AmaZulu came close to pulling a goal back in the last three minutes after Majoro rattled the woodwork, but the Chilli Boys were able to hold on for their first win of the campaign.
Here's how they lined up:
AmaZulu: 28. Mbatha, 4. Morton, 17. M.Gumede, 27. Xoki, 18. Booysen, 34. Maduna, 33. Darpoh, 19. Sithebe, 11. Karuru, 20. Majoro, 7. Ntuli.
Subs: 43. Boshoff, Masilela, Khumalo, 6. Ncube, 8. Ncobeni, 50. Vilakazi, 14. De Jong.
Chippa: 34. Mothwa, 22. Modisane, 10. Mashaba, 17. Damons, 8. Rakhale, 11. Maziya, 33. Maholo, 20. K.Moyo, 40. Twala, 13. Maphangule, 15. Kwem.
Subs: 30. Tignyemb, 21. Maphanga, 32. Lentjies, 23. Reid, 19. Manzini, 16. Maarman, 9. L.Manzini.


$Revision: 5212 $
Copyright 2002-2012 Fred Toussi. Permission is granted to distribute this document without any alteration under the terms of the HSQLDB license. Additional permission is granted to the HSQL Development Group to distribute this document with or without alterations under the terms of the HSQLDB license.
2013-07-08 15:32:59+0100
Table of Contents
As described in the Running and Using HyperSQL chapter, network listeners (servers) provide connectivity to catalogs from different JVM processes. The HyperSQL listeners support both ipv4 and ipv6 network addressing.
This is the preferred way of running a database server and the fastest one. This mode uses the proprietary hsql: communications protocol. The following example of the command for starting the server starts the server with one (default) database with files named "mydb.*" and the public name (alias) of "xdb".
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
Alternatively, a server.properties file can be used for passing the arguments to the server. This file must be located in the directory where the command is issued.
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server
Alternatively, you can specify the path of the server.properties file on the command line. In this case, the properties file can have any name or extension, but it should be a valid properties file.
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --props myserver.props
Use the --help argument to see the list of available arguments.
java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --help
The contents of the server.properties file is described in the next section.
This method of access is used when the computer hosting the database server is restricted to the HTTP protocol. The only reason for using this method of access is restrictions imposed by firewalls on the client or server machines and it should not be used where there are no such restrictions. The HyperSQL HTTP Server is a special web server that allows JDBC clients to connect via HTTP. The server can also act as a small general-purpose web server for static pages.
To run an HTTP server, replace the main class for the server in the example command line above with the following:
java -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer
The contents of the server.properties file is described in the next section.
This method of access also uses the HTTP protocol. It is used when
a separate servlet engine (or application server) such as Tomcat or
Resin provides access to the database. The Servlet Mode cannot be
started independently from the servlet engine. The
Servlet
class, in the HSQLDB jar, should be
installed on the application server to provide the connection. The
database is specified using an application server property. Refer to the
source file
src/org/hsqldb/server/Servlet.java
to see the details.
Both HTTP Server and Servlet modes can only be accessed using the JDBC driver at the client end. They do not provide a web front end to the database. The Servlet mode can serve only a single database.
Please note that you do not normally use this mode if you are using the database engine in an application server. In this situation, connections to a catalog are usually made in-process, or using an external HSQL Server instance.
Properties files for running the servers are not created
automatically. You should create your own files that contain
server.property=value
pairs for
each property. The server.properties
or
webserver.properties
files must be located in the
directory where the command to run the
org.hsqldb.server.Server
class is issued.
In all properties files, values are case-sensitive. All values apart
from names of files or pages are required in lowercase (e.g.
server.silent=FALSE
will have no
effect, but server.silent=false
will work). Supported properties and their default values (if any) are as
follows:
Table 13.1. common server and webserver properties
| Value | Default | Description |
|---|---|---|
| server.database.0 | file:test | the catalog type, path and file name of the first database file to use |
| server.dbname.0 | "" | lowercase server alias for the first database file |
| server.database.n | NO DEFAULT | the catalog type, path and file name of the n'th database file in use |
| server.dbname.n | NO DEFAULT | lowercase server alias for the n'th database file |
| server.silent | true | no extensive messages displayed on console |
| server.trace | false | JDBC trace messages displayed on console |
| server.address | NO DEFAULT | IP address of server |
| server.tls | false | Whether to encrypt network stream. If this is set to
true , then in normal situations you will also
need to set properties
system.javax.net.ssl.keyStore and
system.javax.net.ssl.keyStorePassword , as
documented elsewhere. The value of server.tls
impacts the default value of
server.port . |
| server.daemon | false | Whether the server is run as a daemon |
| server.remote_open | false | Allows opening a database path remotely when the first connection is made |
In HyperSQL version 2.0, each server can serve an unlimited number of databases simultaneously. The server.database.0 property defines the filename / path whereas the server.dbname.0 defines the lowercase alias used by clients to connect to that database. The digit 0 is incremented for the second database and so on. Values for the server.database.n property can use the mem:, file: or res: prefixes and connection properties as discussed under CONNECTIONS. For example,
database.0=mem:temp;sql.enforce_strict_size=true;
Properties or default values specific to
server.properties
are:
Table 13.2. server properties
| Value | Default | Description |
|---|---|---|
| server.port | 9001 (normal) or 554 (if TLS
encrypted) | TCP/IP port used for talking to clients. All databases are served on the same port. |
| server.no_system_exit | true | no System.exit() call when the database
is closed |
Properties or default values specific to
webserver.properties
are:
Table 13.3. webserver properties
| Value | Default | Description |
|---|---|---|
| server.port | 80 (normal) or 443 (if TLS
encrypted) | TCP/IP port used for talking to clients |
| server.default_page | index.html | the default web page for server |
| server.root | ./ | the location of served pages |
| .<extension> | NO DEFAULT | multiple entries such as .html=text/html
define the mime types of the static files served by the web
server. See the source for
src/org/hsqldb/server/WebServer.java for a
list. |
An example of the contents of a
server.properties
file is given below:
server.database.0=file:/opt/db/accounts server.dbname.0=accounts server.database.1=file:/opt/db/mydb server.dbname.1=enrolments server.database.2=mem:adatabase server.dbname.2=quickdb
In the above example, the server.properties
file indicates that the server provides access to 3 different databases.
Two of the databases are file-based, while the third is all-in-memory. The
aliases for the databases that the users connect to are
accounts
, enrolments
and
quickdb
.
All the above properties and their values can be specified on the
command line to start the server by omitting the
server.
prefix. If a property/value pair is specified
on the command line, it overrides the property value specified in the
server.properties
or
webserver.properties
file.
| Note | |
|---|---|
|
Upgrading: If you have existing custom properties files, change the values to the new naming convention. Note the use of digits at the end of server.database.n and server.dbname.n properties. |
If you want to start the server from within your application, as
opposed to the command line or batch files, you should create an instance
of Server or Web Server, then assign the properties and start the Server.
An working example of this can be found in the org.hsqldb.test.TestBase
source. The example below sets the same properties as in the
server.properties file example.
HsqlProperties p = new HsqlProperties(); p.setProperty("server.database.0","file:/opt/db/accounts"); p.setProperty("server.dbname.0","an_alias"); // set up the rest of properties // alternative to the above is Server server = new Server(); server.setProperties(p); server.setLogWriter(null); // can use custom writer server.setErrWriter(null); // can use custom writer server.start();
The Server object has several alternative methods for setting databases and their public names. The server should be shutdown using the shutdown() method.
If the server.remote_open
property is true, the
Server works differently from the normal mode. In this mode, it is not
necessary to have any databases listed as server.database.0 etc. in the
Server startup properties. If there are databases listed, they are opened
as normal. The server does not shutdown when the last database is
closed.
In this mode, a connection can be established to a database that is not open or does not exist. The server will open the database or create it, then return a connection to the database.
The connection URL must include the path to the database, separated
with a semicolon from the alias. In the example below, the database path
specified as file:C:/files/mydatabase
is opened and the
database alias xdb
is assigned to the database. After
this, the next connection to the specified alias will connect to the same
database. Any database path on the URL is ignored if the alias is serving
a database.
The database path can point to a file:
or
mem:
database.
If you use database properties on the URL, these properties are used
when the new database is created. If no database properties are used on
the URL, you can also specify the path with
filepath=<path>
. Examples below:
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb;file:C:/files/mydatabase", "SA", ""); Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb;mem:test;sql.enforce_types=true", "SA", ""); Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb;filepath=file:C:/files/mydatabase", "SA", "");
Each database started by a Server has its own URL. When new databases are created by the server, the database properties for each of the new database can be appended to the database URL. Examples below:
// example in server.propertie file server.database.0=file:/opt/db/accounts;hsqldb.default_table_type=cached;sql.enforce_names=true server.dbname.0=accounts // example for setting the property programatically HsqlProperties p = new HsqlProperties(); p.setProperty("server.database.0","file:/opt/db/accounts;hsqldb.default_table_type=cached;sql.enforce_names=true");
The specified properties apply only to a new database. They have no
effect on an existing database apart from a few properties such as
readonly
listed in the Properties
chapter.
This section explains how to encrypt the stream between JDBC network clients and HyperSQL Listeners. If you are running an in-process (non-Listener) setup, this chapter does not apply to you.
Hsqldb TLS Support Requirements
Sun Java 2.x and up. (This is probably possible with IBM's Java, but I don't think anybody has attempted to run HSQLDB with TLS under IBM's Java, and I'm sure that nobody in the HSQLDB Development Group has documented how to set up the environment).
If Java 2.x or 3.x, then you will need to install JSSE. Your server and/or client will start up much slower than that of Java 4.x users. Client-side users will not be able to use the https: JDBC protocol (because the https protocol handler is not implemented in 2.x/3.x Java JSSE; if there is demand, we could work around this).
A JKS keystore containing a private key, in order to run a Listener.
If you are running the listener side, then you'll need to run a HSQLDB Server or WebServer Listener instance. It doesn't matter if the underlying database catalogs are new, and it doesn't matter if you are making a new Listener configuration or encrypting an existing Listener configuration. (You can turn encryption on and off at will).
You need a HSQLDB jar file that was built with JSSE present. If you obtained your HSQLDB 1.7.2-or-later distribution from us, you are all set, because we build with Java 1.4 or later (which contains JSSE). If you build your own jar file with Java 1.3, make sure to install JSSE first.
At this time, only 1-way, server-cert encryption is tested.
Just use one of the following protocol prefixes.
Hsqldb TLS URL Prefixes
jdbc:hsqldb:hsqls://
jdbc:hsqldb:https://
At this time, the latter will only work for clients running with Java 1.4 or later.
If the listener you wish to connect to is using a certificate approved by your default trust keystore, then there is nothing else to do. If not, then you need to tell Java to "trust" the server cert. (It's a slight over-simplification to say that if the server certificate was purchased, then you are all set; if somebody "signed their own" certificate by self-signing or using a private ca certificate, then you need to set up trust).
First, you need to obtain the cert (only the "public" part of it). Since this cert is passed to all clients, you could obtain it by writing a Java client that dumps it to file, or perhaps by using openssl s_client. Since in most cases, if you want to trust a non-commercial cert, you probably have access to the server keystore, I'll show an example of how to get what you need from the server-side JKS keystore.
You may already have an X509 cert for your server. If you have a server keystore, then you can generate a X509 cert like this.
Example 13.1. Exporting certificate from the server's keystore
keytool -export -keystore server.store -alias existing_alias -file server.cer
In this example, server.cer
is the
X509 certificate that you need for the next step.
Now, you need to add this cert to one of the system trust
keystores or to a keystore of your own. See
the Customizing Stores section in JSSERefGuide.html to see
where your system trust keystores are. You can put private keystores
anywhere you want to. The following command will add the cert to an
existing keystore, or create a new keystore if
client.store
doesn't exist.
Example 13.2. Adding a certificate to the client keystore
keytool -import -trustcacerts -keystore trust.store -alias new_alias -file server.cer
If you are making a new keystore, you probably want to start
with a copy of your system default keystore which you can find
somewhere under your JAVA_HOME
directory (typically
jre/lib/security/cacerts
for a JDK, but I forget
exactly where it is for a JRE).
Unless your OS can't stop other people from writing to your files, you probably do not want to set a password on the trust keystore.
If you added the cert to a system trust store, then you are
finished. Otherwise you will need to specify your custom trust
keystore to your client program. The generic way to set the trust
keystore is to set the system property
javax.net.ssl.trustStore
every time that you
run your client program. For example
Example 13.3. Specifying your own trust store to a JDBC client
java -Djavax.net.ssl.trustStore=/home/blaine/trust.store -jar /path/to/hsqldb.jar dest-urlid
This example runs the program SqlTool. SqlTool has built-in TLS
support however, so, for SqlTool you can set
truststore
on a per-urlid basis in the SqlTool
configuration file.
Note: The hostname in your database URL must match the
Common Name of the server's certificate exactly.
That means that if a site certificate is admc.com
,
you can not use jdbc:hsqldb:hsqls://localhost
or
jdbc:hsqldb:hsqls://www.admc.com:1100
to connect to
it.
If you want more details on anything, see JSSERefGuide.html on
Sun's site, or in the subdirectory
docs/guide/security/jsse
of your Java SE
docs.
Get yourself a JKS
keystore containing a private key. Then set properties
server.tls
,
system.javax.net.ssl.keyStore
and
system.javax.net.ssl.keyStorePassword
in your
server.properties
or
webserver.properties
file. Set
server.tls
to true
,
system.javax.net.ssl.keyStore
to the path of the
private key JKS keystore, and
system.javax.net.ssl.keyStorePassword
to the
password (of both the keystore and the private key record-- they must
be the same). If you specify relative file path values, they will be
resolved relative to the ${user.dir}
when the JRE
is started.
| Caution | |
|---|---|
|
If you set any password in a .properties (or any other) file, you need to restrict access to the file. On a good operating system, you can do this like so: chmod 600 path/to/server.properties |
The values and behavior of the system.*
settings above match the usage documented for
javax.net.ssl.keyStorePassword
and
javax.net.ssl.keyStore
in the JSSE docs.
| Note | |
|---|---|
|
Before version 2.0, HyperSQL depended on directly setting the corresponding JSSE properties. The new idiom is more secure and easier to manage. If you have an old password in a UNIX init script config file, you should remove it. |
If you are running Java 4.x or later, then you are all set. Java 1.x users, you are on your own (Sun does not provide a JSSE that will work with 1.x). Java 2.x and 3.x users continue...
Go to http://java.sun.com/products/jsse/index-103.html If
you agree to the terms and meet the requirements, download the domestic
or global JSSE software. All you need from the software distro is the
three jar files. If you have a JDK installation, then move the 3 jar
files into the directory $JAVA_HOME/jre/lib/ext
. If
you have a JRE installation, then move the 3 jar files into the
directory $JAVA_HOME/lib/ext
.
Pretty painless.
There are two main ways to do this. Either you can use a certificate signed by a certificate authority, or you can make your own. One thing that you need to know in both cases is, the Common Name of the cert has to be the exact hostname that JDBC clients will use in their database URL.
I'm not going to tell you how to get a CA-signed SSL certificate. That is well documented at many other places.
Assuming that you have a standard pem-style private key
certificate, here's how you can use openssl and the program
DERImport
to get it into a JKS keystore.
Because I have spent a lot of time on this document already, I am just giving you an example.
Example 13.4. Getting a pem-style private key into a JKS keystore
openssl pkcs8 -topk8 -outform DER -in Xpvk.pem -inform PEM -out Xpvk.pk8 -nocrypt openssl x509 -in Xcert.pem -out Xcert.der -outform DER java DERImport new.keystore NEWALIAS Xpvk.pk8 Xcert.der
| Important | |
|---|---|
|
Make sure to set the password of the key exactly the same as the password for the keystore! |
You need the program DERImport.class
of
course. Do some internet searches to find
DERImport.java
or
DERImport.class
and download it.
If DERImport has become difficult to obtain, I can write a program to do the same thing-- just let me know.
Run man keytool
or see
the Creating a Keystore section of JSSERefGuide.html.
If you are on UNIX and want to automatically start and stop a
Server or WebServer running with encryption, set the
system.javax.net.ssl.keyStore
and
system.javax.net.ssl.keyStorePassword
properties as
instructed above, and follow the instructions in the HyperSQL on UNIX chapter, paying
close attention to the TLS-related comments in the template config
file.
If you are using a private server certificate, make sure to also set the trust store filepath for relevant urlids in your RC file, as explained in the sample config file.
JDBC connections will always be denied if the supplied user and password are not found in the target catalog. But an HyperSQL listener can also restrict access at the listener level, even protecting private catalogs which have insecure (or default) passwords. If you have an in-process setup, this section of the Guide doesn't apply to you.
Many (in fact, most) distributed database applications don't have application clients connect directly to the database, but instead encapsulate access in a controlling process. For example, a web app will usually access the data source on behalf of users, with end-user web browsers never accessing the database directly. In these cases and others, the security benefits of restricting listener access to specific source addresses is well worth the effort. ACLs work by restricting access according to the source address of the incoming connection request. This is efficient because the database engine never even gets the request until it is approved by the ACL filter code.
The sample file sample/acl.txt
in your HyperSQL
distribution explains how to write an ACL file.
# $Id: acl.txt 826 2009-01-17 05:04:52Z unsaved $ # Sample HyperSQL Network Listener ACL file. # Specify "allow" and "deny" rules # For address specifications, individual addresses, host names, and # network addresses with /bit suffix are allowed, but read the caveat about # host names below, under the sample "localhost" rule. # Blank lines ignored. # Lines with # as the first non-whitespace character are ignored. allow 2001:db8::/32 # Allow this 32-bit ipv4 subnet allow localhost # You should use numerical addresses in ACL files, unless you are certain that # the name will always be known to your network address resolution system # (assume that you will lose Internet connectivity at some time). # With a default name resolution setup on UNIX, you are safe to use names # defined in your /etc/hosts file. deny <IP_ADDRESS> # Deny a single IP address. # In our example, <IP_ADDRESS>/24 is our local, organizational network. # <IP_ADDRESS> is the IP address of our Intern's PC. # The Intern does not have permission to access our databases directly. allow <IP_ADDRESS>/24 # Any ipv4 or ipv6 candidate address not matched above will be denied
You put your file wherever it is convenient for you, and specify that path
with the property server.acl
or
webserver.acl
in your
server.properties
or
webserver.properties
file (depending on whether your
listener instance is a Server
or
WebServer
). You can specify the ACL file path with
an absolute or relative path. If you use a relative path, it must be
relative to the .properties
file. It's often
convenient to name the ACL file acl.txt
, in the same
directory as your .properties
file and specify the
property value as just acl.txt
. This file name is
intuitive, and things will continue to work as expected if you move or
copy the entire directory.
| Warning | |
|---|---|
|
If your |
When you edit your ACL file, it is both more convenient and more secure to test it as explained here before activating it. You could, of course, test an ACL file by editing it in-place, then trying to connect to your listener with JDBC clients from various source addresses. Besides being mightily laborious and boring, with this method it is very easy to accidentally open access to all source addresses or to deny access to all users until you fix incorrect ACL entries.
The suggested method of creating or changing ACLs is to work with an
inactive file (for new ACL files, just don't enable the
*.acl
property yet; for changing an existing file, just
copy it to a temporary file and edit the temporary file). Then use the
ServerAcl
class to test it.
Example 13.5. Validating and Testing an ACL file
java -cp path/to/hsqldb.jar org.hsqldb.server.ServerAcl path/to/acl.txt
If the specified ACL file fails validation, you will be given
details about the problem. Otherwise, the validated rules will be
displayed (including the implicit, default deny rules). You then type in
host names and addresses, one-per-line. Each name or address is tested as
if it were a HyperSQL network client address, using the same exact method
that the HyperSQL listener will use. (HyperSQL listeners use this same
ServerAcl
class to test incoming source addresses).
ServerAcl
will report the rule which matches and
whether access is denied or allowed to that address.
If you have edited a copy of an existing ACL file (as suggested above), then overwrite your live ACL file with your new, validated ACL file. I.e., copy your temp file over top of your live ACL file.
ServerAcl
can be run in the same exact way
described above, to troubleshoot runtime access issues. If you use an ACL
file and a user or application can't get a connection to the database, you
can run ServerAcl
to quickly and definitively find
if the client is being prohibited by an ACL rule.
$Revision: 5206 $


Pat's Salmon Cookies!
Click here for sales
- What is a Salmon Cookie?
- They're cookies made into the shape of a salmon, and actually made with salmon (though the fish is ground up so fine that you can't even taste it!) that is the ideal match for a steaming cup of coffee on a gray Seattle morning. Or gray Seattle afternoon... whatever. Tourists will go gaga for them, locals will begrudgingly fall in love with them, and Pat will make a ton of money.
SWAG
We do have some sweet shirts for sale!!!!
Pat's Family
Store Locations
- 1st and Pike
- SeaTac Airport
- Seattle Center
- Capitol Hill
- Alki
Store hours
6am-7pm M-S


MR RAJ MOHAMMED. The Manager of, AFRICAN DEVELOPMENT BANK (A.D.B.) Ouagadougou, Burkina-Faso. Direct Line +226 76 40 64 06. Dear Friend, Please read carefully, This is secret and confidential. I hope that you are well today.I am the Manager of Audit and account dept of our bank, with due respect i decided to contact you over this business financial transaction worth the sum of FIFTEEN MILLION DOLLARS, (15Musd)in other to entrust this fund into your bank account. This is an abandoned fund that belongs to the one of our bank customers who died along with his entire family on 25th July,2001 in a plane crash disaster. I was very fortune to meet the deceased file when i was arranging the old and abandoned customers files of 2000-2001 in other to submit to the bank managements accordingly for documentation purposes. Following our banking financial policy, it was obviously indicated and signed law fully that if such money remains unclaimed after five years without somebody been a foreigner apply and claim the fund as the next of kin , the money will be transferred into the Bank Treasury as an unclaimed fund. So the request of you as a foreigner is necessarily needed for the claim because a citizen of Burkina Faso cannot come forward to claim the fund since the law does not permit an indigene to claim such fund Since the real beneficary of the fund is died , the bank are expecting the next of kin to apply for the release of the fund for him or her without delay but unfortunately i learnt through the investigations which I carried out that there is nobody behind who can come and claim the fund. Therefore I want you to apply to the bank with your reliable bank account details where our bank will transfer the fund into and immediately the fund is transferred into your account ,i will share the fund according to the percentage indicated below. SIXTY PERCENT (60%) of the total fund will be for me.THIRTY PERCENT( 30%) for you in provision of the Bank account.FIVE PERCENT(5%) will be for unexpected expenses which may occur during the transfer.FIVE PERCENT(5%) will be preserved for helping the helpless people, like charity organization and motherless babies. Thereafter you will help me to visit your country for sharing the money according to the percentage indicated above. And for the immediate transfer of this fund into your bank account as arranged, you must apply first to the bank as the only existing next of kin to the deceased customer and after approval which will take place immediately as you applied, the transfer of the fund into your nominated bank account will proceed. Please note that you should keep this business secret until you confirm the transfer into the bank account which you will provide. And there is NO RISK in this business. The bank will forward to you all necessary documents related to the transfer and which will prove that you make a legal claim of inheritance. It is true that i pray to GOD before i was pushed forward to contact you for this business but i want you to assure me solemnly that you are a trsutwothy,reliable,honest and capable to avoid cheating me in this business.If you are really sure of your integerity, Reply immediatelly you receive this mail and call me on 00226 76 40 64 06 for more detailed information on how the process to transfer the fund into your account will be. Yours faithfully, Mr Raj Mohammed. _________________________________________________________________ Windows Live Mail : découvrez et testez la version bêta ! http://www.ideas.live.com/programpage.aspx?versionId=5d21c51a-b161-4314-9b0e-4911fb2b2e6d


Posted by Johnnwen on April 5, 2016
Posted by Johnnwen on April 4, 2016
Posted by Johnnwen on April 3, 2016
Posted by Johnnwen on April 2, 2016
Posted by johnnwen on April 1, 2016
c++ Java Android


WITNESS LIST
Natural Resources Committee
September 13, 2018 - 10:00 AM
Interim Charge #3(g) on groundwater-surface water interaction
On:
Dickinson, Dell (Self; Devil's River Conservancy)
French, Larry (Texas Water Development Board)
Green, Ron (Self)
Honeycutt, David (Self)
Mace, Robert (The Meadows Center for Water & the Environment)
McBee, James (Self; Gurley McBee Ranch)
Nettleton, Beau (Val Verde County, Precinct 3)
Nunns, Randy (Self; Devil's River Conservancy)
Shepperd, John (Texas Foundation for Conservation)
Weigel, Jeff (The Nature Conservancy)
Young, Steven (INTERA Inc.)
Registering, but not testifying:
On:
Rylander, Rick (Self)
Interim Charge #8 on abandoned and deteriorated groundwater wells
On:
Ellis, Gregory (Attorney)
Mauk, David (Bandera County River Authority & GCD)
Parham, Lee (Texas Department of Licensing and Regulation)
Ruiz, Roland (Edwards Aquifer Authority)
Schlessinger, Sarah (Texas Alliance of Groundwater Districts)
Sengelmann, Greg (Gonzales County UWCD)
Registering, but not testifying:
On:
Friberg, Marc (Edwards Aquifer Authority)
1


Success message goes here
.
Error message goes here
.
Mapping info
From term
cxxxxx
(
id...
)
to
cxxxxx
(
id...
)
Scope:
id...
Created date:
id...
Mapping source:
id...
id...
Source type:
id...
Delete


n-grams
Looking at n-grams is a way to look at the relationship between words.
Higher order n-grams
We can search the multi-type terms in the responses.
So the end result looks like this:
| word1 | word2 | bigram |
|---|---|---|
| baterias | sanitarias | baterias sanitario |
| baterías | sanitarias | batería sanitario |
| inlcuye | lavamanos | inlcuye lavamanos |
| tanques | rotoplast | tancar rotoplast |
| rotoplast | reservorios | rotoplast reservorios |
| ... | ... | ... |
tf-idf values can also be calculated for bigrams, and visualized within each reporting/implementing partner, province/canton and so forth.


This is the beginning of my website homepage.
It will eventually contain a list of links to all my blogs.


Author: Jay Balunas, Burr Sutter, Douglas Campos, Bruno Olivera Level: Beginner Technologies: CDI, JAX-RS, HTML5 Summary: Basic HTML5 |Demonstrates the use of CDI 1.0 and JAX-RS using the HTML5 architecture and RESTful services on the backend Target Product: WFK Product Versions: EAP 6.1, EAP 6.2, WFK 2.4 Source: https://github.com/jboss-developer/jboss-wfk-quickstarts/
This example demonstrates the use of CDI 1.0 and JAX-RS in Red Hat JBoss Enterprise Application Platform 6.1 or later using the HTML5 + REST architecture.
The application is basically a smart, HTML5+CSS3+JavaScript front-end using RESTful services on the backend.
The example can be deployed using Maven from the command line or from Eclipse using JBoss Tools.
The application this project produces is designed to be run on Red Hat JBoss Enterprise Application Platform (EAP) 6.1 or later with the Red Hat JBoss Web Framework Kit (WFK) 2.4.
All you need to build this project is Java 6.0 (Java SDK 1.6) or later, Maven 3.0 or later.
An HTML5 compatible browser such as Chrome, Safari 5+, Firefox 5+, or IE 9+ is required.
With the prerequisites out of the way, you’re ready to build and deploy.
If you have not yet done so, you must Configure Maven before testing the quickstarts.
The following shows the command line to start the server with the web profile:
For Linux: JBOSS_HOME/bin/standalone.sh
For Windows: JBOSS_HOME\bin\standalone.bat
NOTE: The following build command assumes you have configured your Maven user settings. If you have not, you must include Maven setting arguments on the command line. See Build and Deploy the Quickstarts for complete instructions and additional options.
Type this command to build and deploy both the client and service applications:
mvn clean package jboss-as:deploy
This will deploy target/jboss-helloworld-html5.war
to the running instance of the server.
The application will be running at the following URL http://localhost:8080/jboss-helloworld-html5/.
You can also test the REST endpoint as follows. Feel free to replace YOUR_NAME
with a name of your choosing.
When you are finished testing, type this command to undeploy the archive:
mvn jboss-as:undeploy
You can also start the server and deploy the quickstarts from Eclipse using JBoss tools. For more information, see Use JBoss Developer Studio or Eclipse to Run the Quickstarts
If you want to debug the source code or look at the Javadocs of any library in the project, run either of the following commands to pull them into your local repository. The IDE should then detect them.
mvn dependency:sources
mvn dependency:resolve -Dclassifier=javadoc
You can also deploy the application directly to OpenShift, Red Hat’s cloud based PaaS offering, follow the instructions here


Package fedex
source code
python-fedex API Documentation
The python-fedex module is a light wrapper around Fedex's Web
Services SOAP API. Using the excellent suds SOAP
client, the Fedex requests and responses are trivial to work with.
What python-fedex is
-
A light wrapper around Fedex Web Services SOAP API.
-
Simple and easy to use.
-
Minimal by design.
What python-fedex is not
-
An abstraction layer. python-fedex only assembles the needed SOAP
calls and returns a SOAP response through suds. This is easy
enough to work with that no abstraction is needed. Doing so would
limit your use of the data.
-
Anything more than a light wrapper.
A note on completeness
python-fedex was created for use with some of my internal
projects. For the initial release, only the things that I needed at
the time were implemented. If there is missing functionality, please
report an issue so that I may make this module more useful to
others. Likewise, feel free to submit patches as well if you would
like to help.
Getting Started
The best place to get started is by viewing the examples in the
'examples' directory. These should be very self-explanatory. For
further details, you may review the API here, or get support by
reading the instructions in the appropriately named section
below.
The services
module is also a good place to start looking at the different objects
used for issuing Fedex requests.
As a general tip, the best way to see which attributes are
available on WSDL objects is to simply print them, hitting their
__str__() method.
Fedex Documentation
If you are wondering what attributes or variables are present,
you'll want to refer to the Fedex Web Services documentation at
http://fedex.com/developer/. Complete specification documents are
there, which correspond very closely with what you'll be able to do
with python-fedex.
Getting Support
If you have any questions, problems, ideas, or patch submissions,
please visit our Google Code project and enter an issue in the Issue Tracker.
|
|
VERSION = ' 1.0.4 '
|
|
|
__package__ = None
|


Discord: void#4938
Note: I do not accept all friend requests, a good idea would be to join my server, if you'd like to join, it can be found here


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 4 as a starter
Dietary
Mix all the marinade ingredients together in a large bowl.
preheat the oven to 160C/325F/Gas 3.
Place the peppers into the tray, season with salt and pepper and pour some olive oil over the peppers. Seal them in the foil and place into the oven for 20 minutes, turning from time to time.
Once cooked, remove from the tray, place into a bowl and cover with cling film. Once cool, peel and wash off any seeds. Cut into large, but even triangles and place into the marinade.
Slice the courgettes and aubergines into 5mm/¼in thick rounds, (if the aubergines are very thick then cut them in half first).
Using a hot griddle frying pan, grill the courgettes and aubergines with some olive oil and season with salt and pepper. Cook both sides and then place into the marinade with the peppers.
Slice the ciabatta bread into thick slices. Brush with olive oil and toast both sides until golden brown. Now top with the Provencal vegetables and slices of goats cheese.
Place under a moderate grill and cook until the cheese has melted and coloured slightly. Remove the outer skin if you wish and serve with a salad.


| Back to Transcriptions | Up to Top | Forward to Wish List |
Then get neumes.mf and hld2mtex from here. You'll need to put `hld2mtex' into a directory that's in your path, and you may need to make it executable. You should put `neumes.mf' into the tex directory structure, perhaps into the same directory where the musix mf files are. Then you may need to run a command called `mktexlsr' to let tex know where everything is.
(The current font tries to look like it was written with a quill. An older one used a ballpoint pen. It you'd prefer that one you can still find it here.
To test things out, download alleluia.hld from the previous page, and type:
hld2mtex alleluia.hld tex alleluia.tex dvips alleluia.dviIf all goes well, you'll end up with a page of music on your printer.
If you'd like to grab all of the bits and pieces that I've made in one fell swoop, you can get either a zipped or tarred file. This includes the neumes.mf font and the hld2mtex script, along with these html pages and the transcriptions that I've done thus far.
| Back to Transcriptions | Up to Top | Forward to Wish List |


Customize
Food Type:
Chinese
Greek
Italian
Japanese
Mediterranean
Burgers
Dessert
Location:
Time:
Telephone:


Amazon S3 Bucket ReplicationDestination
Destination
is a property of the ReplicationRule property that
specifies which Amazon Simple Storage Service (Amazon S3) bucket to store replicated
objects and their storage
class.
Syntax
JSON
{ "AccessControlTranslation" : AccessControlTranslation, "Account" :
String
, "Bucket" :String
, "EncryptionConfiguration" : EncryptionConfiguration, "StorageClass" :String
}
YAML
AccessControlTranslation: AccessControlTranslation Account:
String
Bucket:String
EncryptionConfiguration: EncryptionConfiguration StorageClass:String
Properties
AccessControlTranslation
-
Specify this only in a cross-account scenario (where source and destination bucket owners are not the same), and you want to change replica ownership to the AWS account that owns the destination bucket. If this is not specified in the replication configuration, the replicas are owned by same AWS account that owns the source object.
Required: No
Type: AccessControlTranslation
Account
-
Destination bucket owner account ID. In a cross-account scenario, if you direct Amazon S3 to change replica ownership to the AWS account that owns the destination bucket by specifying the
AccessControlTranslation
property, this is the account ID of the destination bucket owner. For more information, see Cross-Region Replication Additional Configuration: Change Replica Owner in the Amazon Simple Storage Service Developer Guide.Conditional: If you specify the
AccessControlTranslation
property, theAccount
property is required.Required: No
Type: String
Bucket
-
The Amazon resource name (ARN) of an S3 bucket where Amazon S3 stores replicated objects. This destination bucket must be in a different region than your source bucket.
If you have multiple rules in your replication configuration, specify the same destination bucket for all of the rules.
Required: Yes
Type: String
EncryptionConfiguration
-
Specifies encryption-related information.
Required: No
Type: EncryptionConfiguration
StorageClass
-
The storage class to use when replicating objects, such as standard or reduced redundancy. By default, Amazon S3 uses the storage class of the source object to create object replica. For valid values, see the
StorageClass
element of the PUT Bucket replication action in the Amazon Simple Storage Service API Reference.Required: No
Type: String


| Test Case | PROV-0020 |
| Title | Controller is not automatically provisioned |
| Objective | This test case is intended to verify the following implied or specified requirements:
To improve security, this code requires hand configuration. That is, it requires code modifications requiring the user to compile in some configuration information and hand configure other parts of the configuration. This test focuses on the controller. |
| Setup |
|
| Actions |
|
| Expected | Provisioning is hardcoded in the controller and bluetooth pairing must be done using Linux bluetooth commands. |
| Results | PASSED |
| Cleanup |
|
| Requirements | GDO-PROV-020 |


|
./t/00_compile.t
|
- ok 1 - use Transmogrifier;
- 1..1
|
0.04s |
100.0% |
|
./t/Transmogrifier/In/Tiger.t
|
- ok 1 - created a tiger
- ok 2 - tiger has sharp teeth
- ok 3 - tiger has stripes
- 1..3
|
0.04s |
100.0% |
|
./t/Transmogrifier/Out/Alien.t
|
- ok 1 - created an alien
- ok 2 - alien has 23 eyes
- ok 3 - alien is slimy
- 1..3
|
0.05s |
100.0% |
|
./t/Transmogrifier/Out/Cowboy.t
|
- ok 1 - created a cowboy
- ok 2 - cowboy speaks
- ok 3 - cowboy has a hat
- 1..3
|
0.04s |
100.0% |
|
./t/transmogrifier.t
|
- # I will now transform this tiger into a cowboy
- ok 1 - zap()
- ok 2 - An object of class 'Transmogrifier::Out::Cowboy' isa 'Transmogrifier::Out::Cowboy'
- # {
- # 'a' => 1,
- # 'b' => 2,
- # 'c' => 3
- # }
- # 0
- 1..2
|
0.08s |
100.0% |
|
./xt/reallyslow.t
|
- ok 1 - very very slow test
- 1..1
|
0.03s |
100.0% |
|
./xt/slow.t
|
- # comic book noises test sequence commencing
- ok 1 - zap()
- not ok 2 - bam()
-
- # Failed test 'bam()'
- # at ./xt/slow.t line 6.
- not ok 3 - pow() # TODO not implemented yet
-
- # Failed (TODO) test 'pow()'
- # at ./xt/slow.t line 10.
- ok 4 # skip because ComicBook::Noises::Batman is not installed
- ok 5 - kaboom()
- 1..5
- # Looks like you failed 1 test of 5.
- exit status: 1, wait status: 256
|
0.03s |
80.0% |


My name is Margot McMahon. I am nuts about language. I really like to draw little creatures that ride the line between adorable and pitiful, and in general I think the more precarious art (and everything else) is, the better.
My Most-Best Favorite Quote:
"A cauliflower is just a cabbage with a college education."
I am learning the LAMP Stack:
- Linux
- Apache
- MySQL
- PHP
- Xanga
My Top 5 Best Food Faves
- Butter
- Misc. sauces
- Various spreads
- Jams, jellies, preserves
- Condiments
- (Honourable Mention) æoli
Questions often posed to me, with answers:
- Marco?
- Margot.
- Are you from far away?
- I'm from Houston.
My favorite vacation spot is a dumpster.
I am a smart potato.
Take me to a much better website, please.
Take me there in a new window.
My Favorite Words
- Sanguine
- Besmirch
- Snorkmaiden (not a real word)
My Ordered List
- The first list item.
- The second list item.
- The third list item.
Some Helpful Definitions
- Son
- A male child of a parent
- Table
- A chair for non-human objects
- Money
- YE$
My Favorite Sites on the World Wide Webbo
- Bingle dingle! It's "Bing"!
- What better way to check up on your portfolio than with Yahoo!
Who doesn't love a cute pangolin friend?
Piggy backs all around!
My Vehicle
My favorite mode of transportation is a little-known method called "just laying there".
A downtrodden man doing some "just laying there"
| Numbers of Fish |
Colors of Fish |
| One fish |
Red fish |
| Two fish |
Blue fish |
Decimal to Hexadecimal Conversion Chart
| December |
Hextober |
| 0 |
0 |
| 1 |
1 |
| 2 |
2 |
| 3 |
3 |
| 4 |
4 |
| 5 |
5 |
| 6 |
6 |
| 6 |
6 |
| 7 |
7 |
| 8 |
8 |
| 9 |
9 |
| 10 |
A |
| 11 |
B |
| 12 |
C |
| 13 |
D |
| 14 |
E |
| 15 |
F yes |
Take me to the top!


{{welcome}}
Post Request
Change Password
Log Out
Login Required
Click
here
to begin
Post a Review Request
Fill in following:
Story Name
Assign Reviewer
{{user.name}}
Further Details
Create
Cancel
Review Done
Fill in following:
Current Password
New Password
Confirm Password
Done
Cancel
{{title}}
{{message}}


Guard Richtor:
Welcome! This village is near the castle of Elmore, capital of the kingdom! As you can see, it's an invincible fortress. The fog is always quite thick here, so the whole village is hard to see at once...
Our guards can tell you anything you want to know about the village.
"The structure of the village seems to be very unique."
See the lord & tax rate info.
Quest


{% extends "layout.html" %} {% block content %}
This is a simple web Document scanner that allow user to align image by upload an input image and a reference pdf.


Welcome to my first webpage
page down
This is an html page that i created for NASA, using visual studio code
.
The universe
| S/N |
Planet's Number |
The Milky way galaxy |
| (Solar system) |
| 1 |
1 |
Mecury |
| Number 2 |
Venus |
New Topic here
- link to Item no.1
- Link to Item no.2
My email address.
First image.
Page up
©Cybernetor066 2019 *****$*****


MiniSearch
MiniSearch
is a tiny but powerful in-memory fulltext search engine written in
JavaScript. It is respectful of resources, and it can comfortably run both in
Node and in the browser.
Try out the demo application.
Find the complete documentation and API reference
here, and more background about
MiniSearch
, including a comparison with other similar libraries, in this blog
post.
Use case
MiniSearch
addresses use cases where full-text search features are needed
(e.g. prefix search, fuzzy search, ranking, boosting of fields…), but the data
to be indexed can fit locally in the process memory. While you won't index the
whole Internet with it, there are surprisingly many use cases that are served
well by MiniSearch
. By storing the index in local memory, MiniSearch
can
work offline, and can process queries quickly, without network latency.
A prominent use-case is real time search "as you type" in web and mobile applications, where keeping the index on the client enables fast and reactive UIs, removing the need to make requests to a search server.
Features
Memory-efficient index, designed to support memory-constrained use cases like mobile browsers.
Exact match, prefix search, fuzzy match, field boosting
Auto-suggestion engine, for auto-completion of search queries
Documents can be added and removed from the index at any time
Zero external dependencies
MiniSearch
strives to expose a simple API that provides the building blocks to
build custom solutions, while keeping a small and well tested codebase.
Installation
With npm
:
npm install --save minisearch
With yarn
:
yarn add minisearch
Then require
or import
it in your project.
Alternatively, if you prefer to use a <script>
tag, you can require MiniSearch
from a CDN:
<script<EMAIL_ADDRESS>Finally, if you want to manually build the library, clone the repository and run
yarn build
(or yarn build-minified
for a minified version + source maps).
The compiled source will be created in the dist
folder.
Usage
Basic usage
// A collection of documents for our examples
const documents = [
{
id: 1,
title: 'Moby Dick',
text: 'Call me Ishmael. Some years ago...',
category: 'fiction'
},
{
id: 2,
title: 'Zen and the Art of Motorcycle Maintenance',
text: 'I can see by my watch...',
category: 'fiction'
},
{
id: 3,
title: 'Neuromancer',
text: 'The sky above the port was...',
category: 'fiction'
},
{
id: 4,
title: 'Zen and the Art of Archery',
text: 'At first sight it must seem...',
category: 'non-fiction'
},
// ...and more
]
let miniSearch = new MiniSearch({
fields: ['title', 'text'], // fields to index for full-text search
storeFields: ['title', 'category'] // fields to return with search results
})
// Index all documents
miniSearch.addAll(documents)
// Search with default options
let results = miniSearch.search('zen art motorcycle')
// => [
// { id: 2, title: 'Zen and the Art of Motorcycle Maintenance', category: 'fiction', score: 2.77258, match: { ... } },
// { id: 4, title: 'Zen and the Art of Archery', category: 'non-fiction', score: 1.38629, match: { ... } }
// ]
Search options
MiniSearch
supports several options for more advanced search behavior:
// Search only specific fields
miniSearch.search('zen', { fields: ['title'] })
// Boost some fields (here "title")
miniSearch.search('zen', { boost: { title: 2 } })
// Prefix search (so that 'moto' will match 'motorcycle')
miniSearch.search('moto', { prefix: true })
// Search within a specific category
miniSearch.search('zen', {
filter: (result) => result.category === 'fiction'
})
// Fuzzy search, in this example, with a max edit distance of 0.2 * term length,
// rounded to nearest integer. The mispelled 'ismael' will match 'ishmael'.
miniSearch.search('ismael', { fuzzy: 0.2 })
// You can set the default search options upon initialization
miniSearch = new MiniSearch({
fields: ['title', 'text'],
searchOptions: {
boost: { title: 2 },
fuzzy: 0.2
}
})
miniSearch.addAll(documents)
// It will now by default perform fuzzy search and boost "title":
miniSearch.search('zen and motorcycles')
Auto suggestions
MiniSearch
can suggest search queries given an incomplete query:
miniSearch.autoSuggest('zen ar')
// => [ { suggestion: 'zen archery art', terms: [ 'zen', 'archery', 'art' ], score: 1.73332 },
// { suggestion: 'zen art', terms: [ 'zen', 'art' ], score: 1.21313 } ]
The autoSuggest
method takes the same options as the search
method, so you
can get suggestions for misspelled words using fuzzy search:
miniSearch.autoSuggest('neromancer', { fuzzy: 0.2 })
// => [ { suggestion: 'neuromancer', terms: [ 'neuromancer' ], score: 1.03998 } ]
Suggestions are ranked by the relevance of the documents that would be returned by that search.
Sometimes, you might need to filter auto suggestions to, say, only a specific
category. You can do so by providing a filter
option:
miniSearch.autoSuggest('zen ar', {
filter: (result) => result.category === 'fiction'
})
// => [ { suggestion: 'zen art', terms: [ 'zen', 'art' ], score: 1.21313 } ]
Field extraction
By default, documents are assumed to be plain key-value objects with field names
as keys and field values as string values. In order to support custom field
extraction logic (for example for nested fields, or non-string field values
needing processing before tokenization), a custom field extractor function can
be passed as the extractField
option:
// Assuming that our documents look like:
const documents = [
{ id: 1, title: 'Moby Dick', author: { name: 'Herman Melville' }, tags: ['fiction', 'whale'] },
{ id: 2, title: 'Zen and the Art of Motorcycle Maintenance', author: { name: 'Robert Pirsig' }, tags: ['fiction', 'zen'] },
{ id: 3, title: 'Neuromancer', author: { name: 'William Gibson' }, tags: ['fiction', 'cyberpunk'] },
{ id: 4, title: 'Zen and the Art of Archery', author: { name: 'Eugen Herrigel' }, tags: ['non-fiction', 'zen'] },
// ...and more
]
// We can support nested fields (author.name) and array fields (tags) with a
// custom `extractField` function:
let miniSearch = new MiniSearch({
fields: ['title', 'author.name', 'tags'],
extractField: (document, fieldName) => {
// Access nested fields
const value = fieldName.split('.').reduce((doc, key) => doc && doc[key], document)
// If field value is an array, join by space
return Array.isArray(value) ? value.join(' ') : value
}
})
The default field extractor can be obtained by calling
MiniSearch.getDefault('extractField')
.
Tokenization
By default, documents are tokenized by splitting on Unicode space or punctuation
characters. The tokenization logic can be easily changed by passing a custom
tokenizer function as the tokenize
option:
// Tokenize splitting by hyphen
let miniSearch = new MiniSearch({
fields: ['title', 'text'],
tokenize: (string, _fieldName) => string.split('-')
})
Upon search, the same tokenization is used by default, but it is possible to
pass a tokenize
search option in case a different search-time tokenization is
necessary:
// Tokenize splitting by hyphen
let miniSearch = new MiniSearch({
fields: ['title', 'text'],
tokenize: (string) => string.split('-'), // indexing tokenizer
searchOptions: {
tokenize: (string) => string.split(/[\s-]+/) // search query tokenizer
}
})
The default tokenizer can be obtained by calling
MiniSearch.getDefault('tokenize')
.
Term processing
Terms are downcased by default. No stemming is performed, and no stop-word list
is applied. To customize how the terms are processed upon indexing, for example
to normalize them, filter them, or to apply stemming, the processTerm
option
can be used. The processTerm
function should return the processed term as a
string, or a falsy value if the term should be discarded:
let stopWords = new Set(['and', 'or', 'to', 'in', 'a', 'the', /* ...and more */ ])
// Perform custom term processing (here discarding stop words and downcasing)
let miniSearch = new MiniSearch({
fields: ['title', 'text'],
processTerm: (term, _fieldName) =>
stopWords.has(term) ? null : term.toLowerCase()
})
By default, the same processing is applied to search queries. In order to apply
a different processing to search queries, supply a processTerm
search option:
let miniSearch = new MiniSearch({
fields: ['title', 'text'],
processTerm: (term) =>
stopWords.has(term) ? null : term.toLowerCase(), // index term processing
searchOptions: {
processTerm: (term) => term.toLowerCase() // search query processing
}
})
The default term processor can be obtained by calling
MiniSearch.getDefault('processTerm')
.
API Documentation
Refer to the API documentation for details about configuration options and methods.
Browser compatibility
MiniSearch
natively supports all modern browsers implementing JavaScript
standards, but requires a polyfill when used in Internet Explorer, as it makes
use functions like Object.entries
, Array.includes
, and Array.from
, which
are standard but not available on older browsers. The package
core-js
is one such polyfill that can
be used to provide those functions.
Contributing
Contributions to MiniSearch
are welcome! Please read the contributions
guidelines.
Reading the design
document is
also useful to understand the project goals and the technical implementation.
Contributing
Contributions to MiniSearch
are welcome :) Just follow the guidelines below.
Bugs and feature requests
If you have an idea for a feature, or spotted a bug, please open an issue on GitHub.
Check if your issue was already reported. In that case, better to comment on the existing issue rather than open a duplicate one.
When reporting a bug, whenever possible, provide some example code to reproduce the bug: that will make the process of fixing it much faster.
Remember this is an open-source project. Your feature requests will be discussed and taken into consideration, but please do not take it personally if the feature does not get implemented. This project uses a permissive license, so pull requests are welcome and forks are permitted.
Always be respectful of others when discussing issues. The project maintainer has the right and responsibility to remove or close discussions where the tone or language is derogatory, harassing, or offensive toward others. Keep the Code of Conduct in mind.
Pull requests
Thinking about sending a pull request? That is great :) Here is how you can setup your development environment:
Clone the repository
Install the development dependencies with
yarn install
Run the tests with
yarn test
. You can also automatically trigger a run of relevant tests for the code that you change by runningyarn test-watch
If you are working on optimising the performance, you can run the performance benchmarks with
yarn benchmark
If you are improving the documentation, you can build the docs with
yarn build-docs
In order to understand implementation details and design goals, read the design document.
Also, please follow these guidelines:
Add tests for your code. This ensures that your feature won't be broken by further code changes. If you are not sure how to test, feel free to send the pull request and ask for advices in the comment.
Don't change the version number. That will be done by the mainteiner upon releasing a new version.
Make sure that the full test suite passes before sending the pull request.
Code of Conduct
Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
Our Standards
Examples of behavior that contributes to creating a positive environment include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project maintainer at mail[AT]lucaongaro.eu
. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
Attribution
This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq
Design Document
This design document has the aim to explain the details of MiniSearch
design and implementation to library developers that intend to contribute to
this project, or that are simply curious about the internals.
Latest update: Feb. 11, 2019
Goals (and non-goals)
MiniSearch
is aimed at providing rich full-text search functionalities in a
local setup (e.g. client side, in the browser). It is therefore optimized for:
- Small memory footprint of the index data structure
- Fast indexing of documents
- Versatile and performant search features, to the extent possible while meeting goals 1 and 2
- Small and simple API surface, on top of which more specific solutions can be built by application developers
- Possibility to add and remove documents from the index at any time
MiniSearch
is therefore NOT directly aimed at offering:
- A solution for use cases requiring large index data structure size
- Distributed setup where the index resides on multiple nodes and need to be kept in sync
- Turn-key opinionated solutions (e.g. supporting multiple locales):
MiniSearch
enables developer to build these on top of the core API, but does not provide it out of the box.
For these points listed as non-goals, other solutions exist that should be
preferred to MiniSearch
. Adapting MiniSearch
to support those goals would in
fact necessarily go against the primary project goals.
Technical design
MiniSearch
is composed of two layers:
- A compact and versatile data structure for indexing terms, providing prefix and fuzzy lookup
- An API layer on top of this data structure, providing the search features
Here follows a description of these two layers.
Index data structure
The data structure chosen for the index is a radix tree, which is a prefix tree where nodes with no siblings are merged with the parent node. The reason for choosing this data structure follows from the project goals:
- The radix tree minimizes the memory footprint of the index, because common prefixes are stored only once, and nodes are compressed into a single multi-character node whenever possible.
- Radix trees offer fast key lookup, with performance proportional to the key length, and fast lookup of subtrees sharing the same key prefix. These properties make it possible to offer exact match and prefix search.
- On top of a radix tree it is possible to implement lookup of keys that are within a certain maximum edit distance from a given key. This search rapidly becomes complex as the maximum distance grows, but for practical search use-cases the maximum distance is small enough for this algorithm to be performant. Other more performant solutions for fuzzy search would require more space (e.g. n-gram indexes).
The class implementing the radix tree is called SearchableMap
, because it
implements the standard JavaScript Map
interface,
adding on top of it some key lookup methods:
SearchableMap.prototype.atPrefix(prefix)
, returning anotherSearchableMap
representing a mutable view of the original one, containing only entries where the keys share the given prefix.SearchableMap.prototype.fuzzyGet(searchKey, maxEditDistance)
, returning all the entries where the key is within the given edit (Levenshtein) distance fromsearchKey
.
As a trade-off for offering these additional features, SearchableMap
is
restricted to use only string keys.
The SearchableMap
data type is part of the public API of MiniSearch
, exposed
as MiniSearch.SearchableMap
. Its usefulness is in fact not limited to
providing a data structure for the inverted index, and developers can use it as
a building block for other solutions. When modifying this class, one should
think about it in terms of a generic data structure, that could in principle be
released as a separate library.
Fuzzy search algorithm
The algorithm used to provide fuzzy search of keys within a maximum Levenshtein distance from a given term is the following:
- The search starts with a budget of edit distance, initially equal to the given maximum distance.
- The radix tree is traversed, starting from the root, visiting each path and propagating the remaining budget along each path, but quitting any search path along which the budget is exhausted.
- For each visited node in the radix tree, the string contained in the node is traversed character by character using cursors that are kept on a stack.
- Each cursor has: a pointer to a position in the node string; a pointer to a
corresponding position in the search string; the type of the last edit,
either
deletion
, orinsertion
, orchange
, ornone
; a budget of "available edits". This budget is decremented whenever an edit is required. The budget is passed from parent to children cursors. - The algorithm pulls cursors from the stack, and compares the pointed
character in the node string with the pointed character in the search
string:
- if they are the same, one single child cursor is created, advancing both
pointers of 1 position. No edit was necessary, so the last edit type is
none
. - if they are not the same, and the remaining budget is higher than zero, up
to three children cursors are created: one corresponding to a character
change
, where both pointers are incremented by 1; one corresponding to adeletion
, where only the search string pointer is incremented; one corresponding to aninsertion
, where only the node string pointer is incremented. Each of the children cursors have a budget that is one less the parent budget. - Some special cases are considered to avoid creating unnecessary cursors. A
sequence of adjacent
deletion
-insertion
, orinsertion
-deletion
, would have the same effect of a change, but would consume more budget: therefore, a delete cursor is never created after a insertion cursor, and vice-versa. Similarily, adjacentchange
-deletion
anddeletion
-change
, orchange
-insertion
andinsertion
-change
, are equivalent. Therefore, only one of these cases is generated, by never producing a change cursor after a deletion or insertion one.
- if they are the same, one single child cursor is created, advancing both
pointers of 1 position. No edit was necessary, so the last edit type is
- Whenever the algorithm finds a leaf node, it reports it as a result.
Note that this algorithm can get complex if the maximum edit distance is large, as many paths would be followed. The reason why this algorithm is employed is a trade-off:
- For full-text search purposes, the maximum edit distance is small, so the algorithm is performant enough
- The alternatives (e.g. trigram indexes), would require much more space
- As
MiniSearch
is optimized for local and possibly memory-constrained setup, higher computation complexity is traded in exchange for smaller space requirement for the index.
Search API layer
The search API layer offers a small and simple API surface for application developers. It does not assume that a specific locale is used in the indexed documents, therefore no stemming nor stop-word filtering is performed, but instead offers easy options for developers to provide their own implementation. This heuristic will be followed in future development too: rather than providing an opinionated solution, the project will offer simple building blocks for application developers to implement their own solutions.
The inverted index is implemented with SearchableMap
, and posting lists are
stored as values in the Map. This way, the same data structure provides both the
inverted index and the set of indexed terms. Different document fields are
indexed within the same index, to further save space. The index is therefore
structured as following:
term -> field -> { document frequency, posting list }
When performing a search, the entries corresponding to the search term are
looked up in the index (optionally searching the index with prefix or fuzzy
search), then the documents are scored with a variant of
Tf-Idf, and finally results for
different search terms are merged with the given combinator function (by default
OR
, but AND
can be specified).
As the document IDs necessarily occur many times in the posting list, as a space optimization they are substituted by short generated IDs. An index of short ID to original ID is maintained alongside the search index, to reconstruct the original IDs. A similar optimization is applied to the field names.


Roulette
Analytics
Predefined
Dynamic
Spin the drum!
Set your options
+
Loading...
Loading...
Loading...