<?php namespace CodeIgniter; /** * CodeIgniter * * An open source application development framework for PHP * * This content is released under the MIT License (MIT) * * Copyright (c) 2014-2019 British Columbia Institute of Technology * * 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: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * 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. * * @package CodeIgniter * @author CodeIgniter Dev Team * @copyright 2014-2019 British Columbia Institute of Technology (https://bcit.ca/) * @license https://opensource.org/licenses/MIT MIT License * @link https://codeigniter.com * @since Version 3.0.0 * @filesource */ use CodeIgniter\Filters\Exceptions\FilterException; use CodeIgniter\HTTP\DownloadResponse; use CodeIgniter\HTTP\RedirectResponse; use CodeIgniter\HTTP\Request; use CodeIgniter\HTTP\ResponseInterface; use Config\Services; use Config\Cache; use CodeIgniter\HTTP\URI; use CodeIgniter\Debug\Timer; use CodeIgniter\Events\Events; use CodeIgniter\HTTP\Response; use CodeIgniter\HTTP\CLIRequest; use CodeIgniter\Router\RouteCollectionInterface; use CodeIgniter\Exceptions\PageNotFoundException; /** * This class is the core of the framework, and will analyse the * request, route it to a controller, and send back the response. * Of course, there are variations to that flow, but this is the brains. */ class CodeIgniter { /** * The current version of CodeIgniter Framework */ const CI_VERSION = '4.0.0-beta.1'; /** * App startup time. * * @var mixed */ protected $startTime; /** * Total app execution time * * @var float */ protected $totalTime; /** * Main application configuration * * @var \Config\App */ protected $config; /** * Timer instance. * * @var Timer */ protected $benchmark; /** * Current request. * * @var HTTP\Request|HTTP\IncomingRequest|CLIRequest */ protected $request; /** * Current response. * * @var HTTP\ResponseInterface */ protected $response; /** * Router to use. * * @var Router\Router */ protected $router; /** * Controller to use. * * @var string|\Closure */ protected $controller; /** * Controller method to invoke. * * @var string */ protected $method; /** * Output handler to use. * * @var string */ protected $output; /** * Cache expiration time * * @var integer */ protected static $cacheTTL = 0; /** * Request path to use. * * @var string */ protected $path; /** * Should the Response instance "pretend" * to keep from setting headers/cookies/etc * * @var boolean */ protected $useSafeOutput = false; //-------------------------------------------------------------------- public function __construct($config) { $this->startTime = microtime(true); $this->config = $config; } //-------------------------------------------------------------------- /** * Handles some basic app and environment setup. */ public function initialize() { // Set default timezone on the server date_default_timezone_set($this->config->appTimezone ?? 'UTC'); // Setup Exception Handling Services::exceptions() ->initialize(); $this->detectEnvironment(); $this->bootstrapEnvironment(); if (CI_DEBUG) { require_once SYSTEMPATH . 'ThirdParty/Kint/kint.php'; } } //-------------------------------------------------------------------- /** * Launch the application! * * This is "the loop" if you will. The main entry point into the script * that gets the required class instances, fires off the filters, * tries to route the response, loads the controller and generally * makes all of the pieces work together. * * @param \CodeIgniter\Router\RouteCollectionInterface $routes * @param boolean $returnResponse * * @return bool|\CodeIgniter\HTTP\RequestInterface|\CodeIgniter\HTTP\Response|\CodeIgniter\HTTP\ResponseInterface|mixed * @throws \CodeIgniter\Filters\Exceptions\FilterException * @throws \Exception */ public function run(RouteCollectionInterface $routes = null, bool $returnResponse = false) { $this->startBenchmark(); $this->getRequestObject(); $this->getResponseObject(); $this->forceSecureAccess(); $this->spoofRequestMethod(); Events::trigger('pre_system'); // Check for a cached page. Execution will stop // if the page has been cached. $cacheConfig = new Cache(); $response = $this->displayCache($cacheConfig); if ($response instanceof ResponseInterface) { if ($returnResponse) { return $response; } $this->response->pretend($this->useSafeOutput)->send(); $this->callExit(EXIT_SUCCESS); } try { return $this->handleRequest($routes, $cacheConfig, $returnResponse); } catch (FilterException $e) { $logger = Services::logger(); $logger->info('REDIRECTED ROUTE at ' . $e->getMessage()); // If the route is a 'redirect' route, it throws // the exception with the $to as the message $this->response->redirect($e->getMessage(), 'auto', $e->getCode()); $this->callExit(EXIT_SUCCESS); } catch (PageNotFoundException $e) { $this->display404errors($e); } } //-------------------------------------------------------------------- /** * Set our Response instance to "pretend" mode so that things like * cookies and headers are not actually sent, allowing PHP 7.2+ to * not complain when ini_set() function is used. * * @param boolean $safe * * @return $this */ public function useSafeOutput(bool $safe = true) { $this->useSafeOutput = $safe; return $this; } //-------------------------------------------------------------------- /** * Handles the main request logic and fires the controller. * * @param \CodeIgniter\Router\RouteCollectionInterface $routes * @param $cacheConfig * @param boolean $returnResponse * * @return \CodeIgniter\HTTP\RequestInterface|\CodeIgniter\HTTP\Response|\CodeIgniter\HTTP\ResponseInterface|mixed * @throws \CodeIgniter\Router\RedirectException */ protected function handleRequest(RouteCollectionInterface $routes = null, $cacheConfig, bool $returnResponse = false) { $routeFilter = $this->tryToRouteIt($routes); // Run "before" filters $filters = Services::filters(); // If any filters were specified within the routes file, // we need to ensure it's active for the current request if (! is_null($routeFilter)) { $filters->enableFilter($routeFilter, 'before'); $filters->enableFilter($routeFilter, 'after'); } $uri = $this->request instanceof CLIRequest ? $this->request->getPath() : $this->request->uri->getPath(); // Never run filters when running through Spark cli if (! defined('SPARKED')) { $possibleRedirect = $filters->run($uri, 'before'); if ($possibleRedirect instanceof RedirectResponse) { return $possibleRedirect->send(); } // If a Response instance is returned, the Response will be sent back to the client and script execution will stop if ($possibleRedirect instanceof ResponseInterface) { return $possibleRedirect->send(); } } $returned = $this->startController(); // Closure controller has run in startController(). if (! is_callable($this->controller)) { $controller = $this->createController(); // Is there a "post_controller_constructor" event? Events::trigger('post_controller_constructor'); $returned = $this->runController($controller); } else { $this->benchmark->stop('controller_constructor'); $this->benchmark->stop('controller'); } // If $returned is a string, then the controller output something, // probably a view, instead of echoing it directly. Send it along // so it can be used with the output. $this->gatherOutput($cacheConfig, $returned); // Never run filters when running through Spark cli if (! defined('SPARKED')) { $filters->setResponse($this->response); // Run "after" filters $response = $filters->run($uri, 'after'); } else { $response = $this->response; } if ($response instanceof Response) { $this->response = $response; } // Save our current URI as the previous URI in the session // for safer, more accurate use with `previous_url()` helper function. $this->storePreviousURL($this->request->uri ?? $uri); unset($uri); if (! $returnResponse) { $this->sendResponse(); } //-------------------------------------------------------------------- // Is there a post-system event? //-------------------------------------------------------------------- Events::trigger('post_system'); return $this->response; } //-------------------------------------------------------------------- /** * You can load different configurations depending on your * current environment. Setting the environment also influences * things like logging and error reporting. * * This can be set to anything, but default usage is: * * development * testing * production */ protected function detectEnvironment() { // Make sure ENVIRONMENT isn't already set by other means. if (! defined('ENVIRONMENT')) { // running under Continuous Integration server? if (getenv('CI') !== false) { define('ENVIRONMENT', 'testing'); } else { define('ENVIRONMENT', $_SERVER['CI_ENVIRONMENT'] ?? 'production'); } } } //-------------------------------------------------------------------- /** * Load any custom boot files based upon the current environment. * * If no boot file exists, we shouldn't continue because something * is wrong. At the very least, they should have error reporting setup. */ protected function bootstrapEnvironment() { if (is_file(APPPATH . 'Config/Boot/' . ENVIRONMENT . '.php')) { require_once APPPATH . 'Config/Boot/' . ENVIRONMENT . '.php'; } else { header('HTTP/1.1 503 Service Unavailable.', true, 503); echo 'The application environment is not set correctly.'; exit(1); // EXIT_ERROR } } //-------------------------------------------------------------------- /** * Start the Benchmark * * The timer is used to display total script execution both in the * debug toolbar, and potentially on the displayed page. */ protected function startBenchmark() { $this->startTime = microtime(true); $this->benchmark = Services::timer(); $this->benchmark->start('total_execution', $this->startTime); $this->benchmark->start('bootstrap'); } //-------------------------------------------------------------------- /** * Sets a Request object to be used for this request. * Used when running certain tests. * * @param \CodeIgniter\HTTP\Request $request * * @return \CodeIgniter\CodeIgniter */ public function setRequest(Request $request) { $this->request = $request; return $this; } //-------------------------------------------------------------------- /** * Get our Request object, (either IncomingRequest or CLIRequest) * and set the server protocol based on the information provided * by the server. */ protected function getRequestObject() { if ($this->request instanceof Request) { return; } if (is_cli() && ! (ENVIRONMENT === 'testing')) { $this->request = Services::clirequest($this->config); } else { $this->request = Services::request($this->config); // guess at protocol if needed $this->request->setProtocolVersion($_SERVER['SERVER_PROTOCOL'] ?? 'HTTP/1.1'); } } //-------------------------------------------------------------------- /** * Get our Response object, and set some default values, including * the HTTP protocol version and a default successful response. */ protected function getResponseObject() { $this->response = Services::response($this->config); if (! is_cli() || ENVIRONMENT === 'testing') { $this->response->setProtocolVersion($this->request->getProtocolVersion()); } // Assume success until proven otherwise. $this->response->setStatusCode(200); } //-------------------------------------------------------------------- /** * Force Secure Site Access? If the config value 'forceGlobalSecureRequests' * is true, will enforce that all requests to this site are made through * HTTPS. Will redirect the user to the current page with HTTPS, as well * as set the HTTP Strict Transport Security header for those browsers * that support it. * * @param integer $duration How long the Strict Transport Security * should be enforced for this URL. */ protected function forceSecureAccess($duration = 31536000) { if ($this->config->forceGlobalSecureRequests !== true) { return; } force_https($duration, $this->request, $this->response); } //-------------------------------------------------------------------- /** * Determines if a response has been cached for the given URI. * * @param \Config\Cache $config * * @throws \Exception * * @return boolean|\CodeIgniter\HTTP\ResponseInterface */ public function displayCache($config) { if ($cachedResponse = cache()->get($this->generateCacheName($config))) { $cachedResponse = unserialize($cachedResponse); if (! is_array($cachedResponse) || ! isset($cachedResponse['output']) || ! isset($cachedResponse['headers'])) { throw new \Exception('Error unserializing page cache'); } $headers = $cachedResponse['headers']; $output = $cachedResponse['output']; // Clear all default headers foreach ($this->response->getHeaders() as $key => $val) { $this->response->removeHeader($key); } // Set cached headers foreach ($headers as $name => $value) { $this->response->setHeader($name, $value); } $output = $this->displayPerformanceMetrics($output); $this->response->setBody($output); return $this->response; } return false; } //-------------------------------------------------------------------- /** * Tells the app that the final output should be cached. * * @param integer $time * * @return void */ public static function cache(int $time) { static::$cacheTTL = $time; } //-------------------------------------------------------------------- /** * Caches the full response from the current request. Used for * full-page caching for very high performance. * * @param \Config\Cache $config * * @return mixed */ public function cachePage(Cache $config) { $headers = []; foreach ($this->response->getHeaders() as $header) { $headers[$header->getName()] = $header->getValueLine(); } return cache()->save( $this->generateCacheName($config), serialize(['headers' => $headers, 'output' => $this->output]), static::$cacheTTL ); } //-------------------------------------------------------------------- /** * Returns an array with our basic performance stats collected. * * @return array */ public function getPerformanceStats() { return [ 'startTime' => $this->startTime, 'totalTime' => $this->totalTime, ]; } //-------------------------------------------------------------------- /** * Generates the cache name to use for our full-page caching. * * @param $config * * @return string */ protected function generateCacheName($config): string { if (is_cli() && ! (ENVIRONMENT === 'testing')) { return md5($this->request->getPath()); } $uri = $this->request->uri; if ($config->cacheQueryString) { $name = URI::createURIString( $uri->getScheme(), $uri->getAuthority(), $uri->getPath(), $uri->getQuery() ); } else { $name = URI::createURIString( $uri->getScheme(), $uri->getAuthority(), $uri->getPath() ); } return md5($name); } //-------------------------------------------------------------------- /** * Replaces the memory_usage and elapsed_time tags. * * @param string $output * * @return string */ public function displayPerformanceMetrics(string $output): string { $this->totalTime = $this->benchmark->getElapsedTime('total_execution'); $output = str_replace('{elapsed_time}', $this->totalTime, $output); return $output; } //-------------------------------------------------------------------- /** * Try to Route It - As it sounds like, works with the router to * match a route against the current URI. If the route is a * "redirect route", will also handle the redirect. * * @param RouteCollectionInterface $routes An collection interface to use in place * of the config file. * * @return string * @throws \CodeIgniter\Router\RedirectException */ protected function tryToRouteIt(RouteCollectionInterface $routes = null) { if (empty($routes) || ! $routes instanceof RouteCollectionInterface) { require APPPATH . 'Config/Routes.php'; } // $routes is defined in Config/Routes.php $this->router = Services::router($routes); $path = $this->determinePath(); $this->benchmark->stop('bootstrap'); $this->benchmark->start('routing'); ob_start(); $this->controller = $this->router->handle($path); $this->method = $this->router->methodName(); // If a {locale} segment was matched in the final route, // then we need to set the correct locale on our Request. if ($this->router->hasLocale()) { $this->request->setLocale($this->router->getLocale()); } $this->benchmark->stop('routing'); return $this->router->getFilter(); } //-------------------------------------------------------------------- /** * Determines the path to use for us to try to route to, based * on user input (setPath), or the CLI/IncomingRequest path. */ protected function determinePath() { if (! empty($this->path)) { return $this->path; } return (is_cli() && ! (ENVIRONMENT === 'testing')) ? $this->request->getPath() : $this->request->uri->getPath(); } //-------------------------------------------------------------------- /** * Allows the request path to be set from outside the class, * instead of relying on CLIRequest or IncomingRequest for the path. * * This is primarily used by the Console. * * @param string $path * * @return $this */ public function setPath(string $path) { $this->path = $path; return $this; } //-------------------------------------------------------------------- /** * Now that everything has been setup, this method attempts to run the * controller method and make the script go. If it's not able to, will * show the appropriate Page Not Found error. */ protected function startController() { $this->benchmark->start('controller'); $this->benchmark->start('controller_constructor'); // Is it routed to a Closure? if (is_object($this->controller) && (get_class($this->controller) === 'Closure')) { $controller = $this->controller; return $controller(...$this->router->params()); } // No controller specified - we don't know what to do now. if (empty($this->controller)) { throw PageNotFoundException::forEmptyController(); } // Try to autoload the class if (! class_exists($this->controller, true) || $this->method[0] === '_') { throw PageNotFoundException::forControllerNotFound($this->controller, $this->method); } else if (! method_exists($this->controller, '_remap') && ! is_callable([$this->controller, $this->method], false) ) { throw PageNotFoundException::forMethodNotFound($this->method); } } //-------------------------------------------------------------------- /** * Instantiates the controller class. * * @return mixed */ protected function createController() { $class = new $this->controller(); $class->initController($this->request, $this->response, Services::logger()); $this->benchmark->stop('controller_constructor'); return $class; } //-------------------------------------------------------------------- /** * Runs the controller, allowing for _remap methods to function. * * @param mixed $class * * @return mixed */ protected function runController($class) { if (method_exists($class, '_remap')) { $output = $class->_remap($this->method, ...$this->router->params()); } else { $output = $class->{$this->method}(...$this->router->params()); } $this->benchmark->stop('controller'); return $output; } //-------------------------------------------------------------------- /** * Displays a 404 Page Not Found error. If set, will try to * call the 404Override controller/method that was set in routing config. * * @param PageNotFoundException $e */ protected function display404errors(PageNotFoundException $e) { // Is there a 404 Override available? if ($override = $this->router->get404Override()) { if ($override instanceof \Closure) { echo $override($e->getMessage()); } else if (is_array($override)) { $this->benchmark->start('controller'); $this->benchmark->start('controller_constructor'); $this->controller = $override[0]; $this->method = $override[1]; unset($override); $controller = $this->createController(); $this->runController($controller); } $this->gatherOutput(); $this->sendResponse(); return; } // Display 404 Errors $this->response->setStatusCode($e->getCode()); if (ENVIRONMENT !== 'testing') { if (ob_get_level() > 0) { ob_end_flush(); } } else { // When testing, one is for phpunit, another is for test case. if (ob_get_level() > 2) { ob_end_flush(); } } throw PageNotFoundException::forPageNotFound($e->getMessage()); } //-------------------------------------------------------------------- /** * Gathers the script output from the buffer, replaces some execution * time tag in the output and displays the debug toolbar, if required. * * @param null $cacheConfig * @param null $returned */ protected function gatherOutput($cacheConfig = null, $returned = null) { $this->output = ob_get_contents(); // If buffering is not null. // Clean (erase) the output buffer and turn off output buffering if (ob_get_length()) { ob_end_clean(); } if ($returned instanceof DownloadResponse) { $this->response = $returned; return; } // If the controller returned a response object, // we need to grab the body from it so it can // be added to anything else that might have been // echoed already. // We also need to save the instance locally // so that any status code changes, etc, take place. if ($returned instanceof Response) { $this->response = $returned; $returned = $returned->getBody(); } if (is_string($returned)) { $this->output .= $returned; } // Cache it without the performance metrics replaced // so that we can have live speed updates along the way. if (static::$cacheTTL > 0) { $this->cachePage($cacheConfig); } $this->output = $this->displayPerformanceMetrics($this->output); $this->response->setBody($this->output); } //-------------------------------------------------------------------- /** * If we have a session object to use, store the current URI * as the previous URI. This is called just prior to sending the * response to the client, and will make it available next request. * * This helps provider safer, more reliable previous_url() detection. * * @param \CodeIgniter\HTTP\URI $uri */ public function storePreviousURL($uri) { // This is mainly needed during testing... if (is_string($uri)) { $uri = new URI($uri); } if (isset($_SESSION)) { $_SESSION['_ci_previous_url'] = (string) $uri; } } //-------------------------------------------------------------------- /** * Modifies the Request Object to use a different method if a POST * variable called _method is found. * * Does not work on CLI commands. */ public function spoofRequestMethod() { if (is_cli()) { return; } // Only works with POSTED forms if ($this->request->getMethod() !== 'post') { return; } $method = $this->request->getPost('_method'); if (empty($method)) { return; } $this->request = $this->request->setMethod($method); } /** * Sends the output of this request back to the client. * This is what they've been waiting for! */ protected function sendResponse() { $this->response->pretend($this->useSafeOutput)->send(); } //-------------------------------------------------------------------- /** * Exits the application, setting the exit code for CLI-based applications * that might be watching. * * Made into a separate method so that it can be mocked during testing * without actually stopping script execution. * * @param $code */ protected function callExit($code) { exit($code); } //-------------------------------------------------------------------- }


{{> header}}
Swift is a powerful and intuitive programming language for iOS apps that builds on the best of C and Objective-C
Read MoreGIT was initially designed and developed by Linus Torvalds for Linux kernel development. GIT is a free software that is designed to handle distributed revision control and source code management system.
Read MoreFastlane simplifies and automates app deployment and release process within a single streamlined workflow thereby ensuring Continuous Delivery (CD)
Read MoreTestFlight Beta Testing is an Apple product that makes it easy to invite users to test iOS, watchOS and tvOS apps before it is released into the App Store.
Read MoreAndroid & iOS Mobile Beta Testing has been made easier with TestFairy. TestFairy provides a wide platform for testing mobile apps.
Read MoreThe leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
Read MoreCrashlytics is the most secure, powerful and lightweight solution available for mobile crash.
Read MoreBackend as a Service, or BaaS (sometimes referred to as mBaaS) is a cloud computing category that make it easier for developers to setup, use and operate a cloud backend for their mobile, tablet and web apps.
Read MoreCore Data is a framework that lets developers store (or retrieve) data in database in an object-oriented manner. With Core Data, you can easily map the objects in your apps to the table in the database. It is the best one to use for non-trivial data storage. It can reduce the memory overhead of your app, increase responsiveness, and save you from writing a lot of boilerplate code.
Read MoreIt is pretty difficult to match an app’s built purpose with customer usage. A proper analytics bridges this gap. Getting started with Flurry SDKs is easy and fast.
Read MoreMetal is a new fantasy for game developers. It is aimed to push the performance of iOS 8, both on the older A7 processor and the new A8 CPU within the iPhone 6 and iPhone 6 Plus.
Read MoreFirebase provides a real-time database and handles authentication among many other interesting features. Developers can now rely on building amazing apps and not worry about their backend.
Read MoreSpriteKit provides a graphics rendering and animation infrastructure that can be used to animate arbitrary textured images, or sprites.
Read MoreSwift is a powerful and intuitive programming language for iOS apps that builds on the best of C and Objective-C
Read MoreGIT was initially designed and developed by Linus Torvalds for Linux kernel development. GIT is a free software that is designed to handle distributed revision control and source code management system.
Read MoreFastlane simplifies and automates app deployment and release process within a single streamlined workflow thereby ensuring Continuous Delivery (CD)
Read MoreTestFlight Beta Testing is an Apple product that makes it easy to invite users to test iOS, watchOS and tvOS apps before it is released into the App Store.
Read MoreAndroid & iOS Mobile Beta Testing has been made easier with TestFairy. TestFairy provides a wide platform for testing mobile apps.
Read MoreThe leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.
Read MoreCrashlytics is the most secure, powerful and lightweight solution available for mobile crash.
Read MoreBackend as a Service, or BaaS (sometimes referred to as mBaaS) is a cloud computing category that make it easier for developers to setup, use and operate a cloud backend for their mobile, tablet and web apps.
Read MoreCore Data is a framework that lets developers store (or retrieve) data in database in an object-oriented manner. With Core Data, you can easily map the objects in your apps to the table in the database. It is the best one to use for non-trivial data storage. It can reduce the memory overhead of your app, increase responsiveness, and save you from writing a lot of boilerplate code.
Read MoreIt is pretty difficult to match an app’s built purpose with customer usage. A proper analytics bridges this gap. Getting started with Flurry SDKs is easy and fast.
Read MoreMetal is a new fantasy for game developers. It is aimed to push the performance of iOS 8, both on the older A7 processor and the new A8 CPU within the iPhone 6 and iPhone 6 Plus.
Read MoreFirebase provides a real-time database and handles authentication among many other interesting features. Developers can now rely on building amazing apps and not worry about their backend.
Read MoreSpriteKit provides a graphics rendering and animation infrastructure that can be used to animate arbitrary textured images, or sprites.
Read MoreSwift is a powerful and intuitive programming language for iOS apps that builds on the best of C and Objective-C, without the constraints of C compatibility. Swift adopts safe programming patterns and adds modern features to make programming easier, more flexible, and more fun. A Swift 3.0 roadmap was announced on the Swift blog on December 3, 2015. Swift 3.0 is the first major release developed in the open at Swift.org, with source code, a bug tracker, mailing lists, and regular development builds available for everyone.
Know more about Swift at: https://developer.apple.com/swift/
GIT was initially designed and developed by Linus Torvalds for Linux kernel development. GIT is a free software that is designed to handle distributed revision control and source code management system. Easy to learn, it manages anything from small to large projects with speed and efficiency.  It possess full revision tracking capabilities that are independent of network access or a central server.
Download link: https://git-scm.com/downloads
Fastlane simplifies and automates app deployment and release process within a single streamlined workflow thereby ensuring Continuous Delivery (CD). App deployment occurs in a single push of a button using the Fastlane tools by creating a custom list of sequential build tasks called lanes. This improves the development time by accelerating software quality and reaction time with more frequent and smaller releases that can be deployed by anyone in the team. It also automates tedious tasks like generating screenshots, dealing with provisioning profiles, and releasing the application to the App Store.
Download link: https://github.com/fastlane/fastlane
TestFlight Beta Testing is an Apple product that makes it easy to invite users to test iOS, watchOS and tvOS apps before it is released into the App Store. It is exclusively offered to developers within the iOS Developer Program. The Developers who subscribe for the service can distribute their apps to internal or external beta testers. These testers can in turn send feedback on the apps to the developers, thereby improving the testing time and reaction time. Besides Tester Feedback, the TestFlight SDK also allows the developers to receive remote logs and crash reports of the apps.
Download link: https://developer.apple.com/testflight/
Android & iOS Mobile Beta Testing has been made easier with TestFairy. TestFairy provides a wide platform for testing mobile apps. Their tracking systems are substantiated with video of the proceedings, crash report and user feedback. TestFairy guarantees security, easiness and productivity.
Download link: https://testfairy.com/
CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. Cocoapods shares their credibility over 1.2 million apps and contains over 23 thousand libraries. It can help to scale projects elegantly. Instead of manually importing files via drop and drop when working on an app, Cocoapods automatically analyses all the required framework and aligns it accordingly.
Download link: https://cocoapods.org/
The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. There are several factors that supports Jenkins to root their base. Continuous Integration, Continuous Delivery, easy installation and easy configuration are few of its highlights. Jerkins can easily distribute work across different machines.
Download link: https://jenkins.io/
Crashlytics is the most secure, powerful and lightweight solution available for mobile crash. Crashlytics holds proven history of their performance benchmarks in hundreds of applications like Yammer, Flydelta and many more. Crashlytics for iOS and tvOS delivers interactive, detailed crash reports in real time. Each and every thread is analysed and prioritized.This helps to list the important ones so you can spend less time finding and more time fixing issues.
Download link: http://try.crashlytics.com/sdk/
Backend as a Service, or BaaS (sometimes referred to as mBaaS) is a cloud computing category that make it easier for developers to setup, use and operate a cloud backend for their mobile, tablet and web apps.It provides web and mobile app developers with a way to link their applications to the cloud storage. They also add features such as user management, push notifications, and integration with social networking services for enhancement. These services are provided through customized Software Development Kits (SDKs) and Application Programming Interfaces (APIs).
Download link: http://opensource.baasbox.com/download/
Core Data is a framework that lets developers store (or retrieve) data in database in an object-oriented manner. With Core Data, you can easily map the objects in your apps to the table in the database. It is the best one to use for non-trivial data storage. It can reduce the memory overhead of your app, increase responsiveness, and save you from writing a lot of boilerplate code.
It is pretty difficult to match an app’s built purpose with customer usage. A proper analytics bridges this gap. Getting started with Flurry SDKs is easy and fast. Flurry helps to measure and analyze activity across your app portfolio to optimize your app experience. By using Flurry Analytics, you can witness an improved in-app purchase rates. It supports your action to serve the customer with confidence.
Download link: https://developer.yahoo.com/flurry/docs/analytics/gettingstarted/ios/
Metal is a new fantasy for game developers. It is aimed to push the performance of iOS 8, both on the older A7 processor and the new A8 CPU within the iPhone 6 and iPhone 6 Plus. Inspite of the existence of the new SceneKit for casual game makers, Metal has become popular faster for it’s new features. Metal offers up to 10 times faster draw call rates, which are used to render all objects in a 3D game. It improves the responsiveness of your GPU and the capabilities of your photography, videos and audio amongst other things.
Download link: http://www.trustedreviews.com/opinions/ios-8-metal-explained-how-does-it-affect-your-iphone-or-ipad
Firebase provides a real-time database and handles authentication among many other interesting features. Developers can now rely on building amazing apps and not worry about their backend. This enables the clients to share one real-time Database instance and automatically receive updates with the newest data.
Download link: https://realm.io/news/360andev-adrian-catalan-firebase-android-realtime-sync/
SpriteKit provides a graphics rendering and animation infrastructure that can be used to animate arbitrary textured images, or sprites. SpriteKit is optimized so that the positions of sprites can be changed arbitrarily in each frame of animation. It also provides other functionality that is useful for games, including basic sound playback support and physics simulation. The combination of framework and tools makes SpriteKit a good choice for games and other apps that require similar kinds of animation.
Download link: https://developer.apple.com/SpriteKit_PG/Introduction/Introduction.html


Record & replay HTTP traffic for simple, reliable tests.
Betamax is a tool for mocking external HTTP resources such as web services and REST APIs in your tests. The project was inspired by the VCR library for Ruby.
You don’t want 3rd party downtime, network issues or resource constraints (such as the Twitter API’s rate limit) to break your tests. Writing custom stub web server code and configuring the application to connect to a different URI when under test is tedious and might not accurately simulate the real service.
Betamax aims to solve these problems by intercepting HTTP connections initiated by your application and returning recorded responses.
The first time a test annotated with @Betamax
is run any HTTP traffic is recorded to a tape and subsequent test runs will play back the recorded HTTP response from the tape without actually connecting to the external server.
Betamax works with JUnit and Spock. Although it is written in Groovy Betamax can be used to test applications written in any JVM language so long as HTTP connections are made in a way that respects Java’s http.proxyHost
and http.proxyPort
system properties.
Tapes are stored to disk as YAML files and can be modified (or even created) by hand and committed to your project’s source control repository so they can be shared by other members of your team and used by your CI server. Different tests can use different tapes to simulate various response conditions. Each tape can hold multiple request/response interactions. An example tape file can be found here.
The current stable version of Betamax is 1.1.1.
Stable versions of Betamax are available from the Maven central repository. Stable and development versions are available from the Sonatype OSS Maven repository. To install with your favourite build system see below:
Please note the Maven group changed between versions 1.0 and 1.1. Make sure you are specifying the group co.freeside
when referencing Betamax in your build.
To use Betamax in a project using Gradle add the following dependency to your build.gradle
file:
testCompile 'co.freeside:betamax:1.1.1'
To use Betamax in a Grails app add the following to the dependencies
block in your grails-app/conf/BuildConfig.groovy
file:
test 'co.freeside:betamax:1.1.1'
To use Betamax in a project using Maven add the following dependency to your pom.xml
file:
<dependency>
<scope>test</scope>
<groupId>co.freeside</groupId>
<artifactId>betamax</artifactId>
<version>1.1.1</version>
</dependency>
To use Betamax you just need to annotate your JUnit test or Spock specifications with @Betamax(tape="tape_name")
and include a Recorder
Rule.
import co.freeside.betamax.Betamax;
import co.freeside.betamax.Recorder;
import org.junit.*;
public class MyTest {
@Rule public Recorder recorder = new Recorder();
@Betamax(tape="my tape")
@Test
public void testMethodThatAccessesExternalWebService() {
}
}
import co.freeside.betamax.Betamax
import co.freeside.betamax.Recorder
import org.junit.*
import spock.lang.*
class MySpec extends Specification {
@Rule Recorder recorder = new Recorder()
@Betamax(tape='my tape')
void 'feature that accesses external web service'() {
}
}
Betamax will record to the current tape when it intercepts any HTTP request that does not match anything that is already on the tape. If a matching recorded interaction is found then the proxy does not forward the request to the target URI but instead returns the previously recorded response to the client.
By default recorded interactions are matched based on the method and URI of the request. For most scenarios this is adequate. However, you can modify the matching behaviour by specifying a match argument on the @Betamax
annotation. Any combination of instances of the co.freeside.betamax.MatchRule
enum can be used. If multiple rules are used then only a recorded interaction that matches all of them will be played back. MatchRule
options are:
method
uri
body
host
http://search.twitter.com/search.json
is search.twitter.com
.path
http://search.twitter.com/search.json
is /search.json
.port
query
fragment
#
.headers
Betamax supports three different read/write modes for tapes. The tape mode is set by adding a mode
argument to the @Betamax
annotation.
READ_WRITE
READ_ONLY
403: Forbidden
status code.WRITE_ONLY
Sometimes you may need to have Betamax ignore traffic to certain hosts. A typical example would be if you are using Betamax when end-to-end testing a web application using something like HtmlUnit - you would not want Betamax to intercept connections to localhost as that would mean traffic between HtmlUnit and your app was recorded and played back!
In such a case you can simply configure the ignoreHosts
property of the co.freeside.betamax.Recorder
object. The property accepts a list of hostnames or IP addresses. These can include wildcards at the start or end, for example "*.mydomain.com"
.
If you need to ignore connections to localhost you can simply set the ignoreLocalhost
property to true
.
Tape files are stored as YAML so that they should be reasonably easy to edit by hand. HTTP request and response bodies are stored as text for most common textual MIME types. Binary data for things like images is also stored but is not practical to edit by hand. In some cases where the text contains non-printable characters then text data will be stored as binary.
Under Java 6 it is not possible to proxy connections to URLs whose host is localhost
or <IP_ADDRESS>
. The workaround is to use the hostname or public IP address of the machine instead. This is a known issue that is fixed in Java 7.
The default implementations of Apache HttpClient takes no notice of Java’s HTTP proxy settings. The Betamax proxy can only intercept traffic from HttpClient if the client instance is set up to use a ProxySelectorRoutePlanner
. When Betamax is not active this will mean HttpClient traffic will be routed via the default proxy configured in Java (if any).
In a dependency injection context such as a Grails app you can just inject a proxy-configured HttpClient instance into your class-under-test.
The HttpClient library provides an implementation called SystemDefaultHttpClient that does use the JVM proxy settings. Ideally you can use that. In addition, Betamax provides a convenient HttpRoutePlanner
implementation that you can use to configure instances of other HttpClient types. For example:
DefaultHttpClient client = new DefaultHttpClient();
BetamaxRoutePlanner.configure(client);
Groovy HTTPBuilder and its RESTClient variant are wrappers around HttpClient so the same proxy configuration needs to be applied. For example:
def http = new HTTPBuilder('http://groovy.codehaus.org')
BetamaxRoutePlanner.configure(http.client)
HTTPBuilder also includes a HttpURLClient class which needs no special configuration as it uses a java.net.URLConnection
rather than HttpClient.
HttpClient 3.x is no longer supported but still fairly widely used. It does not take any notice of Java’s HTTP proxy settings and does not have the HttpRoutePlanner
facility that HttpClient 4.x does. This means Betamax cannot work as seamlessly. You must set the host and port of the Betamax proxy on the HttpClient instance explicitly and Betamax’s ignoreHosts
and ignoreLocalhost
configuration properties will be completely ignored. For example:
HttpClient client = new HttpClient();
ProxyHost proxy = new ProxyHost("localhost", recorder.getProxyPort());
client.getHostConfiguration().setProxyHost(proxy);
The groovy-wslite library is not aware of the default JVM proxy settings so the proxy needs to be explicitly configured with a java.net.Proxy
. The Recorder
class provides a convenience method for getting a Proxy
instance. For example:
def client = new RESTClient(targetUrl)
def response = client.get(path: '/', proxy: recorder.proxy)
As of version 1.1 Betamax can proxy HTTPS traffic as well as HTTP. Because Betamax needs to be able to read the content of the request and response it is not actually a valid secure proxy. Betamax will only work if the certificate chain is broken.
To enable HTTP support you simply need to set the sslSupport
boolean property on the Recorder
instance in your test or via Betamax configuration.
Apache HttpClient needs to be configured to use Betamax’s HTTPS support:
BetamaxHttpsSupport.configure(client);
The Recorder
class has some configuration properties that you can override:
tapeRoot
src/test/resources/betamax/tapes
.proxyPort
5555
.proxyTimeout
5000
.defaultMode
@Betamax
annotation.ignoreHosts
ignoreLocalhost
true
the Betamax proxy will ignore connections to local addresses. This is equivalent to setting ignoreHosts
to ["localhost", "<IP_ADDRESS>", InetAddress.localHost.hostName, InetAddress.localHost.hostAddress]
.sslSupport
true
the Betamax proxy will also intercept HTTPS traffic.If you have a file called BetamaxConfig.groovy
or betamax.properties
somewhere in your classpath it will be picked up by the Recorder
class.
betamax {
tapeRoot = new File('test/fixtures/tapes')
proxyPort = 1337
proxyTimeout = 30000
defaultMode = TapeMode.READ_ONLY
ignoreHosts = ['localhost', '<IP_ADDRESS>']
ignoreLocalhost = true
sslSupport = true
}
betamax.tapeRoot=test/fixtures/tapes
betamax.proxyPort=1337
betamax.proxyTimeout=30000
betamax.defaultMode=READ_ONLY
betamax.ignoreHosts=localhost,<IP_ADDRESS>
betamax.ignoreLocalhost=true
betamax.sslSupport=true
Betamax is a testing tool and not a spec-compliant HTTP proxy. It ignores any and all headers that would normally be used to prevent a proxy caching or storing HTTP traffic. You should ensure that sensitive information such as authentication credentials is removed from recorded tapes before committing them to your app’s source control repository.
Betamax’s GitHub repository includes an example Grails application.
Betamax is a JVM port of the VCR library for Ruby. It is named after Betamax, an obsolete format of Video Cassette Recorder.
Apache Software Licence, Version 2.0
Please raise issues on Betamax’s GitHub issue tracker. Forks and pull requests are more than welcome.
Betamax depends on the following libraries (you will need them available on your test classpath in order to use Betamax):
If your project gets dependencies from a Maven repository these dependencies will be automatically included for you.
Betamax is inspired by the VCR library for Ruby written by Myron Marston. Porting VCR to Groovy was suggested to me by Jim Newbery.
HTTPS support was largely the work of Lari Hotari.
The documentation is built with Jekyll, Twitter Bootstrap, LESS, Modernizr, jQuery & Google Code Prettify. The fonts are Kameron, Bitter and Source Code Pro.


Use the Window > Preferences > DITA Tools page to set how you want the DITA Tool to operate.
For HREF Checker, the default is to scan ditamap, dita, html and htm filetypes. In the preferences this list may be modified.
For the DITA Web File Finder, one or more URL prefixes can be set to allow a simple one-click mapping from dita, htm and html source files to their equivalent web pages.
For Where Used Checker, the default is to look for reference to any jpg, gif, png and dita filetypes within ditamap, dita, html and htm files. In the preferences these lists may be modified.


- toggle Interaction
- stop
- Load play current media
- Play current media
- Pause current media
- Toggle playback
- Play next media
- Play previous media
- Set volume (0)
- Set volume (0.5)
- Set volume (1)
- Toggle mute
- seek (0)
- seek (5)
- seek (15)
- Set playback rate (0.5)
- Set playback rate (1)
- Set playback rate (2)
- Toggle random
- Toggle loop
- Destroy media
- Destroy playlist
- Destroy plugin
- load track 0
- load track 1
- load track 2
- Load track with title "Tim McMorris - A Bright And Hopeful Future"
- Load track with title "Tim McMorris - Be My Valentine"
- Load track with title "Soundroll - A Way To The Top"
- Load track with title "Soundroll - Feel Good Journey"
- Load playlist-audio1
- Load playlist-soundcloud-1
- Add track, position 0
- Add track, position 1
- Add track, position 2
- Add track, play it, position 1
- Add track, position end
- Add track array, position 0
- Add track array, play it, position 2
- Add track, position 0
- Add track, play it, position 1
- Add track, position 2
- Add track, position 0
- Add track, position 0
- Add track array, position 0
- Input track "Tim McMorris - A Bright And Hopeful Future"
- Input track "Tim McMorris - Be My Valentine"
- Input track "Tim McMorris - Give Our Dreams Their Wings To Fly"
- Remove track 0
- Remove track 1
- Remove track 2
- Remove track 3
- Remove last track in playlist
- Remove all tracks
- Remove track with title "Tim McMorris - A Bright And Hopeful Future"
- Remove track with title "Tim McMorris - Be My Valentine"
- Remove track with title "Tim McMorris - Give Our Dreams Their Wings To Fly"
- Remove track with title "Soundroll - A Way To The Top"
- Remove track with title "Soundroll - Feel Good Journey"
- Sort title ascending
- Sort title descending
- Sort random


EVP_KDF-HMAC-DRBG - The HMAC DRBG DETERMINISTIC EVP_KDF implementation
Support for a deterministic HMAC DRBG using the EVP_KDF API. This is similiar to EVP_RAND-HMAC-DRBG(7), but uses fixed values for its entropy and nonce values. This is used to generate deterministic nonce value required by ECDSA and DSA (as defined in RFC 6979).
"HMAC-DRBG-KDF" is the name for this implementation; it can be used with the EVP_KDF_fetch() function.
The supported parameters are:
These parameters work as described in "PARAMETERS" in EVP_KDF(3).
Sets the entropy bytes supplied to the HMAC-DRBG.
Sets the nonce bytes supplied to the HMAC-DRBG.
A context for KDF HMAC DRBG can be obtained by calling:
EVP_KDF *kdf = EVP_KDF_fetch(NULL, "HMAC-DRBG-KDF", NULL);
EVP_KDF_CTX *kdf_ctx = EVP_KDF_CTX_new(kdf, NULL);
RFC 6979
EVP_KDF(3), "PARAMETERS" in EVP_KDF(3)
The EVP_KDF-HMAC-DRBG functionality was added in OpenSSL 3.2.
Copyright 2022 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.


We're sorry but this website doesn't work properly without JavaScript enabled. Please enable it to continue.


{% extends "reports/base.html" %} {% block report_title %}
Shows the instrument pricing with date and price of the open trade.


Chart Settings
OHLC
OHLC with Volume
Candlestick Chart
Candlestick with Volume
Line
Spline
50,000 Data Points
100,000 Data Points
250,000 Data Points
500,000 Data Points
1,000,000 Data Points
Streaming
100 Data Points
500 Data Points
1000 Data Points
10,000 Data Points
20ms
60ms
80ms
100ms
Start Data Streaming
Rendering 50,000 data points
title:
value


☰
Products
Cart
Login
Login
Products
Cart
Home
🏍 Welcome to Moto. Co! 🏍
Shopping Cart
Please login to complete purchase
Billing Details
Payment Details
Shipping address same as billing
Total Cost:
$1500.00


| 1 |
admin |
Login to Account |
5th of September, 2016 7:01 pm |
| 2 |
admin |
Login to Account |
5th of September, 2016 8:36 pm |
| 3 |
admin |
Login to Account |
6th of September, 2016 3:25 am |
| 4 |
admin |
Login to Account |
6th of September, 2016 7:54 am |
| 5 |
admin |
Login to Account |
6th of September, 2016 9:12 am |
| 6 |
admin |
Login to Account |
6th of September, 2016 11:01 am |
| 7 |
admin |
Login to Account |
6th of September, 2016 11:39 am |
| 8 |
admin |
Login to Account |
6th of September, 2016 6:00 pm |
| 9 |
admin |
Login to Account |
6th of September, 2016 6:20 pm |
| 10 |
admin |
Login to Account |
6th of September, 2016 6:20 pm |
| 11 |
admin |
Login to Account |
6th of September, 2016 6:22 pm |
| 12 |
admin |
Login to Account |
6th of September, 2016 6:49 pm |
| 13 |
admin |
Direct Payment of $1,000.00 to Account SPI/0009 |
6th of September, 2016 7:12 pm |
| 14 |
admin |
Deactivated Account SPI/0003 |
6th of September, 2016 7:12 pm |
| 15 |
admin |
Deactivated Account SPI/0001 |
6th of September, 2016 7:12 pm |
| 16 |
admin |
Activated Account SPI/0001 |
6th of September, 2016 7:13 pm |
| 17 |
admin |
Deactivated Account SPI/0001 |
6th of September, 2016 7:13 pm |
| 18 |
admin |
Direct Payment of $1,000.00 to Account SPI/0002 |
6th of September, 2016 7:14 pm |
| 19 |
admin |
Direct Payment of $1,430.00 to Account SPI/0005 |
6th of September, 2016 7:19 pm |
| 20 |
admin |
Direct Payment of $500.00 to Account SPI/0006 |
6th of September, 2016 7:33 pm |
| 21 |
admin |
Login to Account |
6th of September, 2016 7:46 pm |
| 22 |
admin |
Direct Payment of $900.00 to Account SPI/0007 |
6th of September, 2016 7:48 pm |
| 23 |
admin |
Direct Payment of $6,000.00 to Account SPI/0004 |
6th of September, 2016 8:03 pm |
| 24 |
admin |
Direct Payment of $1,500.00 to Account SPI/0011 |
6th of September, 2016 8:06 pm |
| 25 |
admin |
Direct Payment of $500.00 to Account SPI/0010 |
6th of September, 2016 8:18 pm |
| 26 |
admin |
Login to Account |
7th of September, 2016 6:57 am |
| 27 |
admin |
Login to Account |
7th of September, 2016 7:49 am |
| 28 |
admin |
Login to Account |
7th of September, 2016 8:51 am |
| 29 |
admin |
Login to Account |
7th of September, 2016 9:05 am |
| 30 |
admin |
Login to Account |
7th of September, 2016 10:38 am |
| 31 |
admin |
Reset Admin Account admin |
7th of September, 2016 10:41 am |
| 32 |
admin |
Reset Admin Account admin |
7th of September, 2016 10:41 am |
| 33 |
admin |
Reset Admin Account admin |
7th of September, 2016 10:42 am |
| 34 |
admin |
Updated profile information |
7th of September, 2016 10:43 am |
| 35 |
admin |
Login to Account |
7th of September, 2016 3:26 pm |
| 36 |
admin |
Direct Payment of $1,500.00 to Account SPI/0008 |
7th of September, 2016 3:27 pm |
| 37 |
admin |
Login to Account |
7th of September, 2016 4:07 pm |
| 38 |
admin |
Login to Account |
8th of September, 2016 1:04 pm |
| 39 |
admin |
Login to Account |
8th of September, 2016 1:52 pm |
| 40 |
admin |
Login to Account |
8th of September, 2016 3:05 pm |
| 41 |
admin |
Login to Account |
8th of September, 2016 9:36 pm |
| 42 |
admin |
Direct Payment of $700.00 to Account SPI/0015 |
8th of September, 2016 9:37 pm |
| 43 |
admin |
Login to Account |
10th of September, 2016 12:29 pm |
| 44 |
admin |
Login to Account |
12th of September, 2016 7:21 am |
| 45 |
admin |
Direct Payment of $610.60 to Account SPI/0016 |
12th of September, 2016 7:23 am |
| 46 |
admin |
Login to Account |
21st of September, 2016 11:01 pm |
| 47 |
admin |
Direct Payment of $500.00 to Account SPI/0019 |
21st of September, 2016 11:02 pm |
| 48 |
admin |
Deactivated Admin Account developer |
21st of September, 2016 11:03 pm |
| 49 |
admin |
Activated Admin Account developer |
21st of September, 2016 11:03 pm |
| 50 |
admin |
Deactivated Admin Account developer |
21st of September, 2016 11:03 pm |
| 51 |
admin |
Activated Admin Account developer |
21st of September, 2016 11:03 pm |
| 52 |
admin |
Login to Account |
24th of September, 2016 8:08 pm |
| 53 |
admin |
Direct Payment of $500.00 to Account SPI/0020 |
24th of September, 2016 8:11 pm |
| 54 |
admin |
Login to Account |
30th of September, 2016 7:28 pm |
| 55 |
admin |
Login to Account |
3rd of October, 2016 6:40 pm |
| 56 |
admin |
Direct Payment of $500.00 to Account SPI/0021 |
3rd of October, 2016 6:43 pm |
| 57 |
admin |
Login to Account |
5th of October, 2016 11:45 am |
| 58 |
admin |
Login to Account |
5th of October, 2016 11:52 am |
| 59 |
admin |
Direct Payment of $550.00 to Account SPI/0022 |
5th of October, 2016 11:53 am |
| 60 |
admin |
Login to Account |
6th of October, 2016 11:40 am |
| 61 |
admin |
Direct Payment of $500.00 to Account SPI/0024 |
6th of October, 2016 11:41 am |
| 62 |
admin |
Login to Account |
6th of October, 2016 12:16 pm |
| 63 |
admin |
Login to Account |
9th of October, 2016 4:04 pm |
| 64 |
admin |
Direct Payment of $250.00 to Account SPI/0027 |
9th of October, 2016 4:05 pm |
| 65 |
admin |
Login to Account |
11th of October, 2016 10:52 am |
| 66 |
admin |
Direct Payment of $5,000.00 to Account SPI/0028 |
11th of October, 2016 10:53 am |
| 67 |
admin |
Login to Account |
15th of October, 2016 5:05 pm |
| 68 |
admin |
Direct Payment of $500.00 to Account SPI/0023 |
15th of October, 2016 5:10 pm |
| 69 |
admin |
Login to Account |
19th of October, 2016 11:44 am |
| 70 |
admin |
Direct Payment of $600.00 to Account SPI/0029 |
19th of October, 2016 11:45 am |
| 71 |
admin |
Login to Account |
25th of October, 2016 6:23 pm |
| 72 |
admin |
Direct Payment of $1,000.00 to Account SPI/0030 |
25th of October, 2016 6:24 pm |
| 73 |
admin |
Login to Account |
26th of October, 2016 11:31 am |
| 74 |
admin |
Login to Account |
31st of October, 2016 6:49 pm |
| 75 |
admin |
Direct Payment of $1,000.00 to Account SPI/0032 |
31st of October, 2016 6:50 pm |
| 76 |
admin |
Login to Account |
4th of November, 2016 9:21 pm |
| 77 |
admin |
Direct Payment of $500.00 to Account SPI/0031 |
4th of November, 2016 9:22 pm |
| 78 |
admin |
Login to Account |
4th of November, 2016 9:40 pm |
| 79 |
admin |
Login to Account |
4th of November, 2016 9:53 pm |
| 80 |
admin |
Direct Payment of $400.00 to Account SPI/0033 |
4th of November, 2016 10:17 pm |
| 81 |
admin |
Login to Account |
4th of November, 2016 10:20 pm |
| 82 |
admin |
Login to Account |
5th of November, 2016 4:00 pm |
| 83 |
admin |
Direct Payment of $250.00 to Account SPI/0034 |
5th of November, 2016 4:01 pm |
| 84 |
admin |
Login to Account |
25th of November, 2016 7:29 pm |
| 85 |
admin |
Login to Account |
4th of December, 2016 4:21 pm |
| 86 |
admin |
Login to Account |
10th of December, 2016 2:37 pm |
| 87 |
admin |
Login to Account |
16th of December, 2016 10:29 am |
| 88 |
admin |
Direct Payment of $300.00 to Account SPI/0037 |
16th of December, 2016 10:32 am |
| 89 |
admin |
Login to Account |
16th of December, 2016 6:48 pm |
| 90 |
admin |
Login to Account |
16th of December, 2016 7:35 pm |
| 91 |
admin |
Login to Account |
17th of December, 2016 1:51 pm |
| 92 |
admin |
Login to Account |
14th of July, 2018 1:50 pm |
| 93 |
admin |
Login to Account |
11th of February, 2019 2:11 pm |
| 94 |
admin |
Login to Account |
23rd of February, 2019 9:23 pm |
| 95 |
admin |
Deactivated Account SPI/0020 |
23rd of February, 2019 9:25 pm |
| 96 |
admin |
Login to Account |
23rd of February, 2019 10:18 pm |
| 97 |
admin |
Login to Account |
23rd of February, 2019 11:26 pm |
| 98 |
admin |
Login to Account |
25th of February, 2019 1:29 pm |
| 99 |
admin |
Login to Account |
27th of February, 2019 5:13 pm |
| 100 |
admin |
Login to Account |
1st of March, 2019 2:38 pm |
| 101 |
admin |
Login to Account |
4th of April, 2019 11:54 am |
| 102 |
admin |
Login to Account |
4th of April, 2019 7:41 pm |
| 103 |
admin |
Login to Account |
4th of April, 2019 7:41 pm |
| 104 |
admin |
Login to Account |
6th of April, 2019 2:17 pm |
| 105 |
admin |
Login to Account |
9th of May, 2019 12:53 pm |
| 106 |
developer |
Login to Account |
6th of September, 2016 6:27 pm |
| 107 |
developer |
Updated profile information |
6th of September, 2016 6:30 pm |
| 108 |
developer |
Login to Account |
6th of September, 2016 6:30 pm |
| 109 |
developer |
Login to Account |
7th of September, 2016 8:14 am |
| 110 |
developer |
Login to Account |
7th of September, 2016 12:14 pm |
| 111 |
developer |
Login to Account |
8th of September, 2016 9:28 am |
| 112 |
developer |
Login to Account |
9th of September, 2016 7:29 am |
| 113 |
developer |
Login to Account |
9th of September, 2016 7:47 am |
| 114 |
developer |
Login to Account |
10th of September, 2016 7:18 pm |
| 115 |
developer |
Login to Account |
11th of September, 2016 11:00 am |
| 116 |
developer |
Login to Account |
12th of September, 2016 4:50 pm |
| 117 |
developer |
Login to Account |
12th of September, 2016 7:27 pm |
| 118 |
developer |
Login to Account |
13th of September, 2016 3:46 pm |
| 119 |
developer |
Login to Account |
14th of September, 2016 7:34 am |
| 120 |
developer |
Login to Account |
15th of September, 2016 7:07 pm |
| 121 |
developer |
Login to Account |
17th of September, 2016 11:15 am |
| 122 |
developer |
Login to Account |
18th of September, 2016 10:36 am |
| 123 |
developer |
Login to Account |
18th of September, 2016 10:39 am |
| 124 |
developer |
Login to Account |
22nd of September, 2016 6:28 pm |
| 125 |
developer |
Login to Account |
26th of September, 2016 7:13 pm |
| 126 |
developer |
Login to Account |
27th of September, 2016 4:42 pm |
| 127 |
developer |
Login to Account |
28th of September, 2016 6:12 pm |
| 128 |
developer |
Login to Account |
9th of October, 2016 7:51 am |
| 129 |
developer |
Login to Account |
9th of October, 2016 2:37 pm |
| 130 |
developer |
Login to Account |
26th of October, 2016 11:32 am |
| 131 |
developer |
Login to Account |
28th of October, 2016 12:15 pm |
| 132 |
developer |
Login to Account |
30th of October, 2016 5:32 pm |
| 133 |
developer |
Login to Account |
8th of November, 2016 6:23 am |
| 134 |
developer |
Login to Account |
22nd of November, 2016 7:56 am |
| 135 |
developer |
Login to Account |
26th of November, 2016 7:20 pm |
| 136 |
developer |
Login to Account |
14th of December, 2016 11:48 am |
| 137 |
developer |
Login to Account |
16th of December, 2016 4:17 pm |
| 138 |
developer |
Login to Account |
12th of January, 2017 7:24 pm |
| 139 |
developer |
Login to Account |
17th of January, 2017 11:31 pm |
| 140 |
developer |
Login to Account |
10th of July, 2017 1:09 pm |
| 141 |
developer |
Direct Payment of ₦100,000.00 to Account SPI/0038 |
10th of July, 2017 1:11 pm |
| 142 |
developer |
Login to Account |
14th of July, 2018 1:43 pm |
| 143 |
developer |
Approved ₦809.05 withdrawal request from Account SPI/0016 |
14th of July, 2018 1:44 pm |
| 144 |
developer |
Paid ₦809.05 withdrawal request from Account SPI/0016 |
14th of July, 2018 1:48 pm |
| 145 |
developer |
Reset Admin Account admin |
14th of July, 2018 1:49 pm |
| 146 |
developer |
Login to Account |
17th of July, 2018 8:17 am |
| 147 |
developer |
Login to Account |
8th of October, 2018 4:56 pm |


Theme of the week
{{currentThemeTitle}}
Create new post
Next theme
Add filters
Order
Descending
Ascending
Sorte By
Score
Date
Number of comments
Number of votes
Labels
Page
Number of post
Apply


You are now done.
Are you sure you want to delete "John Doe" profile?
All information associated to this user profile will be permanently deleted. This operation can not be undone.
I'm visible because I am open
You have received a file called "cat-picture.jpeg".


Classes | |
| class | Exception |
| class | GoogleCloudFunctionsRequest |
| Request class which consumes body stream and provides buffered body. More... | |
| class | GoogleCloudFunctionsResponse |
| Response class which wraps standard HTTP response. More... | |
| class | HttpResponseException |
Custom Exception class which has an optional statusCode and uri to indicate details of a failed HTTP request. More... | |
Global Functions | |
| void | google_apps_script_proxy_http (GoogleCloudFunctionsRequest request, GoogleCloudFunctionsResponse response) async |
| Firebase Function HTTPS handler. More... | |
| Future< void > | permissions_check_http (GoogleCloudFunctionsRequest request, GoogleCloudFunctionsResponse response) async |
HTTPS handler to query Google Spreadsheet for ACM .User which matches ACM .Activity flatbuffer supplied in request payload. More... | |
| Future | append_activity_to_spreadsheet (SheetsApi sheets, String spreadsheetId, String sheetName, ACM.Activity activity, ACM.User user) |
Use Google Sheets API to append a new Activity row from provided Activity and User. More... | |
| Uint8List | datatable_to_user (Map datatable) |
Convert DataTable from result of Users query to ACM.User flatbuffer. More... | |
| String | extract_access_token (auth_header) |
| Parse HTTP Authorization header to extract an OAuth access token. More... | |
| Future< String > | fetch_sheet_columns (String authority, String path, String sheetName, String accessToken) |
| Fetch IDs/labels of Google Spreadsheet columns for specified sheet. More... | |
| String | generate_permissions_check_query (Map usersColumnsDatatable, List< List< String >> selectColumnLabels, String tagId) |
Generate a query to return all permissions (and optional additional columns) for a specific user by Tag ID . More... | |
| FutureReference | push_activity_to_firebase (Reference activityRef, ACM.Activity activity) |
| Append Activity details to Firebase to provided Database Reference. More... | |
| Future< void > | push_latest_user_to_firebase (Reference latestUserRef, ACM.User user) |
| Write User details to Firebase at provided Database Reference. More... | |
| SheetsApi | spreadsheet_client (String accessToken, [http.NodeClient baseClient]) |
| Create a Google SheetsApi handle using a provided OAuth access token. More... | |
| String | toColumnName (int colNum) |
| Get column letter from column index. More... | |
| int | toColumnNum (String colName) |
| Get column number from column letter. More... | |
| bool | isYesLike (String s) |
| Check whether a given string represents "yes" ("☑", "t", "y", etc) More... | |
| bool | isNoLike (String s) |
| Check whether a given string represents "no" ("☐", "f", "n", etc) More... | |
| String | nthColumnLabel (Map datatable, int i) |
| Get the label string of the Nth column from a DataTable. More... | |
| String | labelToColumnId (Map datatable, String prefix, String label) |
| Get the column letter for a specific label (with optional prefix) More... | |
| void | main () |
| Establish Dart -> JS module exports. More... | |
Global Variables | |
| HttpStatus | |
| const String | ACM_FILE_IDENTIFIER = "ACM." |
/permissions_check AWS Lambda HTTPS handler imports | |
| const | express = require("express") |
| Express server to run Google Cloud Function handler. More... | |
| const | serverless = require("serverless-http") |
| Express middleware to wrap (req,res) handlers as an AWS Lambda handler. More... | |
| const | bodyParser = require("body-parser") |
| Express middleware to provide the full request body in a req.body field. More... | |
| const | index = require("./build/node/index.dart.js") |
| (req,res)-style Dart handlers More... | |
| const | app = express() |
| Setup Express server to run (req,res)-style Dart handlers. More... | |
| app | use (bodyParser.raw()) |
| Provide request body as raw binary Buffer. More... | |
/permissions_check AWS Lambda HTTPS handler exports | |
Re-export the Express server wrapped as an AWS Lambda-compatible handler | |
| exports | permissions_check |
| Export /permissions_check AWS Lambda handler, much lower-latency than Google/Firebase Functions leading to faster tag scanning response times. More... | |
| exports | google_apps_script_proxy |
| Export /google_apps_script_proxy AWS Lambda handler. More... | |
/google_apps_script_proxy Firebase Functions handler imports | |
| const | functions = require("firebase-functions") |
| Firebase Functions SDK. More... | |
| const | index = require("./build/node/index.dart.js") |
| Dart <-> JS Interop generated entrypoint. More... | |
/google_apps_script_proxy Firebase Functions handler exports | |
| exports | google_apps_script_proxy |
| Export /google_apps_script_proxy Firebase Functions handler. More... | |
/permissions_check constants | |
| final String | SPREADSHEET_QUERY_AUTHORITY = "docs.google.com" |
| const String | SPREADSHEET_USERS_SHEET_NAME = "Users" |
| Sheet used for permissions check query. More... | |
| const String | SPREADSHEET_ACTIVITY_SHEET_NAME = "Activity" |
| Sheet used for Activity row append. More... | |
/permissions_check global variables | |
These global values will persist across function invocations. | |
| String | USER_COLUMNS_DATATABLE |
| FirebaseAdmin | FIREBASE_admin |
| App | FIREBASE_app |
| Database | FIREBASE_database |
Files | |
| file | config.production.yml |
Environment variables / settings for /permissions_check production environment. | |
| file | config.test.yml |
Environment variables / settings for /permissions_check test environment. | |
| file | build.yaml |
| Configure Dart 2.x build_runner including files and Dart2JS options. | |
| file | package.json |
Runnable targets: pub , watch , build , deploy , serve , Serverless, Express, and Firebase dependencies. | |
| file | google_apps_script_proxy_http.dart |
| HTTPS handler for /google_apps_script_proxy. | |
| file | google_cloud_functions.dart |
| Wrapper classes for Node interop HTTP Request/Response objects for Google/Firebase Functions. | |
| file | permissions_check_http.dart |
HTTPS handler to query Google Spreadsheet for ACM .User which matches ACM .Activity flatbuffer supplied in request payload. | |
| file | append_activity_to_spreadsheet.dart |
Use Google Sheets API to append a new Activity row from provided Activity and User. | |
| file | datatable_to_user.dart |
Convert DataTable from result of Users query to ACM.User flatbuffer. | |
| file | extract_access_token.dart |
| Parse HTTP Authorization header to extract an OAuth access token. | |
| file | fetch_sheet_columns.dart |
| Fetch IDs/labels of Google Spreadsheet columns for specified sheet. | |
| file | generate_permissions_check_query.dart |
Generate a query to return all permissions (and optional additional columns) for a specific user by Tag ID . | |
| file | http_response_exception.dart |
Custom Exception class which has an optional statusCode and uri to indicate details of a failed HTTP request. | |
| file | push_activity_to_firebase.dart |
| Append Activity details to Firebase to provided Database Reference. | |
| file | push_latest_user_to_firebase.dart |
| Write User details to Firebase at provided Database Reference. | |
| file | spreadsheet_client.dart |
| Provide an (authenticated) Google Sheets REST API client. | |
| file | spreadsheet_helpers.dart |
| Utility functions for spreadsheet columns<->index, string helpers, and Google Visualization DataTable parsing. | |
| file | index.dart |
| Main entrypoint for HTTP handlers, Dart -> JS interop. | |
| file | pubspec.yaml |
| Configure Dart metadata and package dependencies. | |
| file | serverless.yml |
| Configure Serverless framework for /permissions_check on AWS Lambda. | |
| Future append_activity_to_spreadsheet | ( | SheetsApi | sheets, |
| String | spreadsheetId, | ||
| String | sheetName, | ||
| ACM.Activity | activity, | ||
| ACM.User | user | ||
| ) |
Use Google Sheets API to append a new Activity
row from provided Activity and User.
| sheets | Google Sheets API Handle |
| spreadsheetId | Google Sheets Spreadsheet ID |
| sheetName | Name of sheet to append to (e.g. Activity ) |
| activity | ACM.Activity flatbuffer |
| user | ACM.User flatbuffer (used for MakerLabs ID and Maker Status ) |
| Uint8List datatable_to_user | ( | Map | datatable | ) |
Convert DataTable from result of Users
query to ACM.User
flatbuffer.
| datatable | Google Visualization DataTable |
ACM.User
flatbuffer bytes Expect query result columns in a hard-coded order as follows:
| String extract_access_token | ( | auth_header | ) |
Parse HTTP Authorization header to extract an OAuth access token.
| auth_header | HTTP Authorization header in format "Authorization: Bearer {token}" ` |
| HttpResponseException | if header is missing or invalid |
| Future<String> fetch_sheet_columns | ( | String | authority, |
| String | path, | ||
| String | sheetName, | ||
| String | accessToken | ||
| ) |
Fetch IDs/labels of Google Spreadsheet columns for specified sheet.
| authority | Host portion of Google Visualization Query URL (e.g. "docs.google.com" ) |
| path | Path portion of Google Visualization Query URL (e.g. "/spreadsheets/d/{spreadsheetId}/gviz/tq" ) |
| sheetName | Name of sheet to query (e.g. Users ) |
| accessToken | Google OAuth token to use for query |
| String generate_permissions_check_query | ( | Map | usersColumnsDatatable, |
| List< List< String >> | selectColumnLabels, | ||
| String | tagId | ||
| ) |
Generate a query to return all permissions (and optional additional columns) for a specific user by Tag ID
.
| usersColumnsDatatable | Google Visualization query result DataTable |
| selectColumnLabels | (optional) Additional section headers/labels to select |
| tagId | Tag ID of desired user |
Steps:
"Permissions"
, count how many columns precede it (non-permissions columns) and follow it (permissions columns only).selectedColumnLabels
labels to the select portion of the queryTag ID
column and add it to the select portion of the query| void google_apps_script_proxy_http | ( | GoogleCloudFunctionsRequest | request, |
| GoogleCloudFunctionsResponse | response | ||
| ) |
Firebase Function HTTPS handler.
| request | HTTP request |
| response | HTTP response |
Steps:
access_token
from received request headers, use it for Google API requests/google_apps_script_proxy
from received URL pathhttps://script.google.com/{path}
| bool isNoLike | ( | String | s | ) |
Check whether a given string represents "no" ("☐", "f", "n", etc)
| s | Candidate input string |
True
if the input represents "no". | bool isYesLike | ( | String | s | ) |
Check whether a given string represents "yes" ("☑", "t", "y", etc)
| s | Candidate input string |
True
if the input represents "yes". | String labelToColumnId | ( | Map | datatable, |
| String | prefix, | ||
| String | label | ||
| ) |
Get the column letter for a specific label (with optional prefix)
| datatable | Google Visualization DataTable |
| prefix | Prefix string to strip from field before matching |
| label | Label string to match |
| void main | ( | ) |
Establish Dart -> JS module exports.
| String nthColumnLabel | ( | Map | datatable, |
| int | i | ||
| ) |
Get the label string of the Nth column from a DataTable.
| datatable | Google Visualization DataTable |
| i | Index of desired column, 0-based |
| Future<void> permissions_check_http | ( | GoogleCloudFunctionsRequest | request, |
| GoogleCloudFunctionsResponse | response | ||
| ) |
HTTPS handler to query Google Spreadsheet for ACM
.User
which matches ACM
.Activity
flatbuffer supplied in request payload.
| GoogleCloudFunctionsRequest | request |
| GoogleCloudFunctionsResponse | response |
ACM.User
payload is ready Steps:
access_token
from received request headers, use it for Google API requestslatestUserRef
, activityRef
User
sheet columns, fetch them if not present"X-DataSource-Auth"
header to force JSON formatUser
details from query resultsUser
details to FirebaseACM.User
flatbuffer (including permissions info) in responseActivity
to Google Spreadsheet| FutureReference push_activity_to_firebase | ( | Reference | activityRef, |
| ACM.Activity | activity | ||
| ) |
Append Activity details to Firebase to provided Database Reference.
| activityRef | Firebase Database Reference (e.g. readers/{machineId}/activity ) |
| activity | ACM.Activity flatbuffer |
| Future<void> push_latest_user_to_firebase | ( | Reference | latestUserRef, |
| ACM.User | user | ||
| ) |
Write User details to Firebase at provided Database Reference.
| latestUserRef | Firebase Database Reference (e.g. readers/{machineId}/latestUser ) |
| user | ACM.User flatbuffer |
| SheetsApi spreadsheet_client | ( | String | accessToken | ) |
Create a Google SheetsApi handle using a provided OAuth access token.
| accessToken | OAuth access token |
| baseClient | (optional) Existing http.NodeClient HTTP client to use |
| String toColumnName | ( | int | colNum | ) |
Get column letter from column index.
| colNum | Column index, 0-based |
http://cwestblog.com/2013/09/05/javascript-snippet-convert-number-to-column-name/
| int toColumnNum | ( | String | colName | ) |
Get column number from column letter.
| colName | Column letter |
http://cwestblog.com/2013/09/05/javascript-snippet-convert-number-to-column-name/
| app use | ( | bodyParser. | raw() | ) |
Provide request body as raw binary Buffer.
| const String ACM_FILE_IDENTIFIER = "ACM." |
| const bodyParser = require("body-parser") |
Express middleware to provide the full request body in a req.body field.
| FirebaseAdmin FIREBASE_admin |
| App FIREBASE_app |
| Database FIREBASE_database |
| const functions = require("firebase-functions") |
Firebase Functions SDK.
| exports google_apps_script_proxy |
Export /google_apps_script_proxy Firebase Functions handler.
| exports google_apps_script_proxy |
Export /google_apps_script_proxy AWS Lambda handler.
| HttpStatus |
| const index = require("./build/node/index.dart.js") |
Dart <-> JS Interop generated entrypoint.
| const index = require("./build/node/index.dart.js") |
(req,res)-style Dart handlers
| exports permissions_check |
Export /permissions_check AWS Lambda handler, much lower-latency than Google/Firebase Functions leading to faster tag scanning response times.
Express middleware to wrap (req,res) handlers as an AWS Lambda handler.
| final String SPREADSHEET_QUERY_AUTHORITY = "docs.google.com" |
| const String SPREADSHEET_USERS_SHEET_NAME = "Users" |
Sheet used for permissions check query.
| String USER_COLUMNS_DATATABLE |


{% extends "global/Page.html" %} {% load otree %} {% block title %} Introduction {% endblock %} {% block content %}
Please read the information below carefully. You will be asked questions about it on the next page.
{% include Constants.instructions_template with all_stakes=all_stakes rand_ex=rand_ex ex_stakes=ex_stakes%} {% next_button %} {% endblock %}


proof: The derivation of Eq. (107)
Using Eq. (65), we obtain
Using this, the second term on the right-hand side of Eq. (106) is
written
The first term of Eq. (336) is written
The last equality is due to
. The second
term of Eq. (336) is written
The last equality is due to that the coefficients before , i.e.,
is equal to
(refer to Sec. 9.7 for the proof).
The third term of Eq. (336) is written
Using Eqs. (337)-(339) in Eq. (336) yields
|
(340) |
Now we calculate the
term appearing in Eq. (106),
which can be written as
Gathering the terms involving in Eqs. (340) and
(341), we obtain
The second term of Eq. (342) is written
The last term of Eq. (342) is written
The terms in Eqs. (343) and (344) exactly cancel each
other. Thus the expression in (342) now reduces to
|
(345) |
Noting that
the expression (345) is further written as
where
is the unit vector along the direction of
equilibrium magnetic field, and
is the magnetic field curvature. Using these results, we obtain
| |
|
|
|
| |
|
|
(347) |
Using the above results, the radial component equation
|
(348) |
is written as
|
(349) |
which can be arranged in the form
Define
, the
above equation is written as
which is identical with Eq. (107).
yj
2015-09-04


Highly skilled software development professional with 5 years in software design, development and integration experience. Offering advanced knowledge in Javascript, C# and Android software technologies.
• Worked as a Full-stack Developer for internal product and external clients.
• Technology Stack: NuxtJS, VueJS, C# .NET, Entity Framework, PostgreSQL, Strapi, GraphQL, AWS, Azure, GCP, Jitsi Meet, Auth0, Stripe, SendGrid, Ionic Capacitor, Bugsnag, NodeJS, HotChocolate, MongoDB, Firebase
• Worked as a Full-stack Developer for ProSMART tools, a knowledge retention system that allows an organization to capture, leverage and effectively use the valuable IP and know-how in the business to help reduce risk, increase quality outcome, improve experience, and reduce time, effort and cost to deliver a project
• Technology Stack: AngularJS, Javascript, Kendo UI, C#, ASP.NET, MSSQL, AWS EC2, AWS S3
• Developed a Learning Management System that connects students and teachers easily in workshops, trainings, seminars, and other learning services
• Technology Stack: Android JAVA, Android Annotation Framework, RealmDB, Wordpress, PHP, MySQL
• Technical Lead for a logistics system, HRIS and a membership app for teachers
• Android Developer for a clinic advertisement app and a fleet management app
• Web Developer for a project management system, a risk management system, a time keeping system, and an airport website
• Technology Stack: C#, ASP.NET, Android JAVA, Javascript, AngularJS, Xamarin Forms, Nativescript, iOS Objective-C, PHP, VB.NET, NHibernate, TSQL and PL/SQL, OracleDB, MSSQL, MySQL
MSSQL, MySQL, SQLite, PostgreSQL, MongoDB, FireStore
AWS, Azure, GCP
jQuery, Bootstrap, Semantic-UI, Kendo UI, ASP.NET MVC, Entity Framework, NHibernate Framework, Xamarin Forms, RealmDB Android, Android Annotation Framework, RxJava/RxKotlin, Dagger 2, Retrofit 2, Firebase, GraphQL Android, Kotlin Coroutines, Koin, Strapi, GraphlQL, Jitsi Meet, Auth0, Stripe, SendGrid, Bugsnag, NodeJS, HotChocolate, MongoDB, Firebase
Exam 70:480: Programming in HTML5 withJavascript and CSS3
Date taken: December 2016


ABOUT SHIPPING
RETURNS WITHIN 30 DAYS
NEED HELP? Mail<EMAIL_ADDRESS>CREDITS
CORONA MEASURES
ENG
NL
FR
Vtwonen
Test
ON SALE
GIFTS
OUTLET
HOUSE, GARDEN & LIFESTYLE
VIP
BLOG
Decoration & Accessoires
Furniture
Lighting
Table & Kitchen
Bed & Bath
Fashion & Lifestyle
Garden & Outdoor
Decoration
Interior Purfumes
Candlesticks & Lanterns
Ornaments
Plaids
Plants
Pillows
Vases
Rugs
Home Decoration
Wall Decoration
Wallpaper
Clocks
Mirrors
Wall Decoration
Vtwonen Collection
Vtwonen Vases
Vtwonen Pillows
Vtwonen Rugs
Shop By Style
Bohemian
Industrial
Modern
Modern Classic
Scandinavian
Retro
Cabinets
Bar
Bedside Tables
Bookcases & Shelves
Cabinets
Racks & Shelves
Shoe Storage
Sideboards
TV Stands
Beds
Double Beds
Kids Beds
Kids Furniture
Kids Furniture
Sofas
1 Seater Sofas
2 Seater Sofas
2,5 Seater Sofas
3 Seater Sofas
Corner Sofas
Daybed
Sofa Bed
Chairs
Bar Stools
Beanbags
Dining Chairs
Lounge Chairs
Office Chairs
Poufs & Benches
Rocking Chairs
Tables
Coffee & Side Tables
Desks
Dining Tables Accessoires
Dining Table Sets
Dining Tables
Indoor Lighting
Bathroom Lighting
Desk Lamps
Party Lighting
Pendant Lamps
Chandeliers
LED-lighting
Ceiling Lamps
Spots
Table Lamps
Floor Lamps
Wall Lamps
Accessoires
Lampshades & Accessoires
Light Sources
Switches & Sensors
Outdoor Lighting
Wall Lamps
Pendant Lamps
Sensor Lamps
Solar Lamps
Ground Spots
Discover our new products!


Find your interest
Explore what people are talking about
Join the people
Forgot Password?
Log in
Explore what's happening in the world.
Join Twirrer today
Sign Up
Log in


a post with images
Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Fingerstache four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon.
Slow-carb four dollar toast Helvetica pop-up. Kale chips next level literally trust fund Pitchfork. Jean shorts Pinterest beard, farm-to-table irony craft beer swag tofu 8-bit Banksy. Quinoa forage fanny pack, pug hashtag Echo Park heirloom Schlitz tote bag artisan Neutra mumblecore 90’s shabby chic raw denim.


Mariana Perez
Welcome to my portfolio!
My name is Mariana and I'm originally from Mexico. I've been living in Tampere, Finland for 4 years. I'm currently in a career transition to become a software developer with focus on UX. I'll begin my studies in Human Technology Interaction during the fall at Tampere University.


The World Wide Web is a collection of HTML documents. HTML stands for HyperText Markup Language. The internet has been around since the 1990's & contains over 30 billion webpages. The major pieces of the world wide web include web browsers, the cloud, & servers.
HTMLHTML includes text content (what you see), markup (what it looks like), references to other documents (e.g. - images & video), as well as links to other pages.
HTML Markupi.e.- name(tag) + contents + name(tag) = element
More Tagsem - emphasis or italic
HTML AtttributesA webpage is a text doc written in a language called HTML. Web browsers read these documents and then both interpret & display them.
Coding happens when programmers write text in a language that a computer can understand. The computer can then follow the instructions that the programmer wrote.
Programmers need to write exactly the way a computer understands (also known as writing with correct "syntax")
For example, if you forget to close a 'b' tag, the computer won't be able to figure out what you had intended to make bold.
 And that's okay. If you forget how to make text italic in HTML, you can alwas just look it up.
You will be using HTML in the next few lessons, so it will be helpful if you're comfortable with the jargon.


Exception in thread "main" java.util.InputMismatchException
Post by: john bullwinkle, Greenhorn
on Nov 04, 2010 15:47:25
i'm unsure of why i'm getting this error. from the text file i'm readin in, the places all match up, so i'm not sure what's throwing it off. here is my code
here is the text file i'm reading
1,LP Carbon Monoxide Call Form,LPCarbonMonoxideCallForm_distributed,Salesman Number-Tank Description-Other Item,CrbnMonCall,
1,Driver Vehicle Inspection Report,DriverVehicleInspectionReport_distributed,Salesman Number-Tank Description-Other Item,DrvrVehInspct,
1,LP Driver Sales Hours Record,LPDriverSalesHoursRecord_distributed,Salesman Number-Tank Description-Other Item,DrvSlsHrs,
1,LP Equipment Calibration Form,LPEquipmentCalibrationForm_distributed,Salesman Number-Tank Description-Other Item,LPEqpmntCalbrt,
1,LP Equipment Lease,LPEquipmentLease_distributed,Salesman Number-Tank Description-Other,ItemLPEqpLse,
1,LP Montly Sales Checklist For Service Techs,LPMonthlySalesChecklistForServiceTechs_distributed,Salesman Number-Tank Description-Other Item,MthlSlsChkLstTch,
1,LP Out of Gas Form,LPOutOfGasForm_distributed,Salesman Number-Tank Description-Other Item,OutGas,
1,LP Tank Cart Inspections,LPTankCartInspections_distributed,Salesman Number-Tank Description-Other Item,TnkCrtInsp
here is the error log:
monthlyOrDaily = 1
formDisplayName =LP Carbon Monoxide Call Form
formFileName = LPCarbonMonoxideCallForm_distributed
formSaveOptions = Salesman Number-Tank Description-Other Item
endFileName = CrbnMonCall
a = 0
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at servicetech.SelectionScreen.formFileReader(SelectionScreen.java:265)
at servicetech.Main.main(Main.java:41)
Post by: Steve Harney, Greenhorn
on Nov 04, 2010 16:32:24
Looking at the stack
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
and the definition.
Thrown by a Scanner to indicate that the token retrieved does not match the pattern for the expected type, or that the token is out of range for the expected type.
It means that your program has tried to read a value that is an integer that is not an integer.
I really havnt used the scanner but looking at the API i would suspect that its reading a empty string off the end of the first line and cannot form it into a number.
you may consider calling the nextLine() on your scanner after the end of each line.
Steve
Post by: Campbell Ritchie, Sheriff
on Nov 04, 2010 16:54:07
You have a comma at the end of the line. That means Scanner will assume there is something after the comma, in this case an empty String. It is impossible to get an int out of an empty String, so you get the exception.
I think Steve Harney's diagnosis and prescription are correct. Try an additional nextLine() , or next() call, but nextLine() is probably correct.
All times above are in ranch (not your local) time.
The current ranch time is Dec 13, 2013 16:36:59.


--- layout: page status: publish published: false title: Uintah Basin (UBUG) author: display_name: Zach Beck login: Zach Beck email<EMAIL_ADDRESS>url: '' author_login: Zach Beck author_email<EMAIL_ADDRESS>wordpress_id: 2592 wordpress_url: http://gis.utah.gov/?page_id=2592 date: '2011-09-19 10:43:47 -0600' date_gmt: '2011-09-19 16:43:47 -0600' categories: [] tags: [] ---
Unitah Basin User Group: UBUG consists of Geo-spatial technicians and specialists from State and Federal agencies, private organizations, Uintah, Daggett, Duchesne, and Wasatch Counties. It is open to anyone that would like to attend. This user group conducts quarterly meetings featuring trainings, discussions on GIS and other Geo-spatial applications and/or problems that those attending might need help with. For more information....


1. (45 min) What's new in ClickHouse 22.7.
2.
SELECT * FROM numbers(10) FORMAT SQLInsert
INSERT INTO table (`number`) VALUES (0), (1), (2), (3),
(4), (5), (6), (7), (8), (9)
;
Controlled by the settings:
— output_format_sql_insert_max_batch_size;
— output_format_sql_insert_table_name;
— output_format_sql_insert_include_column_names;
— output_format_sql_insert_use_replace;
— output_format_sql_insert_quote_names;
Developer: Pavel Kruglov.
db.hits.aggregate(
[
{ $group: { _id: '$SearchPhrase' } },
{ $count: 'value' },
{ $project: { key: null, value: 1, } }
],
{allowDiskUse: true});
SELECT COUNT(DISTINCT SearchPhrase)
FROM mongodb('localhost:27017', 'test', 'hits',
'root', '', structure = 'SearchPhrase String');
Developer: Anastasia Petrenko, Ksenia Sumarokova.
MongoDB query — 7 min 47 sec
ClickHouse over MongoDB query — 11 min 56 sec :(
MongoDB query — 7 min 47 sec
ClickHouse over MongoDB query — 11 min 56 sec :(
ClickHouse query — 10 ms
Bonus:
INSERT INTO FUNCTION mongodb(...)
CREATE TABLE ... ENGINE = MongoDB(...)
Developer: Anastasia Petrenko, Ksenia Sumarokova.
Create a view on top of MeiliSearch index:
CREATE TABLE t (id UInt64, data String)
ENGINE = MeiliSearch('http://meili1:7700', 't', '')
Insert data for indexing:
INSERT INTO t ...
Query the data with special search conditions:
SELECT * FROM t WHERE meiliMatch($$ "q" = "abaca" $$)
Developer: Mikhail Artemenko, Ksenia Sumarokova.
You Know, for Search!
— integration with MeiliSearch;
— simple integration with Quickwit: https://clickhouse.com/docs/en/guides/developer/full-text-search/
— ElasticSearch? Sphinx? ManticoreSearch?
— Full-text indices inside ClickHouse?
Streaming table engines in ClickHouse:
— Kafka
(works with RedPanda as well);
— RabbitMQ;
— FileLog;
...
— NATS;
— S3Queue;
Developer: Pavel Chebarykov, Ksenia Sumarokova.
What else should we add?
SQS? Kinesis? Pulsar? MySQL binlog?
Or maybe add persistent queues inside ClickHouse?
— "direct" algorithm:
to join with key-value tables by direct lookups a.k.a. nested loops.
Good if the left table is small, but the right table is like a large dictionary.
Good to use in MATERIALIZED VIEW queries.
— "parallel_hash" algorithm:
speed-up if the right hand table is large.
— "full_sorting_merge" algorithm:
when right hand side is large
and does not fit in memory and does not allow lookups.
— "grace_hash" algorithm:
expected in 22.8.
Developer: Vladimir Cherkasov, lgbo-ustc.
SET additional_result_filter = $$ name = 'Vasya' $$;
SELECT * FROM values('name String', ('Vasya'), ('Petya'))
┌─name──┐
│ Vasya │
└───────┘
SET additional_table_filters = {'t': $$ name != 'Petya' $$};
CREATE TEMPORARY TABLE t (name String);
INSERT INTO t VALUES ('Vasya'), ('Petya');
SELECT * FROM t;
┌─name──┐
│ Vasya │
└───────┘
Developer: Nikolai Kochetov.
Improvement of ORDER BY, insert and merge in MergeTree,
and window functions.
SELECT WatchID FROM hits_100m_obfuscated ORDER BY Age
Before:
Elapsed: 4.154 sec. (24.07 million rows/s., 216.64 MB/s.)
After:
Elapsed: 0.482 sec. (207.47 million rows/s., 1.87 GB/s.)
Developer: Maksim Kita.
Speed-up of SELECT with FINAL modifier.
It "simply" improves performance up to 4 times.
Especially for complex transforms like Collapsing and Replacing.
Developer: Nikita Taranov.
CREATE TABLE ... EMPTY AS SELECT ...
SELECT base58Encode('Hello, world'),
base58Decode('2NEpo7TZsLFA2wMeK')
SELECT translate('Hello, world', ', ', ';\n'),
translateUTF8('test', 'tes', 'Тес')
SELECT parseTimeDelta('1h 35min 23sec')
SET group_by_use_nulls = 1
multiMatch, multiSearch, ... — support for non-constant needles.
SET compatibility = '21.8'
Allows you to upgrade to the latest version
but keep all the default behavior unchanged, as in the specified version.
... it is not going to cover 100% of possible changes.
But should give something.
Please don't use this feature!
Developer: Pavel Kruglov.
Go driver has HTTP support in addition to Native protocol.
Developer: Artem Iurin.
Go driver now uses high-performant low-level "ch-go" implementation.
Developer: Aleksandr Razumov, Dale McDiarmid.
Grafana plugin now has support for JSON data type.
Developer: Dale McDiarmid.
Official ClickHouse support in Superset.
Developer: Dale McDiarmid.
clickhouse-diagnostics tool now packaged with ClickHouse.
Developer: Dale McDiarmid, Mikhail Shiryaev.
This is just a fraction of what we've made in a month.
More interesting stuff is being prepared!


Adding raid groups here will make them available to other areas of the application that use raid groups. Raid groups that other people make that include characters you have confirmed are yours will appear here as well.


--- layout: post title: "No Title" ---
Why why why does Tumblr do this for inline photos in the dashboard!?


Apple may unveil 16-inch MacBook Pro, at a starting price of $2,399, today
Despite several revisions and tweaks, the butterfly keyboard has tarnished the reputation of Apple's notebook line up due to stuck keys, repeated keystrokes, and other problems
by IANSApple is likely to release its 16-inch MacBook Pro on Wednesday and its sales could kick off as early as this week, the media has reported.
The new MacBook Pro is expected to cost "about the same" as the 15-inch model, which starts at $2,399.
Despite several revisions and tweaks, the butterfly keyboard has tarnished the reputation of Apple's notebook line up due to stuck keys, repeated keystrokes, and other problems, The Verge reported on Tuesday.
Apart from its larger display, the 16-inch MacBook Pro will debut with a "revamped" keyboard that is "designed to be more reliable" than the butterfly- styled keyboards featured on MacBooks since 2016.
However, the insiders claim the new MacBook Pro would cost roughly the same as the outgoing model, and would be available this week. You might not have to worry about Apple using this as an opportunity for a price hike, according to a report in Engadget.


The major advantage of indexing is that it provides fast access to tables of data. For example, a table of employee records might be represented as shown below in order to gain fast access to the records by employee name:
% employee(LastName,FirstNames,Department,Salary,DateOfBirth) employee('Smith', ['John'], sales, 20000, 1-1-59). employee('Jones', ['Mary'], engineering, 30000, 5-28-56). ...
If fast access to the data via department is also desired, the data can be organized little differently. The employee records can be indexed by some unique identifier, such as employee number, and additional tables can be created to facilitate access to this table, as shown in the example below. For example,
% employee(Id,LastName,FirstNames,Department,Salary,DateOfBirth) employee(1000000, 'Smith', ['John'], sales, 20000, 1-1-59). employee(1000020, 'Jones', ['Mary'], engineering, 30000, 5-28-56). ... % employee_name(LastName,EmpId) employee_name('Smith', 1000000). employee_name('Jones', 1000020). ... % department_member(Department,EmpId) department_member(sales, 1000000). department_member(engineering, 1000020). ...
Indexing would now allow fast access to the records of every employee named Smith, and these could then be backtracked through looking for John Smith. For example:
| ?- employee_name('Smith', Id), employee(Id, 'Smith', ['John'], Dept, Sal, DoB).
Similarly, all the members of the engineering department born since 1965 could be efficiently found like this:
| ?- department_member(engineering, Id), employee(Id, LN, FN, engineering, _, M-D-Y), Y > 65.


Home
Gallery
CHAT ROOM
Profile
Upload
Logout
-- Image upload form --
Step1: Please select image file
Step2: Please select a crop region
File size
Type
Image dimension
W
H


The alarm is set for:
And will sound in:
Change alarm time:
Change sunrise duration (min):
There is no alarm currently set. Set one now:
Set sunrise duration (min):


?Erythrina
Standleyana
Krukoff
Det.
by
B.A.Krukoff,1938
Erythrina
cubensis
Det.
by
B.A.Krukoff,19S8
PlautÏ
Cnbenses
Wriehtian¾
York
Botanical
Garden
lkllOSS
[Coti,,
,C.
WK1&MT,
¥
1€
1619052
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high