├── favicon.png ├── _animation.gif ├── assets ├── guy4.jpg ├── objC.png ├── search.gif ├── search.png ├── shot.jpg ├── teddy.png ├── vinny.png ├── wwdc1.jpg ├── wwdc2.jpg ├── Sharypic.png ├── airpair.png ├── appstore.jpg ├── dallas2.jpg ├── dsn-shot.jpg ├── jadopado.gif ├── seedcamp.png ├── fanfootage.gif ├── growthacker.jpg ├── leanstack.jpg ├── StartInParis.gif ├── hand-203x300.jpg ├── Top categories.png ├── Trend Louboutin.png ├── dontmakemethink.jpeg ├── eoin-o-driscoll.png ├── recommendations.gif ├── sadnessofsearch.png ├── searchquadrant1.gif ├── user-experience.jpg ├── NextBerlin-300x155.png ├── ScreenshotTwitter.png ├── appsworld-300x224.jpg ├── blackberry-300x224.jpg ├── nsone-dig-latency.png ├── slowerthanaverage.png ├── Emergency-exit-prev.jpg ├── StartInParis-1024x768.jpg ├── Top-search-1024x409.png ├── amazon-search-20011.png ├── route53-dig-latency.png ├── rubymotion1-270x300.png ├── searchForEvernoteSmall.png ├── Stopwatch-lowres-300x225.jpg ├── citiessuggest-leweb-180x300.png ├── 2015-04-27-170339_976x845_scrot.png ├── 2015-04-27-174139_920x306_scrot.png ├── Divided screen hipchat algolia.png ├── SmartContact-iphone5-489x1024.png ├── 2015-04-27-161853_1266x829_scrot.png ├── 2015-04-27-162229_1258x982_scrot.png ├── 2015-04-27-170757_1288x486_scrot.png ├── 2015-04-27-171034_1296x385_scrot.png ├── 2015-04-27-172249_1248x868_scrot.png ├── 2015-04-28-224616_1126x129_scrot.png ├── 2015-04-28-225743_1629x497_scrot.png ├── 2015-04-28-232019_1153x526_scrot.png ├── 2015-04-28-232444_1275x569_scrot.png ├── Capture-decran-2014-01-17-18.22.23.png ├── CitiesSuggestIPhone5Slide3-300x194.png ├── DSN-b3ce122c790c492c2f2c8ddbabaae464.jpg ├── Divided%20screen%20hipchat%20algolia.png ├── Screen-Shot-2013-12-23-at-11.47.52.png ├── Screen-Shot-2014-08-14-at-16.37.25.png ├── Screen-Shot-2014-08-14-at-16.38.34.png ├── Screen-Shot-2015-04-13-at-18.06.28.png ├── amazon-search-today-e1417016290894.png ├── available-on-iphone-app-store-logo.png ├── ChromeWebStore_BadgeWBorder_v2_206x58.png ├── CitiesSuggestIOSPortraitSmall-155x300.png ├── Omar-Kassim-Founder-of-JadoPado-Image-2-1.jpg ├── Capture-decran-2014-01-24-01.26.08-600x150.png ├── Capture-decran-2014-07-11-17.31.04-1024x486.png ├── Screen-Shot-2013-12-23-at-11.38.19-263x300.png ├── Screen-Shot-2013-12-23-at-11.40.09-263x300.png ├── Screen-Shot-2013-12-23-at-11.42.01-262x300.png ├── Screen-Shot-2014-03-13-at-17.51.50-300x199.png ├── hackpad.com_Y3thzadEtdY_p.233467_1419338581444_capture.gif ├── hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen Shot 2015-01-10 at 17.22.06.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen Shot 2015-01-10 at 17.23.21.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen Shot 2015-01-10 at 17.24.51.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen Shot 2015-01-10 at 17.32.21.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen Shot 2015-01-10 at 17.35.07.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen Shot 2015-01-10 at 17.38.44.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen Shot 2015-01-10 at 17.45.01.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen Shot 2015-01-10 at 18.00.12.png ├── hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen Shot 2014-12-23 at 13.46.04.png ├── hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen Shot 2014-12-23 at 13.45.54.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen%20Shot%202015-01-10%20at%2017.22.06.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen%20Shot%202015-01-10%20at%2017.23.21.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen%20Shot%202015-01-10%20at%2017.24.51.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen%20Shot%202015-01-10%20at%2017.32.21.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen%20Shot%202015-01-10%20at%2017.35.07.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen%20Shot%202015-01-10%20at%2017.38.44.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen%20Shot%202015-01-10%20at%2017.45.01.png ├── hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen%20Shot%202015-01-10%20at%2018.00.12.png ├── hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen%20Shot%202014-12-23%20at%2013.46.04.png └── hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen%20Shot%202014-12-23%20at%2013.45.54.png ├── public ├── favicon.ico ├── favicon.png ├── apple-touch-icon-144-precomposed.png ├── css │ ├── algolia.css │ ├── syntax.css │ └── hyde.css └── js │ └── algolia.js ├── Gemfile ├── _layouts ├── page.html ├── default.html └── post.html ├── .travis.yml ├── 404.html ├── about.md ├── README.md ├── .gitignore ├── _posts ├── 2013-02-19-meet-us-at-the-mobile-world-congress.md ├── 2014-03-25-hipchats-blog-algolia-extends-hipchat-customer-support.md ├── 2014-03-15-algolia-heroku-add-on-enters-ga.md ├── 2012-07-02-lets-start-the-adventure.md ├── 2012-11-30-we-are-seedcamp-finalists.md ├── 2014-09-01-4th-datacenter-california.md ├── 2013-03-12-algolia-search-is-now-available-for-free.md ├── 2013-03-18-our-saas-version-is-in-beta.md ├── 2013-04-25-algolia-search-offline-sdk-now-supports-cocoapods.md ├── 2012-08-16-algolia-search-beta-is-out.md ├── 2012-09-03-algolia-search-beta-2-is-out.md ├── 2013-07-08-excellent-asian-languages-support-in-our-offline-search-sdk-2-2.md ├── 2013-04-11-we-are-finalists-at-next-berlin.md ├── 2012-09-28-upcoming-events-appsworld-mobility-for-business-appdays.md ├── 2013-05-28-discover-our-6-new-search-as-a-service-api-clients.md ├── 2013-04-16-algolia-search-is-now-available-for-rubymotion.md ├── 2013-02-19-round-table-at-microsoft-techdays-2013.md ├── 2013-01-29-we-ranked-second-at-start-in-paris.md ├── 2012-12-21-never-ever-hinder-the-use-of-your-products.md ├── 2012-07-08-were-participating-to-the-evernote-devcup.md ├── 2012-11-21-algolia-search-is-out.md ├── 2012-09-24-algolia-search-beta-3-is-out.md ├── 2012-08-22-results-of-the-evernote-devcup.md ├── 2012-12-13-our-smart-contacts-demo-hits-the-app-store.md ├── 2013-05-24-algolia-search-offline-2-1-is-out.md ├── 2012-11-29-why-autocomplete-in-twitter-on-mobile-sucks.md ├── 2013-06-17-discover-our-new-java-android-search-as-a-service-api-clients-at-droidcon-paris.md ├── 2013-07-18-our-search-as-a-service-offer-has-now-10-api-clients.md ├── 2015-05-28-we-just-raised-our-series-a-whats-next.md ├── 2013-06-24-check-out-the-new-iosos-x-clients-for-our-search-as-a-service-offer.md ├── 2012-12-28-simplicity-is-the-most-complex-feature.md ├── 2014-04-09-dealing-openssl-security-issue.md ├── 2012-08-01-free-marketing-wwdc2012.md ├── 2012-11-12-the-ordeal-of-obtaining-an-apple-developer-professional-account.md ├── 2014-03-17-caused-todays-performance-issues-europe-will-happen.md ├── 2014-08-21-algolia-for-realtime-expense-reporting.md ├── 2013-01-28-sharypic-benefits-from-algolia-search.md ├── 2012-07-03-great-discussions-at-leweb12-london.md ├── 2013-05-21-instant-search-on-ios-app-store.md ├── 2015-04-20-quadrant-io-solves-the-frustration-of-economic-data-search-with-algolia.md ├── 2014-01-29-postmortem-todays-8min-indexing-downtime.md ├── 2012-12-20-windows-8-beta-is-out-algolia-search-now-available-for-microsoft-desktops-and-tablets.md ├── 2014-03-14-added-asian-datacenter-offer.md ├── 2014-08-28-concertwith-mes-competitive-edge-revamped-search-ux-algolia.md ├── 2012-10-07-a-few-thoughts-after-apps-world.md ├── 2012-10-19-painless-integration-crystal-clear-documentation-please-welcome-algolia-search-beta-4.md ├── 2014-05-22-synonym-search-engine.md ├── 2014-03-29-introducing-algolias-search-analytics.md ├── 2014-12-01-fanfootage-solving-search-problem-algolia.md ├── 2015-07-15-new-distributed-search-network-texas.md ├── 2015-02-18-distributed-search-network-latency-ruins-search-experience.md ├── 2013-01-24-why-android-apk-format-is-a-terrible-mistake.md ├── 2014-10-10-aftership-leverages-algolias-search-service-track-10-million-packages-around-world.md ├── 2014-07-09-keeping-data-in-your-search-engine-up-to-date.md ├── 2013-03-26-instant-search-on-crunchbase.md ├── 2013-04-16-v2-our-new-offline-search-sdk-with-geo-search-and-other-features.md ├── 2015-05-11-dns-fallback-for-better-resilience.md └── 2014-11-14-jadopado-delivers-instasearch-mobile-web-powered-algolia.md ├── atom.xml ├── LICENSE.md ├── import.rb ├── index.html ├── _includes ├── footer.html ├── head.html └── sidebar.html ├── _config.yml ├── Gemfile.lock └── README-original.md /favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/favicon.png -------------------------------------------------------------------------------- /_animation.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/_animation.gif -------------------------------------------------------------------------------- /assets/guy4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/guy4.jpg -------------------------------------------------------------------------------- /assets/objC.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/objC.png -------------------------------------------------------------------------------- /assets/search.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/search.gif -------------------------------------------------------------------------------- /assets/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/search.png -------------------------------------------------------------------------------- /assets/shot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/shot.jpg -------------------------------------------------------------------------------- /assets/teddy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/teddy.png -------------------------------------------------------------------------------- /assets/vinny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/vinny.png -------------------------------------------------------------------------------- /assets/wwdc1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/wwdc1.jpg -------------------------------------------------------------------------------- /assets/wwdc2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/wwdc2.jpg -------------------------------------------------------------------------------- /assets/Sharypic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Sharypic.png -------------------------------------------------------------------------------- /assets/airpair.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/airpair.png -------------------------------------------------------------------------------- /assets/appstore.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/appstore.jpg -------------------------------------------------------------------------------- /assets/dallas2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/dallas2.jpg -------------------------------------------------------------------------------- /assets/dsn-shot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/dsn-shot.jpg -------------------------------------------------------------------------------- /assets/jadopado.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/jadopado.gif -------------------------------------------------------------------------------- /assets/seedcamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/seedcamp.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/public/favicon.png -------------------------------------------------------------------------------- /assets/fanfootage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/fanfootage.gif -------------------------------------------------------------------------------- /assets/growthacker.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/growthacker.jpg -------------------------------------------------------------------------------- /assets/leanstack.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/leanstack.jpg -------------------------------------------------------------------------------- /assets/StartInParis.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/StartInParis.gif -------------------------------------------------------------------------------- /assets/hand-203x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hand-203x300.jpg -------------------------------------------------------------------------------- /assets/Top categories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Top categories.png -------------------------------------------------------------------------------- /assets/Trend Louboutin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Trend Louboutin.png -------------------------------------------------------------------------------- /assets/dontmakemethink.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/dontmakemethink.jpeg -------------------------------------------------------------------------------- /assets/eoin-o-driscoll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/eoin-o-driscoll.png -------------------------------------------------------------------------------- /assets/recommendations.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/recommendations.gif -------------------------------------------------------------------------------- /assets/sadnessofsearch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/sadnessofsearch.png -------------------------------------------------------------------------------- /assets/searchquadrant1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/searchquadrant1.gif -------------------------------------------------------------------------------- /assets/user-experience.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/user-experience.jpg -------------------------------------------------------------------------------- /assets/NextBerlin-300x155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/NextBerlin-300x155.png -------------------------------------------------------------------------------- /assets/ScreenshotTwitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/ScreenshotTwitter.png -------------------------------------------------------------------------------- /assets/appsworld-300x224.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/appsworld-300x224.jpg -------------------------------------------------------------------------------- /assets/blackberry-300x224.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/blackberry-300x224.jpg -------------------------------------------------------------------------------- /assets/nsone-dig-latency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/nsone-dig-latency.png -------------------------------------------------------------------------------- /assets/slowerthanaverage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/slowerthanaverage.png -------------------------------------------------------------------------------- /assets/Emergency-exit-prev.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Emergency-exit-prev.jpg -------------------------------------------------------------------------------- /assets/StartInParis-1024x768.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/StartInParis-1024x768.jpg -------------------------------------------------------------------------------- /assets/Top-search-1024x409.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Top-search-1024x409.png -------------------------------------------------------------------------------- /assets/amazon-search-20011.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/amazon-search-20011.png -------------------------------------------------------------------------------- /assets/route53-dig-latency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/route53-dig-latency.png -------------------------------------------------------------------------------- /assets/rubymotion1-270x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/rubymotion1-270x300.png -------------------------------------------------------------------------------- /assets/searchForEvernoteSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/searchForEvernoteSmall.png -------------------------------------------------------------------------------- /assets/Stopwatch-lowres-300x225.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Stopwatch-lowres-300x225.jpg -------------------------------------------------------------------------------- /assets/citiessuggest-leweb-180x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/citiessuggest-leweb-180x300.png -------------------------------------------------------------------------------- /assets/2015-04-27-170339_976x845_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-170339_976x845_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-27-174139_920x306_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-174139_920x306_scrot.png -------------------------------------------------------------------------------- /assets/Divided screen hipchat algolia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Divided screen hipchat algolia.png -------------------------------------------------------------------------------- /assets/SmartContact-iphone5-489x1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/SmartContact-iphone5-489x1024.png -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'jekyll', '~> 2.5' 4 | 5 | group :jekyll_plugins do 6 | gem 'algoliasearch-jekyll', '~> 0.7' 7 | end 8 | -------------------------------------------------------------------------------- /assets/2015-04-27-161853_1266x829_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-161853_1266x829_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-27-162229_1258x982_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-162229_1258x982_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-27-170757_1288x486_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-170757_1288x486_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-27-171034_1296x385_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-171034_1296x385_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-27-172249_1248x868_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-27-172249_1248x868_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-28-224616_1126x129_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-28-224616_1126x129_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-28-225743_1629x497_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-28-225743_1629x497_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-28-232019_1153x526_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-28-232019_1153x526_scrot.png -------------------------------------------------------------------------------- /assets/2015-04-28-232444_1275x569_scrot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/2015-04-28-232444_1275x569_scrot.png -------------------------------------------------------------------------------- /public/apple-touch-icon-144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/public/apple-touch-icon-144-precomposed.png -------------------------------------------------------------------------------- /assets/Capture-decran-2014-01-17-18.22.23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Capture-decran-2014-01-17-18.22.23.png -------------------------------------------------------------------------------- /assets/CitiesSuggestIPhone5Slide3-300x194.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/CitiesSuggestIPhone5Slide3-300x194.png -------------------------------------------------------------------------------- /assets/DSN-b3ce122c790c492c2f2c8ddbabaae464.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/DSN-b3ce122c790c492c2f2c8ddbabaae464.jpg -------------------------------------------------------------------------------- /assets/Divided%20screen%20hipchat%20algolia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Divided%20screen%20hipchat%20algolia.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2013-12-23-at-11.47.52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2013-12-23-at-11.47.52.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2014-08-14-at-16.37.25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2014-08-14-at-16.37.25.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2014-08-14-at-16.38.34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2014-08-14-at-16.38.34.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2015-04-13-at-18.06.28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2015-04-13-at-18.06.28.png -------------------------------------------------------------------------------- /assets/amazon-search-today-e1417016290894.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/amazon-search-today-e1417016290894.png -------------------------------------------------------------------------------- /assets/available-on-iphone-app-store-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/available-on-iphone-app-store-logo.png -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |

{{ page.title }}

7 | {{ content }} 8 |
9 | -------------------------------------------------------------------------------- /assets/ChromeWebStore_BadgeWBorder_v2_206x58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/ChromeWebStore_BadgeWBorder_v2_206x58.png -------------------------------------------------------------------------------- /assets/CitiesSuggestIOSPortraitSmall-155x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/CitiesSuggestIOSPortraitSmall-155x300.png -------------------------------------------------------------------------------- /assets/Omar-Kassim-Founder-of-JadoPado-Image-2-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Omar-Kassim-Founder-of-JadoPado-Image-2-1.jpg -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | cache: bundler 3 | branches: 4 | only: 5 | - gh-pages 6 | script: 7 | - bundle exec jekyll algolia push 8 | rvm: 9 | - 2.2 10 | -------------------------------------------------------------------------------- /assets/Capture-decran-2014-01-24-01.26.08-600x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Capture-decran-2014-01-24-01.26.08-600x150.png -------------------------------------------------------------------------------- /assets/Capture-decran-2014-07-11-17.31.04-1024x486.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Capture-decran-2014-07-11-17.31.04-1024x486.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2013-12-23-at-11.38.19-263x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2013-12-23-at-11.38.19-263x300.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2013-12-23-at-11.40.09-263x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2013-12-23-at-11.40.09-263x300.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2013-12-23-at-11.42.01-262x300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2013-12-23-at-11.42.01-262x300.png -------------------------------------------------------------------------------- /assets/Screen-Shot-2014-03-13-at-17.51.50-300x199.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/Screen-Shot-2014-03-13-at-17.51.50-300x199.png -------------------------------------------------------------------------------- /assets/hackpad.com_Y3thzadEtdY_p.233467_1419338581444_capture.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_Y3thzadEtdY_p.233467_1419338581444_capture.gif -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen Shot 2015-01-10 at 17.22.06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen Shot 2015-01-10 at 17.22.06.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen Shot 2015-01-10 at 17.23.21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen Shot 2015-01-10 at 17.23.21.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen Shot 2015-01-10 at 17.24.51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen Shot 2015-01-10 at 17.24.51.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen Shot 2015-01-10 at 17.32.21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen Shot 2015-01-10 at 17.32.21.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen Shot 2015-01-10 at 17.35.07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen Shot 2015-01-10 at 17.35.07.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen Shot 2015-01-10 at 17.38.44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen Shot 2015-01-10 at 17.38.44.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen Shot 2015-01-10 at 17.45.01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen Shot 2015-01-10 at 17.45.01.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen Shot 2015-01-10 at 18.00.12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen Shot 2015-01-10 at 18.00.12.png -------------------------------------------------------------------------------- /assets/hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen Shot 2014-12-23 at 13.46.04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen Shot 2014-12-23 at 13.46.04.png -------------------------------------------------------------------------------- /assets/hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen Shot 2014-12-23 at 13.45.54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen Shot 2014-12-23 at 13.45.54.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen%20Shot%202015-01-10%20at%2017.22.06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420906940736_Screen%20Shot%202015-01-10%20at%2017.22.06.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen%20Shot%202015-01-10%20at%2017.23.21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907058703_Screen%20Shot%202015-01-10%20at%2017.23.21.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen%20Shot%202015-01-10%20at%2017.24.51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907103965_Screen%20Shot%202015-01-10%20at%2017.24.51.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen%20Shot%202015-01-10%20at%2017.32.21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907561110_Screen%20Shot%202015-01-10%20at%2017.32.21.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen%20Shot%202015-01-10%20at%2017.35.07.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907721098_Screen%20Shot%202015-01-10%20at%2017.35.07.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen%20Shot%202015-01-10%20at%2017.38.44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420907937295_Screen%20Shot%202015-01-10%20at%2017.38.44.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen%20Shot%202015-01-10%20at%2017.45.01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420908337814_Screen%20Shot%202015-01-10%20at%2017.45.01.png -------------------------------------------------------------------------------- /assets/hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen%20Shot%202015-01-10%20at%2018.00.12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_JoORx6jqcVU_p.233467_1420909252393_Screen%20Shot%202015-01-10%20at%2018.00.12.png -------------------------------------------------------------------------------- /assets/hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen%20Shot%202014-12-23%20at%2013.46.04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_Y3thzadEtdY_p.233467_1419338775543_Screen%20Shot%202014-12-23%20at%2013.46.04.png -------------------------------------------------------------------------------- /assets/hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen%20Shot%202014-12-23%20at%2013.45.54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/algolia/algoliasearch-jekyll-hyde/HEAD/assets/hackpad.com_Y3thzadEtdY_p.233467_1419338826276_Screen%20Shot%202014-12-23%20at%2013.45.54.png -------------------------------------------------------------------------------- /404.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: "404: Page not found" 4 | permalink: 404.html 5 | --- 6 | 7 |
8 |

404: Page not found

9 |

Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. Head back home to try finding it again.

10 |
11 | -------------------------------------------------------------------------------- /about.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: About 4 | --- 5 | 6 | At [Algolia][2], we love Jekyll, so we decided to provide an easy-to-use [Jekyll 7 | plugin][3] to add an awesome search to your blog. 8 | 9 | To make things even easier, we also [patched the Hyde theme][4] to give you an 10 | example. 11 | 12 | 13 | [1]: https://twitter.com/mdo 14 | [2]: https://www.algolia.com 15 | [3]: https://github.com/algolia/algoliasearch-jekyll 16 | [4]: https://github.com/algolia/algoliasearch-jekyll-hyde 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deprecation notice 2 | 3 | This repository is no longer maintained. The `algoliasearch-jekyll` gem it was using has been deprecated in favor of [jekyll-algolia](https://github.com/algolia/jekyll-algolia). 4 | 5 | You should check [this tutorial](https://community.algolia.com/jekyll-algolia/blog.html) to see how to build a front-end search that uses the `jekyll-algolia` plugin. 6 | 7 | If you have any comments or questions, you should [open an issue](https://github.com/algolia/jekyll-algolia/issues) on the `jekyll-algolia` repository. 8 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include head.html %} 5 | 6 | 7 | 8 | {% include sidebar.html %} 9 | 10 |
11 |
{{ content }}
12 | 13 |
14 |

Search

15 |
16 |
17 |
18 | 19 | {% include footer.html %} 20 | 21 | 22 | -------------------------------------------------------------------------------- /_layouts/post.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |

{{ page.title }}

7 | {{ page.date | date_to_string }} 8 | {{ content }} 9 |
10 | 11 | 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore docs files 2 | _gh_pages 3 | _site 4 | .ruby-version 5 | 6 | # Numerous always-ignore extensions 7 | *.diff 8 | *.err 9 | *.orig 10 | *.log 11 | *.rej 12 | *.swo 13 | *.swp 14 | *.zip 15 | *.vi 16 | *~ 17 | 18 | # OS or Editor folders 19 | .DS_Store 20 | ._* 21 | Thumbs.db 22 | .cache 23 | .project 24 | .settings 25 | .tmproj 26 | *.esproj 27 | nbproject 28 | *.sublime-project 29 | *.sublime-workspace 30 | .idea 31 | 32 | # Komodo 33 | *.komodoproject 34 | .komodotools 35 | 36 | # grunt-html-validation 37 | validation-status.json 38 | validation-report.json 39 | 40 | # Folders to ignore 41 | node_modules 42 | 43 | # Algolia API key 44 | _algolia_api_key 45 | -------------------------------------------------------------------------------- /_posts/2013-02-19-meet-us-at-the-mobile-world-congress.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Meet us at the Mobile World Congress! - The Algolia Blog 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | We'll be in Barcelona next week for the Mobile World Congress! Last year, more 13 | than 67,000 attendees participated in the event. 14 | 15 | We will use this opportunity to launch our new website along with a brand new 16 | offer... Algolia for FREE! Stay tuned! 17 | 18 | If you happen to be attending MWC too, ping me if you'd like to discuss over a 19 | coffee :) (@dessaigne on twitter, or nicolas at algolia dot com). 20 | 21 | 22 | -------------------------------------------------------------------------------- /atom.xml: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | 6 | 7 | 8 | {{ site.title }} 9 | 10 | 11 | {{ site.time | date_to_xmlschema }} 12 | {{ site.url }} 13 | 14 | {{ site.author.name }} 15 | {{ site.author.email }} 16 | 17 | 18 | {% for post in site.posts %} 19 | 20 | {{ post.title }} 21 | 22 | {{ post.date | date_to_xmlschema }} 23 | {{ site.url }}{{ post.id }} 24 | {{ post.content | xml_escape }} 25 | 26 | {% endfor %} 27 | 28 | 29 | -------------------------------------------------------------------------------- /_posts/2014-03-25-hipchats-blog-algolia-extends-hipchat-customer-support.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'On HipChat''s blog: Algolia extends HipChat to customer support' 4 | author: 5 | login: sylvain 6 | email: sylvain@algolia.com 7 | display_name: Sylvain Utard 8 | first_name: Sylvain 9 | last_name: Utard 10 | --- 11 | 12 | As you may probably know, we're using HipChat to build our live-help chat. If 13 | you want to know more, go ahead and read our [guest post on HipChat's 14 | blog][1]. 15 | 16 | [![Hipchat: Live help chat.](/algoliasearch-jekyll-hyde/assets/Divided%20screen%20hipchat%20algolia.png)](http://blog.hipchat.com/2014/03/25/algolia-extends-hipchat-to-customer-support/) 17 | 18 | Algolia uses HipChat to 19 | provide live customer service over chat. 20 | 21 | 22 | [1]: http://blog.hipchat.com/2014/03/25/algolia-extends-hipchat-to-customer-support/ 23 | -------------------------------------------------------------------------------- /_posts/2014-03-15-algolia-heroku-add-on-enters-ga.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Heroku add-on enters general availability 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We launched the first beta of our Heroku add-on in October 2013 and are now 13 | happy to announce its general availability! 14 | 15 | During the beta period we received excellent feedback (and some bug reports!) 16 | that helped us improve our integration. We are now fully ready to serve 17 | production on both Heroku datacenters. If you were part of our beta program, 18 | we will contact you shortly to invite you to migrate to a standard plan. 19 | 20 | You can directly install it from our [Heroku add-on 21 | page][1] and as ever, please [let us 22 | know][2] if you have any feedback! 23 | 24 | 25 | [1]: https://addons.heroku.com/algoliasearch 26 | [2]: mailto:hey@algolia.com 27 | -------------------------------------------------------------------------------- /_posts/2012-07-02-lets-start-the-adventure.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Let's start the adventure 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Welcome to The Algolia Blog! It's always difficult to write the first post of 13 | a blog! What should I talk about? The company, the founders, the business, the 14 | culture? And all that knowing that virtually nobody will read except diggers 15 | in a few years (hopefully)! 16 | 17 | Let's concentrate instead on what we'll be blogging about. Company news 18 | obviously, but not only. I expect we'll write quite a few posts about 19 | technology, algorithms, entrepreneurship, marketing, and whatever else we'll 20 | want to share with you :) 21 | 22 | And most important, feel free to participate in comments or by contacting us 23 | directly. We appreciate your feedback! 24 | 25 | Welcome to the Algolia blog! 26 | 27 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # Released under MIT License 2 | 3 | Copyright (c) 2013 Mark Otto. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /_posts/2012-11-30-we-are-seedcamp-finalists.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: We are SeedCamp Finalists! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Hey, we are thrilled to announce our nomination among the [Seedcamp Paris 13 | finalists][1]! The event will take place next week on Monday, 14 | just before [LeWeb 2012][2] (by the way we'll be there, 15 | feel free to ping us if you'd like to meet). 16 | 17 | ![Seedcamp Finalists][3] 18 | 19 | From what we learned from all over the place, the day's mentorship alone is 20 | worth it. We're now fully committed to the event preparation! I'll try to 21 | write a followup post with our impressions. 22 | 23 | [Edit 15-Jan-2013] Here it is with some [tips and 24 | advice][4] 25 | [/Edit] 26 | 27 | 28 | [1]: http://www.rudebaguette.com/2012/11/30/here-are-the-20-startups-selected-for-seedcamp-paris/ 29 | [2]: http://paris.leweb.co/ 30 | [3]: /algoliasearch-jekyll-hyde/assets/seedcamp.png 31 | [4]: http://blog.algolia.com/seedcamp-tips-and-advice-from-a-finalist/ 32 | -------------------------------------------------------------------------------- /import.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'awesome_print' 3 | 4 | # Convert html to markdown 5 | 6 | Dir['./_posts_html/*.html'].each do |html_post| 7 | html_post = File.expand_path(html_post) 8 | md_post = html_post.gsub('_posts_html', '_posts').gsub(/.html/, '.md') 9 | 10 | delimiter = 0 11 | html = [] 12 | frontmatter = [] 13 | File.open(html_post, 'rb').each_line do |line| 14 | line = line.chomp.force_encoding('UTF-8') 15 | if line == '---' 16 | delimiter += 1 17 | next 18 | end 19 | 20 | # HTML 21 | if delimiter == 2 22 | html << line 23 | else 24 | frontmatter << line 25 | end 26 | end 27 | 28 | html = html.join("\n") 29 | frontmatter = frontmatter.join("\n") 30 | 31 | File.open('/tmp/algoliajekyll.html', 'wb') do |tmp_file| 32 | tmp_file.write(html) 33 | end 34 | markdown = `html2mkd /tmp/algoliajekyll.html utf-8` 35 | 36 | final = ['---'] 37 | final << frontmatter 38 | final << '---' 39 | final << '' 40 | final << markdown 41 | 42 | File.open(md_post, 'w') do |file| 43 | file.write(final.join("\n")) 44 | end 45 | end 46 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Home 4 | --- 5 | 6 |
7 | {% for post in paginator.posts %} 8 |
9 |

10 | 11 | {{ post.title }} 12 | 13 |

14 | 15 | 16 | 17 | {{ post.content }} 18 |
19 | {% endfor %} 20 |
21 | 22 | 38 | -------------------------------------------------------------------------------- /_posts/2014-09-01-4th-datacenter-california.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia opened its 4th datacenter is in California! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Do you know the 3 most important things in search? Speed, speed, and speed! 13 | 14 | At Algolia, we work at making access to content and information completely 15 | seamless. And that can only be done if search results are returned so fast 16 | that they seem instant. 17 | 18 | That means two things for us: getting server **response time under 10ms** 19 | (checked), and getting the servers close to end-users to lower latency. 20 | 21 | We are on a quest to make search faster than 100ms from anywhere in the world, 22 | and today is an important step. We are thrilled to announce the **opening of 23 | our 4th datacenter, located in California**! 24 | 25 | You can now choose to be hosted on this datacenter when [signing 26 | up](https://www.algolia.com/users/sign_up) (multi-datacenter distribution is 27 | also available for enterprise users). 28 | 29 | -------------------------------------------------------------------------------- /_posts/2013-03-12-algolia-search-is-now-available-for-free.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'FREE Search SDK: Algolia is Now Available for Free!' 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Yes, you read that right! We're not talking about a free trial, but of a 13 | completely FREE version of our SDK. It is often difficult to implement a good 14 | search experience, so we want to democratize access to easy-to-integrate and 15 | first class search features! All you have to do is to display non-intrusive 16 | Algolia branding. 17 | 18 | This branded offer is already available on our website. Don't delay, [register 19 | today][1]! Check out our [use-cases 20 | section][2] to discover possible 21 | implementations and see how Sharypic, Offline dictionaries, and Sush.io have 22 | integrated Algolia in their apps. 23 | 24 | Help us spread the word. We want every app developer to be able to take 25 | advantage of this offer! 26 | 27 | 28 | [1]: http://www.algolia.com/get-started/ 29 | [2]: http://www.algolia.com/usecases/ 30 | -------------------------------------------------------------------------------- /_posts/2013-03-18-our-saas-version-is-in-beta.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'Online Search in the Cloud: Version is in Beta!' 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Imagine all the power and simplicity of Algolia Search, but available online, 13 | from any connected device. Welcome to our Cloud! 14 | 15 | Up to now, our instant, typo-friendly search was only available locally on 16 | your device. You could only index data stored directly in your app. While that 17 | was great for offline apps, it was not so fantastic for rapidly changing data 18 | server-side. All that has just changed! You can now use our search engine 19 | online, enabling you to change your data at any frequency and return 20 | consistantly up-to-date search results in your apps. Interested? Request your 21 | invitation to the Beta from the [features 22 | page][1]. 23 | 24 | And don't forget you can combine it with our offline SDK, for great search 25 | performance whatever the connectivity! 26 | 27 | 28 | [1]: http://www.algolia.com/features/ 29 | -------------------------------------------------------------------------------- /_posts/2013-04-25-algolia-search-offline-sdk-now-supports-cocoapods.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search Offline SDK now supports Cocoapods 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We have great news for our iOS and OS X users: our Offline SDK is now 13 | available as a _[CocoaPods][1] _dependency_._ 14 | 15 | Cocoapods is a popular dependency management tool that lets you specify the 16 | libraries (dependencies) you want to use for your project in an easy-to-edit 17 | text file (Podfile). It then fetches all the required libraries and sets up 18 | your Xcode workspace. 19 | 20 | You can now set up Algolia Search Offline in your iOS project with this line 21 | in your Podfile: 22 | 23 | `pod 'AlgoliaSearchOffline-iOS-SDK'` 24 | 25 | You can also set up Algolia Search Offline in your OS X project with this 26 | line: 27 | 28 | `pod 'AlgoliaSearchOffline-OSX-SDK'` 29 | 30 | Once you're done, simply use the "pod install" command to set up Algolia 31 | Search Offline in your project. Now it's easy to manage library dependencies 32 | for iOS and OS X projects! 33 | 34 | 35 | [1]: http://www.cocoapods.org/ 36 | -------------------------------------------------------------------------------- /_posts/2012-08-16-algolia-search-beta-is-out.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search beta is out! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | [![][1]](https://blog.algolia.com/wp- 13 | content/uploads/2012/08/searchForEvernoteSmall.png)After a few months in the 14 | making, our first mobile library is finally ready to hit the shelves! Well, 15 | nearly! Before releasing it, we want all the feedback you can give us to 16 | ensure it's bug-free, easy to use and responsive to your needs. 17 | 18 | If you subscribed to the beta, you should already have received your access 19 | info. If not, you can request it directly on www.algolia.com. 20 | 21 | You'll be able to download both the iOS and the Android versions, along with 22 | all necessary documentation. Feel free to ask for any clarification or 23 | additional info. We'll do a few technical posts which explore the product 24 | internals in the coming months. 25 | 26 | We're now eager to read your feedback! You just have one address to remember 27 | to report bugs, request features, or anything beta related: beta@algolia.com 28 | 29 | Enjoy! 30 | 31 | 32 | [1]: /algoliasearch-jekyll-hyde/assets/searchForEvernoteSmall.png 33 | -------------------------------------------------------------------------------- /_posts/2012-09-03-algolia-search-beta-2-is-out.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search Beta 2 is out! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We are pleased to announce the launch of Algolia Search Beta 2, our second 13 | release! 14 | 15 | We would like to sincerely thank all of our beta testers for the great 16 | feedback. You really helped us to make Algolia Search a first-class product 17 | guys! Please continue your feedbacks! 18 | 19 | And here what's new in this beta2. 20 | 21 | **iOS & Android changes:** 22 | 23 | * Improved performance for big data sets (up to three times faster). In our tests, we successfully used a 3 millions entries data set on a old iPhone 3GS. The index was 250MB large! 24 | 25 | **Documentation changes:** 26 | 27 | * Reworked the overview 28 | * Fixed a lot of typos and small errors 29 | 30 | **iOS specific changes:** 31 | 32 | * Added an AlgoliaSearch.h header that includes all public headers 33 | * Prefixed all public classes by AS 34 | * Changed addEntry selector in ASIndexWriter to be more similar to NSMutableDictionary API 35 | * Removed internal objects from public headers 36 | * Changed ASAsyncIndexSearcher API to implement the delegate pattern 37 | 38 | 39 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 9 | 20 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /_posts/2013-07-08-excellent-asian-languages-support-in-our-offline-search-sdk-2-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Asian Language support in our Offline Search SDK 2.2 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | Like most search engines, version 2.1 did not include any specific processing 13 | for Asian Languages. Version 2.2 significantly improves Asian language support 14 | (Chinese, Japanese, Korean) by including specific processing like the 15 | automatic conversion between Simplified Chinese and Traditional Chinese using 16 | the [Unicode UniHan Database](http://www.unicode.org/charts/unihan.html). This 17 | advanced processing was only possible because we built our own [Unicode 18 | library](http://blog.algolia.com/why-develop-our-own-unicode-library/). Many 19 | thanks to [Stephen](https://twitter.com/stephencremin) for his help! 20 | 21 | This release also contains other improvements we released first for our SaaS 22 | version: 23 | 24 | * The out-of-the-box ranking was greatly improved when queries contained more than two words, 25 | * Indexing speed was greatly improved on mobile (2 times more efficient), 26 | * Search speed was improved by about 20%. 27 | 28 | We hope you’ll like these new features, and as ever, we welcome your feedback! 29 | 30 | -------------------------------------------------------------------------------- /_posts/2013-04-11-we-are-finalists-at-next-berlin.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: We are NEXT Berlin Finalists! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | [![NEXT Berlin Finalists][1]](http://nextberlin.eu/2013/04/next13-start-up-pitch-these-are- 13 | the-12-finalists/)The [NEXT Berlin Conference][2] will 14 | take place on April 23rd & 24th in one of the most active entrepreneurial 15 | ecosystems in Europe!  More than 100 experts will share their knowledge with 16 | an expected audience of 2000 attendees. 17 | 18 | If you follow our newsletter or social presence, chances are you saw our call 19 | for help to participate in the NEXT Berlin startup competition. We sincerely 20 | thank you for your votes! They placed us in the 30 top startups to be 21 | considered for the final. The judges then selected us as one of the [12 22 | finalists][3] to pitch during the conference. We are thrilled to be able 23 | to present Algolia to Berlin! 24 | 25 | If you happen to be attending NEXT Berlin, ping me if you'd like to meet! 26 | (@dessaigne on twitter, or nicolas at algolia dot com). 27 | 28 | 29 | [1]: /algoliasearch-jekyll-hyde/assets/NextBerlin-300x155.png 30 | [2]: http://nextberlin.eu/ 31 | [3]: http://nextberlin.eu/2013/04/next13-start-up-pitch-these-are-the-12-finalists/ 32 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {% if page.title == "Home" %} 11 | {{ site.title }} · {{ site.tagline }} 12 | {% else %} 13 | {{ page.title }} · {{ site.title }} 14 | {% endif %} 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /_posts/2012-09-28-upcoming-events-appsworld-mobility-for-business-appdays.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'Upcoming Mobile App Conferences: Apps World, Mobility for Business, Appdays' 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | With the summer behind us, the period is pretty active. It's really difficult 13 | to attend all the great events, big and small, organized out there. After 14 | [Mobile Monday][1], 15 | [Failcon][2] and the first meeting of 16 | [Appsterdam][3] Paris this week, here are the major mobile 17 | app conferences we're attending in the next few weeks! 18 | 19 | * [Appsworld][4], the 2nd and 3rd of October in London. It's a major event attended by lot of mobile industry professionals. There are expecting up to 5000 participants! 20 | * [Mobility for business][5], the 11th and 12th of October in Paris. A big event too, they are expecting about 3000 attendees! 21 | * [Appdays][6], the 9th of November in Paris. A more human sized event (200 participants) and definitely a place to be! 22 | 23 | If you happen to participate to one of these, get in touch for some passionate 24 | discussion around mobile apps development! 25 | 26 | 27 | [1]: http://www.mobilemondayfrance.org/ 28 | [2]: http://france.thefailcon.com/ 29 | [3]: http://appsterdam.rs/ 30 | [4]: http://www.apps-world.net/europe/ 31 | [5]: http://www.mobility-for-business.com/ 32 | [6]: http://appdays.fr/ 33 | -------------------------------------------------------------------------------- /_posts/2013-05-28-discover-our-6-new-search-as-a-service-api-clients.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Discover our 6 new Search-as-a-Service API Clients! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We [launched the private beta][1] of our Search-as-a-Service offer two months ago. In that time we 13 | received very positive feedback from our beta testers and we couldn't thank 14 | them enough for the help they provided. To date, they have sent over 1M 15 | indexation jobs and over 5M queries, and the trend is increasing. 16 | 17 | Today we are happy to continue simplifying the experience with the release of 18 | six API Clients under the MIT license: 19 | 20 | * [Command line client for linux/mac][2] 21 | * [Ruby client][3] 22 | * [Python client][4] 23 | * [PHP client][5] 24 | * [Javascript client][6] 25 | * [Node.js client][7] 26 | 27 | Ease of integration just improved again! Your feedback (and pull requests) is 28 | most welcome. 29 | 30 | 31 | [1]: http://blog.algolia.com/our-saas-version-is-in-beta/ 32 | [2]: https://github.com/algolia/algoliasearch-client-cmd 33 | [3]: https://github.com/algolia/algoliasearch-client-ruby 34 | [4]: https://github.com/algolia/algoliasearch-client-python 35 | [5]: https://github.com/algolia/algoliasearch-client-php 36 | [6]: https://github.com/algolia/algoliasearch-client-js 37 | [7]: https://github.com/algolia/algoliasearch-client-node 38 | -------------------------------------------------------------------------------- /_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | 38 | -------------------------------------------------------------------------------- /_posts/2013-04-16-algolia-search-is-now-available-for-rubymotion.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Introducing a RubyMotion search gem by Algolia! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | [![Rubymotion search gem by Algolia is now 13 | live!][1]](https://blog.algolia.com/wp- 14 | content/uploads/2013/04/rubymotion1.png)If you are a Ruby developer and have 15 | an iPhone, chances are you already now about the cool project that is 16 | [RubyMotion][2]! I quote: 17 | 18 | > "It lets you quickly develop and test native iOS applications for iPhone or 19 | iPad, all using the awesome Ruby language you know and love." 20 | 21 | And it rocks! It's actually used by the Ruby on Rails sponsor 37signals. 22 | 23 | What if you could use your favorite search engine along with your favorite 24 | language to create iOS apps? That's exactly what we propose with Algolia's 25 | RubyMotion search gem that seamlessly integrates in your Ruby project. You 26 | know the trick: 27 | 28 | 29 |   30 | gem 'motion-algolia-search' 31 | 32 | 33 | The gem code is open source. You can fork it from 34 | [github][3]. 35 | 36 | Special thanks to the RubyMotion team and especially to 37 | [Joffrey][4] for this integration! 38 | 39 | 40 | [1]: /algoliasearch-jekyll-hyde/assets/rubymotion1-270x300.png 41 | [2]: http://www.rubymotion.com/ 42 | [3]: https://github.com/algolia/motion-algolia-search 43 | [4]: https://twitter.com/joffreyjaffeux 44 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | markdown: redcarpet 3 | highlighter: pygments 4 | 5 | # Permalinks 6 | permalink: pretty 7 | relative_permalinks: true 8 | 9 | # Setup 10 | title: Hyde 11 | tagline: 'A Jekyll theme, with instant search' 12 | description: 'The popular Hyde theme for Jekyll, now with instant-search capabilities. Made by @mdo and Algolia' 13 | url: https://github.com/algolia/algoliasearch-jekyll-hyde 14 | baseurl: /algoliasearch-jekyll-hyde 15 | # Travis will install Bundler dependencies in ./vendor, so we need to exclude it 16 | # otherwise Jekyll will try to build it (and fail) 17 | exclude: [vendor] 18 | 19 | author: 20 | name: 'Algolia' 21 | url: https://www.algolia.com/ 22 | # Thanks to @mdo for the original theme 23 | # author: 24 | # name: 'Mark Otto' 25 | # url: https://twitter.com/mdo 26 | 27 | paginate: 5 28 | 29 | # Custom vars 30 | version: 2.1.0 31 | 32 | github: 33 | repo: https://github.com/algolia/algoliasearch-jekyll-hyde 34 | 35 | # Algolia 36 | gems: 37 | - algoliasearch-jekyll 38 | 39 | algolia: 40 | application_id: 'latency' 41 | index_name: 'jekyll' 42 | read_only_api_key: '6be0576ff61c053d5f9a3225e2a90f76' 43 | excluded_files: 44 | - 404.html 45 | - index.html 46 | -------------------------------------------------------------------------------- /_posts/2013-02-19-round-table-at-microsoft-techdays-2013.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Round table at Microsoft TechDays 2013 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | I had the pleasure to be invited by [David 13 | Catuhe][1] to participate in a round table about 14 | Windows8 development during [Microsoft TechDays 15 | 2013][2]! 16 | 17 | I was joined by [Christopher Maneu][3] from Deezer and 18 | [Guillaume Leborgne][4] from 19 | MCNext, both deeply involved in Windows development. David (cropped from the 20 | photo) led the discussion with [Jean Ferré][5], who 21 | leads the developers, platform and ecosystem division at Microsoft France. 22 | 23 | The discussion was very interesting and openly addressed the late start of 24 | Microsoft on mobile. They seem to have spared no effort to ease the work of 25 | developers, for example by opening the platform to development in 26 | HTML5/Javascript. I confess I initially thought it was a strange choice for 27 | native apps but it seems to have attracted quite a few web developers. 28 | 29 | This round table was a great opportunity to meet smart people and gain insight 30 | into the Microsoft platform! Thanks also to the journalists in attendance who 31 | covered Algolia in the IT press. 32 | 33 | 34 | [1]: https://twitter.com/deltakosh 35 | [2]: http://www.microsoft.com/france/mstechdays/ 36 | [3]: http://blog.maneu.net 37 | [4]: fr.linkedin.com/pub/guillaume-leborgne/27/5b7/48 38 | [5]: http://www.microsoft.com/france/microsoft-en-france/microsoft-france/equipe-dirigeante/jean-ferre.aspx 39 | -------------------------------------------------------------------------------- /_posts/2013-01-29-we-ranked-second-at-start-in-paris.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: We ranked Second at Start In Paris! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | [Start In Paris][1] is a monthly event where 5 13 | startups have the opportunity to pitch their service to the Paris startup 14 | community. After a first selection and then a public vote, we were selected as 15 | one of 5 finalists of the #22 edition that took place yesterday, January the 16 | 28th! 17 | 18 | ![Start In Paris][2] 19 | 20 | Algolia has greatly evolved over the last few months, so it was an excellent 21 | occasion for us to test a new pitch! And the response has truly exceeded our 22 | expectations. After a 5 minute pitch we received a rush of questions, 23 | displaying interest and insight from the 400-strong audience! 24 | 25 | While we were the only tech startup to pitch to an audience including only a 26 | few developers, we ranked second in votes, just behind [Kitchen 27 | Trotter][3], our fellow Seedcamp finalist from 28 | last December. Congrat to them, they were truly excellent! 29 | 30 | **[Edit 03-Feb-2013]** Check out [Alexis Niki][4] great feedback about the event on [Rude Baguette][5] **[/Edit]** 31 | 32 | [![Nicolas at Start In Paris][6]](https://blog.algolia.com/wp- 33 | content/uploads/2013/01/StartInParis.jpg) 34 | 35 | 36 | [1]: http://www.startinparis.com/ 37 | [2]: /algoliasearch-jekyll-hyde/assets/StartInParis.gif 38 | [3]: http://www.kitchentrotter.com/ 39 | [4]: https://twitter.com/AlexisNiki 40 | [5]: http://www.rudebaguette.com/2013/02/01/three-storytelling-tips-for-french-startups-when-pitching/ 41 | [6]: /algoliasearch-jekyll-hyde/assets/StartInParis-1024x768.jpg 42 | -------------------------------------------------------------------------------- /_posts/2012-12-21-never-ever-hinder-the-use-of-your-products.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Never, Ever, Hinder the Use of your Products! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | One of the worst user experiences I have ever had with software was with the 13 | Sony PS3. I kind of liked this product; I found the user interface very nice 14 | and well organized... but they were much too aggressive about upgrades! They 15 | simply blocked features until the upgrade was done! 16 | 17 | A few weeks ago I wanted to watch a VOD movie with my wife. I launched the 18 | Playstation Store that asked me to upgrade the OS to the latest version. 19 | That's **45 minutes** before being able to access the Playstation again! But 20 | wait! Once the new OS was installed, I tried to launch  the Playstation Store 21 | again... This time, it was the Playstation Application that was not up to date 22 | ! 23 | 24 | In total it took me over **1 hour** to do upgrades and guess what, at the end 25 | it was just too late to watch the movie! 26 | 27 | Generally, frequent upgrades are good for your users, and I am sure there are 28 | plenty of bug fixes/improvments in the lastest version. But Sony has just made 29 | the wrong choice in blocking features until the upgrade is done. This is just 30 | plain frustrating for users! On the contrary, Android and iOS propose an 31 | upgrade that you can apply when you want. Best of all, they download in the 32 | background. 33 | 34 | It may sound evident, but it is very important to ensure your users will 35 | always be able able to keep control over their products. You should never 36 | force them to do something they do not want to, like Sony did with the PS3. 37 | 38 | 39 | -------------------------------------------------------------------------------- /_posts/2012-07-08-were-participating-to-the-evernote-devcup.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'Search for Evernote: We''re in the Evernote DevCup!' 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | You mint already be familiar with Evernote. It's a great company that delivers 13 | an impressive product that I use often, both professionally and personally. 14 | When we heard about them organizing their second developer competition, we 15 | immediately thought about the fantastic opportunity it could be for Algolia! 16 | 17 | Let's sum up: 18 | 19 | * It's an excellent use case for our first lib: search in Evernote mobile apps is quite awful and we could really bring a better user experience! 20 | * It's a good incentive to create a second demo (after Cities Suggest) that's more convincing, especially for Evernote's users. 21 | * It's an opportunity to get some media coverage :) 22 | * And most of all it's an excellent occasion to pitch our lib to the Evernote team. We would love to have them as an happy customer! 23 | 24 | As you see, even if we don't make it to the finals, the decision was a no- 25 | brainer! But, wait... we'd love to go to the finals! **And you can help us!** 26 | Part of the competition is to get the maximum public support. You want to hep 27 | us? Just go to our [submission 28 | page][1] and 29 | vote once a day! Tell your friends! Tell your grandma! You can even log in via 30 | facebook ;) 31 | 32 | Want to know more about our app "Search for Evernote"? Here comes the video. 33 | You can also download the app directly from 34 | [http://www.algolia.com/evernote.html](http://www.algolia.com/evernote.html) 35 | 36 | [1]: http://devcup.evernote.com/submissions/8585-search-for-evernote 37 | -------------------------------------------------------------------------------- /_posts/2012-11-21-algolia-search-is-out.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search is Out! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | [![Now introducing Algolia Search][1]](https://blog.algolia.com/wp- 13 | content/uploads/2012/11/hand.jpg)After 4 betas and much priceless feedback, we 14 | are really excited to announce the release of Algolia Search! We launched it 15 | Monday during the 60th edition of [Mobile Monday Paris](http://algolia.us5 16 | .list-manage1.com/track/click?u=4cb821b85eca457f3c8a4df2f&id=c46402f441&e=df9a 17 | 44f8b5)! If you don't know what Algolia Search can do for your app, take a 18 | look at its [amazing features][2] or just watch 19 | the [video][3]! 20 | 21 | This release also means that you can now integrate it directly into your apps 22 | and publish them! We wanted to have a simple and clear pricing plan: You can 23 | have all the benefits of Algolia Search in one Android or iOS App for only 24 | $590! Think about it, that's less than the day-rate of a mobile developer in 25 | many countries. Compare it to the many days you would need to integrate SQL 26 | Lite FTS for poor features. 27 | 28 | [Try Algolia Search for free][4] for 30-days! 29 | 30 | We are also very excited to introduce our new 31 | [website][5] alongside this launch. You'll be able to 32 | access up-to-date documentation easily, to [try and 33 | download][6] Algolia Search in a few clicks and, of 34 | course, to order the product! Check it out and let us know what you think! 35 | 36 | Thanks again to our beloved beta testers. Stay tuned for more news! 37 | 38 | 39 | [1]: /algoliasearch-jekyll-hyde/assets/hand-203x300.jpg 40 | [2]: http://www.algolia.com/product/ 41 | [3]: http://www.algolia.com/?video=1 42 | [4]: http://www.algolia.com/try/ 43 | [5]: http://www.algolia.com 44 | [6]: http://www.algolia.com/try/ 45 | -------------------------------------------------------------------------------- /_posts/2012-09-24-algolia-search-beta-3-is-out.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search Beta 3 is out! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | [![Algolia Search Beta 3][1]](https://blog.algolia.com/wp- 13 | content/uploads/2012/09/CitiesSuggestIOSPortraitSmall.png)We are pleased to 14 | announce Algolia Search Beta 3, our third release with a strong focus on 15 | performance. 16 | 17 | As for the previous release, we would like to sincerely thank all of our beta 18 | testers for their excellent feedbacks! 19 | 20 | Here what's new in this beta3. 21 | 22 | 23 | **iOS & Android changes:** 24 | 25 | * **Ultra fast loading**: indexes are now loaded in a few milliseconds (always less 26 | than 10ms!)  With the Beta 2, an index of 500MB could take up to 20 seconds to 27 | load. 28 | 29 | * **Ultra fast search on big indexes**: Beta 2 was able to search up to 100k entries 30 | in real time. Beta3 can search in **5M entries in real time** (and probably 31 | 32 | more!). Our main use case was to search in all titles of the English version 33 | of 34 | 35 | Wikipedia on a IPhone 3GS. The speedup is also very nice for small datasets, 36 | 37 | the near-zero CPU usage increases battery life compared to Beta 2. 38 | 39 | * Highlight is now always done on longest match. In previous version a query 'anq' could highlight "Angeles" in 40 | two different ways: "**Ang**eles" or "**An**geles", with this version you will 41 | always obtain "**Ang**eles" which is easier to 42 | 43 | understand for end-users. 44 | 45 | * Improved proximity scoring when a query contains multiple words. 46 | * Fixed two memory leaks that could lead to problems with very heavy usage. 47 | 48 | **iOS specific changes:** 49 | 50 | * Added a version without ARC that allows to target iOS >= 3.0 51 | 52 | 53 | [1]: /algoliasearch-jekyll-hyde/assets/CitiesSuggestIOSPortraitSmall-155x300.png 54 | -------------------------------------------------------------------------------- /_posts/2012-08-22-results-of-the-evernote-devcup.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Results of the Evernote DevCup 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Time flies! I just realized we didn't offer any feedback about our 13 | participation in the Evernote DevCup back in July. 14 | 15 | First of all, thank you so much for your support! We ranked 14th out of 174 16 | contestants in public voting! That actually exceeded our expectations as we 17 | aimed for the 20th position (so drinks are on Julien!) 18 | 19 | But even with all of your support, we didn't make it to the finals. We would 20 | have loved to fly to San Francisco, but the [six 21 | finalists][1] all feature rich apps that merit their position. Congrats 22 | guys, and good luck! The conference is in a couple of days now, and I can't 23 | wait to find out who will win the cup! 24 | 25 | As for us, it was a truly great experience! Remember our 26 | [post][2] 27 | announcing our participation? Well, outside the *slight* frustration of not 28 | going to SF, the couple of days we spent building the Search for Evernote app 29 | was really worth it! 30 | 31 | * We were able to correct a few corner case bugs which this new use case highlighted. It's always better to find them yourself than let app developers stumble upon them :) 32 | * We developed a new feature enabling prefix search on all words. 33 | * Our participation led to an improved awareness of the company and helped our SEO. 34 | * We created a new demo of the search lib which is much more compelling than Cities Suggest in many situations. It is actually a bit more than a demo for some people - as of today, it has 317 active users on google play! 35 | 36 | That got us thinking... we may do this kind of contest again. But this time 37 | we'll aim higher! 38 | 39 | 40 | [1]: http://blog.evernote.com/2012/07/27/announcing-the-2012-evernote-devcup-finalists/ 41 | [2]: http://blog.algolia.com/were-participating-to-the-evernote-devcup/ 42 | -------------------------------------------------------------------------------- /_posts/2012-12-13-our-smart-contacts-demo-hits-the-app-store.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Smart Contacts Demo Hits the App Store! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | After going back and forth a few times with Apple, we are really happy to 13 | announce the availibility of our [Smart 14 | Contacts][1] 15 | application on the App Store! Even if we built it to demonstrate the amazing 16 | features of our search technology SDK, it can be used as an in-place 17 | replacement of the traditional iPhone Contacts app. Check it up! 18 | 19 | [![Smart Contacts demo hits the App Store][2]](https://itunes.apple.com/gb/app/algolia-smart- 20 | contact/id583433043) 21 | 22 | ## Outstanding Search Features 23 | 24 | It plugs directly into your iPhone contacts and classically allows you to 25 | update them or create new ones. What's more interesting is the Search 26 | integration! It features:[![Smart Contacts Screenshot][3]](https://blog.algolia.com/wp-content/uploads/2012/12 27 | /SmartContact-iphone5.png) 28 | 29 | * **Instant search** with autocompletion and **visual feedback** as you type 30 | * Search on **all contacts attributes** (name, company, notes, etc.) 31 | * **Typo tolerance** to account for smartphone small keyboards 32 | * And even **search by initials**! 33 | 34 | ## iOS API Limitations 35 | 36 | There are a few of features we would have loved to integrate that were not 37 | possible due to limitations in iOS APIs: group management, in place 38 | replacement of contacts in the phone app (that's maybe a lot to ask!), and 39 | ranking based on contact popularity. 40 | 41 | ## Free your Imagination! 42 | 43 | If you ever wanted to see Algolia Search in action, now is the time. Check it 44 | up with your own data and imagine what Algolia can do for the application you 45 | develop! 46 | 47 | And don't forget your 5 stars ranking ;) 48 | 49 | 50 | [1]: https://itunes.apple.com/gb/app/algolia-smart-contact/id583433043 51 | [2]: /algoliasearch-jekyll-hyde/assets/available-on-iphone-app-store-logo.png 52 | [3]: /algoliasearch-jekyll-hyde/assets/SmartContact-iphone5-489x1024.png 53 | -------------------------------------------------------------------------------- /public/css/algolia.css: -------------------------------------------------------------------------------- 1 | /* Search form */ 2 | .algolia__input { 3 | margin-bottom: 1rem; 4 | font-size: 20px; 5 | padding:.25rem .5rem; 6 | } 7 | 8 | /* Search results container */ 9 | .algolia__initial-content { 10 | display:block; 11 | } 12 | .algolia__initial-content--hidden { 13 | display:none; 14 | } 15 | .algolia__search-content { 16 | display:none; 17 | } 18 | .algolia__search-content--active { 19 | display:block; 20 | } 21 | 22 | /* Search results */ 23 | .algolia__result { 24 | margin-bottom: 1rem; 25 | } 26 | .algolia__result-link { 27 | font-size: 1.25rem; 28 | font-weight:bold; 29 | } 30 | .algolia__result-date { 31 | font-size:0.8rem; 32 | } 33 | .algolia__result-text { 34 | font-size: 0.9rem; 35 | } 36 | .algolia__result-link .algolia__result-highlight { 37 | background-color:#D3E8F6; 38 | background-color: rgba(38,139,210,0.2); 39 | } 40 | .algolia__result-text .algolia__result-highlight { 41 | font-weight:bold; 42 | } 43 | 44 | /* Theming */ 45 | .theme-base-08 .algolia__result-link .algolia__result-highlight { 46 | background-color:#EED9D9; 47 | background-color: rgba(172,65,66,0.2); 48 | } 49 | .theme-base-09 .algolia__result-link .algolia__result-highlight { 50 | background-color: #F6E6DA; 51 | background-color: rgba(210,132,69,0.2); 52 | } 53 | .theme-base-0a .algolia__result-link .algolia__result-highlight { 54 | background-color: #FDF2E3; 55 | background-color: rgba(244,191,117,0.2); 56 | } 57 | .theme-base-0b .algolia__result-link .algolia__result-highlight { 58 | background-color: #E9EEDE; 59 | background-color: rgba(144,169,89,0.2); 60 | } 61 | .theme-base-0c .algolia__result-link .algolia__result-highlight { 62 | background-color: #E3F0EE; 63 | background-color: rgba(117,181,170,0.2); 64 | } 65 | .theme-base-0d .algolia__result-link .algolia__result-highlight { 66 | background-color: #E1ECF0; 67 | background-color: rgba(106,159,181,0.2); 68 | } 69 | .theme-base-0e .algolia__result-link .algolia__result-highlight { 70 | background-color: #EEE3EC; 71 | background-color: rgba(170,117,159,0.2); 72 | } 73 | .theme-base-0f .algolia__result-link .algolia__result-highlight { 74 | background-color: #E9DDD6; 75 | background-color: rgba(143,85,54,0.2); 76 | } 77 | -------------------------------------------------------------------------------- /_posts/2013-05-24-algolia-search-offline-2-1-is-out.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search Offline 2.1 is out! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We are pleased to introduce a new version of Algolia Search Offline for iOS, 13 | Android and OS X (Windows versions will come soon). 14 | 15 | Version 2.1 significantly improves the out-of-the box relevance of Algolia 16 | Search. We are now confident we have the best relevance on the market. We will 17 | discuss our ranking approach compared to traditional methods in another post. 18 | For now, the two main improvements offered in this version are: 19 | 20 | * When the query string has one word that is the entire content of a field, we will display it first. You can try it with the "arm" query on our Crunchbase demonstration to get the idea: [http://bit.ly/searchcrunchbase](http://bit.ly/searchcrunchbase) (it uses the same relevance approach). 21 | * More importance is given to proximity than to the order of attributes. For example, the query "managing p" will now match first "Managing Partner" in the "Title" attribute instead of "P" in the "Name" attribute followed by "Managing" in the "Title". This is the case even if the order of the attributes is ["Name", "Title", ...]. 22 | 23 | While you can control ranking with the setRankingOrder method, you will 24 | benefit from these improvements by default. 25 | 26 | This new release also introduces some new features: 27 | 28 | * A way to efficiently serialize latitude/longitude and float values in your custom objects (reduce the size of serialized objects by up to 80%). 29 | * A method to compile an index in an old version format. This is useful when indexes are created server side and then pushed to applications that support old versions of Algolia. 30 | * All characters in tag filters are now supported. 31 | * It is now possible to do a logic OR between tags in filters. For example, you can search all contacts that match the query "paul" and have the tag "friend" OR the tag "classmate". 32 | 33 | We hope you'll like these new features, and as ever, we welcome your feedback! 34 | 35 | 36 | -------------------------------------------------------------------------------- /_posts/2012-11-29-why-autocomplete-in-twitter-on-mobile-sucks.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Why Autocomplete in Twitter Mobile App Sucks 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | [![A better Twitter mobile app experience with Algolia 13 | Search.][1]](https://blog.algolia.com/wp- 14 | content/uploads/2012/11/ScreenshotTwitter.png)Autocomplete is so 15 | intuitive,that it seems like it would be easy to implement. However, most 16 | mobile apps that offer it provide a pretty poor user experience. Let's look at 17 | the Twitter mobile app as an example. 18 | 19 | Twitter proposes autocompletion when you create a new tweet. The idea is to 20 | make suggestions after the '#' and '@' characters. It's actually very nice to 21 | gain time, especially when you're tweeting with a small virtual keyboard... 22 | but it sucks! 23 | 24 | ## Avoid Roundtrips to Server for Autocompletion 25 | 26 | The first reason is that when you're on the go, latency is often too high on 27 | mobile, leading to unusable autocomplete -  except if you're very slow to 28 | type. Twitter developers chose to develop this functionality server-side, 29 | probably with lucene, and to expose it via APIs to their mobile app. That's 30 | good for reusability but not so much for usability... 31 | 32 | ## Beware of the Suggestions Ranking 33 | 34 | The second reason is the ranking is just obscure. Yesterday I sent a tweet to 35 | @cocoanetics and the screenshot on the left shows the suggestions I got when 36 | typing "@c". I would greatly prefer to see Twitter handles before names and it 37 | would never come to my mind to look for "Marie Cecile" with "@c"! 38 | 39 | ## Explain the Matches 40 | 41 | Last but not least there is no visual feedback to show me why the app proposes 42 | a given user. So ok let me think... the 'c' was reffering to "Cécile" in 43 | "Marie-Cécile"! A bit far fetched! 44 | 45 | Now let's imagine the Twitter mobile app with instant autocompletion even 46 | offline, intuitive ranking, and visual feedback... Appealing, isn't it? 47 | Twitter if you listen, check it up, I'm sure you'll love [Algolia 48 | Search][2]! 49 | 50 | 51 | [1]: /algoliasearch-jekyll-hyde/assets/ScreenshotTwitter.png 52 | [2]: http://www.algolia.com/product/ 53 | -------------------------------------------------------------------------------- /_posts/2013-06-17-discover-our-new-java-android-search-as-a-service-api-clients-at-droidcon-paris.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: New Java & Android Search-as-a-Service API Clients at DroidCon Paris! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | Our Search-as-a-Service offer is progressing toward its official release. We 13 | launched our [Java][1] and 14 | [Android ][2]search API 15 | Clients at [DroidCon Paris][3] today! Come to see 16 | us if you're attending! 17 | 18 | And don't forget we also provide developers with an [offline 19 | SDK][4] they can use to search directly on 20 | Android devices with no connection to the network. Developers now have the 21 | perfect tools to build a great search experience both online and offline. 22 | 23 | The Android API Client is based on the Java client and adds support of 24 | asynchronous API calls. You can thus easily trigger a search query from the UI 25 | thread and get the result in a listener without any additional line of code. 26 | You have just to implement the IndexListener interface. 27 | 28 | With these two new clients, we now have eight API Clients released under the 29 | MIT license to simplify integration of Algolia Search as a Service: 30 | 31 | * [Java Client][5] 32 | * [Android Client][6] 33 | * [Ruby client][7] 34 | * [Python client][8] 35 | * [PHP client][9] 36 | * [Javascript client][10] 37 | * [Node.js client][11] 38 | * [Command line client for linux/mac][12] 39 | 40 | Ease of integration just improved again! Your feedback (and pull requests) is 41 | most welcome. 42 | 43 | 44 | [1]: https://github.com/algolia/algoliasearch-client-java 45 | [2]: https://github.com/algolia/algoliasearch-client-android 46 | [3]: http://fr.droidcon.com/2013/ 47 | [4]: http://www.algolia.com/doc/android/ 48 | [5]: https://github.com/algolia/algoliasearch-client-java 49 | [6]: https://github.com/algolia/algoliasearch-client-android 50 | [7]: https://github.com/algolia/algoliasearch-client-ruby 51 | [8]: https://github.com/algolia/algoliasearch-client-python 52 | [9]: https://github.com/algolia/algoliasearch-client-php 53 | [10]: https://github.com/algolia/algoliasearch-client-js 54 | [11]: https://github.com/algolia/algoliasearch-client-node 55 | [12]: https://github.com/algolia/algoliasearch-client-cmd 56 | -------------------------------------------------------------------------------- /_posts/2013-07-18-our-search-as-a-service-offer-has-now-10-api-clients.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Our Search-as-a-Service offer has now 10 API Clients! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We recently reached a new milestone towards the release of our Search as a 13 | Service offer. We're now proud to offer 10 API clients, covering all major 14 | languages. 15 | 16 | Ease of use was a major focus during development. We began by offering a 17 | complete and easy-to-integrate [REST API][1]. 18 | Providing API clients was a logical way to improve ease of use. You can now 19 | quick start and test the engine with your data in a couple of minutes, with no 20 | prior configuration whatsoever. Each API Client is released under the MIT 21 | License and comes with a quick start and complete documentation: 22 | 23 | * [Javascript client][2] 24 | * [Ruby client][3] 25 | * [Python client][4] 26 | * [PHP client][5] 27 | * [iOS and OS X client][6] 28 | * [Android client][7] 29 | * [Java client][8] 30 | * [C# client for Windows, Windows Phone and Silverlight][9] 31 | * [Node.js client][10] 32 | * [Command line client for linux/mac][11] 33 | 34 | This variety of languages and platforms reveals the diversity of our beta 35 | testers: 36 | 37 | * Customer size: from a small startup developing their MVP, to a big social network searching in their 130M+ users. 38 | * Volume: from a few queries to tens of millions per day.  39 | * Technical environments: mobile, desktop, and web apps. 40 | 41 | Interested in trying it out yourself? Ask for an 42 | [invite][12]! 43 | 44 | 45 | [1]: http://docs.algoliav1.apiary.io/ 46 | [2]: https://github.com/algolia/algoliasearch-client-js 47 | [3]: https://github.com/algolia/algoliasearch-client-ruby 48 | [4]: https://github.com/algolia/algoliasearch-client-python 49 | [5]: https://github.com/algolia/algoliasearch-client-php 50 | [6]: https://github.com/algolia/algoliasearch-client-objc 51 | [7]: https://github.com/algolia/algoliasearch-client-android 52 | [8]: https://github.com/algolia/algoliasearch-client-java 53 | [9]: https://github.com/algolia/algoliasearch-client-csharp 54 | [10]: https://github.com/algolia/algoliasearch-client-node 55 | [11]: https://github.com/algolia/algoliasearch-client-cmd 56 | [12]: http://www.algolia.com/pricing/ 57 | -------------------------------------------------------------------------------- /_posts/2015-05-28-we-just-raised-our-series-a-whats-next.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: We just raised our Series A. What's next? 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | You may have heard last week in the [press](https://www.algolia.com/press), 13 | Algolia has just raised an $18.3M Series A round of financing led by Accel 14 | Partners! Philippe Botteri from Accel is joining our board and we can't wait 15 | to benefit from his experience! We are also excited to welcome Lead Edge 16 | Capital and to have received the trust of industry pioneers such as Ilya 17 | Sukhar of Parse, Solomon Hykes of Docker, Erik Swan of Splunk, and Kevin Rose 18 | of Digg. 19 | 20 | This funding represents a major milestone for Algolia. Thanks to the 21 | commitment of our customers our growth last year enabled us to demonstrate a 22 | strong product market fit. We are proud to count many of you as our customers 23 | who have seen in our offer a way to deliver a better search experience, 24 | improving their end-users' engagement. 25 | 26 | We want to change the way people interact with information. We don't want 27 | people to "search" in the traditional type-keyword/hit-enter/wait-for-results 28 | /repeat-until-found-or-abandon way; we want them to intuitively access data. 29 | We strongly believe that search should become a frontend and UX priority. 30 | That's why we focus so much on the two must-haves for building a seamless and 31 | interactive experience: speed which enables updating results as-you-type, and 32 | relevance which ensures that results are good even after only a couple of 33 | keystrokes. 34 | 35 | It's time for us to accelerate on that vision. With the help of this new 36 | funding, we are going to continue investing in our core product, and in making 37 | it available to an ever-expanding community with many new integrations. Search 38 | is everywhere and you can count on us to come up with new creative ways to 39 | delight your users with an outstanding experience. Stay tuned! 40 | 41 | We will also double down on customer success, which has been so important to 42 | our growth. Please make us accountable and let us know if there is anything we 43 | can improve. 44 | 45 | We have embarked on a journey to change the face of user-facing search, 46 | everywhere. Join us, it's going to be fun! 47 | 48 | PS: We're [hiring](https://www.algolia.com/jobs)! 49 | 50 | -------------------------------------------------------------------------------- /_posts/2013-06-24-check-out-the-new-iosos-x-clients-for-our-search-as-a-service-offer.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: New iOS and OS X API clients for our Search-as-a-Service offer 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | [![Build new things with our iOS and OS X API 13 | client.][1]](https://blog.algolia.com/wp- 14 | content/uploads/2013/06/objC.png)One week after releasing our [Java & Android 15 | clients][2], we are happy to release our [iOS and 16 | OS X API][3] clients for 17 | our search-as-a-service offer. 18 | 19 | In order to ease the setup, we support Cocoapods. Installation of the client 20 | just requires one line in your Podfile: 21 | 22 | `pod 'AlgoliaSearch-Client', '~> 1.0` 23 | 24 | And don't forget we also provide developers with an [offline 25 | SDK][4] that they can use to search directly on 26 | iOS devices with no connection to the network. Developers now  have the 27 | perfect tools to build a great search experience both online and offline. 28 | 29 | With this new client, we now have API Clients for the most popular languages 30 | and platforms. They are all released under the MIT license and available on 31 | our Github account: 32 | 33 | * [iOS and OS X client][5] 34 | * [Java client][6] 35 | * [Android client][7] 36 | * [Ruby client][8] 37 | * [Python client][9] 38 | * [PHP client][10] 39 | * [Javascript client][11] 40 | * [Node.js client][12] 41 | * [Command line client for linux/mac][13] 42 | 43 | Ease of integration just improved again! Your feedback (and pull requests) is 44 | most welcome. 45 | 46 | 47 | [1]: /algoliasearch-jekyll-hyde/assets/objC.png 48 | [2]: http://blog.algolia.com/discover-our-new-java-android-search-as-a-service-api-clients-at-droidcon-paris/ 49 | [3]: https://github.com/algolia/algoliasearch-client-objc 50 | [4]: http://www.algolia.com/doc/ios/ 51 | [5]: https://github.com/algolia/algoliasearch-client-objc 52 | [6]: https://github.com/algolia/algoliasearch-client-java 53 | [7]: https://github.com/algolia/algoliasearch-client-android 54 | [8]: https://github.com/algolia/algoliasearch-client-ruby 55 | [9]: https://github.com/algolia/algoliasearch-client-python 56 | [10]: https://github.com/algolia/algoliasearch-client-php 57 | [11]: https://github.com/algolia/algoliasearch-client-js 58 | [12]: https://github.com/algolia/algoliasearch-client-node 59 | [13]: https://github.com/algolia/algoliasearch-client-cmd 60 | -------------------------------------------------------------------------------- /_posts/2012-12-28-simplicity-is-the-most-complex-feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Simplicity is the most Complex Feature! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | I've been convinced for a long time that simplicity is the most important 13 | property of a product. Long-gone are the 90s when a product was admired for 14 | its complexity. But I am also convinced that this is the most complex property 15 | to achieve and maintain as time passes by. 16 | 17 | A good example of an over-complex product is Atlassian JIRA, a bug tracker 18 | that also do scrum management and plenty of other things via dozens of 19 | plugins. It's basically a toolbox to create the bug tracker adapted to your 20 | company. 21 | 22 | In my previous job, I faced an uncomfortable situation with JIRA because of 23 | its complexity. We used it for bug tracking and scrum management and I tried 24 | to upgrade our old version to the latest one. After some long hours to upgrade 25 | our setup on a test server, I finally got the latest version working but most 26 | of our installed plugins were not available anymore because the authors did 27 | not port their plugins to the new plugin API. Of course each plugin was there 28 | for a reason and I was in a tricky situation: keep the old version with 29 | security issues or upgrade to a new version without our plugins. 30 | 31 | But it was far more vicious: There were about 10 versions between our old 32 | version and the latest one, and I didn't find any of these versions working 33 | with our set of plugins! In the end, we were forced to keep our old version. 34 | 35 | Atlassian forgot the most important lesson, even with a toolbox: simplicity! 36 | This is probably more expensive for them to keep plugin backward 37 | compatibility, but I would prefer for them to not have any plugin rather than 38 | breaking compatibility at each release. The final system is too complex to be 39 | maintainable and our final decision was to stop paying for JIRA support since 40 | we were blocked with an old release. It is even bad for their business. 41 | 42 | You should be focused on simplicity for your users even it this results in 43 | more complexity for you (like maintaining backward compatibility)! As this 44 | post is strongly related to backward compatibility of API, I encourage you to 45 | reread this famous post of Jeol Spolsky: [How microsoft lost the API 46 | war][1]. 47 | 48 | 49 | [1]: http://www.joelonsoftware.com/articles/APIWar.html 50 | -------------------------------------------------------------------------------- /_posts/2014-04-09-dealing-openssl-security-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Dealing with OpenSSL Heartbleed Vulnerability 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | Yesterday, the OpenSSL project released an update to fix a serious security 13 | issue. This vulnerability was disclosed in [CVE-2014-0160](https://web.nvd.nis 14 | t.gov/view/vuln/detail?vulnId=CVE-2014-0160) and is more widely known as the 15 | [Heartbleed vulnerability](http://heartbleed.com/). It allows an attacker to 16 | grab the content in memory on a server. Given the widespread use of OpenSSL 17 | and the versions affected, this vulnerability affects a large percentage of 18 | services on the internet. 19 | 20 | Once the exploit was revealed, we responded immediately: All Algolia services 21 | were secured the same day, by 3pm PDT on Monday, April 7th. The fix was 22 | applied on all our API servers and our website. We then generated new SSL 23 | certificates with a new private key. 24 | 25 | Our website is also dependent on Amazon Elastic Load Balance, which was 26 | affected by this issue and [updated](http://aws.amazon.com/security/security- 27 | bulletins/aws-services-updated-to-address-openssl-vulnerability/) later on 28 | Tuesday, April 8th. We then changed the website certificate. 29 | 30 | **All Algolia servers are no longer exposed to this vulnerability.** 31 | 32 | ## Your credentials 33 | 34 | We took the time to analyze the past activity on our servers and did not find 35 | any suspicious activity. We are confident that no credentials were leaked. 36 | However, given that this exploit existed in the wild for such a long time, it 37 | is possible that an attacker could have stolen API keys or passwords without 38 | our knowledge. As a result, we recommend that all Algolia users change the 39 | passwords on their accounts. We also recommend that you reset your Algolia 40 | administration API key, which you can do at the bottom of the "Credential" 41 | section in your dashboard. Be careful to update it everywhere you use it in 42 | your code (once you have patched your SSL library if you too are vulnerable). 43 | 44 | ## Security at Algolia 45 | 46 | The safety and security of our customer data are our highest priorities. We 47 | are continuing to monitor the situation and will respond rapidly to any other 48 | potential threats that may be discovered. 49 | 50 | If you have any questions or concerns, please email us directly at 51 | [security@algolia.com](mailto:security@algolia.com) 52 | 53 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | algoliasearch (1.8.1) 5 | httpclient (~> 2.7.1) 6 | json (>= 1.5.1) 7 | algoliasearch-jekyll (0.7.0) 8 | algoliasearch (~> 1.4) 9 | appraisal (~> 2.1.0) 10 | awesome_print (~> 1.6) 11 | json (~> 1.8) 12 | nokogiri (~> 1.6) 13 | verbal_expressions (~> 0.1.5) 14 | appraisal (2.1.0) 15 | bundler 16 | rake 17 | thor (>= 0.14.0) 18 | awesome_print (1.6.1) 19 | blankslate (2.1.2.4) 20 | celluloid (0.16.0) 21 | timers (~> 4.0.0) 22 | classifier-reborn (2.0.3) 23 | fast-stemmer (~> 1.0) 24 | coffee-script (2.4.1) 25 | coffee-script-source 26 | execjs 27 | coffee-script-source (1.9.1.1) 28 | colorator (0.1) 29 | execjs (2.5.2) 30 | fast-stemmer (1.0.2) 31 | ffi (1.9.10) 32 | hitimes (1.2.2) 33 | httpclient (2.7.2) 34 | jekyll (2.5.3) 35 | classifier-reborn (~> 2.0) 36 | colorator (~> 0.1) 37 | jekyll-coffeescript (~> 1.0) 38 | jekyll-gist (~> 1.0) 39 | jekyll-paginate (~> 1.0) 40 | jekyll-sass-converter (~> 1.0) 41 | jekyll-watch (~> 1.1) 42 | kramdown (~> 1.3) 43 | liquid (~> 2.6.1) 44 | mercenary (~> 0.3.3) 45 | pygments.rb (~> 0.6.0) 46 | redcarpet (~> 3.1) 47 | safe_yaml (~> 1.0) 48 | toml (~> 0.1.0) 49 | jekyll-coffeescript (1.0.1) 50 | coffee-script (~> 2.2) 51 | jekyll-gist (1.2.1) 52 | jekyll-paginate (1.1.0) 53 | jekyll-sass-converter (1.3.0) 54 | sass (~> 3.2) 55 | jekyll-watch (1.2.1) 56 | listen (~> 2.7) 57 | json (1.8.3) 58 | kramdown (1.8.0) 59 | liquid (2.6.3) 60 | listen (2.10.1) 61 | celluloid (~> 0.16.0) 62 | rb-fsevent (>= 0.9.3) 63 | rb-inotify (>= 0.9) 64 | mercenary (0.3.5) 65 | mini_portile2 (2.0.0) 66 | nokogiri (1.6.7.2) 67 | mini_portile2 (~> 2.0.0.rc2) 68 | parslet (1.5.0) 69 | blankslate (~> 2.0) 70 | posix-spawn (0.3.11) 71 | pygments.rb (0.6.3) 72 | posix-spawn (~> 0.3.6) 73 | yajl-ruby (~> 1.2.0) 74 | rake (11.1.2) 75 | rb-fsevent (0.9.5) 76 | rb-inotify (0.9.5) 77 | ffi (>= 0.5.0) 78 | redcarpet (3.3.2) 79 | safe_yaml (1.0.4) 80 | sass (3.4.16) 81 | thor (0.19.1) 82 | timers (4.0.1) 83 | hitimes 84 | toml (0.1.2) 85 | parslet (~> 1.5.0) 86 | verbal_expressions (0.1.5) 87 | yajl-ruby (1.2.1) 88 | 89 | PLATFORMS 90 | ruby 91 | 92 | DEPENDENCIES 93 | algoliasearch-jekyll (~> 0.7) 94 | jekyll (~> 2.5) 95 | 96 | BUNDLED WITH 97 | 1.12.5 98 | -------------------------------------------------------------------------------- /_posts/2012-08-01-free-marketing-wwdc2012.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Free marketing @ WWDC 2012! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Let's rewind time a bit. Back in June was the famous Apple Developer 13 | Conference, aka WWDC 2012. Algolia didn't even have a website at that time, 14 | but what we did have is a friend who would attend: 15 | [Thomas][1]! That was an occasion we could not 16 | pass! 17 | 18 | Thomas agreed to speak about us a bit and to invite people to visit our 19 | website. That simple action defined our deadline to have a website up and 20 | running. But wait! That would be better if people could also find the site 21 | when Googling our company name. That meant a few days to allow for indexing... 22 | and a tight deadline! 23 | 24 | About two weeks of brainstorming and implementation went into the [web 25 | site][2]. Our goal was to have a clear presentation of 26 | our mobile search lib... and to be found on Google! And you know what? It's 27 | damn difficult to do so in so short a time! Our site was up and running two 28 | days before the conf and we immediately submitted it to all search engines. 29 | Unfortunately we were not in first position when Googling for Algolia :( 30 | 31 | Fortunately, things improved without delay. Two actions were particularly 32 | useful in helping our search rankings: our participation to the [Evernote 33 | DevCup][3], 34 | and our blog opening! We quickly got the pole position for our brand and 35 | started to rank well for some key queries like [mobile instant 36 | suggest][4] :) 37 | 38 | We also thought about creating some posters that explain our technology, but 39 | eventually we were so concentrated on the web site that we passed. 40 | 41 | Result: Some awareness, one subscription to beta and more importantly, a 42 | running website! Next marketing related action would be to have a demo ready 43 | for LeWeb in London, but that's [another story][5]... 44 | 45 | And here is what you could see on WWDC whiteboards: 46 | 47 | [![WWDC Message 1][6]](https://blog.algolia.com/wp- 48 | content/uploads/2012/07/wwdc1.jpg) 49 | 50 | [![WWDC Message 2][7]](https://blog.algolia.com/wp- 51 | content/uploads/2012/07/wwdc2.jpg)Thank you again for your help Thomas! 52 | 53 | 54 | [1]: https://twitter.com/sarfata/ 55 | [2]: http://www.algolia.com 56 | [3]: http://blog.algolia.com/were-participating-to-the-evernote-devcup/ 57 | [4]: https://www.google.com/search?q=mobile+instant+suggest 58 | [5]: http://blog.algolia.com/great-discussions-at-leweb12-london/ 59 | [6]: /algoliasearch-jekyll-hyde/assets/wwdc1.jpg 60 | [7]: /algoliasearch-jekyll-hyde/assets/wwdc2.jpg 61 | -------------------------------------------------------------------------------- /_posts/2012-11-12-the-ordeal-of-obtaining-an-apple-developer-professional-account.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: The Ordeal of Obtaining an Apple Developer Professional Account 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | I recently had a pretty bad user experience when I upgraded my personal Apple 13 | developer account into a professional one. 14 | 15 | To sum things up, we officially created Algolia in early October and I decided 16 | to convert my personal Apple Developer Account in order to have our 17 | applications published under the "Algolia" name. This process is not available 18 | online, but after a quick call, people at Apple sent me the link for the 19 | process. It is actually pretty simple: They just need you to fill some 20 | information about your company and to accept their EULA. 21 | 22 | Well, actually some of this information was pretty obscure. They needed our 23 | D-U-N-S® number... Some time ago, Apple was doing the job of checking that 24 | your company is a real one, but they decided to delegate this job to an 25 | external company (D&B). It looks like a good idea, doesn't it? After all this 26 | is not their core competency and D&B may be doing a really good job for this 27 | task... 28 | 29 | The short answer is no, it wasn't a good idea at all! I started to check how 30 | to get this famous D-U-N-S® and after some time to understand the antiquated 31 | website of D&B, I finally found the contact address. One week later I finally 32 | received our D-U-N-S®. But that's not all, Apple then asked us to wait for the 33 | synchronization between D&B and Apple... which can take up to 14days! 34 | 35 | Hey guys, I don't know if you realize how this is ridiculous to wait 14 days 36 | for a simple database synchronization! You have just no idea what 14 days 37 | means for a young startup :) 38 | 39 | As you can imagine, I was already quite frustrated... but this was just the 40 | beginning. After the 14 days, Apple recognized the DUNS number... but a field 41 | was missing. They didn't have the legal type of our company. They then asked 42 | me to contact D&B and a new nightmare started at this level: D&B was saying 43 | that the entry was correct while Apple was asking me to contact D&B to correct 44 | the entry! There's nothing worst than to stand be between two big companies 45 | who pass the buck to each other. 46 | 47 | Hopefully Apple was far smarter than D&B and they finally accepted to bypass 48 | the missing field if I sent them directly our legal documents. 49 | 50 | It is crucial to pay attention to all your users' problems and solve them as 51 | soon as possible. They may sometimes look like details to you, but that's what 52 | your customers will remember about your company. Of course, we try to apply 53 | this lesson to ourselves. Feel free to tell us if something's going wrong! 54 | 55 | 56 | -------------------------------------------------------------------------------- /_posts/2014-03-17-caused-todays-performance-issues-europe-will-happen.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: What Caused Today's Search Performance Issues In Europe and Why It Will Not Happen Again 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | During a few hours on March 17th you may have noticed longer response times 13 | for some of the queries sent by your users. 14 | 15 | ![Slower than average search 16 | performance](/algoliasearch-jekyll-hyde/assets/slowerthanaverage.png) 17 | 18 | _Average latency for one of our European clusters on March 17th_ 19 | 20 | As you can see above, our slowest average response time (measured from the 21 | user's browser to our servers and back to the user's browser) on one of our 22 | European clusters peaked at 858ms. On a normal day, this peak is usually no 23 | higher than 55ms. 24 | 25 | This was clearly not a normal behavior for our API, so we investigated. 26 | 27 | ## How indexing and search calls share the resource 28 | 29 | Each cluster handles two kinds of calls on our REST API: the ones to build and 30 | modify the indexes (Writes) and the ones to answer users' queries (Search). 31 | The resources of each cluster are shared between these two uses. As Write 32 | operations are far more expensive than Search calls, we designed our API so 33 | that indexing should never use more than 10% of these resources. 34 | 35 | Up until now, we used to set a limitation on the rate of Writes _per HTTP 36 | connection_. There was no such limit for queries (Search); We simply limited 37 | Write calls to keep search quality. To avoid reaching the Write rate limit too 38 | quickly, we recommended users to Write by batching up to 1GB of operations per 39 | call, rather than sending them one by one. (A batch, for example, could be 40 | adding 1M products to an index on a single network call.) A loophole in this 41 | recommendation was the origin of yesterday's issues. 42 | 43 | What happened yesterday is that on one of our European clusters, one customer 44 | pushed so many unbatched indexing calls from different HTTP connections that 45 | they massively outnumbered the search calls of the other users on the cluster. 46 | 47 | This eventually slowed down the average response time for the queries on this 48 | cluster, impacting our usual search performance. 49 | 50 | ## The Solution 51 | 52 | As of today, we now set the rate limit of Writes _per account_ and not per 53 | HTTP connection. It prevents anyone from using multiple connections to bypass 54 | this Write rate limit. This also implies that customers who want to push a lot 55 | of operations in a short time simply need to send their calls in batches. 56 | 57 | How would you batch your calls? The explanation is in our documentation. See 58 | here for an example with our Ruby client: [https://github.com/algolia 59 | /algoliasearch-client-ruby#batch-writes](https://github.com/algolia 60 | /algoliasearch-client-ruby#batch-writes) 61 | 62 | 63 | -------------------------------------------------------------------------------- /_posts/2014-08-21-algolia-for-realtime-expense-reporting.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: How Abacus Leverages Algolia for Realtime Expense Reporting 4 | author: 5 | login: kevin 6 | email: shipowlata@gmail.com 7 | display_name: kevin 8 | first_name: Kevin 9 | last_name: Granger 10 | --- 11 | 12 | When one thinks of expense reporting, speed is far from the first descriptor 13 | that comes to mind. Companies spend a substantial amount of time tracking 14 | expenses, while employees linger in paperwork purgatory, wondering when they 15 | will be reimbursed for their work-related charges. That's why Abacus has made 16 | it their mission to simplify expense management so that it occurs in real 17 | time. Their creative implementation of Algolia helps make it happen. 18 | 19 | Abacus is a mobile and desktop application that allows small businesses to 20 | track and verify expenses on the go. Employees can upload a photo of their 21 | receipt on the mobile app, and Abacus takes care of the rest. "For each 22 | expense, we have a lot of data. We have the person who expensed it, the amount 23 | of the expense, the time, and where it took place. We also have a lot of 24 | metadata. For example, if you went out to breakfast, we pull in the name of 25 | the restaurant, the address, the URL of the merchant. There's tags and 26 | categories and so on," explains Ted Power, Co-Founder of Abacus. "And we 27 | wanted to make all of that searchable." 28 | 29 | [![Abacus Algolia][1]](https://blog.algolia.com/wp- 30 | content/uploads/2014/08/Screen-Shot-2014-08-14-at-16.37.25.png) 31 | 32 | To make all of that data accessible and interpretable for a financial manager, 33 | Abacus turned to our API. "Algolia made it super easy for us to get faceted, 34 | advanced search options. If you are the finance person at your company, you 35 | can basically say 'Show me all of the expenses over $50,' or 'Show me all the 36 | expenses that don't have a receipt.' You can look at expenses for one person 37 | or one category, like travel. You can even pivot off of 8 of these different 38 | things. Algolia makes it super easy to do," says Power. This accelerates the 39 | process of expense verification and approval. "It's good search. We have tags 40 | like 'car rental' on auto-complete, for example. That's all Algolia." 41 | 42 | Power adds that a "great implementation experience" was especially beneficial 43 | for the start up. "It's the kind of thing that would have taken ages to build 44 | from scratch." Co-Founder Joshua Halickman chimed in: "Being able to get up 45 | and off the ground really quickly was great. In general, I love the speed. 46 | Crazy fast. Really nice." 47 | 48 | [![Abacus Algolia][2]](https://blog.algolia.com/wp- 49 | content/uploads/2014/08/Screen-Shot-2014-08-14-at-16.38.34.png) 50 | 51 | _Images courtesy of Abacus. Learn more _[_on their 52 | website._][3] 53 | 54 | 55 | [1]: /algoliasearch-jekyll-hyde/assets/Screen-Shot-2014-08-14-at-16.37.25.png 56 | [2]: /algoliasearch-jekyll-hyde/assets/Screen-Shot-2014-08-14-at-16.38.34.png 57 | [3]: https://www.abacus.com 58 | -------------------------------------------------------------------------------- /_posts/2013-01-28-sharypic-benefits-from-algolia-search.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Sharypic benefits from Algolia Search! 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Demonstrating how Algolia Search functions in the wild, in this post we will 13 | discuss a recent integration with [sharypic][1], another 14 | Paris-based startup focussed on photo sharing at events. 15 | 16 | Sharypic is a [web][2] and [mobile 17 | app][3] dedicated to collaborative photo sharing, focused on 18 | enabling users to easily gather photos from attendees during and after an 19 | event. The platform allows users to collect and share photos from all devices, 20 | including mobiles (via Twitter and Instagram), cameras, and computers, and 21 | from already existing albums on Facebook, Picassa, and Flickr. One of their 22 | killer features is the ability to stream photos to a live PhotoWall at the 23 | venue and to an embeddable slideshow widget. This increases engagement both 24 | with event attendees and with an online audience. On sharypic one of the 25 | primary ways that users discover events is via a search bar, in addition to 26 | pages highlighting recent and popular events. 27 | 28 | 29 | [![Sharypic][4]](http://blog.algolia.com/sharypic-benefits- 30 | from-algolia-search/sharypic/)The existing mobile search function relied on 31 | users accurately typing an event's name into the search field, which limited 32 | the results (especially on smartphones where typos are common). By integrating 33 | Algolia Search into the mobile app, sharypic users can now type just a few 34 | letters of a search term, or enter it incorrectly ('pqris' instead of 35 | 'Paris'), and the results will display the corrected term within event names, 36 | locations, descriptions, or hashtags. 37 | 38 | Martin Fourcade, one of sharypic's co-founders, said "For our users, it's 39 | exactly what we needed. They can show the best photos of their events to 40 | friends without bugging their smartphone and whining about the internet 41 | connection. I'm lazy when it comes to typing on my smartphone, impatient when 42 | it comes to waiting for server responses... now everything is done with a few 43 | keystrokes!" 44 | 45 | Sharypic's other co-founder François-Joseph Grimault hopes that this new 46 | intelligent search will enable users to find specific content more easily, 47 | possibly leading to increased exploration on the platform. Time will tell how 48 | the new search feature affects user behaviour, but reducing user frustration 49 | through quick and efficient search is a step in the right direction. 50 | 51 | _[Download][5] the latest version of the sharypic app, including 52 | integrated Algolia Search, and have fun with photo sharing at your next 53 | event!_ 54 | 55 | 56 | [1]: http://sharypic.com 57 | [2]: http://www.sharypic.com/ 58 | [3]: https://itunes.apple.com/us/app/sharypic-event-photo-sharing/id490922939?mt=8 59 | [4]: /algoliasearch-jekyll-hyde/assets/Sharypic.png 60 | [5]: https://itunes.apple.com/us/app/sharypic-event-photo-sharing/id490922939?mt=8 61 | -------------------------------------------------------------------------------- /_posts/2012-07-03-great-discussions-at-leweb12-london.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Great discussions at LeWeb'12 London 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | On June 19 & 20th, I had the chance to participate to [LeWeb 2012 13 | London][1] edition. This year theme was "Faster than 14 | Real Time" and we had an impressive list of speakers! But the true value of 15 | LeWeb is elsewhere: It's in the 1283 people from 52 countries who were present 16 | and with whom you could network! 17 | 18 | They chose [Presdo Match][2] to help people meet and 19 | honestly... this tool would benefit from some improvements, especially a 20 | mobile version! Still, I was able to find no fewer than 100 participants 21 | having the "mobile" keyword in their profile and, from there, organize a 22 | handful of meetings. Thanks to all of you who accepted to meet me or whom I 23 | met unplanned, with a special thanks to [Paul Ardeleanu][3], 24 | [Gora Sudindranath][4], [Lindsey C. 25 | Holmes][5], [Marius 26 | Rostad][6], [Kevin 27 | McDonagh][7] and [Alexandre 28 | Delivet][8] for their precious feedbacks about 29 | Algolia. 30 | 31 | [caption id="attachment_82" align="alignright" width="180"][![Cities Suggest 32 | Demo][9]](https://blog.algolia.com/wp- 33 | content/uploads/2012/07/citiessuggest-leweb.png) Cities Suggest demo @ 34 | LeWeb[/caption] 35 | 36 | I had the opportunity to do the very first demonstrations of our instant 37 | suggest lib, and that was both exhilarating and frustrating! We chose to 38 | develop a small proof of concept suggesting city names from anywhere in the 39 | world. Here's what I learned: 40 | 41 | * A demo is better than many words! Even if most people knew what I meant by "google instant suggest", the demo was key in clarifying our offering. 42 | * Even if we chose cities because it was easy to demonstrate (thanks to the geonames database), it can be interesting in itself! 43 | * 100ms seemed a pretty fast response time in our initial testing, but it's actually way too slow to have a smooth user experience. 44 | 45 | Over all that was a very good experience, and I came back with a few 46 | improvements to implement (most coming from my own frustration showing the 47 | demo while the feedback was actually very positive!) 48 | 49 | The most important piece of feedback was about the perceived sluggishness of 50 | the app. We decided to implement an asynchronous version of the lib. Beware, 51 | it actually comes with a drawback for our users; It's significantly more 52 | difficult to integrate. But it did not take long for us to decide it was the 53 | way to go, since the perception of speed is so natural that the benefit far 54 | outweighs the longer integration code. We'll now work on simplifying it! 55 | 56 | We'll soon do a post about this demo. In the meantime, stay tuned! 57 | 58 | 59 | [1]: http://london.leweb.co/ 60 | [2]: http://match.presdo.com/ 61 | [3]: http://hello24.com/ 62 | [4]: http://www.linkedin.com/in/goras 63 | [5]: http://twitter.com/lindseycholmes 64 | [6]: https://twitter.com/#!/portart 65 | [7]: https://twitter.com/#!/kevinmcdonagh 66 | [8]: http://www.alexdelivet.com/ 67 | [9]: /algoliasearch-jekyll-hyde/assets/citiessuggest-leweb-180x300.png 68 | -------------------------------------------------------------------------------- /_posts/2013-05-21-instant-search-on-ios-app-store.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Instant Search through the iOS App Store 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | [![App Store][1]](http://www.algolia.com/demo/appstore/)If 13 | you have an iOS device you probably search the App Store regularly for apps 14 | you have heard about. Following the recent AppGratis ousting from the 15 | AppStore, there were claims that the App Store search function is broken. That 16 | was our trigger to try something ourselves that could serve both as a good 17 | demo and help us to explore new use-cases! [Check it 18 | out!][2] 19 | 20 | ## Obtaining the data 21 | 22 | So first, we needed to obtain the data. Apple provides an API to accredited 23 | developers, but given that this can be fairly difficult to attain, we 24 | considered other solutions. Crawling was our second option, but that approach 25 | has its own caveats: you need to play nice with their servers or you get 26 | banned (very) quickly. We didn't want to spend days implementing our own 27 | distributed crawler and definitely didn't have the time to do a sequential and 28 | polite crawling. It is in these moments that you are glad to have an external 29 | team to do the job for you. 30 | 31 | We chose to perform the crawling with [grepsr][3], a 32 | service we found via a simple Google search. After a few exchanges we were 33 | confident that they were up to the job, and they ended up exceeding our 34 | expectations. Not only did they crawl the pages, but they also scraped the 35 | apps' attributes to provide us with a clean dataset. After a few days we had 36 | our full dataset ready for indexing. 37 | 38 | ## Indexing 39 | 40 | Indexing was actually the easiest part. We uploaded the data in JSON format to 41 | our backend and used these simple settings: 42 | 43 | 44 | { 45 | "attributesToIndex": ["name", "author", "category"], 46 | "attributesToHighlight": ["name", "author","category", "description"], 47 | "customRanking": ["desc(score)", "asc(name)"] 48 | } 49 | 50 | Our dataset included the 630k applications currently published in the US app 51 | store. For each of them we index the name, author and category, but also 52 | include their icon, score, and description for display and sorting. 53 | 54 | The score is a simple computation between the number of comments and the 55 | average ranking: `rating * log2(nbComments) * 10000`. 56 | 57 | ## Searching 58 | 59 | Similar to our [CrunchBase demo][4], we trigger a query directly after page load and again after each 60 | keystroke. Additional queries are automatically triggered when scrolling to 61 | the bottom of the page. 62 | 63 | [Guillaume Esquevin][5] did the front-end for us 64 | and a first version of the demo was up and ready in no time. Take a look at 65 | how simple and fast it is to search for an app! 66 | 67 | In the end we did receive access to the Apple API, which we may use later on 68 | to keep the data in sync. 69 | 70 | 71 | [1]: /algoliasearch-jekyll-hyde/assets/appstore.jpg 72 | [2]: http://www.algolia.com/demo/appstore/ 73 | [3]: http://www.grepsr.com 74 | [4]: http://blog.algolia.com/instant-search-on-crunchbase/ 75 | [5]: http://platypus-creation.com 76 | -------------------------------------------------------------------------------- /_posts/2015-04-20-quadrant-io-solves-the-frustration-of-economic-data-search-with-algolia.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Quadrant.io solves the frustration of economic data search with Algolia 4 | author: 5 | login: marie-auxille 6 | email: marie-auxille.denis@algolia.com 7 | display_name: Marie-Auxille Denis 8 | first_name: Marie-Auxille 9 | last_name: Denis 10 | --- 11 | 12 | Browsing the cumbersome interfaces of government websites in the lookout for 13 | reliable data can be a very frustrating experience. It's full of specific 14 | terminology and there's not a government website that looks the same. It's 15 | like each time you want to use a car, you have to learn to drive all over 16 | again. 17 | 18 | ## Connect ideas with economic insight in a matter of seconds 19 | 20 | That's what [Quadrant.io][1] is for. 21 | Solving the frustration anyone who makes their points with facts encounters 22 | when routinely performing data search. It offers them with the fastest and 23 | easiest way to find and chart economic data from trusted sources. 24 | Acknowledging that it can quickly become a nightmare to find reliable 25 | information scattered all over the web, 26 | [Quadrant][2] is on a mission to **shorten 27 | any data search to seconds**. **So that data users can spend less time finding 28 | data and more time analysing it.** 29 | 30 | To keep this promise, Quadrant provides data users with an intuitive platform 31 | that aggregates more than 400,000 indicators from over 1,000 public sources, 32 | and keep them updated in real time. **A powerful search allowing any user to 33 | find exactly what they are looking for even if they do not use economists' 34 | jargon** is a must-have functionality in such a service. 35 | 36 | And Algolia stood out as the perfect search solution for Quadrant. 37 | 38 | ## Provide a rewarding search experience to End-Users 39 | 40 | First because of** the rewarding search experience it allows to deliver to its 41 | users.** 42 | 43 | Algolia surfaces data relevant to people's search in milliseconds, showing the 44 | most appropriate results from the very first keystroke. 45 | 46 | ![searchquadrant1][3] 47 | 48 | It enables to search across different entry points corresponding to the 49 | different attributes describing data series (release date, source). 50 | 51 | ![Screen-Shot-2015-04-13-at-18.06.28][4] 52 | 53 | That wasn't possible with other search solutions they tested before. After 54 | implementing Algolia, Quadrant.io received nice feedback from their customers, 55 | saying that "search was much more comfortable, much more intuitive". 56 | 57 | ## Algolia empowers anyone to be a search expert 58 | 59 | Second, because of the simple experience it is to deploy Algolia on their web 60 | app. Back-end documentation and customer support was a major help: it took 61 | them __less than a week to implement instant search__, including relevance 62 | tweaking and front-end development. As Dane Vrabrac, co-founder of Quadrant.io 63 | concluded "with Algolia, it's awesome all the stuff I can do as a non 64 | developer !" 65 | 66 | _Images courtesy of Quadrant.io. Learn more on their 67 | [website][5]._ 68 | 69 | 70 | [1]: https://www.quadrant.io/find/#/search 71 | [2]: https://www.quadrant.io/find/#/search 72 | [3]: /algoliasearch-jekyll-hyde/assets/searchquadrant1.gif 73 | [4]: /algoliasearch-jekyll-hyde/assets/Screen-Shot-2015-04-13-at-18.06.28.png 74 | [5]: https://quadrant.io/ 75 | -------------------------------------------------------------------------------- /_posts/2014-01-29-postmortem-todays-8min-indexing-downtime.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Postmortem of today's 8min indexing downtime 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | Today (Jan 29) at 9:30pm UTC, our service experienced an 8 minute partial 13 | outage during which we have rejected many write operations sent to the 14 | indexing API (exactly 2841 calls). We call it "partial" as all search queries 15 | have been honored without any problem. For end-users, there was no visible 16 | problem. 17 | 18 | Transparency is in our DNA: this outage is visible on our status page 19 | ([status.algolia.com][1]) but we also wanted to share 20 | with you all the details of the outage and more importantly the details of our 21 | response. 22 | 23 | ## The alert 24 | 25 | This morning I fixed a rare bug in indexing complex hierarchical objects. This 26 | fix successfully passed all the tests after development. We have 6000+ unit 27 | tests and asserts, and 200+ non regression tests. So I felt confident when I 28 | entered the deploy password in our automatic deployment script. 29 | 30 | A few seconds after, I started to receive a lot of text messages on my 31 | cellphone. 32 | 33 | We developed several embedded probes to detect all kinds of problems and alert 34 | us using Twilio and Hipchat APIs. They detect for example: 35 | 36 | * a process that restart 37 | * an unusually long query 38 | * a write failure 39 | * a low memory warning 40 | * a low disk-free warning 41 | * etc. 42 | 43 | In case embedded probes can't run, other external probes run once a minute 44 | from an independent datacenter (Google App Engine). These also automatically 45 | update our status page when a problem impacts the quality of service. 46 | 47 | Our indexing processes were crash looping. I immediately decided to rollback 48 | to the previous version. 49 | 50 | ## The rollback 51 | 52 | Until today, our standard rollback process was to revert the commit, launch 53 | the recompile and finally deploy. This is long, very long when your know that 54 | you have an outage in production. The rollback took about 5 minutes in total 55 | out of the 8 minutes. 56 | 57 | ## How we will avoid this situation in the future 58 | 59 | Even if the outage was on a relatively small period of time, we still believe 60 | it was too long. To make sure this will not happen again: 61 | 62 | * We have added a very fast rollback process in the way of a simple press button like the one we use to deploy. An automatic deploy is nice, but an automatic rollback is actually more critical when needed! 63 | * Starting now, we will deploy new versions of the service on clusters hosting community projects such as Hacker News Search or Twitter handle search, before pushing the update on clusters hosting paying customers. Having real traffic is key to detect some types of errors. Unit-tests & non-regression tests cannot catch everything. 64 | * And of course we added non-regression tests for this specific error. 65 | 66 | ## Conclusion 67 | 68 | Having all these probes in our infrastructure was key to detect today's 69 | problem and react quickly. In real conditions, it proved not to be enough. In 70 | a few hours we have implemented a much better way to handle this kind of 71 | situation. The quality of our service is our top priority. Thank you for your 72 | support! 73 | 74 | 75 | [1]: http://status.algolia.com 76 | -------------------------------------------------------------------------------- /_posts/2012-12-20-windows-8-beta-is-out-algolia-search-now-available-for-microsoft-desktops-and-tablets.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Search is now in Beta for Microsoft Windows 8 Desktops and Tablets 4 | - The Algolia Blog 5 | author: 6 | login: nicolas 7 | email: nicolas@algolia.com 8 | display_name: nicolas 9 | first_name: Nicolas 10 | last_name: Dessaigne 11 | --- 12 | 13 | You may have been expecting Windows Phone 8 as our next platform of choice, 14 | but we preferred to go Windows 8 first! With more than 40M sold in a month, 15 | let's say it's a slightly more interesting market for now. 16 | 17 | ## Windows 8: Our First Move to the Desktop 18 | 19 | Yes, desktop apps are not as dead as many people think, especially now that 20 | both Mac OSX and Windows come with their app stores. Sure, Windows is now 21 | running on tablets - and we also support them - but it will take time before 22 | they surpass desktops. 23 | 24 | What's more, the new Windows 8 Metro Modern UI includes a charm bar 25 | with search and autocompletion as the number one feature. Microsoft actually 26 | provides an interface to ease application integration in the charm search 27 | bar... but no library to help you implement it. No problem, here comes Algolia 28 | Search for Windows 8! 29 | 30 | ## Awesome Features for Your Apps 31 | 32 | The core technology is exactly the same as the one in our iOS and Android 33 | versions. That means you'll get exactly the same exceptional performance... 34 | well probably even better depending of the hardware you're running on. You'll 35 | also get instant visual feedback, typo-tolerance and multiple attributes 36 | support! See all the features on our 37 | [website][1]. 38 | 39 | ## Easy to Integrate in your Language of Choice 40 | 41 | Check out the dedicated [tutorials][2]! The 42 | Algolia Search library has been designed to work directly on the platform. 43 | That means you can use it in whatever language you prefer, be it JS or one of 44 | the .Net choices (C#, VB, C++). The tutorials are available in both JS and in 45 | C#. 46 | 47 | Moreover it is fully compatible with Microsoft **Search Contracts**. It just 48 | became child's play to integrate Search in your Windows app! 49 | 50 | ## Hey Microsoft, There are a Couple of Features You Could Improve 51 | 52 | Windows 8 is clearly a step in the right direction, but we encountered some 53 | problems we didn't expect! 54 | 55 | First is the multi-arch support. While it's just straightforward with iOS or 56 | Android (out of the JNI part...), using a native lib forces the developer to 57 | chose an architecture on Windows! Fortunately, Visual Studio Package Generator 58 | handles that correctly and proposes you to select all architectures for your 59 | final export. But well... we'd have preferred it plain and simple. 60 | 61 | Our second deception is a bit more problematic as it prevents one of our very 62 | nice features: typo-tolerant highlighting during autocompletion. It starts 63 | with best of intentions from Microsoft. To remove the burden of implementing 64 | highlight for autocompletion on developers, Windows 8 handles it directly. The 65 | only problem is that it cannot be replaced by our own :( So you can obtain 66 | hits even if your query contains typos, but hits containing text different 67 | from the query won't be highlighted. 68 | 69 | We hope to be able to change this behaviour in the future. In the meantime, 70 | we're impatient to get your feedback on this beta! 71 | [Register][3] for your Windows 8 version of Algolia 72 | Search now! 73 | 74 | 75 | [1]: http://www.algolia.com/product/ 76 | [2]: http://www.algolia.com/doc/win8/ 77 | [3]: http://www.algolia.com/try/ 78 | -------------------------------------------------------------------------------- /_posts/2014-03-14-added-asian-datacenter-offer.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Algolia Now Provides Realtime Search in Asia! 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | [![New datacenter allows realtime search in Asia][1]](http://blog.algolia.com/added-asian- 13 | datacenter-offer/screen-shot-2014-03-13-at-17-51-50/) 14 | 15 | One of the terrific advantages of building a SaaS company is that your clients 16 | can be anywhere in the world. We now have customers in more than 15 different 17 | countries distributed across South America, Europe, Africa, and, of course, 18 | North America. We feel incredibly lucky to have so many international 19 | customers trusting us with their search. 20 | 21 | Language support is one of the key factors that enabled us to enter these 22 | markets. Since the beginning, we wanted to support every language used on the 23 | Internet. To back our vision with action, we developed a very good support of 24 | Asian languages over time. As an example, we are able to automatically 25 | retrieve results in Traditional Chinese when the query is in Simplified 26 | Chinese (or vice-versa). You simply need to add objects in Chinese, Japanese 27 | or Korean, and we handle the language processing for you. 28 | 29 | Despite the fact that we could process Asian languages well, we didn't plan to 30 | open an Asian datacenter so early, mainly because we thought the API as a 31 | service market was less mature in Asia than in the US or Europe. But we were 32 | surprised when an article on [36kr.com][2] 33 | gave us dozen of signups from China. We got more signups from China in the 34 | past month than from Canada! 35 | 36 | One of our core values is the speed of our search engine. To provide a 37 | realtime search experience, we want the response times to be lower than 100ms, 38 | including the round trip to search servers. In this context a low latency is 39 | essential. Up to now we have been able to cover North America and Europe in 40 | less than 100ms (search computation included) but our latency with Asia was 41 | between 200ms and 300ms. 42 | 43 | The first step of our on-boarding process is to select the datacenter where 44 | your search engine is hosted (we offer multi-datacenter distribution only for 45 | enterprise users). Interestingly, we discovered that we had no drop for 46 | European & US users but it became significant for others. It was a difficult 47 | choice for people outside of these two regions, or even between the two 48 | datacenters. So we also now display the latency from your browser and pre- 49 | select the "closest" datacenter. 50 | 51 | To propose better latency and to reduce friction in the on-boarding process, 52 | it was clear that we had to add a datacenter in Asia. We chose Singapore for 53 | its central location. Unfortunately, the hosting market is very different in 54 | Asia. It's much more expensive to rent servers, so we sadly had to add a 55 | premium on plan prices when choosing this datacenter. 56 | 57 | We are very happy to open this new datacenter in Asia with a latency that 58 | reaches our quality standard. Now that Algolia provides realtime search in 59 | Asia, we are even happier to be able to help multinational websites and apps 60 | provide a great search experience to all their users across Europe, North 61 | America & Asia in less than 100ms with our multi-datacenter support!* 62 | 63 | _Multi-datacenter support is currently only available for Enterprise 64 | accounts._ 65 | 66 | 67 | [1]: /algoliasearch-jekyll-hyde/assets/Screen-Shot-2014-03-13-at-17.51.50-300x199.png 68 | [2]: http://www.36kr.com/p/209747.html 69 | -------------------------------------------------------------------------------- /public/css/syntax.css: -------------------------------------------------------------------------------- 1 | .highlight .hll { background-color: #ffc; } 2 | .highlight .c { color: #999; } /* Comment */ 3 | .highlight .err { color: #a00; background-color: #faa } /* Error */ 4 | .highlight .k { color: #069; } /* Keyword */ 5 | .highlight .o { color: #555 } /* Operator */ 6 | .highlight .cm { color: #09f; font-style: italic } /* Comment.Multiline */ 7 | .highlight .cp { color: #099 } /* Comment.Preproc */ 8 | .highlight .c1 { color: #999; } /* Comment.Single */ 9 | .highlight .cs { color: #999; } /* Comment.Special */ 10 | .highlight .gd { background-color: #fcc; border: 1px solid #c00 } /* Generic.Deleted */ 11 | .highlight .ge { font-style: italic } /* Generic.Emph */ 12 | .highlight .gr { color: #f00 } /* Generic.Error */ 13 | .highlight .gh { color: #030; } /* Generic.Heading */ 14 | .highlight .gi { background-color: #cfc; border: 1px solid #0c0 } /* Generic.Inserted */ 15 | .highlight .go { color: #aaa } /* Generic.Output */ 16 | .highlight .gp { color: #009; } /* Generic.Prompt */ 17 | .highlight .gs { } /* Generic.Strong */ 18 | .highlight .gu { color: #030; } /* Generic.Subheading */ 19 | .highlight .gt { color: #9c6 } /* Generic.Traceback */ 20 | .highlight .kc { color: #069; } /* Keyword.Constant */ 21 | .highlight .kd { color: #069; } /* Keyword.Declaration */ 22 | .highlight .kn { color: #069; } /* Keyword.Namespace */ 23 | .highlight .kp { color: #069 } /* Keyword.Pseudo */ 24 | .highlight .kr { color: #069; } /* Keyword.Reserved */ 25 | .highlight .kt { color: #078; } /* Keyword.Type */ 26 | .highlight .m { color: #f60 } /* Literal.Number */ 27 | .highlight .s { color: #d44950 } /* Literal.String */ 28 | .highlight .na { color: #4f9fcf } /* Name.Attribute */ 29 | .highlight .nb { color: #366 } /* Name.Builtin */ 30 | .highlight .nc { color: #0a8; } /* Name.Class */ 31 | .highlight .no { color: #360 } /* Name.Constant */ 32 | .highlight .nd { color: #99f } /* Name.Decorator */ 33 | .highlight .ni { color: #999; } /* Name.Entity */ 34 | .highlight .ne { color: #c00; } /* Name.Exception */ 35 | .highlight .nf { color: #c0f } /* Name.Function */ 36 | .highlight .nl { color: #99f } /* Name.Label */ 37 | .highlight .nn { color: #0cf; } /* Name.Namespace */ 38 | .highlight .nt { color: #2f6f9f; } /* Name.Tag */ 39 | .highlight .nv { color: #033 } /* Name.Variable */ 40 | .highlight .ow { color: #000; } /* Operator.Word */ 41 | .highlight .w { color: #bbb } /* Text.Whitespace */ 42 | .highlight .mf { color: #f60 } /* Literal.Number.Float */ 43 | .highlight .mh { color: #f60 } /* Literal.Number.Hex */ 44 | .highlight .mi { color: #f60 } /* Literal.Number.Integer */ 45 | .highlight .mo { color: #f60 } /* Literal.Number.Oct */ 46 | .highlight .sb { color: #c30 } /* Literal.String.Backtick */ 47 | .highlight .sc { color: #c30 } /* Literal.String.Char */ 48 | .highlight .sd { color: #c30; font-style: italic } /* Literal.String.Doc */ 49 | .highlight .s2 { color: #c30 } /* Literal.String.Double */ 50 | .highlight .se { color: #c30; } /* Literal.String.Escape */ 51 | .highlight .sh { color: #c30 } /* Literal.String.Heredoc */ 52 | .highlight .si { color: #a00 } /* Literal.String.Interpol */ 53 | .highlight .sx { color: #c30 } /* Literal.String.Other */ 54 | .highlight .sr { color: #3aa } /* Literal.String.Regex */ 55 | .highlight .s1 { color: #c30 } /* Literal.String.Single */ 56 | .highlight .ss { color: #fc3 } /* Literal.String.Symbol */ 57 | .highlight .bp { color: #366 } /* Name.Builtin.Pseudo */ 58 | .highlight .vc { color: #033 } /* Name.Variable.Class */ 59 | .highlight .vg { color: #033 } /* Name.Variable.Global */ 60 | .highlight .vi { color: #033 } /* Name.Variable.Instance */ 61 | .highlight .il { color: #f60 } /* Literal.Number.Integer.Long */ 62 | 63 | .css .o, 64 | .css .o + .nt, 65 | .css .nt + .nt { color: #999; } 66 | -------------------------------------------------------------------------------- /_posts/2014-08-28-concertwith-mes-competitive-edge-revamped-search-ux-algolia.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'Concertwith.me''s Competitive Edge: A Revamped Search UX with Algolia' 4 | author: 5 | login: kevin 6 | email: shipowlata@gmail.com 7 | display_name: kevin 8 | first_name: Kevin 9 | last_name: Granger 10 | --- 11 | 12 | There are a lot of music discovery apps on the market, yet sifting through 13 | concert listings is anything but seamless. That's why Cyprus-based startup 14 | [Concertwith.me][1] aims to make finding local concerts 15 | and festivals as intuitive as possible. Automatically showing upcoming events 16 | in your area, the site offers personalized recommendations based on your 17 | preferences and your Facebook friends' favorited music. Covering over 220,000 18 | events globally, the site uses Algolia to offer meaningful results for 19 | visitors who are also looking for something different. 20 | 21 | Founder Vit Myshlaev admits that concert sites often share the same pool of 22 | information. The differentiator is how that information is presented. "The 23 | biggest advantage one can have is user experience," he explains. "There's 24 | information out there, but do users find it? The reason that people don't go 25 | to cool concerts is that they still don't know about them!" 26 | 27 | As an example, he showed me one of the largest live music discovery sites on 28 | the web. Searching for an artist required navigating a convoluted maze of 29 | links before pulling up irrelevant results. "Users have to type in queries 30 | without autocomplete, typo-tolerance, or internationalization. They have to 31 | scroll through a long list of answers and click on paginated links. That's not 32 | what people want in 2014," said Myshlaev. 33 | 34 | To simplify search and make the results more relevant, Concertwith.me used our 35 | API. "We got a lot of user feedback for natural search," Myshlaev wrote. Now 36 | visitors can search for artists and concerts instantly. With large user bases 37 | in the United States, Germany, France, Spain, Italy, Russia and Poland, 38 | Concertwith.me also benefits from Algolia's [multi-lingual search 39 | feature][2]. "We've localized our app 40 | to many countries. For example, you can search in Russian or for artists that 41 | are Russian, and results will still come up," says Myshlaev. 42 | 43 | [![search][3]](https://blog.algolia.com/wp- 44 | content/uploads/2014/08/search.gif) 45 | 46 | For users with a less targeted idea of what they're looking for, 47 | Concertwith.me implemented structured search via 48 | [faceting][4]. "We also realized 49 | that some visitors don't know what they want. Algolia search helps them find 50 | answers to questions like, Where will my favorite artist perform? How much do 51 | tickets cost? Are there any upcoming shows?" 52 | 53 | [![recommendations][5]](https://blog.algolia.com/wp- 54 | content/uploads/2014/08/recommendations.gif) 55 | 56 | Concertwith.me's goal is to reduce informational noise so that users can find 57 | and discover music as soon as possible. The start up experimented with a 58 | number of other search technologies before reading an [article about us on 59 | Intercom.io][6], which 60 | inspired Myshlaev. "When I saw what Algolia could do, I knew that this was the 61 | competitive edge I was looking for." 62 | 63 | **_Want to build a search bar with multi-category auto-completion like Concertwith.me? [Learn how through our tutorial][7]._** 64 | 65 | 66 | [1]: http://concertwith.me/ 67 | [2]: https://www.algolia.com/doc#Multilingual 68 | [3]: /algoliasearch-jekyll-hyde/assets/search.gif 69 | [4]: http://faq.algolia.com/basics/what-is-faceting/ 70 | [5]: /algoliasearch-jekyll-hyde/assets/recommendations.gif 71 | [6]: http://insideintercom.io/7-things-wish-every-search-did/ 72 | [7]: https://www.algolia.com/doc/tutorials 73 | -------------------------------------------------------------------------------- /_posts/2012-10-07-a-few-thoughts-after-apps-world.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: A few thoughts after Apps World 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | Last week provided me with an occasion to feel the tempo of the mobile 13 | ecosystem at Apps World in London. Here are a few thoughts about what I saw. 14 | 15 | ![][1]There were many many mobile agencies 16 | exhibiting... and local UK agencies were dwarfed in number by offshore ones, 17 | hailing mainly from India. Eastern European countries also had an important 18 | presence, especially Poland. It seems that the golden days of apps development 19 | are behind us. Most big companies now outsource their apps offshore. It also 20 | means that it's becoming very important for local agencies to differentiate 21 | themselves. I actually pitched many of them about Algolia Search and 22 | differences in reactions were interesting. Most Indian based agencies didn't 23 | have a second look; They preferred to wait for "requirements" from their 24 | customers. On the other hands European ones were on average much more 25 | interested in what they could do with such a lib. The most geniune interest 26 | always came from technical guys when they were present. By the way, if I could 27 | give advice to any agency participating in such a event, please come with at 28 | least a developer, and at best your CTO. You would gain much credibility and 29 | differentiation! 30 | 31 | Out of all of the agencies, a few other disciplines were well represented... 32 | actually I may say "too much" represented as it often indicates an over- 33 | crowded field and a battle for survival! 34 | 35 | * **Testing and QA services**. Offshore Indian firms are also very active in this space. 36 | * **Ad platforms and payment tools**. I didn't know there were so many options to choose from! Competition seemed harsh to get the attention of the few apps developers attending. 37 | * And most of all **cross-platform HTML5 frameworks**! I'm not a big fan of PhoneGap and consorts, even if I admit it's a good choice for some apps, especially "enterprise" ones. The space is so crowded with offers now, that many may not survive the next year! By the way if you want to offer a framework and want to differentiate yourself with a cutting-edge search functionality, you know how to contact me ;) 38 | 39 | ![Blackberry at Apps World][2] 40 | 41 | Two companies had a particularly important presence at the event compared to 42 | what we could have expected: 43 | 44 | * **RIM**, with probably the nicest booth of all. They proposed BlackBerry porting classes, offered developer guidance and gave several workshop speeches. After their recent commitment to [paying BlackBerry 10 developers a minimum of $10K][3], they continue to do all they can to attract developers. But I'm afraid I agree with Charlie Kindel that [paying developers is a bad idea][4]! 45 | * **Twilio**, actively promoting their voice and SMS APIs. Their immense success reminds us that there are still billions of feature phones out there! 46 | 47 | The other less surprising major players included Samsung and Microsoft, but no 48 | Google and no Apple (not unexpected!). Of course, they were present in many 49 | conversations! I had for example a very interesting chat with [Adam 50 | Hościło][5] about the many opportunities provided by the 51 | new iOS 6 Passbook. It's opening a golden area for many in the next few 52 | months! 53 | 54 | 55 | [1]: /algoliasearch-jekyll-hyde/assets/appsworld-300x224.jpg 56 | [2]: /algoliasearch-jekyll-hyde/assets/blackberry-300x224.jpg 57 | [3]: http://devblog.blackberry.com/2012/09/built-for-blackberry-10k-developer-commitment/ 58 | [4]: http://ceklog.kindel.com/2012/09/26/paying-developers-is-a-bad-idea/ 59 | [5]: http://twistedhq.com 60 | -------------------------------------------------------------------------------- /public/js/algolia.js: -------------------------------------------------------------------------------- 1 | // Init the search box 2 | $(function(config) { 3 | 'use strict'; 4 | 5 | var applicationId = config.applicationId; 6 | var apiKey = config.apiKey; 7 | var indexName = config.indexName; 8 | 9 | var algolia = algoliasearch(applicationId, apiKey); 10 | var helper = algoliasearchHelper(algolia, indexName); 11 | helper.setQueryParameter('distinct', true); 12 | helper.on('result', onResult); 13 | 14 | // Input listening for queries 15 | var $searchInput = $('.js-algolia__input'); 16 | $searchInput.on('keyup', onQueryChange); 17 | 18 | // Content to hide/show when searching 19 | var $initialContent = $('.js-algolia__initial-content'); 20 | var $searchContent = $('.js-algolia__search-content'); 21 | var $searchContentResults = $searchContent.find('.algolia__results'); 22 | $searchContentResults.on('click', 'a', onLinkClick); 23 | // Rendering templates 24 | var templateResult = Hogan.compile($('#algolia__template').html()); 25 | var templateNoResults = $('#algolia__template--no-results').html(); 26 | 27 | var lastQuery; 28 | 29 | // Toggle result page 30 | function showResults() { 31 | window.scroll(0, 0); 32 | $initialContent.addClass('algolia__initial-content--hidden'); 33 | $searchContent.addClass('algolia__search-content--active'); 34 | 35 | } 36 | function hideResults() { 37 | $initialContent.removeClass('algolia__initial-content--hidden'); 38 | $searchContent.removeClass('algolia__search-content--active'); 39 | } 40 | 41 | // Handle typing query 42 | function onQueryChange() { 43 | lastQuery = $(this).val(); 44 | if (lastQuery.length === 0) { 45 | hideResults(); 46 | return false; 47 | } 48 | helper.setQuery(lastQuery).search(); 49 | showResults(); 50 | } 51 | 52 | function onResult(data) { 53 | // Avoid race conditions, discard results that do not match the latest query 54 | if (data.query !== lastQuery) { 55 | return false; 56 | } 57 | var content = data.nbHits ? renderResults(data) : templateNoResults; 58 | $searchContentResults.html(content); 59 | } 60 | 61 | function renderResults(data) { 62 | return $.map(data.hits, function(hit) { 63 | if (hit.posted_at) { 64 | hit.posted_at_readable = moment.unix(hit.posted_at).fromNow(); 65 | } 66 | hit.css_selector = encodeURI(hit.css_selector); 67 | hit.full_url = config.baseurl + hit.url; 68 | 69 | return templateResult.render(hit); 70 | }).join(''); 71 | } 72 | 73 | // Scroll page to correct element 74 | function getAnchorSelector(hash) { 75 | var anchor = hash.substring(1); 76 | if (!anchor.match(/^algolia:/)) { 77 | return false; 78 | } 79 | return decodeURI(anchor.replace(/^algolia:/, '')); 80 | } 81 | 82 | function scrollPageToSelector(selector) { 83 | var target = $('.page,.post').find(selector); 84 | var targetOffset = target[0].getBoundingClientRect().top + window.pageYOffset - 20; 85 | window.setTimeout(function() { 86 | window.scroll(0, targetOffset); 87 | }, 100); 88 | } 89 | 90 | function onLinkClick(event) { 91 | var selector = getAnchorSelector(event.target.hash); 92 | // Normal link, going to another page 93 | if (event.target.pathname !== window.location.pathname || !selector) { 94 | return true; 95 | } 96 | // Scrolling to a result on the same page 97 | hideResults(); 98 | scrollPageToSelector(selector); 99 | event.preventDefault(); 100 | return false; 101 | } 102 | 103 | window.setTimeout(function() { 104 | var selector = getAnchorSelector(window.location.hash); 105 | if (selector) { 106 | scrollPageToSelector(selector); 107 | } 108 | }, 100); 109 | 110 | 111 | }(window.ALGOLIA_CONFIG)); 112 | -------------------------------------------------------------------------------- /_posts/2012-10-19-painless-integration-crystal-clear-documentation-please-welcome-algolia-search-beta-4.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Painless integration, crystal clear documentation, please welcome Algolia Search 4 | beta 4! 5 | author: 6 | login: nicolas 7 | email: nicolas@algolia.com 8 | display_name: nicolas 9 | first_name: Nicolas 10 | last_name: Dessaigne 11 | --- 12 | 13 | [![][1]](https://blog.algolia.com 14 | /wp-content/uploads/2012/10/CitiesSuggestIPhone5Slide3.png) 15 | 16 | Last month has been truly electrifying! We joined our friends at 17 | [Yakaz][2] in their office space, we participated in many 18 | events... and most exciting of all, we spent days and nights reworking the 19 | product! Today we are really proud to present you the result of this time well 20 | spent! 21 | 22 | I know I told some of you beta3 would be the last, but we could not ignore 23 | your excellent feedback. So here comes Algolia Search beta4, a true revolution 24 | (I hope this is not trademarked!) in mobile search! 25 | 26 | Here come the major improvements: 27 | 28 | * A completely **reworked API** that we just love to use everywhere. The time to fully understand the library has been reduced to nearly nothing thanks to all your feedback. We are proud to have the easiest to use search library ever made! 29 | * A completely **rewritten documentation** with detailed API and step-by-step tutorials. You should be able to make your first queries in a matter of minutes! 30 | * **Easy highlight** for **multiple fields queries**. A bit cryptic? Stay with me... just imagine a Contact application where you can search for your contact by any field, i.e., name, company, address or even notes. Algolia Search now provides easy-to-use highlighting of any matching words. It is even able to generate a snippet when the text is too long. Check out the tutorials to learn more! Highlighting relevant results just became child's play! 31 | * A greatly **improved out-of-the-box relevance**. Our mission is to simplify search: we want the best possible relevance by default so you can forget these long hours of tuning :) 32 | 33 | But that's not all, many smaller improvements were also included in this 34 | release: 35 | 36 | * Support of **advanced queries**. Take again our tutorial contact application, wouldn't it be great to be able to search by initials? You can now implement this cool feature in a couple of minutes without any headache on relevance tuning. 37 | * Support for **ARC and no ARC**. In the previous beta we added an iOS version for people that do not use [Automatic Reference Counting (ARC)][3]. We now have only one version that supports projects with and without ARC. If you do not use ARC, all objects received from Algolia Search are autoreleased. 38 | * Support for **user objects backward compatibility**. As the index is also an objects store, you can modify your object members and still read older indexes! It is very easy to implement, just check the tutorials. 39 | * The release also fixes a few bugs that we discovered during your and our intensive testing. 40 | 41 | It would not have been possible without the help of our many beta testers, 42 | thank you all! Special thanks to [Kris][4], 43 | [Hoa][5] and 44 | [Thomas][6] whose guidance has been priceless. 45 | 46 | So... what's next? Many things! This time I really believe this is the last 47 | beta. The final release is just around the corner. Of course, we appreciate 48 | your feedback nonetheless and always will! You can also expect a new website 49 | and a few apps in the app store! Who said a contact app? 50 | 51 | Stay tuned! 52 | 53 | 54 | [1]: /algoliasearch-jekyll-hyde/assets/CitiesSuggestIPhone5Slide3-300x194.png 55 | [2]: http://www.yakaz.com/ 56 | [3]: http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html 57 | [4]: https://twitter.com/krmarkel 58 | [5]: https://twitter.com/dinh_viet_hoa 59 | [6]: https://twitter.com/sarfata 60 | -------------------------------------------------------------------------------- /_posts/2014-05-22-synonym-search-engine.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: A New Way to Handle Synonyms in a Search Engine 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | We recently added the support for Synonyms in Algolia! It has been the most 13 | requested feature in Algolia since our launch in September. While it may seem 14 | simple, it actually took us some time to implement because we wanted to do it 15 | in a different way than classic search engines. 16 | 17 | ## What's wrong with synonyms 18 | 19 | There are two main problems with how existing search engines handle synonyms. 20 | These issues disturb the user experience and could make them think _"this 21 | search engine is buggy"_. 22 | 23 | ### Typeahead 24 | 25 | In most search engines, synonyms are not compatible with typeahead search. For 26 | example, if you want tablet  to equal  ipad in a query, the prefix search for 27 | t , ta , tab , tabl  & table  will not trigger the expansion on iPad ; Only 28 | the tablet query will. Thus, a single new letter in the search bar could 29 | totally change the result set, catching users off-guard. 30 | 31 | ### Highlighting 32 | 33 | Highlighting matched text is a key element of the user experience, especially 34 | when the search engine tolerates typos. This is the difference between making 35 | users think _"I don't understand this result"_ and _"This engine was able to 36 | understand my errors"_. Synonym expansions are rarely highlighted, which 37 | breaks the trust of the users in the search results and can feel like a bug. 38 | 39 | ## Our implementation 40 | 41 | We have identified two different use cases for synonyms: equalities and 42 | placeholders. The first and most common use case is when you tell the search 43 | engine that several words must be considered equal, for example st and street 44 | in an address. The second use case, which we call a _placeholder_, is when you 45 | indicate that a specific token can be replaced by a set of possible words and 46 | that the token itself is not searchable. For example, the content  47 | street could be matched by the queries 1st street or 2nd street but not the 48 | query number street. 49 | 50 | For the first use case, we have added a support of synonyms that is compatible 51 | with prefix search and have implemented two different ways to do highlighting 52 | (controlled by thereplaceSynonymsInHighlight  query parameter): 53 | 54 | 1. A mode where the original word that matched via a synonym is highlighted. For example if you have a record that contains black ipad 64GB  and a synonym black equals dark, then the following queries will fully highlight the black word : ipad d , ipad da , ipad dar & ipad dark. The typeahead search is working and the synonym expansion is fully highlighted: `**black** **ipad** 64GB` . 55 | 2. A mode where the original word is replaced by the synonym, and the matched prefix is highlighted. For example ipad d  query will replace black by dark and will highlight the first letter of dark: `**d**ark **ipad** 64GB`. This method allows to fully explain the results when the original word can be safely replaced by the matched synonym. 56 | 57 | For the second use case, we have added support for placeholders. You can add a 58 | specific token in your records that will be safely replaced by a set of words 59 | defined in your configuration. The highlighting mode that replaces the 60 | original word by the expansion totally makes sense here. For example if you 61 | have mission street  record with a placeholder = 62 | [ "1st", "2nd", ....] , then the query 1st missionstreet will replace 63 | by 1st  and will highlight all words: `**1st mission street**`. 64 | 65 | We believe this is a better way to handle synonyms and we hope you will like 66 | it :) We would love to get your feedback and ideas for improvement on this 67 | feature! Feel free to contact us at **hey(at)algolia.com**. 68 | 69 | -------------------------------------------------------------------------------- /_posts/2014-03-29-introducing-algolias-search-analytics.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'Introducing Search Analytics: Know Your Users Better' 4 | author: 5 | login: gaetan 6 | email: gaetan@algolia.com 7 | display_name: gaetan 8 | first_name: Gaetan 9 | last_name: Gachet 10 | --- 11 | 12 | This week we have released a much requested feature by our customers: 13 | analytics. 14 | 15 | ### The importance of analytics to search 16 | 17 | At Algolia, our goal is to revolutionize the way people search and access 18 | content inside the Web and mobile services. Think about Spotify, LinkedIn, 19 | Amazon: Everyone wants to find the right songs, people and products in just a 20 | couple keystrokes. Our challenge is to provide fast and meaningful access to 21 | all of this content via a simple search box. In March, we answered more than 22 | 200 million user queries for our customers on every continent. 23 | 24 | Providing the right content through the right search and browsing experience 25 | is key. For our customers, understanding their users - what they like, what 26 | they want and when they want it -  is just as important, if not more. This is 27 | why we came up with this new analytics section, built on top of our API and 28 | available on our customers' online dashboards when they log in to their 29 | Algolia account. So what exactly do we track for you? 30 | 31 | We describe here some of the top features that are now available to all our 32 | users. 33 | 34 | ### Most popular queries 35 | 36 | In this chart, we show which items were most queried. It would be useful, for 37 | example, to a procurement department for anticipating their  most frequently- 38 | searched products' inventory needs. And if you monetize your service through 39 | advertising, know what people are most interested in is especially valuable. 40 | 41 | A new analytics feature supports the most popular queries. 42 | 43 | ### Queries with no or a few results 44 | 45 | Today, most services are simply clueless when it comes to what is missing in 46 | their content base. How do you know that your catalogue of products fits your 47 | users' expectations? Knowing whether or not you provide what your users need 48 | is critical for your business. 49 | 50 | [![Search Analytics: Track top queries](/algoliasearch-jekyll-hyde/assets/Top-search-1024x409.png)](https://blog.algolia.com/wp-content/uploads/2014/03/Top-search.png) Algolia lets you determine which top queries have few or 51 | nonexistent results. 52 | 53 | ### How does a query evolve over time? 54 | 55 | Is Chanel more popular than Louis Vuitton in the morning or at night? Are 56 | bikes more popular in June or in December? With this new feature, you can now 57 | answer such questions for your own content by following the number of times a 58 | specific query is typed on an hourly basis. 59 | 60 | ![Search Analytics: Track 61 | popularity of a search query over 62 | time](/algoliasearch-jekyll-hyde/assets/Trend Louboutin.png) Example: Search 63 | analytics lets you track the evolution of the query "louboutin" over 24 64 | hours. 65 | 66 | ### Which categories do people search the most? 67 | 68 | When users type in a query, they often use categories to refine the results. 69 | We let you know which categories were the most frequently used for refinement. 70 | We even provide the most used combinations of categories (such as "dress" + 71 | "blue" + "size M"). It should help you understand how your users browse your 72 | content and has broader implications if the ergonomics of your app is 73 | optimized. 74 | 75 | ![Search Analytics: Top categories used for filtering an 76 | refinement](/algoliasearch-jekyll-hyde/assets/Top categories.png) Track which 77 | combinations of categories people search for the most. 78 | 79 | These new analytics features are included in our existing plans at no extra 80 | cost. The number of days when our analytics tools are available vary based on 81 | the plan you choose. We hope you will like it, and we will be more than happy 82 | to read your feedback and feature requests! 83 | 84 | 85 | -------------------------------------------------------------------------------- /README-original.md: -------------------------------------------------------------------------------- 1 | # Hyde 2 | 3 | Hyde is a brazen two-column [Jekyll](http://jekyllrb.com) theme that pairs a prominent sidebar with uncomplicated content. It's based on [Poole](http://getpoole.com), the Jekyll butler. 4 | 5 | ![Hyde screenshot](https://f.cloud.github.com/assets/98681/1831228/42af6c6a-7384-11e3-98fb-e0b923ee0468.png) 6 | 7 | 8 | ## Contents 9 | 10 | - [Usage](#usage) 11 | - [Options](#options) 12 | - [Sidebar menu](#sidebar-menu) 13 | - [Sticky sidebar content](#sticky-sidebar-content) 14 | - [Themes](#themes) 15 | - [Reverse layout](#reverse-layout) 16 | - [Development](#development) 17 | - [Author](#author) 18 | - [License](#license) 19 | 20 | 21 | ## Usage 22 | 23 | Hyde is a theme built on top of [Poole](https://github.com/poole/poole), which provides a fully furnished Jekyll setup—just download and start the Jekyll server. See [the Poole usage guidelines](https://github.com/poole/poole#usage) for how to install and use Jekyll. 24 | 25 | 26 | ## Options 27 | 28 | Hyde includes some customizable options, typically applied via classes on the `` element. 29 | 30 | 31 | ### Sidebar menu 32 | 33 | Create a list of nav links in the sidebar by assigning each Jekyll page the correct layout in the page's [front-matter](http://jekyllrb.com/docs/frontmatter/). 34 | 35 | ``` 36 | --- 37 | layout: page 38 | title: About 39 | --- 40 | ``` 41 | 42 | **Why require a specific layout?** Jekyll will return *all* pages, including the `atom.xml`, and with an alphabetical sort order. To ensure the first link is *Home*, we exclude the `index.html` page from this list by specifying the `page` layout. 43 | 44 | 45 | ### Sticky sidebar content 46 | 47 | By default Hyde ships with a sidebar that affixes it's content to the bottom of the sidebar. You can optionally disable this by removing the `.sidebar-sticky` class from the sidebar's `.container`. Sidebar content will then normally flow from top to bottom. 48 | 49 | ```html 50 | 51 | 56 | 57 | 58 | 63 | ``` 64 | 65 | 66 | ### Themes 67 | 68 | Hyde ships with eight optional themes based on the [base16 color scheme](https://github.com/chriskempson/base16). Apply a theme to change the color scheme (mostly applies to sidebar and links). 69 | 70 | ![Hyde in red](https://f.cloud.github.com/assets/98681/1831229/42b0b354-7384-11e3-8462-31b8df193fe5.png) 71 | 72 | There are eight themes available at this time. 73 | 74 | ![Hyde theme classes](https://f.cloud.github.com/assets/98681/1817044/e5b0ec06-6f68-11e3-83d7-acd1942797a1.png) 75 | 76 | To use a theme, add anyone of the available theme classes to the `` element in the `default.html` layout, like so: 77 | 78 | ```html 79 | 80 | ... 81 | 82 | ``` 83 | 84 | To create your own theme, look to the Themes section of [included CSS file](https://github.com/poole/hyde/blob/master/public/css/hyde.css). Copy any existing theme (they're only a few lines of CSS), rename it, and change the provided colors. 85 | 86 | ### Reverse layout 87 | 88 | ![Hyde with reverse layout](https://f.cloud.github.com/assets/98681/1831230/42b0d3ac-7384-11e3-8d54-2065afd03f9e.png) 89 | 90 | Hyde's page orientation can be reversed with a single class. 91 | 92 | ```html 93 | 94 | ... 95 | 96 | ``` 97 | 98 | 99 | ## Development 100 | 101 | Hyde has two branches, but only one is used for active development. 102 | 103 | - `master` for development. **All pull requests should be submitted against `master`.** 104 | - `gh-pages` for our hosted site, which includes our analytics tracking code. **Please avoid using this branch.** 105 | 106 | 107 | ## Author 108 | 109 | **Mark Otto** 110 | - 111 | - 112 | 113 | 114 | ## License 115 | 116 | Open sourced under the [MIT license](LICENSE.md). 117 | 118 | <3 119 | -------------------------------------------------------------------------------- /_posts/2014-12-01-fanfootage-solving-search-problem-algolia.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'FanFootage: Solving the Search problem with Algolia' 4 | author: 5 | login: marie-auxille 6 | email: marie-auxille.denis@algolia.com 7 | display_name: Marie-Auxille Denis 8 | first_name: Marie-Auxille 9 | last_name: Denis 10 | --- 11 | 12 | **The following post is a guest post by Eoin O'Driscoll (web developer), and Vinny Glennon (co-founder) of FanFootage.com** 13 | 14 | ![vinny][1] 15 | 16 | ![eoin-o-driscoll][2] 17 | 18 | When we founded FanFootage we knew there was something lacking in the concert 19 | and event experience. Fans were taking videos on their mobile phones during 20 | performances, loading them on YouTube, and the audio was horrible. So we 21 | created FanFootage where fans can upload their own video and we work with the 22 | bands to get the high def audio and put them together. Now fans can come to 23 | our site and see their favorite concerts or sports from any angle. They can 24 | also search for upcoming events and performances. 25 | 26 | For a recent Linkin Park concert the band and the fan group contacted us. 27 | Their fans uploaded more than 1,500 videos from almost every angle. On 28 | FanFootage that single concert has had over 350,000 page views. 29 | 30 | ![fanfootage][3] 31 | 32 | ## Our user experience heavily relies on search 33 | 34 | Earlier in our design **we knew that search would be key to making FanFootage 35 | the ultimate fan experience**. **When a user comes to our site the first thing 36 | they do is search for the event or artist. And we need to make sure that they 37 | either find the artist they are looking for or something similar, and it has 38 | to be fast**. 39 | 40 | As developers, our team isn't new to search, particularly within the 41 | entertainment space. Our previous startup in the music space was bought by 42 | RealNetworks and a second startup was a competitor to Google. That is where we 43 | learned that search is hard. And when we thought to build our own search on 44 | FanFootage we quickly said it wasn't going to happen. 45 | 46 | We also know what fans need. **User demands have changed now that they can 47 | access anything from their phones. Today we expect our applications and 48 | services to predict what we are going to do next. And because of Google, 49 | people don't search with a single phrase. Users expect search to understand 50 | how phrases fit together and are related and of course it needs to spell check 51 | and it must be instant**. 52 | 53 | We also had different search requirements than other sites. Normally search on 54 | a site is for one unit or concept; a site for flowers for example. For us we 55 | needed to allow fans to search for artists, bands, friends or upcoming events 56 | in their area and never get a zero result. 57 | 58 | ## Why we chose Algolia 59 | 60 | After looking at a few search applications we agreed on Algolia.**Many search 61 | applications look nice but don't have the flexibility we needed** to configure 62 | them they way our business needed. And most weren't fast. 63 | 64 | Why did we chose Algolia? First it has **a developer-centric approach**. It 65 | took us 2 hours to configure and a day to test and that was it. We basically 66 | had search up and running in a day. The dashboard lets me know that the API 67 | calls are returned within milliseconds and we have all the flexibility we need 68 | to configure as our content grows. 69 | 70 | Today, more than 250 artists have used FanFootage in 20 countries. We are 71 | growing quickly. As a company we are still learning what our fans are 72 | searching for and Algolia is helping us with that. **As content grows we will 73 | continue to configure search to meet the needs of our fans**. We will also be 74 | rolling out Algolia for mobile because of its multi-search capabilities. 75 | 76 | Algolia is a simple solution to a complex problem. And it blew our mind away. 77 | It just works. And now we can focus on our own fanbase. 78 | 79 | _Images courtesy of FanFootage. Learn more on their 80 | [website][4]_ 81 | 82 | 83 | [1]: /algoliasearch-jekyll-hyde/assets/vinny.png 84 | [2]: /algoliasearch-jekyll-hyde/assets/eoin-o-driscoll.png 85 | [3]: /algoliasearch-jekyll-hyde/assets/fanfootage.gif 86 | [4]: https://fanfootage.com/ 87 | -------------------------------------------------------------------------------- /_posts/2015-07-15-new-distributed-search-network-texas.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Welcome Texas! 4 | author: 5 | login: gaetan 6 | email: gaetan@algolia.com 7 | display_name: gaetan 8 | first_name: Gaetan 9 | last_name: Gachet 10 | --- 11 | 12 | You probably already know it: any millisecond that end-users have to wait to 13 | get their results drives us nuts. But what on Earth does this have to do with 14 | Texas? Actually a lot! 15 | 16 | ## You want your search to be instant? Let's talk network... 17 | 18 | When looking at the speed of search on a website or a mobile application, the 19 | performance of the search engine is just one part of the equation. When you're 20 | using an extremely fast engine, network latency and saturated links quickly 21 | become your biggest enemies: it simply takes time for the user query to reach 22 | the engine and for the results to get back to the user's browser. 23 | 24 | In some cases, the round trip can easily take more than a second. In the US, it 25 | can take up to 300ms to simply establish an SSL connection between the two 26 | coasts. All this also applies to the communications between your backend and 27 | the servers that host your search engine. The network can simply ruin the real 28 | time experience you hoped to offer with your search engine. 29 | 30 | ## A new US Central point of presence to reach a 25ms total delivery time across the US 31 | 32 | A great search experience is to drive end-users towards what they're looking 33 | as quickly and seamlessly as possible. For us at Algolia it means to be able 34 | to dynamically update the content displayed as the end-user is typing a query. 35 | Being able to offer this find as-you-type experience obviously requires a very 36 | performant search engine but it also requires to host the search engine itself 37 | as close as possible to the end-user in order to tackle the network latency. 38 | 39 | This is why we are adding this new US Central region to our existing twelve 40 | regions. With the addition of the Dallas PoP, Algolia's API is now accessible 41 | from thirteen different regions including US (East, West and Central), 42 | Australia, Brazil, Canada, France, Germany, Hong Kong, India, Japan, Russia, 43 | and Singapore. 44 | 45 | If your audience is spread out across multiple regions, you can use Algolia 46 | from a combination of these regions to ensure minimal results delivery time 47 | and optimal speed for all your users (Algolia's Distributed Search Network 48 | automatically routes user queries to your closest region). 49 | 50 | This new US Central PoP, combined with Algolia's US East and US West PoPs, now 51 | allows to deliver search results across the US with less than 25 milliseconds of 52 | latency. This guarantees a seamless find-as-you-type experience on websites and 53 | mobile applications all across the US. 54 | 55 | [![dallas2][1]](https://blog.algolia.com/wp-content/uploads/2015/07/dallas2.jpg) 56 | 57 | ## Getting closer to additional infrastructure providers 58 | 59 | When you choose SaaS providers, especially when their service becomes a core 60 | component of your product, you probably prefer the ones hosted close to where 61 | you operate your backend, for latency and availability reasons. This is 62 | actually why we initially started in the US by opening PoPs in Ashburn (VA) 63 | and San Jose (CA), close to the AWS PoPs, which most of our customers rely on 64 | today. 65 | 66 | Our new presence in Texas allows services which rely for their backend on 67 | local infrastructure providers such as Rackspace and Softlayer to also benefit 68 | from the full power of Algolia. This new PoP offers them an extremely low 69 | network latency between their backend and our API. 70 | 71 | If you're not already an Algolia user and you want to give it a try, simply 72 | [sign up][2] for a 14 day trial and select 73 | the US Central region in the process. 74 | 75 | If you are already using Algolia and want to migrate to the US Central region, 76 | simply drop us a line at [support@algolia.com][3] or 77 | on the live chat. 78 | 79 | If you're none of the two above, we still think you're awesome! 80 | 81 | Cheers! 82 | 83 | 84 | [1]: /algoliasearch-jekyll-hyde/assets/dallas2.jpg 85 | [2]: https://www.algolia.com/users/sign_up 86 | [3]: mailto:support@algolia.com 87 | -------------------------------------------------------------------------------- /_posts/2015-02-18-distributed-search-network-latency-ruins-search-experience.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Don't let network latency ruin the search experience of your international users 4 | author: 5 | login: marie-auxille 6 | email: marie-auxille.denis@algolia.com 7 | display_name: Marie-Auxille Denis 8 | first_name: Marie-Auxille 9 | last_name: Denis 10 | --- 11 | 12 | At Algolia, we allow developers to provide a unique interactive search 13 | experience with as-you-type search, instant faceting, mobile geo-search and on 14 | the fly spell check. 15 | 16 | Our Distributed Search Network aims at removing the impact of network latency 17 | on the speed of search, allowing our customers to offer this instant 18 | experience to all their end-users, wherever they may be. 19 | 20 | ## Every millisecond matters 21 | 22 | We are obsessed with speed and we're not the only ones: Amazon found out that 23 | 100ms in added latency cost them 1% in sales. [The lack of responsiveness for 24 | a search engine can really be damaging for one's 25 | business][1]. As 26 | individuals, we are all spoiled when it comes to our search expectations: 27 | Google has conditioned the whole planet to expect instant results from 28 | anywhere around the world. 29 | 30 | ![user-experience][2] 31 | 32 | We have the exact same expectations with any online service we use. The thing 33 | is that for anyone who is not Google, **it is just impossible to meet these 34 | expectations** because of the network latency due to the physical distance 35 | between the service backend that hosts the search engine and the location of 36 | the end-user. 37 | 38 | Even with the fastest search engine in the world, it can still take hundreds 39 | of milliseconds for a search result to reach Sydney from San Francisco. And 40 | this is without counting the bandwidth limitations of a saturated oversea 41 | fiber! 42 | 43 | ## How we beat the speed of light 44 | 45 | Algolia's Distributed Search Network (DSN) removes the latency from the speed 46 | equation by **replicating your indices to different regions around the world, 47 | where your users are**. 48 | 49 | Your local search engines are clones synchronized across the world. DSN allows 50 | you to **distribute your search among 12 locations** including the US, 51 | Australia, Brazil, Canada, France, Germany, Hong Kong, India, Japan, Russia, 52 | and Singapore. Thanks to our 12 data centers, your search engine can now 53 | **deliver search results under 50ms in the world's top markets**, ensuring an 54 | optimal experience for all your users. 55 | 56 | ![DSN-b3ce122c790c492c2f2c8ddbabaae464][3] 57 | 58 | ## How you activate DSN 59 | 60 | Today, DSN is only accessible to our Starter, Growth, Pro and Enterprise plan 61 | customers. To activate it, you simply need to go in the **"Region" tab at the 62 | top of your Algolia dashboard and select "Setup DSN"**. 63 | 64 | [![shot][4]](https://www.algolia.com/dsn/setup) 65 | 66 | You will then be displayed with a map and a selection of your top countries in 67 | terms of search traffic. Just **select our DSN data centers on the map and see 68 | how performance in those countries is optimized**. 69 | 70 | Algolia will then automatically take care of the distribution and the 71 | synchronization of your indices around the world. End-users' queries will be 72 | automatically routed to the closest data center among those you've selected, 73 | ensuring the best possible experience. Algolia DSN delivers an ultra low 74 | response time and automatic fail-over on another region if a region is down. 75 | 76 | [![][5]](https://www.algolia.com/dsn/setup) 77 | 78 | It is that simple! 79 | 80 | Today, several services including HackerNews, TeeSpring, Product Hunt and 81 | Zendesk are leveraging **Algolia DSN to provide faster search to their global 82 | users**. 83 | 84 | Want to find out more about the Algolia experience ? 85 | 86 | [Discover and try it here][6]! 87 | 88 | 89 | [1]: http://glinden.blogspot.fr/2006/11/marissa-mayer-at-web-20.html 90 | [2]: /algoliasearch-jekyll-hyde/assets/user-experience.jpg 91 | [3]: /algoliasearch-jekyll-hyde/assets/DSN-b3ce122c790c492c2f2c8ddbabaae464.jpg 92 | [4]: /algoliasearch-jekyll-hyde/assets/shot.jpg 93 | [5]: /algoliasearch-jekyll-hyde/assets/dsn-shot.jpg 94 | [6]: https://www.algolia.com/features 95 | -------------------------------------------------------------------------------- /_posts/2013-01-24-why-android-apk-format-is-a-terrible-mistake.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Why Android APK Format is a Mistake 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | When I started to develop for Android it appeared to me that an APK file was 13 | just an archive, a simple approach that you can find in many systems today. 14 | Files are extracted from the archive at installation and you can access them 15 | via the file-system. 16 | 17 | This seemed even more reasonable since Android uses Linux which is very good 18 | in respect to POSIX standards. 19 | 20 | But I was completely wrong! An APK is not a mere archive: the application 21 | starts from and uses the APK at runtime! This is a horrible decision that will 22 | probably hurt Android for a long time... 23 | 24 | **[Edit 28-Jan-2013]** The goal of this post was to express my point of view about the bad properties of using directly the APK file at runtime versus relying on the file system. I used memory-mapped file to illustrate this but the post is incorrect on that topic. There is in fact a way to memory-map a file directly from the APK: you can use an extension for which files are stored uncompressed inside the APK (mp3, jpg, ...) and use the `AssetManager.openFD()` or `Resources.openRawResourceFD()` to have offset/length inside the APK file. 25 | 26 | All my thanks to Jay Freeman for his excellent feedback. His comments helped 27 | me to understand my mistake and to improve our Android integration! 28 | 29 | **[/Edit]** 30 | 31 | ### What is the Problem with the APK format? 32 | 33 | Let's look at our own example. At Algolia, we have designed an efficient 34 | binary data-structure that is able to answer instant-search queries in just a 35 | few milliseconds, even with a very big data set (for example with all the 36 | world cities' names from Geonames: 3M+ entries). This data-structure is 37 | designed to be used directly on disk without being copied in memory. To obtain 38 | optimal performance, we use a [memory-mapped 39 | file][1] which is standard on 40 | all platforms, especially on Linux. 41 | 42 | We have been able to use memory-mapped files on all platforms, except on 43 | Android!  In fact you can only retrieve an InputStream from a file packaged in 44 | an APK. So the only solution to use a memory-mapped file is to copy the 45 | resource from the APK on disk and then to use the file-system. This seems like 46 | re-implementing an installer in each application. 47 | 48 | ### Is the APK so bad? Why did they design it this way? 49 | 50 | I imagine that Android developers chose this approach to solve some pitfalls 51 | of file-systems. I can think for example about solving performance problems 52 | when you have a lot of small files in one folder, or reducing the size of 53 | applications on the device (resources are compressed in the APK and 54 | decompressed only when the application uses them, which actually contributes 55 | to the sluggish image of Android). 56 | 57 | I may of course be wrong, there may be other more important reasons for this 58 | approach. But if not, Android should have thought more about the consequences 59 | of their choice: in the long term, the APK constraints are more serious than 60 | those small pitfalls that could have been solved in other ways. 61 | 62 | But wait... Android applications can contain dynamic libraries (.so files) via 63 | NDK. Isn't it the principle of dynamic libraries to be memory-mapped? In fact 64 | I am pretty sure they discovered this problem when working on NDK since 65 | dynamic libraries are automatically extracted from APK file at installation 66 | and stored in an application directory in '/data/data'. I am wondering why 67 | they decided to implement this hack instead of fixing the problem... 68 | 69 | ### Conclusion 70 | 71 | Developing an API, a SDK or worse, a whole platform, is extremely difficult. 72 | Let's face it, it's unavoidable to ship some badly designed components or 73 | inconsistent APIs. We definitely need to listen to developers' feedback even 74 | when it hurts. Actually, the real difficulty comes when it's time to put 75 | things right without alienating existing users! 76 | 77 | By the way, if you know more about APK design choices, I'm interested to hear 78 | from you! 79 | 80 | 81 | [1]: http://en.wikipedia.org/wiki/Memory-mapped_file 82 | -------------------------------------------------------------------------------- /_posts/2014-10-10-aftership-leverages-algolias-search-service-track-10-million-packages-around-world.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: AfterShip Leverages Algolia's Search as a Service to Track 10 Million Packages Around The World 4 | author: 5 | login: marie-auxille 6 | email: marie-auxille.denis@algolia.com 7 | display_name: Marie-Auxille Denis 8 | first_name: Marie-Auxille 9 | last_name: Denis 10 | --- 11 | 12 | Algolia Speeds Up Search Result Delivery Times From 10 Seconds To 250 13 | Milliseconds.The following post is a guest post by [Teddy 14 | Chan][1], Founder and CEO at 15 | [AfterShip][2]. 16 | 17 | ![Teddy Chan AfterShip][3] 18 | 19 | AfterShip is an online tracking platform which helps online merchants track 20 | their shipment across multiple carriers and notify their customers via email 21 | or mobile. Being an online merchant myself, I shipped more than 30,000 22 | packages a month around the world. When customers contacted me to get an 23 | update on shipments I realized that I couldn't track shipments from different 24 | carriers and get updates on their status in a single place. So I built 25 | Aftership to allow both consumers and online merchants view all their packages 26 | on a single platform. 27 | 28 | After winning the 2011 Global Startup Battle and 2011 Startup Weekend Hong 29 | Kong Aftership opened into beta and quickly helped thousands of online 30 | merchants to send out over 1,000,000 notifications to customers. 31 | 32 | One of the key parts of our service is providing customers around the world 33 | with up-to-date information about their packages. 34 | 35 | Right now we have more than 10 million tracking numbers in our database. This 36 | causes a few different challenges when it comes to search and we needed 37 | technology that would help us continuously index constantly changing 38 | information. 39 | 40 | ### Our first challenge is that we are a small team with only 1 engineer. 41 | 42 | We are not in the search business, so we needed a solution that would be easy 43 | to implement and work well with our existing infrastructure. Algolia's 44 | extensive documentation made it easy to see that our set up and implementation 45 | time would be extremely fast and would work with any language and database, so 46 | we could get back to our core business. 47 | 48 | **Algolia was super easy, we had it tested, up and running in a week.** 49 | 50 | ### Our second challenge was quickly delivering search results. 51 | 52 | On Redis, searching for packages was simply impossible. For each query, it 53 | would simply lock up until the result was found, so it could run only one 54 | search at a time. Each search with Redis was taking up to 10 seconds. **With 55 | Algolia we reduced search result delivery times to 250 milliseconds for any 56 | customer anywhere in the world.** When you think about thousands of merchants 57 | who send more than 1 million packages per month, you can see how speed is 58 | critical. 59 | 60 | Downtime also is not an option when tracking packages around the globe. 61 | 62 | We are very strict when adopting new technologies and SaaS technologies can't 63 | slow down our system. 64 | 65 | **Algolia had the highest uptime of the other solutions we looked at. There was no physical downtime.** 66 | 67 | ### Our final challenge was search complexity. 68 | 69 | Sometimes you need to know how many shipments are coming from Hong Kong and 70 | exactly where they are in transit to and from the U.S.. Shipments going around 71 | the globe can change status several times within a single day. With Algolia's 72 | indexing we are able to instantly deliver up-to-date notifications on all 10 73 | million packages, so that customers can not only track their package on its 74 | journey, but they can also go to their online merchant's shop and see a real- 75 | time status of their package. 76 | 77 | **In the end, it was Algolia's customer service that won us over.** 78 | Similar services and platforms were not responsive. With Algolia we either had 79 | the documentation we needed, immediately were able to get advice from an 80 | engineer or had our problem solved in less than a day. With such a small team 81 | this means a lot. And with the Enterprise package we know that Algolia will 82 | grow with us as quickly as our business does. 83 | 84 | **Want to find out more about the Algolia experience ? 85 | [ Discover and try it here ][4]** 86 | 87 | 88 | [1]: http://hk.linkedin.com/in/teddychan/ 89 | [2]: https://www.aftership.com/ 90 | [3]: /algoliasearch-jekyll-hyde/assets/teddy.png 91 | [4]: https://www.algolia.com/features 92 | -------------------------------------------------------------------------------- /_posts/2014-07-09-keeping-data-in-your-search-engine-up-to-date.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Keeping Data in your Search Engine Up-to-Date 4 | author: 5 | login: julien 6 | email: julien.lemoine@algolia.com 7 | display_name: julien 8 | first_name: Julien 9 | last_name: Lemoine 10 | --- 11 | 12 | When we developed the first version of Algolia Search, we put a lot of effort 13 | into developing a data update API. It worked like this: You could send us a 14 | modified version of your data as soon as the change appeared, even if it 15 | concerned only a specific part of a record. For example, this batch of 16 | information could be the updated price or number of reviews, and we would only 17 | update this specific attribute in your index. 18 | 19 | However, this initial plan did not take into account that most of our big 20 | customers would not benefit from this API due to their existing 21 | infrastructure. If you had not planned to catch all updates in your 22 | architecture, or if you were not using a framework like Ruby on Rails, it 23 | could be very difficult to even have a notification for any of these updates. 24 | The solution in this case was to use a batch update on a regular basis. It was 25 | a good method to use if you didn't want to change a single line of code in 26 | your existing infrastructure, but the batch update was far from a cure-all. 27 | 28 | ## The problem of batch update 29 | 30 | There are two main ways to perform a batch update on a regular basis: 31 | 32 | 1. Scan your database and update all objects. This method is good if you have no delete operation, but if some data are removed from your database, you will need to perform an extra check to handle delete, which can be very slow. 33 | 2. Clear the content of the index and import all your objects. With this method, you ensure that your index is well synchronized with your database. However, if you receive queries during the import, you will return partial results.  If interrupted, the whole rescan could break your relevance or your service. 34 | 35 | So the two approaches are somewhat buggy and dangerous. 36 | 37 | ## Another approach: build a new index with another name 38 | 39 | Since our API allows the creation of a new index with a different name, you 40 | could have made your batch import in a new index. Afterward, you would just 41 | need to update your front end to send queries to this new index. 42 | 43 | Since all indexing jobs are done asynchronously, we first need to check that 44 | an indexing job is finished. In order to do that, we return an integer (called 45 | TaskID) that allows you to check if an update job is applied. Thus, you just 46 | have to use the API to check that the job is indexed. 47 | 48 | But then a problem arises with mobile applications: You cannot change the 49 | index name of an application as easily, since most of the time, it is a 50 | constant in the application code. And even for a website, it means that the 51 | batch will need to inform your frontend that the index name is different. This 52 | can be complex. 53 | 54 | ## The elegant solution: move operation 55 | 56 | To solve these problems, we implemented a command that is well known on file 57 | systems: **move**. You can move your new index on the old one, and this will 58 | atomically update the content of the old index with the content of the new 59 | one. With this new approach, you can solve all the previous update problems 60 | with one simple procedure. Here's how you would update an index called 61 | "MyIndex": 62 | 63 | 1. Initialize an index "MyIndex.tmp" 64 | 2. Scan your database and import all your data in "MyIndex.tmp" 65 | 3. Move "MyIndex.tmp in "MyIndex" 66 | 67 | You don't have to do any modification on your backend to catch modifications, 68 | nor do you need to change the index name on the frontend. Even better, you 69 | don't need to check the indexing status with our TaskID system since the 70 | "move" operation will simply be queued after all "adds". All queries will go 71 | to the new index when it is ready. 72 | 73 | ## The beauty of the move command 74 | 75 | This command is so elegant that even customers who had been sending us 76 | realtime updates via our updates API have decided to use this batch update on 77 | a regular basis. The move command is a good way to ensure that there are no 78 | bugs in your update code, nor divergence between your database and Algolia. 79 | 80 | This operation is supported in our twelve API Clients. We go even further in 81 | our Ruby on Rails integration: You need only use the 'reindex' command 82 | (introduced in 1.10.5) to automatically build a new temporary index and move 83 | it on top of the existing one. 84 | 85 | The move command is an example of how we try to simplify the life of 86 | developers. If you see any other way we can help you, let us know and we'll do 87 | our best to remove your pain! 88 | 89 | -------------------------------------------------------------------------------- /_posts/2013-03-26-instant-search-on-crunchbase.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Instant Search on CrunchBase 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | After launching the Beta Cloud version of Algolia, we wanted to demonstrate 13 | what it can do. We built a search engine using CrunchBase data, so 14 | entrepreneurs can easily search for their company or themselves. [Check it 15 | out!][1] 16 | 17 | You can search for companies, people and financial organizations, using 18 | multiple attributes. Results are updated after each keystroke and matching 19 | characters are highlighted. And of course it tolerates typos. In this post 20 | we'll explain in more detail how it works. 21 | 22 | ## Indexation 23 | 24 | The CrunchBase API is unfortunately rather poor. There is no way to know the 25 | latest update. So we dump it regularly and push it to our servers in JSON 26 | format after pruning unnecessary attributes and adding images encoded in 27 | base64. 28 | 29 | We actually create 3 indexes for companies (117k+ entries), persons (152k+ 30 | entries) and financial organizations (9k+ entries). The JSON files, including 31 | images, are respectively 150MB, 70MB & 7MB.  The full indexation takes about 5 32 | seconds (excluding upload time). Resulting index sizes are respectfully 124MB, 33 | 85MB and 7,5MB. 34 | 35 | Indexation is done simultaneously in 3 datacenters: US-West, US-East & Europe. 36 | Additional datacenters are on the roadmap. 37 | 38 | ## Instant Search 39 | 40 | We trigger a query directly after page load and again after each keystroke. To 41 | simplify communication with the server, we created a javascript client 42 | (contact us if you want to use it before its release). We then simply call the 43 | search function indicating the callback that will handle resulting hits 44 | asynchronously. More details to follow once we've written the doc! 45 | 46 | We automatically choose the server closest to your location by using [Amazon 47 | Route 53][2]. Once the DNS lookup is resolved, it 48 | lets us get low enough latencies that the response feels nearly instantaneous 49 | (if you test it from North America or Europe). From DSL connections, we obtain 50 | search latencies of about 90ms in San Francisco, 75ms in New York and 65ms in 51 | London. About 20ms are used for querying the index, 5ms for compressing the 52 | data and 5ms for uncompressing. The remaining time is the actual transfer of 53 | the data and depends of your location and the quality of your connection. 54 | 55 | If you're a hacker, you may also remark the presence of an API key in the 56 | javascript. It cannot be hidden as we directly query our servers from the 57 | browser. The operations it enables are however restricted to search only, you 58 | would need to use a different key to update entries for example. You can 59 | create and revoke as many API keys you need directly from the API. 60 | 61 | ## Hits Display 62 | 63 | No designer worked on the demo, but we hope it doesn't show! We execute the 3 64 | queries simultaneously and display the results by blocks of 20 hits. 65 | Additional queries are automatically triggered when scrolling to the bottom of 66 | the page. 67 | 68 | We display approximate results with a transparent background to clearly 69 | differentiate them. 70 | 71 | You can use the arrow keys to navigate inside the results. 72 | 73 | ## Ranking 74 | 75 | We use the standard ranking order. By descending priority: 76 | 77 | * Exact matches before approximate matches; 78 | * User-defined order of attributes; 79 | * Distance between the matching term and the beginning of the attribute; 80 | * Proximity between terms in multi-word queries; 81 | * User defined score. 82 | 83 | For the order of attributes, we use {name, twitter, organization or people, 84 | description}. This translates into very simple settings. Here are the settings 85 | of the persons index, for example: 86 | 87 | 88 | { 89 | "attributesToIndex": ["name", "twitter", "unordered(companies)", "description"], 90 | "attributesToHighlight": ["name", "twitter", "companies", "description"], 91 | "customRanking": ["desc(size)", "asc(name)"] 92 | } 93 | 94 | By default, all attributes are indexed and highlighted: "attributesToIndex" & 95 | "attributesToHighlight" enable us to precisely define what to index (and in 96 | what order) and what to highlight. The "unordered" modifier disable ranking 97 | between values of a multi-valued attributes. 98 | 99 | For the user defined score ("customRanking" in settings) , we sort by 100 | decreasing order of CrunchBase entry size and then by alphabetical order. 101 | 102 | ## Help us 103 | 104 | This is just a demo but we'd like to continue improving it! Please tell us 105 | what you think and send your suggestions: contact at algolia dot com 106 | 107 | 108 | [1]: http://www.algolia.com/demo/crunchbase/ 109 | [2]: http://aws.amazon.com/route53/ 110 | -------------------------------------------------------------------------------- /_posts/2013-04-16-v2-our-new-offline-search-sdk-with-geo-search-and-other-features.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: 'V2: Search by Geolocation in our Offline Search SDK' 4 | author: 5 | login: nicolas 6 | email: nicolas@algolia.com 7 | display_name: nicolas 8 | first_name: Nicolas 9 | last_name: Dessaigne 10 | --- 11 | 12 | While our latest news focused on the Algolia Search cloud offer (you can still 13 | join the [beta][1], we're 14 | pleased to introduce a major new version of Algolia Search offline: V2! It is 15 | available today for iOS, Android and OS X. Windows Phone and Windows versions 16 | will be released as soon as they are ready. A few months in the making, these 17 | new features were built on early customer feedback and will simplify 18 | integration. 19 | 20 | ## Algolia becomes the easiest way to search by geolocation! 21 | 22 | The ease of integration is a constant concern for us and that's why we 23 | carefully consider every new feature. Two important features made it in this 24 | version: 25 | 26 | * Geo-search means the ability to search around a location or inside a bounding box. Results can be sorted by distance and of course geo-queries can be combined with textual ones. We added a dedicated tutorial in the doc to get up to speed with this new feature in no time (for [iOS][2] and [Android][3]. 27 | * Tag filters enable restriction of results to specific tags. We received this demand a number of times in order to avoid the creation of too many specialized indexes. 28 | 29 | These new features are also available in the beta of our cloud version! 30 | 31 | ## Improved performance and ranking 32 | 33 | With some hard work... and a lot of profiling, we have been able to get a 10% 34 | gain in performance on every query. 35 | 36 | In V1, name matches were always considered more important than other 37 | attributes, but we didn't consider differences between other attributes. This 38 | changed in V2: ranking priority now respects the order in which you indicate 39 | attributes in the textToIndex method. It's more powerful while actually being 40 | more consistent with no specific processing of the name field. 41 | 42 | But this improvement comes at the cost of a slightly bigger index and longer 43 | computation. If index size is important or if you need to earn a few 44 | nanoseconds more, you can optimize it away with the increaseCompression 45 | method. You'll get a 10 to 30% reduction in index size and an additional 20% 46 | boost in performance (that's 30% total compared to V1!). 47 | 48 | ## Easy just got easier 49 | 50 | Integrating search in an app has never been so easy. For V2 we took into 51 | account all the excellent feedback we received, and wherever it was possible 52 | we simplified the API: 53 | 54 | * No distinction between suggest and search methods. We wanted to match the expected use-cases of the SDK but it was causing more confusion than anything else. So there is now only one way to send queries to an index: the search method. 55 | * With the addition of geo-search, the index class was becoming crowded. We simplified this by decoupling the search approach and query definition. A small set of search methods enable the developer to choose if the search will be synchronous, use a callback, or batch several queries. And a simple SearchQuery class defines the nature of the queries themselves: geolocation, use of prefixes, tag filters, etc. 56 | * Out of simple strings for which we provide a helper, every indexable object now has a UID. Our use of a "name" for this role led to a few difficulties when collisions were possible (persons for example). There are no longer any privileged attributes. 57 | * License key initialization is now done using a static method. It is a best practice that was actually necessary to build a [RubyMotion gem][4]. 58 | 59 | Specific to Android, we also added an AbstractIndexable abstract class. 60 | Instead of implementing the Indexable interface, you now have the option of 61 | directly extending AbstractIndexable that takes care of optional methods for 62 | you. 63 | 64 | Specific to iOS, you can now directly index core data entities with the 65 | setCoreDataEntityDescription selector. No need to create a wrapper. 66 | 67 | ## Still able to read V1 indexes 68 | 69 | If for any reason you cannot replace or reindex your data, V2 is still able to 70 | search in a V1 index. However, as the name attribute was removed you do need 71 | to implement the IndexableLegacy interface. If you then publish changes, the 72 | new index will be in the V2 format. 73 | 74 | We're really sorry to make our Windows Phone and Windows customers wait. Feel 75 | free to torment us with your needs, it's great motivation to finish more 76 | quickly ;) 77 | 78 | If you're still reading, I guess it's time for you to test this new version of 79 | the Algolia Search Offline SDK. [Get started][5]! 80 | 81 | 82 | [1]: http://blog.algolia.com/our-saas-version-is-in-beta/) 83 | [2]: http://www.algolia.com/doc/ios/#iOS_Geoloc 84 | [3]: http://www.algolia.com/doc/android/#android_Geoloc) 85 | [4]: http://blog.algolia.com/algolia-search-is-now-available-for-rubymotion/ 86 | [5]: http://www.algolia.com/get-started/ 87 | -------------------------------------------------------------------------------- /_posts/2015-05-11-dns-fallback-for-better-resilience.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: DNS fallback for better resilience 4 | author: 5 | login: adam 6 | email: adam@algolia.com 7 | display_name: Adam Surak 8 | first_name: Adam 9 | last_name: Surak 10 | --- 11 | 12 | At Algolia, we are obsessed with finding a way to have a 99.9999% available 13 | architecture. On our way to achieve that, we have to make sure every piece of 14 | the architecture can safely fail without affecting the service. 15 | 16 | The first point of the architecture where a customer's request starts to 17 | interact with our service is not the router in the datacenter, but a DNS 18 | resolving a domain name to the IP address "long time" before that. This piece 19 | of architecture is very often overlooked and that is no surprise as you mostly 20 | get best-effort DNS service automatically with your server. 21 | 22 | ## Latency 23 | 24 | For couple months we are a happy user of [NSONE][1] that 25 | provides us with the first level of logic. We use NSONE for its superb 26 | performance and data-driven DNS that gives us control in steering the traffic 27 | of our [Distributed Search Network][2] to the proper 28 | server - whether it means closest or simply available one. But as any other 29 | network dependent service, there are factors outside of NSONE's control that 30 | can influence availability of its DNS resolves and consequently Algolia. BGP 31 | routing is still a huge magic and "optimizations" of some ISPs are beyond 32 | understanding. Well, they do not always make the optimizations in the 33 | direction we would like to. For some services the change of DNS resolution 34 | time from 10 to 500ms does not mean a lot but for us it is a deal breaker. 35 | 36 | [![nsone-dig-latency][3]](https://blog.algolia.com/wp-content/uploads/2015/05/nsone-dig-latency.png) Resolution of latency-1 via NSONE 37 | 38 | ## DDoS 39 | 40 | When we started to think about our DNS dependency, we remembered the [2014 41 | DDoS attack on UltraDNS][4] and the situation when there was not enough 42 | [#hugops][5] for all the services impacted. 43 | During the previous [attack on UltraDNS in 2009][6] even 44 | big names like Amazon and SalesForce got impacted. 45 | 46 | ## Solution 47 | 48 | In most of the cases it would mean adding another DNS name server from a 49 | different provider and replicate the records. But not in ours. NSONE has some 50 | unique features that we would have to give up and find a common feature subset 51 | with a different provider. In the end we would have to serve a portion of DNS 52 | resolutions via slower provider for no good reason. 53 | 54 | Since we provide custom made API clients we have one more place where to put 55 | additional logic. Now came a time to choose a resilient provider for our 56 | secondary DNS and since we like AWS, Route53 was a clear choice. Route53 has 57 | ok performance, many POPs around the world and API we already had integration 58 | for. 59 | 60 | In the last moment, one more paranoid idea came to us - let's not rely on a 61 | single [TLD][7]. No good reason 62 | for that, it was just "what if...?" moment. 63 | 64 | [![route53-dig-latency][8]](https://blog.algolia.com/wp-content/uploads/2015/05/route53-dig-latency.png) Resolution of latency-1 via 65 | Route53 66 | 67 | Right now, all the latest versions of our API clients (detailed list below) 68 | use multiple domain names. "algolia.net" is served by NSONE and provides all 69 | the speed and intelligence, "algolianet.com" is served by Route53 in case that 70 | for any reason contacting server via "algolia.net" fails. It brings more work 71 | to our side, brings more cost on our side but it also brings better sleep for 72 | our customers, their customers and us. 73 | 74 | And now we can think what else can fail... 75 | 76 | Minimal versions of API clients with support of multiple DNS: 77 | 78 | * [Javascript v2: 2.9.6](https://github.com/algolia/algoliasearch-client-js/releases/tag/2.9.6) 79 | * [Javascript v3: 3.1.0](https://github.com/algolia/algoliasearch-client-js) 80 | * [Node.js: 1.8.0](https://github.com/algolia/algoliasearch-client-node) 81 | * [Ruby: 1.4.1](https://github.com/algolia/algoliasearch-client-ruby) 82 | * [Ruby on rails: Ruby dependency 1.4.1](https://github.com/algolia/algoliasearch-rails) 83 | * [Python: 1.5.2](https://github.com/algolia/algoliasearch-client-python) 84 | * [PHP: 1.5.5](https://github.com/algolia/algoliasearch-client-php) 85 | * [Java: 1.3.5](https://github.com/algolia/algoliasearch-client-java) 86 | * [Android: 1.6.3](https://github.com/algolia/algoliasearch-client-android) 87 | * [Objective-C: 3.4.1](https://github.com/algolia/algoliasearch-client-objc) 88 | * [C-Sharp: 3.1.0](https://github.com/algolia/algoliasearch-client-csharp) 89 | * [Go: 1.2.0](https://github.com/algolia/algoliasearch-client-go) 90 | 91 | 92 | [1]: https://nsone.net 93 | [2]: https://www.algolia.com/dsn 94 | [3]: /algoliasearch-jekyll-hyde/assets/nsone-dig-latency.png 95 | [4]: https://threatpost.com/ultradns-dealing-with-ddos-attack/105806 96 | [5]: https://twitter.com/hashtag/hugops 97 | [6]: http://www.zdnet.com/article/ddos-attack-on-ultradns-affects-amazon-com-salesforce-com-petco-com/ 98 | [7]: http://en.wikipedia.org/wiki/Top-level_domain 99 | [8]: /algoliasearch-jekyll-hyde/assets/route53-dig-latency.png 100 | -------------------------------------------------------------------------------- /_posts/2014-11-14-jadopado-delivers-instasearch-mobile-web-powered-algolia.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Jadopado delivers instasearch for mobile and web powered by Algolia 4 | author: 5 | login: marie-auxille 6 | email: marie-auxille.denis@algolia.com 7 | display_name: Marie-Auxille Denis 8 | first_name: Marie-Auxille 9 | last_name: Denis 10 | --- 11 | 12 | ## Algolia Increases Online Search Sessions By 60% and Unique Mobile Searches 13 | by 270% 14 | 15 | **The following post is a guest post by Omar Kassim, co-founder of [JadoPado][1].** 16 | 17 | ![Omar-Kassim-Founder-of-JadoPado][2] Founded in 2010, JadoPado is one of the largest e-commerce 18 | sites servicing the GCC, Middle East, North Africa and South Asia.  Its CEO 19 | Omar Kassim wanted to bring an Amazon-like experience to the region.  In just 20 | 3 years of operations the company now boasts thousands of customers, hundreds 21 | of vendors and over $7 million in annual revenues. 22 | 23 | **Realizing that search is a key component of their user experience and engagement**, Omar and his small team of 15 set off to build new search capabilities that would help users find the products they wanted, lightning fast. In addition, the team was developing a revamped mobile experience and saw that search needed to be spot on for both smartphones and tablets. _"I saw search as a competitive tool and as a strategy to get a leg up on our competition.  After seeing Algolia on Hacker News I was absolutely blown away.  After looking at the demos, we threw out what we were doing internally in terms of a small search revamp and I had one of our team get cracking with Algolia right away. As a little startup, it really helped that Algolia's price points were within reach in terms of not breaking the bank to get things rolling."_ 24 | 25 | ### The Power of Instant Search 26 | 27 | After configuring and testing Algolia for two weeks, JadoPado had the results 28 | they were looking for. Branded internally as InstaSearch, JadoPado knew that 29 | it would dramatically improve how search functioned on both mobile and the web 30 | at JadoPado. _"The idea from the outset was to build InstaSearch. I kept 31 | ending up at the Algolia demo and **thought it would be incredible if we could 32 | forget all user interaction aside from typing and just display results right 33 | away**. Remove what you've typed and the results disappear taking you back to 34 | where you were. We then spent a bit of time figuring out how to get each 35 | result "page" to have a URL that could be used with external search or shared 36 | elsewhere,"_ explained Omar. 37 | 38 | ![japopado ecommerce][3] 39 | 40 | ### Making Search Seamless 41 | 42 | _"We looked at a number of solutions. **One of our biggest intentions was to 43 | try to get search to be extremely fast and as slick as possible**. Customers 44 | should feel like search "just works" and that it is a super easy way to get 45 | straight to to whatever they may be looking for. Algolia has allowed us to 46 | accomplish that,"_ Omar explained.  _"**Moving search from a not really 47 | working internal model to a search as a service platform** has allowed us to 48 | focus on other areas while knowing that search works and that we've got an 49 | edge over our competition."_ 50 | 51 | ### Support For Arabic 52 | 53 | With more than 20 countries to support, the JadoPado team knew that the key to 54 | success in the region was to ensure that search be delivered in Arabic as 55 | well. Omar explained, _"The final bits were figuring out a separate set of 56 | indexes for Arabic (as we were about to roll out a standalone Arabic version 57 | of JadoPado) and getting the faceting right. This was easy to do with the deep 58 | Algolia documentation."_ **Algolia works with all languages, including 59 | Chinese, Japanese, Korean, and Arabic. No specific configuration required, 60 | speed and ranking perform exactly the same way**. 61 | 62 | ### Better Business Through Search 63 | 64 | In May the team rolled out InstaSearch, Arabic support and a newly revamped 65 | mobile experience with search at the center. JadoPado immediately experienced 66 | a doubling in conversions and activity that was triple a typical day. 67 | **Compared to the same 30 day period in 2013, JadoPado saw an increase in site 68 | visits through search from 8.2% to 11.3%.** 69 | 70 | Additionally: 71 | 72 | * Sessions with search has jumped 59.96%. 73 | * Unique searches has jumped 46.87% 74 | * Average search depth has increased by 58.87%. 75 | 76 | ### Mastering Mobile Through Search 77 | 78 | **The greater impact of Algolia's hosted search was JadoPado's revamped mobile experience**. Search is often the first action customers take on a mobile device.  With instant search, autocorrect and full language support,  improving search and the quality of results can have a significant impact on revenues.  With Algolia implemented as part of JadoPado's mobile site, the company saw strong results with **visits from search increasing from 4.3% to 15% over the same time period and session exits decreasing by 16.57%.** A big change. And **search increased engagement on all levels**: 79 | 80 | * Mobile sessions with search jumped by 233.92% 81 | * Total unique mobile searches jumped 268.37% 82 | * Average search depth on mobile devices jumped by 41.05%. 83 | 84 | _Images courtesy of JadoPado. Learn more on their 85 | [website][4]._ 86 | 87 | 88 | [1]: https://jadopado.com/ 89 | [2]: /algoliasearch-jekyll-hyde/assets/Omar-Kassim-Founder-of-JadoPado-Image-2-1.jpg 90 | [3]: /algoliasearch-jekyll-hyde/assets/jadopado.gif 91 | [4]: https://jadopado.com/ 92 | -------------------------------------------------------------------------------- /public/css/hyde.css: -------------------------------------------------------------------------------- 1 | /* 2 | * __ __ 3 | * /\ \ /\ \ 4 | * \ \ \___ __ __ \_\ \ __ 5 | * \ \ _ `\/\ \/\ \ /'_` \ /'__`\ 6 | * \ \ \ \ \ \ \_\ \/\ \_\ \/\ __/ 7 | * \ \_\ \_\/`____ \ \___,_\ \____\ 8 | * \/_/\/_/`/___/> \/__,_ /\/____/ 9 | * /\___/ 10 | * \/__/ 11 | * 12 | * Designed, built, and released under MIT license by @mdo. Learn more at 13 | * https://github.com/poole/hyde. 14 | */ 15 | 16 | 17 | /* 18 | * Contents 19 | * 20 | * Global resets 21 | * Sidebar 22 | * Container 23 | * Reverse layout 24 | * Themes 25 | */ 26 | 27 | 28 | /* 29 | * Global resets 30 | * 31 | * Update the foundational and global aspects of the page. 32 | */ 33 | 34 | html { 35 | font-family: "PT Sans", Helvetica, Arial, sans-serif; 36 | } 37 | @media (min-width: 48em) { 38 | html { 39 | font-size: 16px; 40 | } 41 | } 42 | @media (min-width: 58em) { 43 | html { 44 | font-size: 20px; 45 | } 46 | } 47 | 48 | 49 | /* 50 | * Sidebar 51 | * 52 | * Flexible banner for housing site name, intro, and "footer" content. Starts 53 | * out above content in mobile and later moves to the side with wider viewports. 54 | */ 55 | 56 | .sidebar { 57 | text-align: center; 58 | padding: 2rem 1rem; 59 | color: rgba(255,255,255,.5); 60 | background-color: #202020; 61 | } 62 | @media (min-width: 48em) { 63 | .sidebar { 64 | position: fixed; 65 | top: 0; 66 | left: 0; 67 | bottom: 0; 68 | width: 18rem; 69 | text-align: left; 70 | } 71 | } 72 | 73 | /* Sidebar links */ 74 | .sidebar a { 75 | color: #fff; 76 | } 77 | 78 | /* About section */ 79 | .sidebar-about h1 { 80 | color: #fff; 81 | margin-top: 0; 82 | font-family: "Abril Fatface", serif; 83 | font-size: 3.25rem; 84 | } 85 | 86 | /* Sidebar nav */ 87 | .sidebar-nav { 88 | margin-bottom: 1rem; 89 | } 90 | .sidebar-nav-item { 91 | display: block; 92 | line-height: 1.75; 93 | } 94 | a.sidebar-nav-item:hover, 95 | a.sidebar-nav-item:focus { 96 | text-decoration: underline; 97 | } 98 | .sidebar-nav-item.active { 99 | font-weight: bold; 100 | } 101 | 102 | /* Sticky sidebar 103 | * 104 | * Add the `sidebar-sticky` class to the sidebar's container to affix it the 105 | * contents to the bottom of the sidebar in tablets and up. 106 | */ 107 | 108 | @media (min-width: 48em) { 109 | .sidebar-sticky { 110 | position: absolute; 111 | right: 1rem; 112 | bottom: 1rem; 113 | left: 1rem; 114 | } 115 | } 116 | 117 | 118 | /* Container 119 | * 120 | * Align the contents of the site above the proper threshold with some margin-fu 121 | * with a 25%-wide `.sidebar`. 122 | */ 123 | 124 | .content { 125 | padding-top: 4rem; 126 | padding-bottom: 4rem; 127 | } 128 | 129 | @media (min-width: 48em) { 130 | .content { 131 | max-width: 38rem; 132 | margin-left: 20rem; 133 | margin-right: 2rem; 134 | } 135 | } 136 | 137 | @media (min-width: 64em) { 138 | .content { 139 | margin-left: 22rem; 140 | margin-right: 4rem; 141 | } 142 | } 143 | 144 | 145 | /* 146 | * Reverse layout 147 | * 148 | * Flip the orientation of the page by placing the `.sidebar` on the right. 149 | */ 150 | 151 | @media (min-width: 48em) { 152 | .layout-reverse .sidebar { 153 | left: auto; 154 | right: 0; 155 | } 156 | .layout-reverse .content { 157 | margin-left: 2rem; 158 | margin-right: 20rem; 159 | } 160 | } 161 | 162 | @media (min-width: 64em) { 163 | .layout-reverse .content { 164 | margin-left: 4rem; 165 | margin-right: 22rem; 166 | } 167 | } 168 | 169 | 170 | 171 | /* 172 | * Themes 173 | * 174 | * As of v1.1, Hyde includes optional themes to color the sidebar and links 175 | * within blog posts. To use, add the class of your choosing to the `body`. 176 | */ 177 | 178 | /* Base16 (http://chriskempson.github.io/base16/#default) */ 179 | 180 | /* Red */ 181 | .theme-base-08 .sidebar { 182 | background-color: #ac4142; 183 | } 184 | .theme-base-08 .content a, 185 | .theme-base-08 .related-posts li a:hover { 186 | color: #ac4142; 187 | } 188 | 189 | /* Orange */ 190 | .theme-base-09 .sidebar { 191 | background-color: #d28445; 192 | } 193 | .theme-base-09 .content a, 194 | .theme-base-09 .related-posts li a:hover { 195 | color: #d28445; 196 | } 197 | 198 | /* Yellow */ 199 | .theme-base-0a .sidebar { 200 | background-color: #f4bf75; 201 | } 202 | .theme-base-0a .content a, 203 | .theme-base-0a .related-posts li a:hover { 204 | color: #f4bf75; 205 | } 206 | 207 | /* Green */ 208 | .theme-base-0b .sidebar { 209 | background-color: #90a959; 210 | } 211 | .theme-base-0b .content a, 212 | .theme-base-0b .related-posts li a:hover { 213 | color: #90a959; 214 | } 215 | 216 | /* Cyan */ 217 | .theme-base-0c .sidebar { 218 | background-color: #75b5aa; 219 | } 220 | .theme-base-0c .content a, 221 | .theme-base-0c .related-posts li a:hover { 222 | color: #75b5aa; 223 | } 224 | 225 | /* Blue */ 226 | .theme-base-0d .sidebar { 227 | background-color: #6a9fb5; 228 | } 229 | .theme-base-0d .content a, 230 | .theme-base-0d .related-posts li a:hover { 231 | color: #6a9fb5; 232 | } 233 | 234 | /* Magenta */ 235 | .theme-base-0e .sidebar { 236 | background-color: #aa759f; 237 | } 238 | .theme-base-0e .content a, 239 | .theme-base-0e .related-posts li a:hover { 240 | color: #aa759f; 241 | } 242 | 243 | /* Brown */ 244 | .theme-base-0f .sidebar { 245 | background-color: #8f5536; 246 | } 247 | .theme-base-0f .content a, 248 | .theme-base-0f .related-posts li a:hover { 249 | color: #8f5536; 250 | } 251 | --------------------------------------------------------------------------------