text:
# Plug-in Discovery ![](https://raw.githubusercontent.com/DevSnicket/plugin-discovery/master/docs/icon.svg?sanitize=true)

[![Build Status](https://travis-ci.org/DevSnicket/plugin-discovery.svg?branch=master)](https://travis-ci.org/DevSnicket/plugin-discovery) [![Gitter chat](https://badges.gitter.im/devsnicket-plugin-discovery/gitter.png)](https://gitter.im/devsnicket-plugin-discovery)

DevSnicket Plug-in Discovery consists of a JavaScript repository object and a Babel plug-in that when used together can invert dependencies between modules and turn them into discovered plug-ins.

before | after
------ | -----
![](https://raw.githubusercontent.com/DevSnicket/plugin-discovery/master/docs/before.svg?sanitize=true) | ![](https://raw.githubusercontent.com/DevSnicket/plugin-discovery/master/docs/after.svg?sanitize=true)

Currently only CommonJS modules are supported (e.g. not ECMAScript ones).

Plug-in and repository files/modules in packages are supported (see "Forwarder lookup" below).

## Create repository factory function / package

[![NPM](https://img.shields.io/npm/v/@devsnicket/plugin-discovery-create-repository.svg)](https://www.npmjs.com/package/@devsnicket/plugin-discovery-create-repository
)

Install using [`npm`](https://www.npmjs.com/package/@devsnicket/plugin-discovery-create-repository):

```bash
npm install @devsnicket/plugin-discovery-create-repository
```
Or with [`yarn`](https://yarnpkg.com/en/package/@devsnicket/plugin-discovery-create-repository):

```bash
yarn add @devsnicket/plugin-discovery-create-repository
```
The create repository package contains a factory function. When this function is called and the return repository object is exported a plug-in contract is defined (in this example "someSortOfPlugins").

```javascript
// someSortOfPlugins.js
module.exports =
	require("@devsnicket/plugin-discovery-create-repository")
	();
```

This can then be plugged into by objects/functions etc from other files.

```javascript
// plugin1.js
require("./someSortOfPlugins")
.plugin("plug-in number 1");
```

The plug-ins can then be iterated and used from other files.

```javascript
// consoleLogPlugins.js
for (const plugin require("./someSortOfPlugins"))
	console.log(plugin);
// output:
// plug-in number 1
```

The code above alone won't work as there isn't a module require call to import the 2nd plug-in file from the 3rd file that iterates the plug-ins. The purpose of the repository object is so plug-ins can be identified by the [@devsnicket/plugin-discovery-create-repository](https://www.npmjs.com/package/@devsnicket/plugin-discovery-create-repository) package (see below) as it will automatically add the missing module require calls.

## CommonJS Babel plug-in / package

[![NPM](https://img.shields.io/npm/v/@devsnicket/plugin-discovery-commonjs-babel-plugin.svg)](https://www.npmjs.com/package/@devsnicket/plugin-discovery-commonjs-babel-plugin
)

Install using [`npm`](https://www.npmjs.com/package/@devsnicket/plugin-discovery-commonjs-babel-plugin):

```bash
npm install --save-dev @devsnicket/plugin-discovery-commonjs-babel-plugin
```
Or with [`yarn`](https://yarnpkg.com/en/package/@devsnicket/plugin-discovery-commonjs-babel-plugin):

```bash
yarn add --dev @devsnicket/plugin-discovery-commonjs-babel-plugin
```

The CommonJS Babel plug-in package discovers DevSnicket plug-in references and will automatically add module require calls where the package [@devsnicket/plugin-discovery-create-repository](https://www.npmjs.com/package/@devsnicket/plugin-discovery-create-repository) has been used (see above).

The example above would be rewritten into:

```javascript
// someSortOfPlugins.js
module.exports =
	require("@devsnicket/plugin-discovery-create-repository")
	();

require("./plugin1.js")
```

The Babel plug-in will need to be specified in your [Babel configuration](https://babeljs.io/docs/en/plugins#plugin-preset-paths), [Webpack Babel Loader configuration](https://github.com/babel/babel-loader#options) or equivalent.

### Discovery (plug-ins with relative paths)

The Babel plug-in has a parameter ignoreDirectoryNames, when not specified this defaults to node_modules. Scanning of the node_modules directory for Devsnicket plug-ins would be inefficient and likely to take a long time.

Webpack can be configured to run Babel for repositories even when they are in a package and so in the node_modules directory. So long as the plug-ins for these repositories aren't also in packages/node_modules, they can be discovered and rewritten by Webpack/Babel in the output. Webpack is often also configured to not include or to exclude running Babel for the node_modules directory. So you will need to ensure that your Webpack configuration still includes the paths to repositories in packages/node_modules for this to work.

### Forwarder lookup (repositories and plug-ins in packages)

To support packages that contain DevSnicket plug-ins that won't be discovered by default (see above), the Babel plug-in also does a lookup inside the node_module directory. It expects the following structure:

```
node_modules
├─plugin-package
| └─.devsnicket-plugin-discovery
|   ├─repository-package
|   | ├─repositoryFileName.js (forwarder)
```

Scoped packages for either/both the plug-in and repository are also supported:

```
node_modules
├─@plugin-package-scope
| ├─plugin-package-with-scope
| | └─.devsnicket-plugin-discovery
| |   ├─@plugin-package-scope
| |   | ├─repository-package
| |   | | ├─repositoryFileName.js (forwarder)
```

Forwarders:
* JavaScript files that contain CommonJS require calls to the actual plug-in files within the package
* generated upon build (i.e. when Babel is run)
* included in the package

When Babel is run with the -d / --out-dir parameter the forwarder directories and files described above will be created automatically. Forwarders are written for plug-ins when the repository is both in a package and not transformed by Babel[[1]](#footnote1). The following Babel plug-in parameters can override the default behavior:

| parameter | description | default
| - | - | - |
| forwarderParentDirectoryPath | the parent directory of .devsnicket-plugin-discovery | current directory |
| forwarderDirectoryClean | will the .devsnicket-plugin-discovery directory be deleted / cleaned | true
| outputDirectoryPath | directory where Babel transformed files are being outputted to | Babel -d / --out-dir parameters if specified

1 If a plug-in is transformed by Babel first, a forwarder will be written for it, if its repository is transformed afterwards, the forwarder will be deleted (as its redundant).

#### Package versions

It is advised that repositories are not included in packages with other content that might frequently change and so require new package versions.

If there are multiple versions of a repository's package installed, this is likely to result in that one repository effectively becoming multiple separate repositories with the same name. When this is happens, something plugged into a repository package of one version won't be returned when iterating that same repository package of another version. If this happens it is due to the behavior of the package manager being used. Package managers such as NPM will install the same package multiple times, in multiple directories, to avoid version conflicts.

### Tests

There are automated tests that run Babel with the plug-in and check the transformed output. The tests are run for the latest versions of Babel 6 and 7. NPM is run by the tests to install Babel and test case packages which are generated. To isolate Babel it is run in a separate process.

For each version of Babel tested (see above), all test cases are repeated but with Babel run by Webpack 4.

Code coverage is not currently being run because of the additional work required to analyse across multiple processes.

## Example

An example of Plug-in Discovery in use can be found in [Eunice](https://github.com/DevSnicket/Eunice). A plug-in repository is defined for its test harnesses ([Harnesses/processorPlugins.js](https://github.com/DevSnicket/Eunice/blob/master/Harnesses/processorPlugins.js)) so [processors](https://github.com/DevSnicket/Eunice/tree/master/Processors) can be discovered and included automatically.

repository: DevSnicket/plugin-discovery

repo_name: DevSnicket/plugin-discovery


text:
# esphome-lvgl
ESPhome with LVGL component

```python
esphome run esphome-lvgl.yaml
```

[![IMAGE ALT TEXT](http://img.youtube.com/vi/rcLNLm5NF4A/0.jpg)](http://www.youtube.com/watch?v=rcLNLm5NF4A "ESPhome with LVGL component")

license: MIT

branch_name: refs/heads/master

extension: md

license_type: permissive


text:
### React Connect 4

```shell
npm install
npm start
```

### Hosted on heroku
[Live Demo Here](https://react-connect.herokuapp.com/)

### Still Under Progress


text:
## WWDC 2014 Predictions Game

Well, it's more a wish list than real predictions about what will be announced in June, [at the WWDC 2014][]. Let's go!

### iPhone 6 with a 5 inches screen

Having a new iPhone with a bigger screen is an evidence. What the physical screen size could be? And maybe more important (for a developer), what would be the screen size in pixel? Let's imagine that the number of pixels __will be the same as the current iPhone 5x line: 640 pixels by 1136 pixels__: no need to redesign apps, the whole UI will be simply _bigger_. Given this, a safe bet would be also that this new iPhone will use __the same PPI (pixel-per-inch) as the current iPad Air: 264 ppi__.

A pixel-width of 640 with a 264 ppi give us a 640 / 264 = __2.424 inches width__; and we get __1136 / 264 = 4.303 inches for the height__.

Our new screen will measure 2.424 inches by 4.303 inches, by consequence a 4.94 inches diagonal... Let's simply say: a __5 inches screen__.

Get a paper, a rule and draw a 2.424 inches by 4.303 inches (6.2 cm by 10.9 cm): it's big, but not insanely big... Of course, you have to add extra space for the home button and the phone bevels: I can really see the iPhone 6, top of the iPhone line, with a screen this big.

![5 inches iPhone 6][]

But a 640 x 1136 pixels screen is a _very very conservative_ number of pixels, especially regarding the current Android phones: the [Nexus 5][] has a _1080 x 1920 pixels screen_, with a 445 ppi density. If you look at [high-definition smartphone displays][], you will get 3 different sizes: 720px by 1280px, 800px by 1280px and 1080px by 1920px, with a maximum ppi of 468 for the [HTC One][]: all these sizes will introduces a kind of fragmentation if chosen for the iPhone 6 (even with [AutoLayout][]), and some additional effort for developers.

In my dream: the iPhone 6 has a 1280 px by 2272 px screen, double the pixel size in width and height of the current iPhone 5s. No need to redesign apps, just get `@4x` resources and done.  But certainly not this year.

### New Apple TV

This WWDC will introduce the __App Store for Apple TV__, with a dedicated gamepad. Based on the iOS 8 beta SDK, developers will be able to develop apps for the Apple TV, and the Apple TV will receive a [Back to the Mac][] treatment: Game Center, Push Notifications etc... The Apple TV will become a true home media center: video game console, VOD, apps, a Siri driven UI, etc... it's the [Apple Bandai Pippin][] on steroids!

Why do I think this year will be the Apple TV's year ? Basically, four things:

__1. iOS 7 Game Controller:__ iOS 7 has seen the introduction of a [Game Controller framework][], making it easy to discover game controllers connected to a Mac or iOS device. Apple has even created specifications for distinct kinds of MFi game controllers with many common characteristics that must be implemented strictly according to the specification.

Allowing gamepad accessories just for iPhone and iPad seems to me too limited and I dream for an Apple console, with a dedicated gamepad _and_ an unlimited App Store.

__2. Amazon Fire TV:__

Few days ago, Amazon announces the [Amazon Fire TV][], available in the US for $99:

![Amazon Fire TV screenshot][]

- Over 200,000 TV episodes and movies, and __over a hundred games__ (Minecraft-Pocket Edition, The Walking Dead, Monsters University etc...),
- Voice search,
- Fast quad-core processor, 2 GB of memory, dedicated GPU, plus 1080p HD video and Dolby Digital Plus surround sound

In my mind, the Amazon Fire TV is a direct Apple TV concurrent, and Apple has to respond to this threat with a better Apple TV.

__3. A7 aka Cyclone:__

Apple has undoubtedly great plans for the A7, the CPU used in the iPhone 5s. [This analyse by AnandTech][] shows that the A7 has a bright future and this future could be the Apple TV.

> Cyclone is a bold move by Apple, but not one that is without its challenges. I still
> find that there are almost no applications on iOS that really take advantage of the
> CPU power underneath the hood. More than anything Apple needs first party software
> that really demonstrates what's possible.
> ...
> Looking at Cyclone makes one thing very clear: the rest of the players in the ultra
> mobile CPU space didn't aim high enough. I wonder what happens next round.

__4. PrimeSense bought by Apple:__

[Apple has recently bought PrimeSense][], an Israeli company which provided 3D sensors for the first generation Microsoft Kinect. Seems like a really good fit for the Apple TV team...

### iOS APIs

WWDC 2014 will usually introduce new APIs for iOS 8. If you look at the current [iOS 7 private frameworks headers][], you will find some interesting ones:

- [OAuth][]: wouldn't it be cool to have this, built-in in the system as as public API?
- [VectorKit][]: how about an object-based for vectorial stuff (animations, 3D etc...); everything you need to re-build the Maps app.
- [RemoteUI][]: do you remember the [Ole Begemann][] [Remote View Controllers saga][] ([part 1][], [part 2][], [part 3][])? It could be really useful to easily share data and even UI between apps: think about a mini Drop box explorer in your app for instance... Data sharing between apps is the most obvious low-hanging fruit to me, so I expect Apple to address this in iOS 8.

Another interesting indicator is to look a [Github Objective-C popular projects on last month][]:

- UI components: [DZNSegmentedControl][], [FXForms][], [BRFlabbyTable][], [JTSImageViewController][], [RPSlidingMenu][], [DeepBeliefSDK][]
- Core Components: [DateTools][], [AFNetworking][], [ReactiveCocoa][], [HHRouter][], [SDWebImage][]
- Tools / Debug: [Tweaks][], [Xtrace][]

UI is the crown jewels of iOS, and developers want more and more built-in UI components. Regarding [AFNetworking][] and [SDWebImage][], I find it sad that we still need a third party framework to deal easily with HTTP request, and web-based images. Come on Apple, bring-us something like [Requests][] for iOS 8!

### Developers tools: Xcode 6

Better developer tools for better apps!

For WWDC 2014, I see: an enhanced version of [XCTest][] with code coverage for instance; some new tools _à la_ [RevealApp][], and finally a better Xcode editor / refactor, _à la_ [AppCode][].

__1. [XCTest][]:__

Since Xcode 4, Apple has really improved the Xcode tests tools; and even introduced last year the [XCTest framework][], a new test framework for Xcode. Currently, XCTest is not really more useful than the venerable SenTestingKit; but I bet Apple has great ambitions for XCTest. Why no add [code coverage][] this year for instance?

__2. [RevealApp][]:__

Apple __has__ to integrate [RevealApp][] in Xcode. RevealApp has save me many times on really difficult UI bugs: it's an indispensable addition to the iOS developer arsenal. RevealApp gives you a visual representation of the views hierarchies of your app, and you can event interact with:

It's like [FireFox 3D View][], for iOS!

In any case, just buy it, you will not regret it.

__3. Xcode enhanced editor__:

XCode 6, the same Xcode with some good stuff from [AppCode][].

### Objective-C

I do not expect big news in the Objective-C land, apart new features to deal with dependencies. [Embrace][] [CocoaPods][] (the current de-facto standard dependency manager), and include it in OSX / iOS developers tools.

### No iWatch

WWDC 2014: no iWatch.

From jc.

[Apple has recently bought PrimeSense]: http://www.theguardian.com/technology/2013/nov/18/apple-buys-israels-primesense-kinect-sensor
[Embrace]: http://en.wikipedia.org/wiki/Embrace,_extend_and_extinguish
[AppCode]: http://www.jetbrains.com/objc/
[Requests]: http://docs.python-requests.org/en/latest/
[part 1]: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/
[part 2]: http://oleb.net/blog/2012/10/more-on-remote-view-controllers/
[part 3]: http://oleb.net/blog/2012/10/update-on-remote-view-controllers/
[Remote View Controllers saga]: http://oleb.net/blog/2012/10/remote-view-controllers-in-ios-6/
[Ole Begemann]: https://twitter.com/olebegemann
[RemoteUI]: https://github.com/MP0w/iOS-Headers/tree/master/iOS7/PrivateFrameworks/RemoteUI
[VectorKit]: https://github.com/MP0w/iOS-Headers/tree/master/iOS7/PrivateFrameworks/VectorKit
[OAuth]: https://github.com/MP0w/iOS-Headers/tree/master/iOS7/PrivateFrameworks/OAuth
[iOS 7 private frameworks headers]: https://github.com/MP0w/iOS-Headers/tree/master/iOS7/PrivateFrameworks
[AutoLayout]: http://blog.manbolo.com/2013/12/30/view.translatesautoresizingmaskintocontraints-no
[HTC One]: http://www.htc.com/www/smartphones/htc-one-m8/
[high-definition smartphone displays]: http://en.wikipedia.org/wiki/Comparison_of_high-definition_smartphone_displays
[Nexus 5]: https://www.google.com/nexus/5/
[code coverage]: http://en.wikipedia.org/wiki/Code_coverage
[XCTest]: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/UnitTestYourApp/UnitTestYourApp.html
[XCTest framework]: https://developer.apple.com/library/ios/documentation/ToolsLanguages/Conceptual/Xcode_Overview/UnitTestYourApp/UnitTestYourApp.html
[This analyse by AnandTech]: http://www.anandtech.com/show/7910/apples-cyclone-microarchitecture-detailed
[Apple Bandai Pippin]: http://en.wikipedia.org/wiki/Apple_Bandai_Pippin
[Back to The Mac]: https://www.apple.com/apple-events/october-2010/
[at the WWDC 2014]: https://developer.apple.com/wwdc/
[Amazon Fire TV screenshot]: amazon-fire-tv.jpg
[Amazon Fire TV]: http://www.amazon.com/Fire-TV-streaming-media-player/dp/B00CX5P8FC
[Game Controller framework]: https://developer.apple.com/library/ios/documentation/ServicesDiscovery/Conceptual/GameControllerPG/Introduction/Introduction.html
[RevealApp]: http://revealapp.com
[FireFox 3D View]: https://developer.mozilla.org/en-US/docs/Tools/3D_View
[CocoaPods]: http://cocoapods.org
[Tweaks]: https://github.com/facebook/Tweaks
[DateTools]: https://github.com/MatthewYork/DateTools
[AFNetworking]: https://github.com/AFNetworking/AFNetworking
[DZNSegmentedControl]: https://github.com/dzenbot/DZNSegmentedControl
[FXForms]: https://github.com/nicklockwood/FXForms
[Github Objective-C popular projects on last month]: https://github.com/trending?l=objective-c&since=monthly
[Xtrace]: https://github.com/johnno1962/Xtrace
[BRFlabbyTable]: https://github.com/brocoo/BRFlabbyTable
[JTSImageViewController]: https://github.com/jaredsinclair/JTSImageViewController
[BFNavigationBarDrawer]: https://github.com/DrummerB/BFNavigationBarDrawer
[RPSlidingMenu]: https://github.com/RobotsAndPencils/RPSlidingMenu
[ReactiveCocoa]: https://github.com/ReactiveCocoa/ReactiveCocoa
[HHRouter]: https://github.com/Huohua/HHRouter
[DeepBeliefSDK]: https://github.com/jetpacapp/DeepBeliefSDK
[SDWebImage]: https://github.com/rs/SDWebImage
[iOS 7 Private frameworks]: https://github.com/MP0w/iOS-Headers/tree/master/iOS7/PrivateFrameworks
[5 inches iPhone 6]: iphone6.png

branch_name: refs/heads/main


text:
# GéoMesse

## Installation

```
yarn install
```
Make sure that you have [React native](https://facebook.github.io/react-native/docs/getting-started.html#content) installed

## Development

Run the app on iOS emulator with
```
react-native run-ios
```

Run the app on Android with
```
react-native run-android
```
## Open Xcode for the project:
```
open ios/geomesse.xcodeproj
```

repository: carpedeum-fr/geomesse

gha_language: JavaScript

repo_name: carpedeum-fr/geomesse


text:
### Common Datasets

The dataset implemented here do not need to load the data into the final format.
It should provide the minimal data structure needed to use the dataset, so it can be very efficient.

For example, for an image dataset, just provide the file names and labels, but don't read the images.
Let the downstream decide how to read.

gha_language: Jupyter Notebook


text:
## React projects

- [Web Drum Sequencer](https://github.com/stufreen/web-drum-sequencer)
- [TensorFlow.js Real-Time Object Detection in 10 Lines of Code](https://medium.com/@bourdakos1/tensorflow-js-real-time-object-detection-in-10-lines-of-code-baf15dfb95b2)
- [React Reddit](https://github.com/abdullahceylan/ac-react-reddit)
- [Multimedia Notes](https://github.com/apiko-dev/Multimedia-Notes)
- [React + Sanctuary](https://codesandbox.io/s/8kwpv0r3w9)
- [React-peer](https://github.com/madou/react-peer)
- [PizzaQL](https://github.com/pizzaql/pizzaql)
- [React useEffect vs useLayoutEffect](https://codesandbox.io/s/2p2nnyryly)
- [Hooks workshop](https://github.com/ReactTraining/hooks-workshop)
- [Bookshelf](https://codesandbox.io/embed/github/kentcdodds/bookshelf)

repository: dispix/awesome-resources

repo_name: dispix/awesome-resources


text:
# QtYavalath
Yavalath application written in QT

### Stub implementation of AI

MCTS AI for Yavalath. From "vanilla" MCTS it differs:

* it uses MCTS solver
* it avoid losing moves if possible (move selection as well in rollouts/simulations)
* it uses winning moves if possible (move selection as well in rollouts/simulations)

Those simple things greatly enhance the strength. More enchancement incoming after GUI complete, i.e. exploration tuning, opening books, RAVE, some heuristics for progressive bias, pattern matching.

repository: jdermont/QtYavalath

repo_name: jdermont/QtYavalath


text:
# Change Log
All notable changes to SuggestionRow will be documented in this file.

## [3.3.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/3.3.0)

* Update Eureka version to 5.3.6

## [3.2.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/3.2.0)

* Support for Swift Package Manager

## [3.1.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/3.1.0)

* Support for Eureka 5.1, iOS 13 and Dark mode

## [3.0.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/3.0.0)

* Support for Eureka 5.0 and Swift 5.0

## [2.2.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/2.2.0)

* Support for Swift 4.2 and Xcode 10
* Renamed `maxSuggestionHeight` to `maxSuggestionRows`

## [2.1.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/2.1.0)

* Support for Swift 4
* Support loading suggestions asynchronously

## [1.0.0](https://github.com/EurekaCommunity/SuggestionRow/releases/tag/1.0.0)

* This is the initial version. It supports Eureka 3.0 and Swift 3

repository: EurekaCommunity/SuggestionRow

gha_language: Swift

gha_license_id: MIT

repo_name: EurekaCommunity/SuggestionRow


text:
nginx_5
=======

This mododule will install and setup Nginx. Nginx will operate on port 8080.

- Install's Nginx package and all needed dependecies
- Properly sources "/etc/nginx/nginx.conf"
- Properly sources "/etc/nginx/sites-available/default"
- Properly sources "/etc/nginx/conf.d/puptest.conf"
- Properly sources static test webpage to the default directory "/usr/share/nginx/www/index.html"

Apply this module by issueing the following command:

- wget https://raw.githubusercontent.com/rare72/nginx_5/master/files/nginx5_install.sh -r -v -O /tmp/nginx5_install.sh;bash /tmp/nginx5_install.sh

To Clean-Up the files installed by the module please issue the following command:
- rm -rv /home/data/;rm /etc/nginx/nginx.conf;rm /etc/nginx/conf.d/puptest.conf;rm /etc/nginx/sites-available/default;rm /usr/share/nginx/www/index.html;service nginx stop;apt-get remove -y nginx


text:
# Talent Manager

[!NOTE]
this is a node

Three ways to deploy this application:

Option 1: Click the button below
[![Deploy to Bluemix](https://bluemix.net/deploy/button.png)](https://bluemix.net/deploy)
================================================================================

Option 2: Download the source, compile using ant and push the war to Bluemix
```
git clone https://github.com/IBM-Bluemix/talent-manager.git
cd talent-manager
ant
cd output
cf create-service cloudantNoSQLDB Shared talent-manager-db
cf create-service personality_insights standard personality-insights-talent-manager
cf push aUniqueAppName
```

Replace aUniqueAppName with the name of your app (ex. talent-manager123)

Option 3: Import and deploy to Bluemix using [Eclipse for Java EE](http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr1) with the [Bluemix plugin](https://marketplace.eclipse.org/content/ibm-eclipse-tools-bluemix).

#Architecture Diagram
![alt tag](https://raw.github.com/IBM-Bluemix/talent-manager/master/talent-manager-architecutre-diagram.png)

# About
## Meet Ivy
* She's a talent manager at a growing tech startup.
* She's having trouble finding the right candidate based on:
..* technical skills
..* personal compatibility

> I wish I could clone my developer, Emory Wren -- having two guys like Emory working here would be amazing.

But that's not possible. So what's the next best thing?

** Talent Hotspot
A web application that allows you to search for candidates from a pool of applicants based on how closely they resemble one of your current employees.
Talent Hotspot uses Watson's User Modeling API service to analyze a potential candidate's personality based on their answers to a questionnaie (completed upon application to Ivy's company.)

The application can issue queries such as,
> "Find me a Developer like Craig Smith".
Then search through all possible candidate and return a ranked list of candidates sorted by highest-to-lowest percentage of personality resemblance.
From here, searches can be refined by including technical skills.
> "Find me a Developer like Craig Smith, and knows Java, C and Python"

# Technologies
## Watson APIs
User Modeling API
* Rerieve personality traits
* Visualize personality Traits

## Cloudant NoSQL Database
* Store personality profiles

## Bluemix
* [Liberty for Java Profile](https://ace.ng.bluemix.net/#/store/cloudOEPaneId=store&appTemplateGuid=javawebstarter)

## Other
* Angular.js
* external file manager for reading text files

# Pre-req's for local development
* [Install the Eclipse EE](https://eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/keplersr2).
* [Install Java 1.7 JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html).
* [Install the cf command-line tool](https://www.ng.bluemix.net/docs/#starters/install_cli.html).
* [Sign up for an IBM Bluemix account](http://bluemix.net).

repository: Nafling/talent-manager

repo_name: Nafling/talent-manager


text:
pomotodo-cli
============

[pomotodo](https://pomotodo.com/) in cli, it's not official.

Install
===========
```
npm install -g pomotodo-cli
```

Usage
===========
You will get to bin after install, pt and pp.

pt is for todo, as the name says, it's a simple todo app. More detail in ```pt --help```.

pp is for [pomodoro](https://en.wikipedia.org/wiki/Pomodoro_Technique), it's a timer for work and break.
So, you can use pt to add something to do, and use pp to finish them.

Default worktime is 25 minutes, and the break is 5.

repository: jbnicolai/pomotodo-cli

repo_name: jbnicolai/pomotodo-cli


text:
---
layout: post
title: "Reasoning with Sarcasm by Reading In-between"
date: 2018-05-08 06:46:03
categories: arXiv_AI
tags: arXiv_AI Sentiment Attention
author: Yi Tay, Luu Anh Tuan, Siu Cheung Hui, Jian Su
mathjax: true
---

* content
{:toc}

##### Abstract
Sarcasm is a sophisticated speech act which commonly manifests on social communities such as Twitter and Reddit. The prevalence of sarcasm on the social web is highly disruptive to opinion mining systems due to not only its tendency of polarity flipping but also usage of figurative language. Sarcasm commonly manifests with a contrastive theme either between positive-negative sentiments or between literal-figurative scenarios. In this paper, we revisit the notion of modeling contrast in order to reason with sarcasm. More specifically, we propose an attention-based neural model that looks in-between instead of across, enabling it to explicitly model contrast and incongruity. We conduct extensive experiments on six benchmark datasets from Twitter, Reddit and the Internet Argument Corpus. Our proposed model not only achieves state-of-the-art performance on all datasets but also enjoys improved interpretability.

##### Abstract (translated by Google)
讽刺是一种复杂的言语行为，通常表现在Twitter和Reddit等社交社区。社交网络上的讽刺流行对意见挖掘系统具有高度的破坏性，因为它不仅具有极性翻转的倾向，而且还具有形象化语言的使用。讽刺词通常表现为正面否定情绪或文字比喻情景之间的对比主题。在本文中，我们重新审视造型对比的概念，以便用讽刺来推理。更具体地说，我们提出了一种基于注意力的神经模型，它看起来相互之间而不是跨越，从而明确地建模对比和不协调。我们对来自Twitter，Reddit和Internet Argument Corpus的六个基准数据集进行了广泛的实验。我们提出的模型不仅能够在所有数据集上实现最先进的性能，而且还具有更高的可解释性。

##### URL
[https://arxiv.org/abs/1805.02856](https://arxiv.org/abs/1805.02856)

##### PDF
[https://arxiv.org/pdf/1805.02856](https://arxiv.org/pdf/1805.02856)


text:
---
title: "New package HydeNet with initial version 0.9.0 "
kind: article
created_at: 2015-07-02 23:13:00 UTC
author: CRANberries
categories:
tags:
layout: post
---
Package: HydeNet

Type: Package

Title: Hybrid Bayesian Networks Using R and JAGS

Version: 0.9.0

Date: 2015-07-2

Author: Jarrod E. Dalton<EMAIL_ADDRESS>and Benjamin Nutter <benjamin.nutter@gmail.com>

Maintainer: Benjamin Nutter <benjamin.nutter@gmail.com>

Description: Facilities for easy implementation of hybrid Bayesian networks
using R. Bayesian networks are directed acyclic graphs representing joint
probability distributions, where each node represents a random variable and
each edge represents conditionality. The full joint distribution is
therefore factorized as a product of conditional densities, where each node
is assumed to be independent of its non-descendents given information on its
parent nodes. Since exact, closed-form algorithms are computationally
burdensome for inference within hybrid networks that contain a combination
of continuous and discrete nodes, particle-based approximation techniques
like Markov Chain Monte Carlo are popular.  We provide a user-friendly
interface to constructing these networks and running inference using the 'rjags' package.
Econometric analyses (maximum expected utility under competing policies,
value of information) involving decision and utility nodes are also
supported.

License: MIT + file LICENSE

Depends: R (>= 3.0.0), nnet, rjags

Imports: broom (>= 0.3.7), DiagrammeR (>= 0.7), plyr, dplyr, graph,
gRbase, magrittr, stats, stringr, utils

Suggests: knitr

SystemRequirements: JAGS (http://mcmc-jags.sourceforge.net)

VignetteBuilder: knitr

LazyLoad: yes

LazyData: true

URL: https://github.com/nutterb/HydeNet,

BugReports: https://github.com/nutterb/HydeNet/issues

NeedsCompilation: no

Packaged: 2015-07-02 18:11:38 UTC; Nutter

Repository: CRAN

Date/Publication: 2015-07-03 00:31:59

More information about HydeNet at CRAN

    Original post by CRANberries - check out CRANberries

extension: markdown


text:
---
layout: default
---

# 1996-08-05 - Re: Stop the presses -- Anti-terrorism bill...[Noise]

## Header Data

From: "Jim Ray"<EMAIL_ADDRESS>To<EMAIL_ADDRESS>Message Hash: 9842f751dbc4c3de4f9289337720cb8b190c18dc9aa8d9ff9f72d919fb170bfd

Message ID<EMAIL_ADDRESS>Reply To: _N/A_

UTC Datetime: 1996-08-05 04:01:30 UTC

Raw Date: Mon, 5 Aug 1996 12:01:30 +0800

## Raw message

```
{% raw  %}From: "Jim Ray"<EMAIL_ADDRESS>Date: Mon, 5 Aug 1996 12:01:30 +0800
To<EMAIL_ADDRESS>Subject: Re: Stop the presses -- Anti-terrorism bill...[Noise]
Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

-----BEGIN PGP SIGNED MESSAGE-----

Phill Hallam-Baker<EMAIL_ADDRESS>wrote:

>Oh dear oh dear....
...

>I personally think that tagants is an insuffieicent approach to
>the problem. Given the number of gun related homicides in the
>US it is not unreasonable to require each individual cartridge
>to be stamped with a serial number and for gun dealers to be
>required to record each individual purchase. That at least
>was my advice to the UK govt after Dunblane.

So _THAT'S_ how they could have prevented the atrocity.  ;>

Weakening caused by the stress of stamping, the immensity of the
number of cartidges fired every day in the U.S., and the fact that
revolvers *exist* aside, we have these strange people called
"reloaders" in this country, Phill, and right now they have LOTS of
unstamped brass on hand. Criminals who wanted it would have an
unlimited supply into the foreseeable future. I agree with you that
criminals are, on the whole, dumber than cypherpunks, but it is easy
for them to pick up ideas like shooting a few hundred rounds or filing
a barrel etc. whether or not they are as likely as we are to have them
first.  JMR

Regards, Jim Ray -- DNRC Minister of Encryption Advocacy

"Big business never pays a nickel in taxes, according to Ralph
Nader, who represents a big consumer organization that never
pays a nickel in taxes." -- Dave Barry

 Defeat the Duopoly! Vote "NOTA," not Slick/Dull in November.
 Harry Browne for President. Jo Jorgensen for Vice-president.
 http://www.HarryBrowne96.org/
___________________________________________________________________
PGP id.E9BD6D35 51 5D A2 C3 92 2C 56 BE  53 2D 9C A1 B3 50 C9 C8
<EMAIL_ADDRESS>http://www.shopmiami.com/prs/jimray Coming
soon, the "Pennies For Perot" page. Keep billionaires off welfare!
___________________________________________________________________

-----BEGIN PGP SIGNATURE-----
Version: 2.6.2
Comment: Freedom isn't Freeh.

iQCVAwUBMgVRim1lp8bpvW01AQFwxAP7B4AugPSgmbnhFE3J7d8un1CMzYTznJkq
4Pf8zjH9iOo3pn+LoY7QgOFjUZo5tcuGRfyiEWJozfoeykhQ7Ds3tpiAUtfx2smN
1O9LGHuzv6WDOKuqK4bKAS20S0W2lWRgcDDBc8PEcXdSgekCDCgBFKRPr+IKY/jP
j2TIIVt0aLE=
=dOud
-----END PGP SIGNATURE-----

{% endraw %}
```

## Thread

+ Return to [August 1996](/archive/1996/08)

+ Return to "["Jim Ray" <liberty@gate.net>](/authors/jim_ray_liberty_at_gate_net_)"

+ 1996-08-05 (Mon, 5 Aug 1996 12:01:30 +0800) - Re: Stop the presses -- Anti-terrorism bill...[Noise] - _"Jim Ray"<EMAIL_ADDRESS>


text:
# Structures

Structures and Classes make up the building blocks of your code. Lets start by looking at Structures, their syntax and general purpose. We will do this by going through a simple example, building our own Structure from the ground up. We will also highlight how Structures are like Classes and what makes them different

In Swift, defining a new Structure is simple.

## [Syntax](#syntax)

```Swift
struct Person {

}
```
Structures, much like Classes can have properties that will store values.

```Swift
struct Person {
  var name: String = "John Doe"
}
```
They can also have methods that add functionality to the Structure.

```Swift
struct Person {
  var name: String = "John Doe"

  func printName() {
    print(self.name)
  }
}
```
Like Classes, Structures can also have initializers that set up their initial state.

```Swift
struct Person {
  var name: String = "John Doe"
  var favoriteMovies: [String]

  init(favoriteMovies: [String])
  {
    self.favoriteMovies = favoriteMovies
  }

  func printName() {
    print(self.name)
  }
}
```
In Swift, Structures like classes can also be extended. Assuming the structure defined above exists somewhere in our project, we can extend its functionality.

```Swift
extension Person {
  func printFavoriteMovies() {
    for movie in favoriteMovies {
      print(movie)
    }
  }
}
```

Structures, like Classes can conform to protocols.

```Swift
protocol NameReversible {
  func printNameInReverse()
}

struct Person: NameReversible {
  var name: String = "John Doe"
  var favoriteMovies: [String]

  init(favoriteMovies: [String]) {
    self.favoriteMovies = favoriteMovies
  }

  func printName() {
    print(self.name)
  }

  func printNameInReverse() {
    print(String(self.name.characters.reverse()))
  }
}
```

There is no difference between protocols used by structures or classes. For example the Hashable and Equtable protocols which are standard Swift protocols can be used on either a Class or a Structure.

```Swift
struct Person: Hashable, Equatable {
  let uniqueId: Int
  let name: String
  var favoriteMovies: [String]

  init(uniqueId: Int, name: String, favoriteMovies: [String]) {
    self.uniqueId = uniqueId
    self.name = name
    self.favoriteMovies = favoriteMovies
  }

  func printName() {
    print(self.name)
  }

  var hashValue: Int {
    return self.uniqueId
  }
}

func ==(lhs: Person, rhs: Person) -> Bool {
  return lhs.uniqueId == rhs.uniqueId
}
```

Once the structure is defined it can be instantiated like class.

```Swift
var joe = Person(uniqueId: 1, name: "Joe Example", favoriteMovies: ["Titanic", "Star Wars"])

var jane = Person(uniqueId: 1, name: "Jane Example", favoriteMovies: ["ET", "Avatar"])
```

Once instantiated, you access the properties and call the methods within a Structure much like a class instance.

```Swift
let jane = Person(uniqueId: 1, name: "Jane Example", favoriteMovies: ["ET", "Avatar"])
let joe = Person(uniqueId: 1, name: "Joe Example", favoriteMovies: ["Titanic", "Star Wars"])

joe.printName()
jane.printFavoriteMovies()
```
The code above will output
```
Joe Example
ET
Avatar
```

## [Versus Classes](#versus-classes)

Now that we know how to build Structures and how they are similar to Classes, lets go over what makes them different.

**Structures cannot inherit from other structures or classes.** We will go over how we use inheritance to extend the functionalities of specific classes. But for now, remember that Structures are incapable of inheritance. This means they cannot extend any other class or structure or be extending by any other class or structures.

![](Screen Shot 2016-05-04 at 1.00.30 AM.png)

**Structures cannot be type casted or downcasted** Typecasting is used check class's type or cast it as another type within its inheritance hierarchy.  TODO: is it because struct are value types and classes are reference types and data types lack a type definition once memory is allocated for them? need better understanding of this

**Structures cannot use the `deinit` keyword to deallocate resources assigned**
**Structures cannot have multiple references to the same instance**

and perhaps more importantly Structures are value types and Classes are reference types.

TODO: Do example

repository: kingreza/theswiftbook

repo_name: kingreza/theswiftbook


text:
# Change Log

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

## Unreleased as of Sprint 131 ending 2020-03-02

### Changed
* Removed all deprecated email components from Service namespace. [(#639)](https://github.com/ManageIQ/manageiq-content/pull/639)
* Removed all deprecated email components from Infrastructure namespace. [(#640)](https://github.com/ManageIQ/manageiq-content/pull/640)
* Removed all deprecated email components from Cloud namespace. [(#641)](https://github.com/ManageIQ/manageiq-content/pull/641)
* Removed all deprecated email components from AutomationManagement. [(#642)](https://github.com/ManageIQ/manageiq-content/pull/642)

## Jansa-1 Alpha-1

### Added
* Save automate timeout in to a service options hash. [(#636)](https://github.com/ManageIQ/manageiq-content/pull/636)
* Add an automate event for DrsMigrateVM_Task [(#625)](https://github.com/ManageIQ/manageiq-content/pull/625)
- Add RedHat domain content for 8 existing methods to ManageIQ. [(#624)](https://github.com/ManageIQ/manageiq-content/pull/624)
- Add RedHat domain content for Namespace "Integration" to ManageIQ. [(#622)](https://github.com/ManageIQ/manageiq-content/pull/622)
- Add RedHat domain content for 3 new placement methods to ManageIQ. [(#623)](https://github.com/ManageIQ/manageiq-content/pull/623)
- Optionally symlink spec/manageiq during bin/setup [(#608)](https://github.com/ManageIQ/manageiq-content/pull/608)
- Added test for removefromprovider method for Cloud Vm Retirement. [(#605)](https://github.com/ManageIQ/manageiq-content/pull/605)
* Remove call to retire_service_resources from retire_service method [(#590)](https://github.com/ManageIQ/manageiq-content/pull/590)
* Test ruby 2.5.7/2.6.5 see: ManageIQ/manageiq#19414 [(#591)](https://github.com/ManageIQ/manageiq-content/pull/591)
* AzureStack events for targeted refresh [(#588)](https://github.com/ManageIQ/manageiq-content/pull/588)
* Eligible storages for placement methods [(#578)](https://github.com/ManageIQ/manageiq-content/pull/578)

### Changed or Fixed
* [V2V] Fix cancellation process [(#634)](https://github.com/ManageIQ/manageiq-content/pull/634)
* Refactor start_retirement method for Cloud Orchestration Retirement. [(#615)](https://github.com/ManageIQ/manageiq-content/pull/615)
* Refactor microsoft_best_fit_least_utilized method for VM Placement. [(#626)](https://github.com/ManageIQ/manageiq-content/pull/626)
* Refactor redhat_best_fit_cluster method for VM Placement. [(#629)](https://github.com/ManageIQ/manageiq-content/pull/629)
- Add better logging to check_service_retire method. [(#619)](https://github.com/ManageIQ/manageiq-content/pull/619)
- Fix for Quota validation issue with service dialog memory values. [(#620)](https://github.com/ManageIQ/manageiq-content/pull/620)
- Save automate timeout value for service.execute step into service's options hash [(#611)](https://github.com/ManageIQ/manageiq-content/pull/611)
- Use automate timeout when execution_ttl is not set for an orchestration service [(#618)](https://github.com/ManageIQ/manageiq-content/pull/618)
- Refactor finish_retirement method for Service Retirement. [(#602)](https://github.com/ManageIQ/manageiq-content/pull/602)
- Refactor start_retirement method for Service Retirement. [(#601)](https://github.com/ManageIQ/manageiq-content/pull/601)
- Refactor start_retirement method for Infra VM Retirement. [(#600)](https://github.com/ManageIQ/manageiq-content/pull/600)
- Refactor approve_request method for Infra VM Retirement Approval. [(#607)](https://github.com/ManageIQ/manageiq-content/pull/607)
- Refactor deleteservicefrom_vmdb method for Service Retirement. [(#603)](https://github.com/ManageIQ/manageiq-content/pull/603)
- Refactor finish_retirement method for Infra VM Retirement. [(#599)](https://github.com/ManageIQ/manageiq-content/pull/599)
- Refactor deletefromvmdb method for Infra VM Retirement. [(#597)](https://github.com/ManageIQ/manageiq-content/pull/597)
- Cleanup after Ansible runner integration [(#594)](https://github.com/ManageIQ/manageiq-content/pull/594)
- Removing poweroff and checkpower_off methods in Retirement class. [(#593)](https://github.com/ManageIQ/manageiq-content/pull/593)
- use :automation_manager_ansible_tower instead of :automation_manager [(#586)](https://github.com/ManageIQ/manageiq-content/pull/586)
- Switch to call lookup_by_* methods [(#584)](https://github.com/ManageIQ/manageiq-content/pull/584)
- Move V2V Automate Functionality into Core [(#570)](https://github.com/ManageIQ/manageiq-content/pull/570)

## Ivanchuk-1 - Released 2019-09-18

### Added
- Changes for Python 3 compatibility [(#557)](https://github.com/ManageIQ/manageiq-content/pull/557)

### Fixed
- [V2V] Remove check of task.options\[:collapse_snapshots] [(#564)](https://github.com/ManageIQ/manageiq-content/pull/564)
- Support flavors for catalog bundles with Orchestration [(#535)](https://github.com/ManageIQ/manageiq-content/pull/535)
- Add specs for storage_hosts that are inaccessible [(#506)](https://github.com/ManageIQ/manageiq-content/pull/506)
- #raw_stdout does not exist for workflow template job. [(#491)](https://github.com/ManageIQ/manageiq-content/pull/491)
- manageiq-core.manageiq-automate Wrap all values in quotes [(#555)](https://github.com/ManageIQ/manageiq-content/pull/555)

## Unreleased as of Sprint 118 - 2019-08-19

### Fixed
- Vm retirement is processed by VmRetireRequest state machine. [(#552)](https://github.com/ManageIQ/manageiq-content/pull/552)

## Hammer-9 - Released 2019-07-23

### Fixed
- Fix check_reconfigured ae_result to prevent retry loop and failure. [(#548)](https://github.com/ManageIQ/manageiq-content/pull/548)

## Hammer-7 - Released - 2019-06-10

### Fixed
- Change refresh target to src_vm_or_dest_host for DrsMigrateVM_Task_Complete [(#531)](https://github.com/ManageIQ/manageiq-content/pull/531)
- Fix Service Retirement requests leaving the Service as 'retiring'. [(#530)](https://github.com/ManageIQ/manageiq-content/pull/530)

## Hammer-6 - Released 2019-05-22

### Fixed
- VM Retirement Request - clear values from vmretire_request_starting instance. [(#532)](https://github.com/ManageIQ/manageiq-content/pull/532)

## Hammer-5 - Released 2019-04-23

### Added
- [V2V] Expose virt-v2v-wrapper error message in progress.states [(#514)](https://github.com/ManageIQ/manageiq-content/pull/514)

### Fixed
- Fixed State Machine and Instances for Vm Retirement. [(#515)](https://github.com/ManageIQ/manageiq-content/pull/515)

### Removed
- [V2V] Remove SetDescription state [(#509)](https://github.com/ManageIQ/manageiq-content/pull/509)

## Hammer-4 - Released 2019-03-29

### Added
- v2v Throttling moved to backend [(#504)](https://github.com/ManageIQ/manageiq-content/pull/504)

### Fixed
- [V2V] Remove check on power_off variable [(#513)](https://github.com/ManageIQ/manageiq-content/pull/513)

## Hammer-3 - Released 2019-03-06

### Fixed
- Fix missing word in provisioning mail's subject and body [(#484)](https://github.com/ManageIQ/manageiq-content/pull/484)

## Hammer-2 - Released 2019-02-07

### Added
- Add handler for compute.instance.update [(#497)](https://github.com/ManageIQ/manageiq-content/pull/497)

## Hammer-1 - Released 2019-01-15

### Added
- Deny request if no conversion host is configured [(#455)](https://github.com/ManageIQ/manageiq-content/pull/455)
- Use task cancelation_status to trigger cancelation [(#457)](https://github.com/ManageIQ/manageiq-content/pull/457)
- Use embedded log method. [(#427)](https://github.com/ManageIQ/manageiq-content/pull/427)
- Adding log_and_notify method into log_object embedded method. [(#423)](https://github.com/ManageIQ/manageiq-content/pull/423)
- Transformation throttling - Base components [(#418)](https://github.com/ManageIQ/manageiq-content/pull/418)
- Adding log and raise error method into log_object embedded method. [(#416)](https://github.com/ManageIQ/manageiq-content/pull/416)
- Added log_and_exit utility method [(#414)](https://github.com/ManageIQ/manageiq-content/pull/414)
- Add plugin display name [(#411)](https://github.com/ManageIQ/manageiq-content/pull/411)
- Trigger Nuage targeted refresh more often [(#409)](https://github.com/ManageIQ/manageiq-content/pull/409)
- Prepare Nuage authentication attributes (for Embedded Ansible) [(#406)](https://github.com/ManageIQ/manageiq-content/pull/406)
- Change VMware URI to connect directly to ESXi [(#405)](https://github.com/ManageIQ/manageiq-content/pull/405)
- Add state_machine_phase attribute to transformation state machines [(#402)](https://github.com/ManageIQ/manageiq-content/pull/402)
- Add CustomButtonEvent to automate explorer [(#398)](https://github.com/ManageIQ/manageiq-content/pull/398)
- Adding Inspectme functionality into log_object embedded method. [(#386)](https://github.com/ManageIQ/manageiq-content/pull/386)
- Add Openstack volume.update.end event handler [(#401)](https://github.com/ManageIQ/manageiq-content/pull/401)
- Restore VM ownership and retirement when migrating [(#397)](https://github.com/ManageIQ/manageiq-content/pull/397)
- Created log_object method in System/CommonMethods/Utils class [(#362)](https://github.com/ManageIQ/manageiq-content/pull/362)
- Trigger targeted refresh for new Nuage entities [(#367)](https://github.com/ManageIQ/manageiq-content/pull/367)
- (Nuage Networks) Actually rename AE Instances not just fixture filename [(#365)](https://github.com/ManageIQ/manageiq-content/pull/365)
- Requested Quota for instance_type dialog override. [(#333)](https://github.com/ManageIQ/manageiq-content/pull/333)
- (Nuage Networks) Adjust Automate Instance names to new event type prefix [(#363)](https://github.com/ManageIQ/manageiq-content/pull/363)
- Add checks for retirement of correct child service in bundle [(#284)](https://github.com/ManageIQ/manageiq-content/pull/284)
- Add a precanned physical server automation event [(#339)](https://github.com/ManageIQ/manageiq-content/pull/339)
- Raise policy event when HOST_FAILURE is received. [(#329)](https://github.com/ManageIQ/manageiq-content/pull/329)
- Email instances for Cloud/Orchestration. [(#314)](https://github.com/ManageIQ/manageiq-content/pull/314)
- Email instances for VmMigrate and Reconfiguration. [(#311)](https://github.com/ManageIQ/manageiq-content/pull/311)
- Email instances for Service provisioning. [(#313)](https://github.com/ManageIQ/manageiq-content/pull/313)
- Email instances for Automation/Management/AnsibleTower provisioning. [(#310)](https://github.com/ManageIQ/manageiq-content/pull/310)
- Email instances for Host provisioning. [(#309)](https://github.com/ManageIQ/manageiq-content/pull/309)
- Email instances for /Infrastructure/Configured_System provisioning. [(#308)](https://github.com/ManageIQ/manageiq-content/pull/308)
- Updated existing V2v instances in Configuration/Email. [(#307)](https://github.com/ManageIQ/manageiq-content/pull/307)
- Updated Email instances for Cloud VM provisioning. [(#306)](https://github.com/ManageIQ/manageiq-content/pull/306)
- Updated Email instances for Infra VM provisioning. [(#305)](https://github.com/ManageIQ/manageiq-content/pull/305)
- Email instances for Cloud and Infrastructure retirement. [(#304)](https://github.com/ManageIQ/manageiq-content/pull/304)
- Email instances for Infra VM provisioning. [(#303)](https://github.com/ManageIQ/manageiq-content/pull/303)
- Email instances for Cloud VM provisioning. [(#302)](https://github.com/ManageIQ/manageiq-content/pull/302)
- Updated Configuration/Email class and existing V2v instances. [(#300)](https://github.com/ManageIQ/manageiq-content/pull/300)
- Created new namespace for Configuration/Email. [(#299)](https://github.com/ManageIQ/manageiq-content/pull/299)
- Change check for start_retirement to not initialized vs retiring [(#281)](https://github.com/ManageIQ/manageiq-content/pull/281)
- Add changes for service vm retire request approval [(#272)](https://github.com/ManageIQ/manageiq-content/pull/272)
- Add task status update to retirement status [(#262)](https://github.com/ManageIQ/manageiq-content/pull/262)
- Nuage events callbacks for targeted refresh [(#204)](https://github.com/ManageIQ/manageiq-content/pull/204)
- Add policy event triggers for Hawkular [(#201)](https://github.com/ManageIQ/manageiq-content/pull/201)
- v2v: Extend 'VM Transform' dialog to select VMs by tag [(#200)](https://github.com/ManageIQ/manageiq-content/pull/200)
- Add support to apply right-size recommendation during transformation [(#417)](https://github.com/ManageIQ/manageiq-content/pull/417)
- [V2V] Allow a retry to let virt-v2v start [(#479)](https://github.com/ManageIQ/manageiq-content/pull/479)

### Changed
- Changed validate_quota method to check individual quota items [(#375)](https://github.com/ManageIQ/manageiq-content/pull/375)

### Fixed
- Fix request denial [(#471)](https://github.com/ManageIQ/manageiq-content/pull/471)
- Fix TransformationPlanRequest approval - Set message [(#473)](https://github.com/ManageIQ/manageiq-content/pull/473)
- Modified requested method for reconfigure disk_remove. [(#461)](https://github.com/ManageIQ/manageiq-content/pull/461)
- Changed disk_name to symbol in requested Quota method. [(#474)](https://github.com/ManageIQ/manageiq-content/pull/474)
- Apply updates to the manageiq-automate Ansible role [(#454)](https://github.com/ManageIQ/manageiq-content/pull/454)
- Modified InspectMe method to check if object is taggable. [(#445)](https://github.com/ManageIQ/manageiq-content/pull/445)
- Modified Log_Object method to check if object is taggable. [(#446)](https://github.com/ManageIQ/manageiq-content/pull/446)
- Add storage profile support in vmware_best_fit_least_utilized method. [(#420)](https://github.com/ManageIQ/manageiq-content/pull/420)
- Updated requested method to fix vm_reconfigure via rest-api. [(#413)](https://github.com/ManageIQ/manageiq-content/pull/413)
- Do not check instance variables in specs for Transformation - Common - Utils [(#410)](https://github.com/ManageIQ/manageiq-content/pull/410)
- Escape username of VMware host [(#407)](https://github.com/ManageIQ/manageiq-content/pull/407)
- Add event handling for Openstack port events [(#372)](https://github.com/ManageIQ/manageiq-content/pull/372)
- Event handling for Openstack keypair events [(#371)](https://github.com/ManageIQ/manageiq-content/pull/371)
- Fix quota requested cloud_volume calculations. [(#388)](https://github.com/ManageIQ/manageiq-content/pull/388)
- Added vm_retire_extend method for new email. [(#366)](https://github.com/ManageIQ/manageiq-content/pull/366)
- Add event handling for Openstack volume attachment events [(#368)](https://github.com/ManageIQ/manageiq-content/pull/368)
- Remove check for a state of initialized in 4 start_retirement methods. [(#331)](https://github.com/ManageIQ/manageiq-content/pull/331)
- handle volume snapshot status changes [(#285)](https://github.com/ManageIQ/manageiq-content/pull/285)
- Move the task message into check for task presence [(#283)](https://github.com/ManageIQ/manageiq-content/pull/283)
- Add tests for orchestration stack retirement [(#437)](https://github.com/ManageIQ/manageiq-content/pull/437)
- Keep the encrypted value as is when creating service provision request. [(#435)](https://github.com/ManageIQ/manageiq-content/pull/435)
- Fix userid in transformation throttler launch [(#439)](https://github.com/ManageIQ/manageiq-content/pull/439)
- Disconnect storage when disconnecting a VM [(#472)](https://github.com/ManageIQ/manageiq-content/pull/472)
- #raw_stdout does not exist for workflow template job. [(#491)](https://github.com/ManageIQ/manageiq-content/pull/491)

##  Unreleased as of Sprint 101 Ending 2018-12-17

### Added
- Added Quota calculations for reconfigure resize disks [(#436)](https://github.com/ManageIQ/manageiq-content/pull/436)

## Gaprindashvili-6 - Released 2018-11-02

### Added
- Add state_machine_phase attribute to transformation state machines [(#402)](https://github.com/ManageIQ/manageiq-content/pull/402)
- Change VMware URI to connect directly to ESXi [(#405)](https://github.com/ManageIQ/manageiq-content/pull/405)
- Restore VM ownership and retirement when migrating [(#397)](https://github.com/ManageIQ/manageiq-content/pull/397)
- Add support to apply right-size recommendation during transformation [(#417)](https://github.com/ManageIQ/manageiq-content/pull/417)

### Fixed
- Escape username of VMware host [(#407)](https://github.com/ManageIQ/manageiq-content/pull/407)
- Updated requested method to fix vm_reconfigure via rest-api. [(#413)](https://github.com/ManageIQ/manageiq-content/pull/413)
- Add storage profile support in vmware_best_fit_least_utilized method. [(#420)](https://github.com/ManageIQ/manageiq-content/pull/420)

## Gaprindashvili-5 - Released 2018-09-07

### Added
- Add support for pre/post-migration playbook [(#355)](https://github.com/ManageIQ/manageiq-content/pull/355)
- Refactor set retry for pre/post migration playbooks [(#369)](https://github.com/ManageIQ/manageiq-content/pull/369)
- Refactor to add support for SSH transport method [(#359)](https://github.com/ManageIQ/manageiq-content/pull/359)
- Allow running playbook against powered off VM [(#380)](https://github.com/ManageIQ/manageiq-content/pull/380)
- Add support for MAC address in network mapping [(#351)](https://github.com/ManageIQ/manageiq-content/pull/351)
- Use targeted refresh during transformation [(#381)](https://github.com/ManageIQ/manageiq-content/pull/381)
- Update WeightedUpdateStatus to handle task cancellation and cleanup [(#357)](https://github.com/ManageIQ/manageiq-content/pull/357)
- Add default cleanup state machine for VM transformation [(#378)](https://github.com/ManageIQ/manageiq-content/pull/378)

### Fixed
- Fix default cleanup state machine [(#382)](https://github.com/ManageIQ/manageiq-content/pull/382)
- Transformation - Fix virt-v2v success check [(#393)](https://github.com/ManageIQ/manageiq-content/pull/393)
- Fix cleanup state machine path build [(#392)](https://github.com/ManageIQ/manageiq-content/pull/392)
- Fix hook string passing for pre/post-migration playbooks [(#370)](https://github.com/ManageIQ/manageiq-content/pull/370)
- Fix computation of currently running conversions by host [(#358)](https://github.com/ManageIQ/manageiq-content/pull/358)
- Fix transformation host selection [(#379)](https://github.com/ManageIQ/manageiq-content/pull/379)
- Fix weightedupdatestatus for cancellation [(#377)](https://github.com/ManageIQ/manageiq-content/pull/377)

### Removed
- Remove check on number of runners when converting VM [(#395)](https://github.com/ManageIQ/manageiq-content/pull/395)

## Gaprindashvili-4 - Released 2018-07-16

### Added
- New email consolidated namespace and class. [(#246)](https://github.com/ManageIQ/manageiq-content/pull/246)
- Automation for transformation plan [(#244)](https://github.com/ManageIQ/manageiq-content/pull/244)
- V2V - State machines - Initial work [(#248)](https://github.com/ManageIQ/manageiq-content/pull/248)
- Add VM Transformation state machine [(#252)](https://github.com/ManageIQ/manageiq-content/pull/252)
- Add V2V for VMware to oVirt / RHV [(#301)](https://github.com/ManageIQ/manageiq-content/pull/301)
- Tag migrated VM. [(#324)](https://github.com/ManageIQ/manageiq-content/pull/324)
- Add extra empty states to allow pre and post states. [(#338)](https://github.com/ManageIQ/manageiq-content/pull/338)
- Add a state to restore VM attributes during migration. [(#340)](https://github.com/ManageIQ/manageiq-content/pull/340)

### Fixed
- Calculate quota using service dialogs overrides. [(#203)](https://github.com/ManageIQ/manageiq-content/pull/203)
- Modify on {entry,exit,error} path to use WeightedUpdateStatus [(#265)](https://github.com/ManageIQ/manageiq-content/pull/265)
- Fix ManageIQ/manageiq-content/issues/275 [(#276)](https://github.com/ManageIQ/manageiq-content/pull/276)
- Fix System/CommonMethods/MiqAe directory name [(#312)](https://github.com/ManageIQ/manageiq-content/pull/312)
- Set insecure_connection to target provider as default behavior. [(#327)](https://github.com/ManageIQ/manageiq-content/pull/327)
- Restore VM power state upon transformation [(#336)](https://github.com/ManageIQ/manageiq-content/pull/336)

## Gaprindashvili-3 - Released 2018-05-15

### Added
- Add azure event handlers for targeted refresh [(#260)](https://github.com/ManageIQ/manageiq-content/pull/260)
- Add Azure events for targeted refresh [(#261)](https://github.com/ManageIQ/manageiq-content/pull/261)
- Add in the miq. automate and vmdb roles [(#254)](https://github.com/ManageIQ/manageiq-content/pull/254)

### Fixed
- Add event state machine for refresh. [(#243)](https://github.com/ManageIQ/manageiq-content/pull/243)

## Gaprindashvili-1 - Released 2018-01-31

### Added
- Do targeted refresh based on Openstack events. [(#184)](https://github.com/ManageIQ/manageiq-content/pull/184)
- Add basic events handlers for AWS [(#183)](https://github.com/ManageIQ/manageiq-content/pull/183)
- Target template related actions [(#153)](https://github.com/ManageIQ/manageiq-content/pull/153)
- Do targeted refresh based on AWS events [(#178)](https://github.com/ManageIQ/manageiq-content/pull/178)
- Record the name of the actual VM to simplify debugging [(#175)](https://github.com/ManageIQ/manageiq-content/pull/175)
- Pre-check install_drivers checkbox for windows VMs [(#170)](https://github.com/ManageIQ/manageiq-content/pull/170)
- v2v: Rephrase ISO driver selection [(#169)](https://github.com/ManageIQ/manageiq-content/pull/169)
- Support TTL (Time To Live) value for services. [(#162)](https://github.com/ManageIQ/manageiq-content/pull/162)
- AWS DetachVolume event switchboard setting. [(#164)](https://github.com/ManageIQ/manageiq-content/pull/164)
- New refresh method callable from the automate [(#159)](https://github.com/ManageIQ/manageiq-content/pull/159)
- Fix message when import fails [(#161)](https://github.com/ManageIQ/manageiq-content/pull/161)
- Support TTL (Time To Live) value for services. [(#148)](https://github.com/ManageIQ/manageiq-content/pull/148)
- v2v: Support virtio-win drivers ISO [(#147)](https://github.com/ManageIQ/manageiq-content/pull/147)
- Targeted refresh enhacements for VM import\rename\migration events [(#119)](https://github.com/ManageIQ/manageiq-content/pull/119)
- v2v: Storage mapping for mass migration [(#215)](https://github.com/ManageIQ/manageiq-content/pull/215)
- Auto approval for Cloud Vm reconfigure [(#236)](https://github.com/ManageIQ/manageiq-content/pull/236)

### Fixed
- Force full refresh for router based events [(#224)](https://github.com/ManageIQ/manageiq-content/pull/224)
- Add more aws event handlers [(#217)](https://github.com/ManageIQ/manageiq-content/pull/217)
- Added active provisions to quota count. [(#196)](https://github.com/ManageIQ/manageiq-content/pull/196)
- Fixed calculation for Ansible playbook service max TTL. [(#193)](https://github.com/ManageIQ/manageiq-content/pull/193)
- Fix VM Migrate complete email when To field is nil. [(#177)](https://github.com/ManageIQ/manageiq-content/pull/177)
- Fixed an issue when trying to retire a service that is already in the process of being retired. [(#189)](https://github.com/ManageIQ/manageiq-content/pull/189)
- Changed ae_retry_limit = 1.minute to ae_retry_interval = 1.minute. [(#151)](https://github.com/ManageIQ/manageiq-content/pull/151)
- Changes made in Wait_for_ip and Wait_for_completion methods in [(#152)](https://github.com/ManageIQ/manageiq-content/pull/152)
- v2v: Handle IMPORTEXPORT_STARTING_IMPORT_VM event [(#149)](https://github.com/ManageIQ/manageiq-content/pull/149)
- Set retry interval to 1 minute for generic service state-machine. [(#163)](https://github.com/ManageIQ/manageiq-content/pull/163)
- v2v: Fix filtering of drivers ISO to display [(#143)](https://github.com/ManageIQ/manageiq-content/pull/143)
- Fixed quota calculations for multiple vms in requested method. [(#128)](https://github.com/ManageIQ/manageiq-content/pull/128)
- Add Available_Projects method for dynamic dropdown in container template service dialog [(#127)](https://github.com/ManageIQ/manageiq-content/pull/127)
- Require just rails/engine [(#120)](https://github.com/ManageIQ/manageiq-content/pull/120)
- Support embedded_ansible to fetch credentials from provider [(#112)](https://github.com/ManageIQ/manageiq-content/pull/112)
- Make container events belong to their container groups [(#225)](https://github.com/ManageIQ/manageiq-content/pull/225)
- Check for both owner email and requester email for user quota [(#230)](https://github.com/ManageIQ/manageiq-content/pull/230)
- Added a retry_interval to VM Migrate state machine [(#232)](https://github.com/ManageIQ/manageiq-content/pull/232)
- Refresh template if sealing failed [(#233)](https://github.com/ManageIQ/manageiq-content/pull/233)
- Only data storage domains in VM transform dialog [(#229)](https://github.com/ManageIQ/manageiq-content/pull/229)
- Add policy resolution call to vm_destroy for providers. [(#223)](https://github.com/ManageIQ/manageiq-content/pull/223)

### Removed
- Removed the schema values for PreDeleteFromProvider. [(#226)](https://github.com/ManageIQ/manageiq-content/pull/226)

## Fine-3

### Added
- Add automate methods for VM import between providers [(#36)](https://github.com/ManageIQ/manageiq-content/pull/36)
- v2v: Add support for driver ISOs [(#121)](https://github.com/ManageIQ/manageiq-content/pull/121)
- v2v: Add automate methods for post-import network configuration [(#123)](https://github.com/ManageIQ/manageiq-content/pull/123)
- Event switchboard entries for Amazon EBS events. [(#137)](https://github.com/ManageIQ/manageiq-content/pull/137)

### Changed
- Update method order_ansible_playbook.rb to match the move of create_service_provision_request [(#126)](https://github.com/ManageIQ/manageiq-content/pull/126)

### Fixed
- Change errors in log to error type. [(#101)](https://github.com/ManageIQ/manageiq-content/pull/101)
- Changed ${/#ae_reason} to a string value in on_error methods. [(#98)](https://github.com/ManageIQ/manageiq-content/pull/98)
- Add quota checking for VMReconfigure tests. [(#56)](https://github.com/ManageIQ/manageiq-content/pull/56)
- Change exceeds message in log to warn type. [(#104)](https://github.com/ManageIQ/manageiq-content/pull/104)
- Remove VM reconfiguration email. [(#116)](https://github.com/ManageIQ/manageiq-content/pull/116)
- OrderAnsiblePlaybook method should collect machine credential. [(118)](https://github.com/ManageIQ/manageiq-content/pull/118)
- v2v: Fix confusing message in WaitForImport state [(#140)](https://github.com/ManageIQ/manageiq-content/pull/140)
- v2v: Fix list drivers on missing ISO domain [(#139)](https://github.com/ManageIQ/manageiq-content/pull/139)

## Fine-2

### Added
- Order Ansible Playbook from a Custom Button using a Method. [(#113)](https://github.com/ManageIQ/manageiq-content/pull/113)

## Fine-1

### Added
- Remove createfolder event handler since it is now handled by MiqVimBrokerWorker [(#100)](https://github.com/ManageIQ/manageiq-content/pull/100)
- Added LenovoXclarity Namespace to EMS Events into Automate [(#77)](https://github.com/ManageIQ/manageiq-content/pull/77)
- Automate - Notification for Ansible and Cloud provisioning errors. [(#15)](https://github.com/ManageIQ/manageiq-content/pull/15)
- Generic Service State Machine update_status change [(#85)](https://github.com/ManageIQ/manageiq-content/pull/85)
- Generic Service State Machine - new retirement instances. [(#72)](https://github.com/ManageIQ/manageiq-content/pull/72)
- Add Automate modeling for Embedded Ansible Events. [(#69)](https://github.com/ManageIQ/manageiq-content/pull/69)
- Add Automate modeling for External Ansible Tower Events. [(#68)](https://github.com/ManageIQ/manageiq-content/pull/68)
- Change default behavior of Service Retirement to not remove the Service [(#76)](https://github.com/ManageIQ/manageiq-content/pull/76)
- Generic Service State Machine - added notifications and improved logging. [(#61)](https://github.com/ManageIQ/manageiq-content/pull/61)
- Automate method to list ansible credentials [(#53)](https://github.com/ManageIQ/manageiq-content/pull/53)
- Add openstack cloud tenant events [(#59)](https://github.com/ManageIQ/manageiq-content/pull/59)

### Changed
- In the F release ConfigurationManagement has been deprecated [(#87)](https://github.com/ManageIQ/manageiq-content/pull/87)
- Refactoring and fixing cloud/vm/provisioning/placement/best_fit_amazon method. [(#63)](https://github.com/ManageIQ/manageiq-content/pull/63)
- Generic Service State Machine method update. [(#51)](https://github.com/ManageIQ/manageiq-content/pull/51)
- Generic Service State Machine methods modified to use Service object. [(#58)](https://github.com/ManageIQ/manageiq-content/pull/58)

### Fixed
- Add notifications for finish_retirement. [(#106)](https://github.com/ManageIQ/manageiq-content/pull/106)
- Add policy checking for the retirement request. [(#86)](https://github.com/ManageIQ/manageiq-content/pull/86)
- Modified vmware_best_fit_least_utilized to not select Hosts in maintenance. [(#81)](https://github.com/ManageIQ/manageiq-content/pull/81)
- Added method instances for EmbeddedAnsible [(#80)](https://github.com/ManageIQ/manageiq-content/pull/80)
- Fixes VM extend retirement [(#62)](https://github.com/ManageIQ/manageiq-content/pull/62)
- Disabled DeleteFromVMDB in 2 places [(#55)](https://github.com/ManageIQ/manageiq-content/pull/55)
- Fixed typo in check_ssh method [(#66)](https://github.com/ManageIQ/manageiq-content/pull/66)
- Generic State Machine provision instance fix [(#54)](https://github.com/ManageIQ/manageiq-content/pull/54)

## Initial changelog added

repository: ManageIQ/manageiq-content

gha_language: Ruby

repo_name: ManageIQ/manageiq-content


text:
---
layout: default
title: Cell
nav_order: 2
---

# Adding new cell type

There are in total 4 types of cells

- `Cell_fit`: this cell is used when fitting the characterisation parameters (see [Characterisation parametrisation](../3_using/5_character_parametrisation.html))
- `Cell_KokamNMC`: this cell has parameters for a high-power Kokam NMC cell and is used for cycling and degradation simulations
- `Cell_LGChem`: this cell has parameters for a high-energy LG Chem NMC cell and is used for cycling and degradation simulations
- `Cell_user`: this cell is made for the user to set his/her own parameters for his/her own type of cell (in the released code, the parameters are the same as the ones for the Kokam cell.

Users can make their own sub-class of Cell to implement another cell type. This class has to inherit Cell so that it can be used by the rest of the code. Additionally, the header-file structure must be corrected: the new cell type must include `Cell_user.hpp` in its header file, and in `cycling.cpp` and `degradation.cpp` the header type of the new Cell-subclass must be include instead of `Cell_user` (to avoid double- including header files).

The diagram below shows how the header-files are currently structured (the colours are for clarity only). The new Cell-subclass must be inserted to the right of `Cell_user` (which it has to include), and the lines to `cycling.cpp` and `degradation.cpp` have to come from the header file of this new subclass instead of from `cell_user.hpp`.

![](img/dependancy.png){:width="80%" }

repository: Battery-Intelligence-Lab/SLIDE

gha_license_id: NOASSERTION

repo_name: Battery-Intelligence-Lab/SLIDE


text:
# MATLAB Crash Course

Author: methylDragon
Contains a syntax reference for MATLAB!
I'll be adapting it from the ever amazing Derek Banas: https://www.youtube.com/watch?v=NSSTkkKRabI

------

## Pre-Requisites

### Good to know

- Systems

## 1. Introduction

MATLAB stands for Matrix Laboratory. It's a very famous program used for working with matrices.

There are two main windows you'll really type into in MATLAB:

- **The Command Window**
  - It's like a terminal! You can define variables here, call functions, and use it like a calculator
- **The Editor**
  - You can write scripts here that you can use in the command window!

There's a third section known as the **Workspace**, where you can inspect your variables!

If you ever need to ask for help, either Google for it, or use the `help` function in the command window!

```matlab
help <function>
```

## 2. Command Line Interface

### 2.1  Path

Be sure to ensure that all scripts you want to write are in MATLAB **Path**, in other words, that they are accessible and visible to MATLAB.

In the file explorer on the left, you may add folders and subfolders to your path by right clicking and selecting `Add To Path`. Alternatively, you may double click on a folder to focus it and add it to Path, since your Path also includes your current focused folder!

### 2.2 Clearing Data

```matlab
clc % Clear command window (does not clear variables)
clf % Clear figures

clear % Clear everything
clear all % Clear everything

clear <variable> % Clear single variable
```

### 2.3 Configure Output

```matlab
format compact % Keeps output compact!
```

### 2.4 Stop Execution

Use `CTRL-c` to stop executing a particular command!

### 2.5 Precision

Precision is set to 15 digits by default. But you can configure that!

## 3. Basic MATLAB Syntax Reference

Click on New Script to start creating a new script!

### 3.1 Comments

[go to top](#top)

```matlab
% Single Comment

%{
    multi
    line
    comment!
%}
```

You can also use `CTRL-r` to comment and `CTRL-t` to uncomment!

### 3.2 Variables

Everything is a `double` by default in MATLAB.

```matlab
a = 5 % a is now 5! Yay!
```

Data Types:

- int8, int16, int32, int64
- char
- logical (Booleans)
- double
- single (Value without a decimal place)
- uint8

#### **More On Variables**

```matlab
c1 = 'A'
class(c1) % Prints the class/type of the variable!

s1 = 'A string'
class(s1) % With single quotes, the class is 'char'

s2 = "A string"
class(s2) % With double quotes, the class is 'string'

5 > 2 % Logical 1
b1 = true % Logical 1
```

To get the maximum number you can store, you can use these! The maximum and minimums differ depending on the number type. The example list I'm writing below is non-exhaustive.

```matlab
% For ints
intmax('int8')
intmin('int8')

% For doubles
realmax

% For singles
realmax('single')
```

### 3.3 Basic Operations

I really shouldn't need to explain this... You can use MATLAB like a calculator, and the results can go into variables!

```matlab
a = 1 + 2 + 3 + 4 + 5

5 + 5 % Add
5 - 5 % Subtract
5 * 5 % Multiply
5 / 5 % Divide
5 ^ 4 % Exponent
mod(5, 4) % Mod (get remainder)

% NOTE! MATLAB doesn't have increment and decrement operators. So you can't do stuff like a++, b--, etc.
```

### 3.4 Casting

```matlab
v2 = 8
v3 = int8(v2) % Like so!
```

Just write the appropriate class identifier and use it like a function!

### 3.5 Printing and Displaying

```matlab
% Use this to display vectors and numbers!
disp(some_vector_variable)

% Use this to print strings!
fprintf("Hello world!")

% sprintf prints as a string
sprintf('5 + 4 = %d\n', 5 + 4)
% With the %d here, it transplants the next variable argument into the string!
```

### 3.6 User Input

Using the `;` suppresses the input printout after the user has entered the input!

> Note: `"` might not work in some versions of MATLAB as a string delineator. Use `'` in that case.

**String Input**

```matlab
% String Input
% Notice the '' escapes the second quote
name = input('What''s your name : ', 's');

% Let's use this if statement to print the input out! (~ means not)
if ~isempty(name)
    fprinf('Hello %s\n', name)
end
```

**Vector Input**

```matlab
vInput = input('Enter a vector : ');
disp(vInput)
```

### 3.7 Useful Math Functions

`help elfun` for a whole list of math functions

```matlab
randi([10, 20]) % Random int
abs(-1) % Returns 1
floor(2.45) % Returns 2
ceil(2.45) % Returns 3
round(2.45) % Returns 2
exp(1) % e^x
log(100) % Log base e (ln)
log10(100) % Log base 10
log2(100) % Log base 2
sqrt(100) % Square root
deg2rad(90)
rad2deg(3.14)
```

### 3.8 Conditionals

```matlab
> % More than
< % Less than
>= % More than or equal to
<= % Less than or equal to
== % Equal to
~= % Not equal to

|| % Or
&& % And
~ % Not
```

**If block**

```matlab
if <condition>
    <do something>
elseif <condition>
    <do something else>
else
    <do something entirely different>
end % REMEMBER TO END!!!
```

**Switch Statement**

```matlab
switch score
    case 1
        disp("Aw")
    case 2
        disp("Better")
    case 3
        disp("You get the point")
    otherwise
        disp("WHO NAMED IT OTHERWISE OMG")
end % REMEMBER TO END
```

### 3.9 Vectors

They're one dimensional rows or columns!

**THE INDEXING FOR MATLAB STARTS AT 1, NOT 0!!!!**

```matlab
% Row Vectors
vector_1 = [5 3 2 1] % Yep!
vector_2 [5, 3, 2, 1] % Both are valid ways!

% Column Vectors
vector_3 = [5; 3; 2; 1]

% Index into the vectors
vector_1(1) % 5
vector_1(end) % 1 (Last value)
vector([1 2 3]) % Get first, second, and third value in vector

% Get range
vector_1(1:3) % First to third

% Change at index
vector_1(1) = 6

% Transpose Vector
a = [1 2 3]
a' % This is now 1, 2, 3 as a column!
```

**Vector Operations**

```matlab
a = [2; 3; 4]
b = [1 2 3]

a * b
% 2 4 6
% 3 6 9
% 4 8 2
```

### 3.10 Vector Methods

```matlab
vector_1 = [1 2 3 4 5]
length(vector_1)
sort(vector_1, 'descend')

% Create ranges
5 : 10 % Gives you [5 6 7 8 9 10]
2 : 2 : 10 % Gives you [2 4 6 8 10]

% Concatenate
a = [1 2 3]
b = [4 5 6]
[a b] % [1 2 3 4 5 6]

% Dot Product (Either...)
a * b' % Transpose as needed
dot(a, b) % Self explanatory

% Cross Product
cross(a, b) % Nice

% Linspace
linspace(1, 20, 4) % Generates 4 numbers equally spaced between 1 and 20

% Logspace
logspace(1, 3, 3) % Like linspace, but the spacing is logarithmic
```

### 3.11 Matrices

It's MATLAB, not Vector lab.

```matlab
matrix_a = [2 3 4; 4 6 8] % 2 rows, 3 columns (2x3)

length(matrix_a) % Gets you 3 (columns)
numel(matrix_a) % Number of values in matrix (6)
size(matrix_a) % Rows, then Columns (2 3)

% Generate random matrices!
randi([10, 20], 2)

% Index into matrices
a = [1 2 3; 4 5 6; 7 8 9]

a(1, 2) = 22 % Index into single value
a(1, :) = 25 % Change all row values
a(:, 2) % Change all column values
a(end, 1) % Last row
a(1, end) % Last column

% To delete a value, just literally put a semicolon at the end.
a(1, 2) = ;

% Multiply matrices
a * b

% Element-wise multiplication
a .* b % Take note of the period!

% Other matrix stuffffff
a - b
a + b
```

### 3.12 Matrix Methods

The list is not exhaustive!

#### **Construction**

Use the `help` command to find out how these work! They're overloaded functions.

```matlab
eye()
ones()
zeros()
diag()
```

#### **Mathematical Operations**

```matlab
sqrt(a) % Square root all values in matrix
sum(a) % Sum all columns
sum(a, 'all') % Sum all entries

prod(a) % Multiply all column values

cumsum(a, 'reverse') % Cumulative sum. First row stays the same, each row after is the sum of the preceding and current row (reverse makes it go in reverse)
cumsum(a) % Or if you don't want it reversed..
cumprod(a) % Cumulative product.

det() % Determinant
inv() % Inverse
```

#### **Conditionals and Indexing**

```matlab
isequal(a, b) % Check for equality
a > 3 % Apply conditional to all entries
find(a > 24) % Gives you index of entries that fulfill the condition
```

#### **Transformations**

```matlab
fliplr(a) % Flip left to right
flipud(a) % Flip up down

rot90(a) % Rotate 90 degrees
rot90(a, 2) % Rotate 180 degrees

reshape(a, 2, 6) % Reshape into 2x6, it's like numpy!
repmat(a, 2, 1) % Duplicate matrix into new matrix. Eg. If original matrix was 3x3, doing repmat(a, 2, 1) makes it 6x3

repelem(m3, 2, 1) % Duplicates ELEMENTS, so in this case, each element is duplicated twice in terms of the row
```

### 3.13 For Loops

For loops! It's pretty Pythonic. It iterates through a range.

```matlab
% Loop from 1 to 10 and print it
for i = 1:10
    disp(i)
end % REMEMBER TO END

% MORE EXAMPLES

% Print every value in matrix
a = [1 2 3; 4 5 6]
for i = 1:2
    for j = 1:3
        disp(a(i, j))
    end
end

% Print for undetermined length
b = [6 7 8]
for i = 1:length(b)
    disp(b(i))
end
```

### 3.14 While Loops

```matlab
i = 1 % You must create the variable first!

while i < 20
    if(mod(i, 2)) == 0
        disp(i)
        i = i + 1; % Semicolon suppresses the print
        continue
    end % This end is for i

    i = i + 1;
    if i >= 10
        break
    end
end
```

### 3.15 Cell Arrays

You can store data of multiple types

```matlab
cell_A = {'Hi', 35, [25 8 19]}
cell_B = cell(5) % Create the cell spaces first

cell_A{1} % Get first element
cell_A{3}(2) % Index further
cell_A{4} = 'Something else'
cell_A(4) = ; % Delete

for i = 1:length(cell_A)
    disp(cell_A{i})
end

% You can cast character arrays into cell arrays too!
a = ['A', 'BB', 'CCC']
char_array = cellstr(a)
```

### 3.16 Strings

Strings are vectors of characters!

```matlab
str_1 = 'I am a string'
length(str_1)

% Index into a string
str_1(1)
str_1(3:4) % Slices

% Concatenation
str = strcat(str1, ' and now I''m longer!')

% Look for substring
strfind(str, 'a') % Returns indexes of all found substrings

% Replace string
strrep(str, 'longer', 'bigger')

% Split string
str_array = strsplit(str, ' ') % Splits at all spaces. Makes a string array

% Convert numbers to string
int2str(99)
num2str(3.14)

% Check for equality
strcmp(str1, str2)

% Check if is char
ischar('Rawr!11!!1')

% Check if a string is just made of letters
isletter('num 2') % Logical 0
isstrprop('word2', 'alpha')

% Check if string is made of alphanumeric characters
isstrprop('word2', 'alphanum') % Logical 1

% Sort
sort(str, 'descend')

% Delete whitespace (it's like .strip() in python)
strtrim(str)

% Lower and Uppercase conversion
lower(str)
upper(str)
```

### 3.17 Structures

Custom data types! Think C++ structs! Or Python dictionaries/maps.

```matlab
methyl_struct = struct('name', 'methylDragon', ... % the ... lets you skip down to the next line (:
'species', ' Dragon')

disp(methyl_struct.name) % methylDragon

% Add a new field!
methyl_struct.sound = 'Rawr'

% Delete a field
methyl_struct = rmfield(methyl_struct, 'sound')

% Check if field exists
isfield(methyl_struct, 'species')

% Get all field names
fieldnames(methyl_struct)

% Store structures in vectors!
a(1) = methyl_struct
```

### 3.18 Tables

Tables are labelled rows of data in a table format

Get `help table` if you need help.

```matlab
a = {'A'; 'B'; 'C'; 'D'};
b = [29; 42; 1; 2]
c = {'AA', 'BB', 'CC', 'DD'}

% Create a table!!! We'll specify a as the index now
test_table = table(a, b, c, 'RowName', a)

% You can do cool stuff with tables!
mean(test_table.b) % For example.. find the means

% Add new fields
test_table.d = [1; 2; 3]

% Pull specific entries
test_table({'A', 'B'}, :) % This defaults to using the RowName as indexer

% Pull specific entries, using another row
a(ismember(test_table.b, {29, 42},:)
```

### 3.19 File IO

```matlab
% Let's just make a random matrix first
rand_matrix = randi([10, 50], 8)

% Let's save and load some files!
save sampdata.dat rand_matrix -ascii
load sampdata.dat
disp sampdata
type sampdata.dat

% We can save variables in a file as well!
save params % Leaving no arguments saves all variables you have on hand
load params
who % Display it on the screen
a = 123
save -append params a % This appends to the normal variable
```

### 3.20 Eval

If you know Python you should know what this does already.

Eval executes strings as code!

```matlab
toExecute = spritnf('total = %d + %d', 5, 4)
eval(toExecute) % Executes it as:
% total = 5 + 4
```

### 3.21 Pausing

You can pause in MATLAB too! Think of it like Arduino `delay()` or Python `time.sleep()`

```matlab
pause(5) % Pause for 5 seconds

pause off % Disable pause
pause on % Enable pause
```

## 4. Functional and OOP MATLAB

### 4.1 Functions

Functions have to come at the **end** of your file!

Local and global variable rules still apply! Local variables defined in functions don't change outside of the function! Just take note!

```matlab
% Function to calculate volume
% The return is defined by the name preceding the =
% The name of the function is the name following the =

% In this case, the return is 'vol' and the function name is 'cylinderVol'
function vol = cylinderVol(radius, height)
    vol = pi radius^2 * height
end

% Let's try another one! This time a function with no arguments
function randNum = getRandomNum
    randNum = randi([1, 100])
end

% Return more than one value
[coneV, cylVol] = getVols(10, 20) % I'll call the function here, and define it below

function [coneVol, cylinVol] = getVols(radius, height)
    cylinVol = pi * radius^2 * height
    coneVol = 1/3 * cylinVol
end

% Variable Number of Arguments
function sum = getSum(varargin)
    sum = 0;
    for k = 1:length(varargin)
        sum = sum + varargin{k}(1);
    end
end

% Return variable number of outputs
function [varargout] = getNumbers(howMany)
    for k = 1:howMany
        varargout{1}(k) = k;
    end
end
```

### 4.2 Anonymous Functions

No named functions! Think lambda in python

```matlab
cubeVol = @ (l, w, h) l * w * h; % (input) output

a = cubeVol(2, 2, 2) % Gives you 8! Correct!
```

**Pass Function to another Function**

Think decorators!

Source: https://www.youtube.com/watch?v=NSSTkkKRabI

```matlab
mult3 = @ (x) x * 3;
sol = doMath(mult3, 4)

function sol = doMath(func, num)
    sol = func(num);
end
```

**Returning Functions**

Source: https://www.youtube.com/watch?v=NSSTkkKRabI

```matlab
mult4 = doMath2(4);
sol2 = mult4(5)

function func = doMath2(num)
    func = @(x) x * num;
end
```

### 4.3 Recursive Functions

They call themselves!

```matlab
function val = factorial(num)
if num == 1
    val = 1;
else
    val = num * factorial(num - 1);
end
end
```

### 4.4 Classes

Static members are shared amongst all members of a class

```matlab
classdef Shape
    properties % Variables!!!
        height
        width
    end

    methods(Static)
        function out = setGetNumShapes(data)
            % Persistent values are shared by all objects also
            persistent Var;
            if isempty(Var)
                Var = 0;
            end
            if nargin % Number of input arguments
                Var = Var + data
            end
            out = Var;
        end
    end

    methods
        % Define a constructor
        function obj = Shape(height, width)
            obj.height = height
            obj.width = width
            obj.setGetNumShapes(1)
        end
        % Overloaded disp function
        % If you don't know what overloading is, check my C++ tutorial. It basically overwrites the functionality of a pre-existing function if the argument number matches
        function disp(obj)
            fprintf('Height : %.2f / Width : %.2f\n', obj.height, obj.width)
        end
        function area = getArea(obj)
            area = obj.height * obj.width;
        end
        % Overload Greater Than function
        function tf = gt(obja, objb)
            tf = obja.getArea > objb.getArea
        end
    end
end
```

**Let's try using it!**

```matlab
a1 = Shape(10, 20)
disp(a1)
Shape.setGetNumShapes
a1.getArea

a2 = Shape(5, 10)
disp(a2)
Shape.setGetNumShapes

a1 > a2
```

### 4.5 Class Inheritance

```matlab
classdef Trapezoid < Shape % Trapezoid inherits from Shape

    properties
        width2
    end

    methods
        function obj = Trapezoid(height, width, width2)
            obj@Shape(height,width) % The @ sign means you're taking it from the parent
            % In this case we're using Shape's constructor!
            obj.width2 = width2
        end
        function disp(obj)
            fprint('Height : %.2f / Width : %.2f / Width2 : %.2f', obj.height, obj.width, obj.width2);
        end
        function area = getArea(obj)
            area = (obj.height/2) * (obj.width + obj.width2);
        end
    end
end
```

**Let's try it out!**

```matlab
a3 = Trapezoid(10, 4, 6)
disp(a3)
a3.getArea
```

## 5. Plotting

### 5.1 Plotting in MATLAB

Source: https://www.youtube.com/watch?v=NSSTkkKRabI

`help plot` for help!

```matlab
xVals = 1:5
yVals = [2 4 8 5 9]
yVals2 = [1 5 7 6 8]

figure(1)
plot(xVals, yVals, 'g+', 'LineWidth', 2)
hold on % Draw over what was plotted, keep plot settings
plot(xVals, yVals2, 'k*')
legend('yVals', 'yVals2')

grid on % Turn grid on

xlabel('Days')
ylabel('Money')
title('Money Made Today')
figure(2)
bar(xVals, yVals, 'r')

% Colors : blue(b), black(k), cyan(c), green(g),
% magenta(m), red(r), yellow(y), white(y)
% Plot Symbols : . o x + * s d v ^ < > p h
% Line Types : -, :, -., - -

% Set font weights and the like
% gca is the axis object, gcf is the figure object
set(gca, 'FontWeight', 'bold', 'FontSize', 20, 'color', 'white');
set(gcf, 'color', 'white')

clf % Delete all figures
```

#### **Example Sinusoid with Time**

```matlab
y = A.*cos(2*pi .* t/T - 2*pi .* x/lambda + phi0);
```

### 5.2 3D Plotting in MATLAB

#### **3D Plots and Meshgrids**

![1553825732887](assets/1553825732887.png)

```matlab
plot3() % Use this instead of plot2!

% Example
t = 0: pi/50 : 10*pi;
plot3(sin(t), cos(t), t)

% Meshgrids
meshgrid()
```

#### **Surfaces**

```matlab
% Plot surfaces
cylinder()
sphere()

surf() % Plot a surface
isosurface() % For when plotting normal surfaces are too hard
contour() % Plot a contour map instead
```

#### **Vector Fields**

```matlab
quiver() % 2D
quiver3() % 3D

colorbar % Add a colorbar!
```

## 6. Intermediate and Advanced Math

### 6.1 Vector Calculus

```matlab
gradient()
divergence()
curl()
del2() % Discrete laplacian
```

```
                            .     .
                         .  |\-^-/|  .
                        /| } O.=.O { |\
```

------

 [![Yeah! Buy the DRAGON a COFFEE!](./assets/COFFEE%20BUTTON%20%E3%83%BE(%C2%B0%E2%88%87%C2%B0%5E).png)](https://www.buymeacoffee.com/methylDragon)

repository: methylDragon/coding-notes

path: /MATLAB/MATLAB Crash Course.md

filename: MATLAB Crash Course.md

repo_name: methylDragon/coding-notes


text:
# nfsservctl

## Intro
nfsservctl - Used to query and/or update kernel parameters in the NFS server.

## Description
The nfsservctl() system call is used to query or update kernel parameters in the NFS server. When used to query parameters, it returns the current parameters, including potential upgrade messages. When used to modify parameters, flags can be set which will cause the NFS server to automatically restart itself after the parameters take effect.

The nfsservctl() system call can also be used to start and stop the NFS server. This ability is useful for system administrators who wish to restart the server for maintenance or configuration changes without requiring a system reboot.

## Arguments
* `cmd`:`int`[K] - specifies the type of operation to perform. This is one of the NFSCTL_* constants.
* `arg`:`void *`[K] - a pointer to a buffer to be used to store information related to the nfsservctl() command such as parameters that need to be changed or information about the current status of the NFS server.
* `len`:`sizet`[K] - used to specify the length of the buffer in bytes.

### Available Tags
* K - Originated from kernel-space.

## Hooks
### sys_nfsservctl
#### Type
Kprobe
#### Purpose
To monitor NFS server activity - It should be able to identify whether the system is issuing NFS server control commands.

## Example Use Case
In certain scenarios, an administrator may need to make frequent changes to NFS server settings in order to optimize performance. In such cases, the nfsservctl() system call allows them to make such changes without requiring a system reboot or manual intervention.

## Issues
null

## Related Events
* nfsservctl_set_constate

> This document was automatically generated by OpenAI and needs review. It might
> not be accurate and might contain errors. The authors of Tracee recommend that
> the user reads the "events.go" source file to understand the events and their
> arguments better.

repository: aquasecurity/tracee

gha_language: Go

repo_name: aquasecurity/tracee


text:
# docker-image-keepalived

[![Build Status](https://travis-ci.org/tmorin/docker-image-keepalived.svg)](https://travis-ci.org/tmorin/docker-image-keepalived)
[![](https://images.microbadger.com/badges/version/thibaultmorin/keepalived:latest.svg)](https://microbadger.com/images/thibaultmorin/keepalived:latest "Get your own version badge on microbadger.com")
[![](https://images.microbadger.com/badges/image/thibaultmorin/keepalived:latest.svg)](https://microbadger.com/images/thibaultmorin/keepalived:latest "Get your own image badge on microbadger.com")
[![](https://images.microbadger.com/badges/commit/thibaultmorin/keepalived:latest.svg)](https://microbadger.com/images/thibaultmorin/keepalived:latest "Get your own commit badge on microbadger.com")
[![](https://images.microbadger.com/badges/license/thibaultmorin/keepalived.svg)](https://microbadger.com/images/thibaultmorin/keepalived "Get your own license badge on microbadger.com")

Provide a Docker image running [keepalived](https://keepalived.org/) which is highly inspired by the project [osixia/docker-keepalived](https://github.com/osixia/docker-keepalived).

## Configuration

- `KEEPALIVED_INTERFACE`: Keepalived network interface. Default value `eth0`
- `KEEPALIVED_PASSWORD`:  Keepalived password. Default value `d0cker`
- `KEEPALIVED_PRIORITY`:  Keepalived node priority. Default value `150`
- `KEEPALIVED_ROUTER_ID`:  Keepalived virtual router ID. Default value `51`
- `KEEPALIVED_UNICAST_PEERS`:  Keepalived unicast peers. Default value `<IP_ADDRESS>,<IP_ADDRESS>`
- `KEEPALIVED_VIRTUAL_IPS`:  Keepalived virtual IPs. Default value `<IP_ADDRESS>,<IP_ADDRESS>`
- `KEEPALIVED_NOTIFY`:  Script to execute when node state change.


text:
# Computational Fluid Dynamics Simulation on Oracle Cloud Infrastructure

## Table of Contents

[Overview](#overview)

[Pre-Requisites](#pre-requisites)

[Practice 1: Setup Windows 10 VM](#practice-1-setup-windows-10-vm)

[Practice 2: Open Gitbash on your Desktop ](#practice-2-open-gitbash-on-your-desktop)

[Practice 3: Access the control node](#practice-3-access-the-control-node)

[Practice 4: Deploy your HPC Cluster](#practice-4-deploy-your-hpc-cluster)

[Practice 5: Run OpenFOAM to generate your simulation](#practice-5-run-openfoam-to-generate-your-simulation)

[Practice 6: Sign in to OCI Console](#practice-6-sign-in-to-oci-console)

[Practice 7: Try Oracle Cloud Infrastructure for FREE](#practice-7-try-oracle-cloud-infrastructure-for-free)

## Overview

High Performance Computing and storage in the cloud can be very confusing and it can be difficult to determine where to start. This Hands on LAB is designed to be a first step in expoloring a cloud based HPC storage and compute architecture. There are many different configuration that could be used, but this lab focuses on a bare metal compute system and a Lustre file system that is attached. After deployment fully independant and functioning IaaS HPC compute and storage cluster has been deployed based on the architecture below.

## Pre-Requisites

- Oracle Cloud Infrastructure account credentials (User, Password, and Tenant) with available service limit for Bare Metal Shapes.

## Practice 1: Setup Windows 10 VM

1) Each attendee is provided with a laptop with a Virtual Box. In the Virtual Box, Please start the Windows 10 VM (name of the VM is same as the ID of this Hands on Lab - HOL6379)

## Practice 2: Open Gitbash on your Desktop

1) Open Gitbash on your desktop. It is already installed for you.

![](img/gitbash001.png)

## Practice 3: Access the control node

1) On Gitbash terminal use SSH command to connect to the control node with this information:

- **username**: *Instructor will provide username for each participant*
- **password**: *Instructor will provide password for each participant*
- **IP address**: *<IP_ADDRESS>
*

```
# ssh username@IPAddress
```

## Practice 4: Deploy your HPC Cluster

1) After login, change into home directory by typing:

```
# cd oci-hpc-ref-arch
```
2) Deploy your Cluster by typing:

```
# ./cli_deploy.sh $C
```
> **Note:**  $C is a variable with your designated compartment. It will be automatically loaded for you after login.

![](img/c_deploy.png)

3) Wait for the HPC cluster to deploy. It will take about 20 minutes

![](img/c_deploy001.png)

4) Open a web browser and type in the **GOTTY** IP address that was shown at the bottom of the deployment terminal window like this http://IPaddress:8080 and use the following information to authenticate:

- **user**: opc
- **password**: *xxxxxxx*

![](img/c_deploy002.png)

## Practice 5: Run OpenFOAM to generate your simulation

1) After login into the GOTTY, execute the following command:

```
# cd /mnt/blk/share/data/OpenFOAM/oci-hpc-foam-motorbike; source Allrun 2 52
```

2) While OpenFOAM is running, open another tab in your web browser and navigate to the other output that was written to the terminal after deployment:

- Ganglia: http://IPaddress/gangllia
- Grafana: http://IPaadress:3000

## Practice 6: Sign in to OCI Console

1) Open a supported browser and go to the Console URL. For example, [https://console.us-ashburn-1.oraclecloud.com](https://console.us-ashburn-1.oraclecloud.com).

2) Enter your tenant name: <Tenant> and click **Continue**

 ![](img/image001.png)

3) Oracle Cloud Infrastructure is integrated with Identity Cloud Services, you will see a screen validating your Identity Provider. You can just click **Continue**.

 ![](img/image002.png)

4) Enter your user name and password

 - **Username:** _instructor will provide username_
 - **Password:** _instructor will provide password_

 ![](img/image003.png)

When you sign in to the Console, the home page is displayed.

 ![]( img/image004.png)

The home page gives you quick links to the documentation and to Oracle Support.

## Practice 7: Try Oracle Cloud Infrastructure for FREE

Sign up for the free Oracle Cloud Infrastructure trial account.
https://cloud.oracle.com/tryit

repository: sprabhudus/learning-library

repo_name: sprabhudus/learning-library