Welcome to the Uncle Jim's Discount To-do App!
This guide will teach you how to set up your development environment, explain the basic architecture of the application, teach you how to perform some common development tasks, as well as provide contact information for the times when you require additional help.
It also provides you with the tools for you to contribute further to this project in te spirit of open source software.
We hope you enjoy working with our product!
This project uses:
Help
toolbar.Note
Ensure that you have installed the e(fx)clipse and buildship plugins as listed in the prerequisites above.
File
> Import
Gradle
> Gradle Project
> Next
> Next
Browse
, then locate the project's directoryFinish
Note
We use the feature branch git workflow. Thus when you are working on a task, please remember to assign the relevant issue to yourself on the issue tracker and branch off from master
. When the task is completed, do remember to push the branch to GitHub and create a new pull request so that the integrator can review the code. For large features that impact multiple parts of the code it is best to open a new issue on the issue tracker so that the design of the code can be discussed first.
Test driven development is encouraged but not required. If possible, all of your incoming code should have 100% accompanying tests - Coveralls will fail any incoming pull request which causes coverage to fall.
We use the Java coding standard found at https://oss-generic.github.io/process/codingstandards/coding-standards-java.html.
Now let us explore the architecture of Uncle Jim's Discount To-do App to help you understand how it works.
The architecture diagram above explains the high-level design of the application. Here is a quick overview of each component:
Main
has only one class called MainApp
. It is responsible for:
Commons
represents a collection of modules used by multiple other components
UI
: The user facing elements of tha App, representing the view layer Logic
: The parser and command executer, representing the controller Model
: Data manipulation and storage, representing the model and data layer The UI, Logic and Model components each define their API in an interface
of the same name and is bootstrapped at launch by MainApp
.
For example, the Logic
component (see the class diagram given below) defines its API in the Logic.java
interface and is implemented by TodoLogic.java
class.
You can see how the components interact with each other when the user issues a command by looking at the above diagram.
The diagram below shows how the EventsCenter
reacts to a help
command event, where the UI does not know or contain any business side logic.
Event Driven Design
Note how the event is propagated through the EventsCenter
to UI
without Model
having
to be coupled to either of them. This is an example of how this Event Driven approach helps us reduce direct
coupling between components.
The sections below will provide you with more details for each component.
The UI component handles the interaction between the user and application. If you refer to the architecture diagram in the above sections, you will realise that the UI is responsible for passing the textual command input from the user to the Logic
for execution, and displaying the outcome of the execution to the user via the GUI.
Some of the GUI view classes are shown in the UI components diagram above. You may also find the implementation for the GUI in the package seedu.todo.ui
.
API : Ui.java
Referring to the diagram above, you may notice that the UI mainly consists of a MainWindow
. This is where most of the interactions between the user and the application happen here. The MainWindow
contains several major view elements that are discussed in greater detail below:
The UI aims to imitate the Command Line Interface (CLI) closely by accepting textual commands from users, and displaying textual feedback back to the users. The CLI consists of:
CommandInputView
- a text box for users to key in their commandsCommandPreviewView
- a list of suggested commands from user inputsCommandFeedbackView
- a single line text that provides a response to their commandsCommandErrorView
- a detailed breakdown of any erroneous commands presented with a tableThese view classes are represented by the CommandXView
class in the UML diagram above.
The CommandController
class is introduced to link the three classes together, so they can work and communicate with each other. The CommandController
:
CommandInputView
Logic
for executionCommandResult
from Logic
after the executionCommandResult
to the CommandFeedbackView
and CommandErrorView
In the meantime, the CommandPreviewView
listens to any user input through an event bus ShowPreviewEvent
located in the UiManager
and displays the suggested commands as required.
A to-do list provides a richer representation of the tasks than the CLI to the users. The To-do List Display consists of:
TodoListView
- a ListView
that displays a list of TaskCard
TaskCardView
- an item in the TodoListView
that displays details of a specific taskEmptyListView
- a view overlapping the TodoListView
which indicates that no task is displayedSpecifically, the TodoListView
attaches an ObservableList
of ImmutableTask
from the Model
and listens to any changes that are made to the ObservableList
. If there are any modifications made, the TaskCard
and TodoListView
are updated automatically.
Also, the EmptyListView
listens to the ObservableList
of ImmutableTask
if the list is empty. If the list is empty, the EmptyListView
listens to the ObservableProperty
of TaskViewFilter
for the appropriate message to be displayed. You may try switching the views to see the messages yourself.
The remaining view classes that are not mentioned are as follows:
FilterBarView
- shows a list of available views users can switch to, and indicates the view that the user is currently atGlobalTagView
- shows a global list of tagsHelpView
- shows a list of commands that users can useSearchStatusView
- shows the information regarding a search that user has performedAll these view classes, including the MainWindow
, inherit from the abstract UiPart
class. You may load these view classes using the utility class UiPartLoader
.
The UI component uses JavaFX UI framework. The layout of these UI parts are defined in matching .fxml
files that are in the src/main/resources/view
folder. For example, the layout of the CommandInputView
is specified in CommandInputView.fxml
Other than through CommandResult
and ObservableList
, you may also invoke changes to the GUI outside the scope of UI components by raising an event. UiManager
will then call specific view elements to update the GUI accordingly. For example, you may show the HelpView
by raising a ShowHelpPanel
via the EventsCentre
.
API : Logic.java
You can think of the logic component as the glue sitting between the UI and the data model, or as the controller in the traditional MVC pattern. All subcomponents in logic are stateless, which reduces complexity and makes it easier to reason about. Our application uses the thin controller/fat model design pattern, and therefore we delegate as much of the data manipulation and state handling to the model. Logic consists of three separate subcomponents, each of which also defines their API using interfaces or abstract classes:
Parser
- turns user input into command and arguments Dispatcher
- maps parser results to commands Command
- validates arguments and execute commandWhen the Logic component is instantiated, each of these subcomponents is injected via dependency injection. This allows them to be tested more easily as the dependencies can be replaced with stub implementations.
The flow of a command being executed is:
Logic
parses the user input into a ParseResult
objectParseResult
is sent to the dispatcher which instantiates a new Command
object representing the command the user calledLogic
binds the model and arguments to the Command
object and executes it Model
(e.g. adding a person), and/or raise events.Given above is the Sequence Diagram for interactions within the Logic
component for the execute("delete 1")
API call. See the implementation section below for the implementation details of the logic component.
API : Model.java
The model component represents the application's state and data layer. It is implemented by TodoModel
, which is a composite of of the individual data models for the application, as well as higher level information about the state of the application itself, such as the current view and the undo/redo stack. Model has two subcomponents:
TodoList
- represents the todolist tasksUserPrefs
- represents saved user preferences Each individual data model handles their own CRUD operations, with the Model
acting as a simplified and uniform interface for external components to work with. Each of the data model holds an injectable Storage
object that exposes a simple interface for reading and writing to the appropriate storage mechanism.
To avoid tight coupling with the command classes, the model exposes only a small set of generic functions. The UI component binds to the model through a set of getters, such as getObservableList
, which expose JavaFX Property
objects that the UI can listen to for changes.
The model ensure safety by exposing as much of its internal state as possible as immutable objects using interfaces such as ImmutableTask
.
The storage component represents the persistence layer of the data. It is implemented by TodoListStorage
which holds and contains ImmutableTodoList
. Similarly, JsonUserPrefsStorage
stores the user preferences.
Both classes implement FixedStorage
, which exposes methods to read and save data from storage. Users can choose to move their storage file, hence MovableStorage
is exposed to allow them to do so. User preferences cannot be exported.
Modules used by multiple components are in the seedu.todo.commons
package.
The core module contains many important classes used throughout the application.
UnmodifiableObservableList
: Used by the UI component to listen to changes to the data through the Observer pattern.Events
: Used by components to marshal information around and inform other components that things have happened. (i.e. a form of Event Driven design)LogsCenter
: Used by many classes to write log messages to the App's log file.The util module contains many different helper methods and classes used throughout the application. The things that can, and should be reused can be found in here.
TimeUtil
: Used by Ui to display time that is readable and user friendly.XmlUtil
: Used by storage to save and read .xml files.The exceptions module contains all common exceptions that will be used and thrown throughout the application.
IllegalValueException
: Used by Logic and Model internally to signal that a single value is invalidValidationException
: Used by Logic and Model classes to signal that the command or model parsed is invalid. See the Logic component architecture section for the high level overview of the Logic component.
The TodoParser
sub-component implements the Parser
interface, which defines a single parse
function that takes in the user input as a string and returns an object implementing the ParseResult
interface. The implementing class for TodoParser
can be found as an inner class inside TodoParser
.
The parser tokenizes the user input by whitespace characters then splits it into three parts:
string
- the first word of the user inputstring
- everything from the command to the first flagMap<String, String>
- a map of flags to values For example, the command add The Milk /d tomorrow 3pm /p
will produce
command: "add" positional: "The Milk" named: d: "tomorrow 3pm" p: "" # Empty String
This is then passed on to the dispatcher.
The TodoDispatcher
sub-component implements the Dispatcher
interface, which defines a single dispatch
function. The dispatch function simply tries to find the command that has a matching name to the user input, instantiates and returns a new instance of the command.
All commands implement the BaseCommand
abstract class, which provides argument binding and validation. If any error were found at the
If you need to do additional argument validation, you can also override the validateArgument
command, which is run after all arguments have been set.
Command arguments are defined using argument objects. Representing arguments as objects have several benefits - it makes them declarative, it allows argument parsing and validation code to be reused across multiple commands, and the fluent setter allows each individual property to be set independently of each other. The argument object's main job is to convert the user input from string into the type which the command object can use, as well as contain information about the argument that the program can show to the user.
The generic type T
represents the return type of the command argument. To implement a new argument type, extend the abstract base class Argument
, then implement the setValue
function. Remember to call the super class's setValue
function so that the required
argument check works.
See the Model component architecture section for the high level overview of the Model and Storage components.
The BaseTask
is a simple abstract class to identify each task uniquely via Java's UUID
class. Do note that this implementation means that two tasks with exact same content (fields) can be considered as two different tasks.
This interface is used frequently to expose fields of a Task
to external components. It prevents external components from having access to the setters.
A Task
is a representation of a task or event in the todolist. Task
inherits from BaseTask
for a way to declare each task as unique. This object implements MutableTask
which allows us to edit the fields.
A ValidationTask
is a representation of a task or event in the todolist. This class allows us to verify the fields of the task, and check that they are valid, as the name implies. This class is used mainly for adding and updating a task, as Task
is supposed to be immutable.
This class represents the todolist inside the memory and implements the TodoListModel
. This interface is internal to Model and represents only CRUD operations to the todolist.
This class represents the data layer of the application and implements the Model
interface. The TodoModel
handles any interaction with the application state that is not persisted, such as the view (sort and filtering), undo and redo commands.
The ErrorBag
is a wrapper around errors produced while handling a command. To use the ErrorBag
, simply create a new instance of it and put
errors into it. At the end of the validation routine, call validate
to let the bag throw a ValidationException
if there are any.
This interface represents the persistence mechanism for a file whose location is cannot be set by the user. You can use this interface for storing preferences and other files which the user does not need to change the location for.
This interface enables us to declare a storage mechanism as movable. This means that the file path of the object can be changed when desired. The only class that implements this interface is TodoListStorage
, as the configuration and user preference files have minimal impact and thus unimportant for the user.
The main class that is exposed to the Model. In addition to reading and saving, methods are exposed to enable user to switch where the storage file is saved and read.
Classes prefixed with Xml
are classes used to enable serialization of the Model. As the prefix suggests, the critical data is stored in the .xml
file format and uses JAXB
to read and save to the persistence layer. JAXB
marshals Java primitives readily, however, if you wish to marshal any other classes, be it self-implemented or from a library, you would need to declare a XmlAdapter
. See LocalDateTimeAdapter
for reference.
We are using the java.util.logging
package for logging. The LogsCenter
class is used to manage the logging levels and logging destinations.
logLevel
setting in the configuration file (See Configuration)Logger
for a class can be obtained using LogsCenter.getLogger(Class)
which will log messages according to the specified logging levelTo use the logger in your code, simply include
private static final Logger logger = LogsCenter.getLogger(<YOUR CLASS>.class);
at the top of your class, and replace <YOUR CLASS>
with the class the logger is used in.
| Level | Used for |
|---|---|
SEVERE |
Critical problem detected which may possibly cause the termination of the application |
WARNING |
Can continue, but with caution |
INFO |
Information showing the noteworthy actions by the App |
FINE |
Details that is not usually noteworthy but may be useful in debugging e.g. print the actual list instead of just its size |
Certain properties of the application can be controlled (e.g App name, logging level) through the configuration file (default: config.json
)
Tests can be found in the ./src/test/java
folder.
src/test/java
folder and choose
Run as
> JUnit Test
Note
If you are not using a recent Eclipse version (Neon or later), enable assertions in JUnit tests as described in this Stack Overflow question (url: http://stackoverflow.com/questions/2522897/eclipse-junit-ea-vm-option).
See UsingGradle.md for how to run tests using Gradle.
We have two types of tests:
GUI Tests - These are System Tests that test the entire App by simulating user actions on the GUI. These are in the guitests
package.
Non-GUI Tests - These are tests not involving the GUI. They include,
seedu.todo.commons.UrlUtilTest
seedu.todo.model.TodoModelTest
seedu.todo.logic.BaseCommandTest
To write tests for commands,
To create tasks quickly, you can use the TaskBuilder
class to quickly create ImmutableTask
objects. An additional benefit of the using the TaskBuilder
is that the creation time of consecutively constructed task objects will be set one second apart - if you try to use the Task
constructor you may get tasks created on the same millisecond, which will cause problems with sorting.
To generate a lot of tasks all at once, you can use the TaskFactory
class to get a large number of randomly generated tasks. Use this class instead of TaskBuilder
if fine control over the content of each task is not needed, for instance when testing out storage or conducting GUI testing.
As briefly described above, our GUI tests are System Tests. We crafted our GUI tests such that we are able to test every component of the application and the interactions between each component. This is done through the simulation of the user actions on the GUI itself. You may run these GUI tests in the package guitests
to see the simulation in real life.
If you look inside the guitests
package, you may realise that we have grouped our test script files into two major locations:
guitests
- the actual test script that contains sequences of user actionsguitests.guihandles
- view handles that provide direct access to the contents of the displayed view elementsWhen you create a new view for your GUI, you may want to create a handle for your newly created view. Simply extend your view handle from GuiHandle
class, and you may start working on your view handle.
The GuiHandle
class allows you to search for your view elements by their id
, and you may retrieve the contents of the view element just like how you do so for any JavaFX view nodes.
You may view sample codes from handles such as TaskCardViewHandle
and CommandErrorViewHandle
in the guitests.guihandles
package.
When you want to write an automated test script for simulating user actions, you may do so with a JUnit test files. You may refer to examples such as AddCommandTest
and DeleteCommandTest
located in the guitests
package.
All our GUI JUnit tests are inherited from TodoListGuiTest
. The TodoListGuiTest
class provides useful methods based on the TestFX library that makes automation easier. You may refer to the TestFX documentation for more details.
Thanks to the TestFX library we use, our GUI tests can be run in the headless mode. In the headless mode, GUI tests do not show up on the screen. That means the developer can do other things on the Computer while the tests are running.
See UsingGradle.md to learn how to run tests in headless mode.
We use Gradle for build automation. Gradle handles project dependencies, build tasks and testing. If you have configured Eclipse by importing the project as shown in the setting up section Gradle should already be properly configured and can be executing from within Eclipse to build, test and package the project from the Run menu.
See the appendix Using Gradle for all of the details and Gradle commands.
 See UsingTravis.md for more details.
Here are the steps to create a new release.
Version
number in MainApp.java
v0.1
README
to link to the new release Our project depends on a number of third-party libraries. We use Gradle to automate our dependency management.
To add a new dependency, look for instructions on the project's documentation for Gradle configuration required. For most projects it will look something like this:
// https://mvnrepository.com/artifact/org.mockito/mockito-all compile group: 'org.mockito', name: 'mockito-all', version: '2.0.2-beta'
This should be copied into the dependencies
section of the build.gradle
file. If you wish to, you can split the version string out so that the shorter compile
property can be used instead, but this is not strictly necessary.
project.ext { // ... other variables mockitoVersion = '8.40.11' } dependencies { // .. other dependencies compile "org.mockito:mockito-all:mockitoVersion" }
After that rerun the Gradle build
command and make sure the file has been edited properly, then right click on the project folder in Eclipse, select Gradle
> Refresh Gradle Project
. You should now be able to use the package in your code. Remember to inform all other team members to refresh their Gradle Project when the commit is merged back into master.
Add external dependencies with care
Be mindful of the impact external dependencies can have on project build time and maintenance costs. Adding an external package should always be discussed with the other project members in the issue tracker.
Our documentation and user guides are written in GitHub Flavor Markdown with a number of extensions including tables, definition lists and warning blocks that help enable richer styling options for our documentation. These extensions are documented on the Extensions page of the Python Markdown package, the package we use to help transform the Markdown into HTML. We use HTML because it allows greater flexibility in styling and is generally more user friendly than raw Markdown. To set up the script:
python3 --version
to check that it is installed correctly.pip3 install markdown pygments beautifulsoup4
python3 docs/build/converter.py
To get syntax highlighting for your code, use three backticks before and after your code without any additional indentation, and indicate the language on the opening backticks. This is also known as fenced code block.
For example,
public class YourCommand extends BaseCommand { // TODO: Define additional parameters here private Argument<Integer> index = new IntArgument("index").required(); @Override protected Parameter[] getArguments() { // TODO: List all command argument objects inside this array return new Parameter[]{ index }; } }
is produced by
``` java public class YourCommand extends BaseCommand { // TODO: Define additional parameters here private Argument<Integer> index = new IntArgument("index").required(); @Override protected Parameter[] getArguments() { // TODO: List all command argument objects inside this array return new Parameter[]{ index }; } } ```
To draw reader's attention to specific things of interest, use the admonition extension
Warning
This is an example of an admonition block
The syntax for this the block above is
!!! warning This is an example of an admonition block
warning
is the style of the box, and also used by default as the title. To add a custom title, add the title after the style in quotation marks.
!!! warning "This is a block with a custom title" This is an example of an admonition block
The following styles are available
| Style | Color | Used for |
|---|---|---|
| note | Blue | Drawing reader's attention to specific points of interest |
| warning | Yellow | Warning the reader about something that may be harmful |
| danger | Red | A stronger warning to the reader about things they should not do |
| example | Green | Showing the reader an example of something, like a command in the user guide |
To add a caption to a table, image or a piece of code, use the <figcaption>
HTML tag.
<img src="..." alt="..."> <figcaption> The sequence of function calls resulting from the user input <code>execute 1</code> </figcaption>
The document processor will automatically wrap the <figcaption>
and the preceding element in a <figure>
element and automatically add a count to it, producing the following code:
<figure> <img src="..." alt="..."> <figcaption> <strong>Figure 2.</strong> The sequence of function calls resulting from the user input <code>execute 1</code> </figcaption> </figure>
Note that Markdown is not processed inside HTML, so you must use HTML to write any additional inline markup you need inside the caption.
Priorities: High (must have) - * , Medium (nice to have) - , Low (unlikely to have) - *
| Priority | As a ... | I want to ... | So that I can... |
|---|---|---|---|
| *** | new user | see usage instructions | refer to instructions when I forget how to use the app |
| *** | user | add a new task | |
| *** | user | mark a task as complete | so I know which are the tasks are not complete. |
| *** | user | delete a task | remove entries that I no longer need |
| *** | user | edit a task | change or update details for the task |
| *** | user | set a deadline for a task | track down deadlines of my tasks |
| *** | user | set events with start and end dates | keep track of events that will happen |
| *** | user | view tasks | see all the tasks I have |
| *** | user | view incomplete tasks only | to know what are the tasks I have left to do. |
| *** | user with multiple computers | save the todo list file to a specific location | move the list to other computers |
| ** | user with a lot tasks | add tags to my tasks | organize my tasks |
| ** | user | set recurring tasks | do not need to repeatedly add tasks |
| ** | user | sort tasks by various parameters | organize my tasks and locate a task easily |
| ** | user | set reminders for a task | do not need to mentally track deadlines |
| * | user | know the number of tasks I have left | gauge how many tasks I have left to do. |
| * | user | be notified about upcoming deadlines without opening the app | so that I can receive timely reminders |
(For all use cases below, the System is the TodoApp
and the Actor is the user
, unless specified otherwise)
MSS
Use case ends.
Extensions
1a. The task has no title
1a1. TodoApp shows an error message
Use case resumes at step 1
1b. The task's date field is empty
1b1. TodoApp creates a task with no start and end date
Use case resumes at step 2
1c. The task has a start time later than end time
1c1. TodoApp assumes the dates are inverted
Use case resumes at step 2
1d. The event's timing overlaps with an existing event's timing
1d1. TodoApp displays a warning to the user that he has another event at the same time
Use case resumes at step 2
MSS
Use case ends.
Extensions
1a. The task has no title
1a1. TodoApp shows an error message
Use case resumes at step 1
1b. The task's date field is empty
1b1. TodoApp creates a task with no deadline
Use case ends
MSS
Use case ends.
Extensions
2a. The given recurring time period is invalid
2a1. TodoApp shows an error message
Use case resumes at step 1
MSS
Use case ends.
Extensions
1a. User uses another method to list tasks (e.g. search)
1a1. TodoApp shows the list of tasks requested
Use case resumes at step 2
2a. The list is empty
1a1. TodoApp informs the user the list is empty
Use case ends
3a. The given index is invalid
3a1. TodoApp shows an error message
Use case resumes at step 2
3b. The given index is a task which has already been completed
3b1. TodoApp informs the user the task has already been completed Use case ends
MSS
Use case ends.
Extensions
1a. The given index is invalid
1a1. TodoApp shows an error message
Use case resumes at step 1
MSS
Use case ends.
Extensions
1a. User enters invalid view (eg. a view that doesn't exist )
1a1. TodoApp shows an error message
Use case ends
MSS
Use case ends.
Extensions
1a. User enters an invalid tag/search fragment
1a1. TodoApp returns an empty list
Use case ends
Extensions
2a. List returned is empty
Use case ends
3a. User enters invalid task index
3a1. TodoApp shows error message indicating invalid index
Use case resumes at Step 2
3b. User enters invalid arguments to edit fields
3b1. TodoApp shows error message indicating invalid fields
Use case resumes at Step 2
MSS
Use case ends.
Extensions
2a. List returned by TodoApp is empty
Use case ends
3a. Selected task is already pinned
3a1. TodoApp unpins selected task Use case ends
3b. User provides an invalid index
3b1. TodoApp shows an error message
Use case resumes at Step 3
Extensions
2a1. The user calls the undo command without having made any changes
2a1. TodoApp shows an error message
Use case ends
The project should -
Windows, OS X
A single todo task, deadline or item
Marking a task with higher importance/priority than others. Pinned tasks will always appear first in any view.
Any command which causes a change in the state of the the TodoApp (E.g. add, delete, edit, pin, complete)
Basic Todo Lists e.g. Sticky Notes, Notepad
Very flexible and easy to use, but hard to organise tasks on them. Also, data can only be saved locally.
Online/Cloud Based Todo lists
Apps such as Google Calendar, Asana and Trello offer a wide range of effective features that help manage your To-do lists. However, most of them require heavy mouse usage and the constant context switching might break user concentration. Our target audience are users who prefer not use the mouse at all, and that makes some of these applications almost unusable. Also, it is hard to sync without a constant internet connection.
Gradle is a build automation tool for Java projects. It can automate build-related tasks such as
The gradle configuration for this project is defined in the build script build.gradle
.
Note
To learn more about gradle build scripts refer to Build Scripts Basics.
To run a Gradle command, open a command window on the project folder and enter the Gradle command. Gradle commands look like this:
gradlew <task1> <task2> ...
e.g. gradlew clean allTests
./gradlew <task1> <task2>...
e.g. ./gradlew clean allTests
Note
If you do not specify any tasks, Gradlew will run the default tasks clean
headless
allTests
coverage
clean
- Deletes the files created during the previous build tasks (e.g. files in the build
folder).
e.g. ./gradlew clean
clean
to force Gradle to execute a task
When running a Gradle task, Gradle will try to figure out if the task needs running at all. If Gradle determines that the output of the task will be same as the previous time, it will not run the task. For example, it will not build the JAR file again if the relevant source files have not changed since the last time the JAR file was built. If we want to force Gradle to run a task, we can combine that task with clean
. Once the build files have been clean
ed, Gradle has no way to determine if the output will be same as before, so it will be forced to execute the task.
shadowJar
- Creates the addressbook.jar
file in the build/jar
folder, if the current file is outdated.
e.g. ./gradlew shadowJar
To force Gradle to create the JAR file even if the current one is up-to-date, you can 'clean
' first.
e.g. ./gradlew clean shadowJar
Why do we create a fat JAR?
If we package only our own class files into the JAR file, it will not work properly unless the user has all the other JAR files (i.e. third party libraries) our classes depend on, which is rather inconvenient. Therefore, we package all dependencies into a single JAR files, creating what is also known as a fat JAR file. To create a fat JAR file, we use the shadow jar Gradle plugin.
allTests
- Runs all tests.
guiTests
- Runs all tests in the guitests
package
nonGuiTests
- Runs all non-GUI tests in the seedu.address
package
headless
- Sets the test mode as headless. The mode is effective for that Gradle run only so it should be combined with other test tasks.
Here are some examples:
./gradlew headless allTests
-- Runs all tests in headless mode./gradlew clean nonGuiTests
-- Cleans the project and runs non-GUI testsThere is no need to run these Gradle tasks manually as they are called automatically by other relevant Gradle tasks.
compileJava
- Checks whether the project has the required dependencies to compile and run the main program, and download any missing dependencies before compiling the classes.
See build.gradle
> allprojects
> dependencies
> compile
for the list of dependencies required.
compileTestJava
- Checks whether the project has the required dependencies to perform testing, and download any missing dependencies before compiling the test classes.
See build.gradle
> allprojects
> dependencies
> testCompile
for the list of dependencies required.


Create a program that lists every 3rd number between 1-20 and prints it to the console.
TIP: use a for-loop and modify the iteration-expression
| Criteria | Exemplary | Adequate | Needs Improvement |
|---|---|---|---|
| Program runs correctly and is commented | Program is not commented | Program is incomplete or buggy |


Match Two Kittens!
How to play
Find matching pairs of kittens
Choose two cards each turn
Find all the kittens to win
Press Shake Kittens to start again
Score:
Shake Kittens


| Name of the organisation | OUR RIGHTS & SOCIAL SOCIETY |
| Registered Office | H.No. 399 A-Block, J. J. Colony Bawana District North West Delhi -110039 |
| Project Office | H.No. 1546.1547 B-Block, J. J. Colony District North West Bawana Delhi- 110039 |
| Registration | Registered on Society registration act XXI 1860 |
| Registration No | ROS/NORTH/SDM/NARELA/95/2017 Govt. of Delhi |
| Year of origin | 2017 |
| PAN No | AAAAO8630M |
| Bank of Account | Oriental Bank of Commerce (Branch Bawana Delhi) |
| Account Number |<PHONE_NUMBER>0100 |
Our Rights & Social Society was established in 2017 as voluntary Development organization, which is registered under the society registration Act 1860. The society has a national NGO and working area is whole India. The society is implementing many social services with the support of Delhi Govt. Since 2017 we are working in Delhi JJ cluster area especially in East and North West district of Delhi with poor, marginalized and vulnerable population.
The mission is upliftment of community to SC, ST, Backward and below the poverty line groups through a process of participatory development based on social awareness and community organization with specific emphasis on –
• Attitudinal charges and socio- economic structural transformation with the help of the process of sustainable development of people particularly of deprived communities.
• Improvement in the implementation of the right to education, good health, information and human rights.
• Run innovative welfare projects in the field of health, education, environment, and income- generation for underprivileged sections and work for their overall development.
• Create social awareness campaigns and organize people, women in particular against their social, economic and political exploitation.
• Provide basic facility to under privileged section such as food, clothing, shelter safe, drinking water, education, electricity, medicine, toilets, etc.
• Give vocational training to women and other weaker social sections in order to make them self-dependent and generate feeling of entrepreneurship with the help of micro credit schemes.
• Work for environment protection and sustainable development through +community mobilization at the grass-root-level.
• Provide rehabilitation facilities such as drug abuse prevention, mental health care to improve the quality of life and help in the inculcation of such behavior as would bring happiness to mankind without reservation of status, cast and religion.
• From last 1 years our Organization working in the field of Human Rights, Environment, Health, Education, Age Care, Control of population and other developmental work through participatory approach.
• We are continuous working with on many J.J. Cluster & Urban Slum development programme as family health awareness camp, Women Welfare, Child Welfare Activity, legal support drug de-addiction, AIDS awareness Polio eradication SHG, Sanitation Pollution and School Environment Programme and healthy life for poor and marginalizes group.
• The organization is at present an education center for poor children the programs at the center include education and remedial classes. Children in these centers are taught about community sanitation, civic manners and environmental protection. There is very high rate of school dropout in Delhi slums.
People on the desks are motivated to help you, and to make the our society a better place.
Computer Trainer
Computer Trainer
Accountant & Librarian


ilearn
home
Home
explore
Courses
subscriptions
Subscriptions
video_library
Library
history
History
playlist_play
Playlists
Subscriptions
More From ngTube
stream
Live
lightbulb
Learning
settings
Settings
emoji_flags
Report history
help_outline
Help
feedback
Send feedback
{{title}}


{include file="public/header"/} {include file="public/searchbar"/}
校园植物地图
{include file="public/footer"/}


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
IN THE HIGH COURT OF JUDICATURE AT PATNA Criminal Miscellaneous No.22651 of 2012 ====================================================== Dhananjay Sharma .... .... Petitioner/s Versus The State Of Bihar .... .... Opposite Party/s ====================================================== CORAM: HONOURABLE MR. JUSTICE DINESH KUMAR SINGH ORAL ORDER
03/ 13-09-2012 Heard learned counsels for the petitioner and the State.
The petitioner is apprehending his arrest in a case registered for the offences punishable under Sections 379 of the Indian Penal Code, 7 of Bihar Minerals (Prevention of Illegal Mining, Transportation and Storage) Rules, 2003, 41 of the Water (Prevention and Control of Pollution) Act, 1974, 37 of the Air (Prevention and Control of Pollution) Act, 1981, 15 of the Environment (Protection) Act, 1986, 4/40/62 of Bihar Minor Mineral Concession. Rules, 1972 and section 4/21 of Mines and Minerals (Development and Regulation) Act, 1957.
The accusation is of running crusher without any authorization.
It is submitted by learned counsel for the Patna High Court Cr.Misc. No.22651 of 2012 (3) dt.13-09-2012 2/2 petitioner that as per the informant the seizure does not suggest that the crusher machine was in a running position when the petitioner was earlier a licensee.
Considering the aforesaid facts, let the above named petitioner be released on anticipatory bail in the event of his arrest or surrender before the learned court below within a period of twelve weeks from today, on furnishing bail bond of Rs.10,000/- (Ten thousand) with two sureties of the like amount each to the satisfaction of learned CJM, Jehanabad in connection with Makhdumpur P.S. Case No. 418 of 2011, subject to the conditions as laid down under Section 438(2) of the Cr.P.C.
(Dinesh Kumar Singh, J.) DKS/ .


Stereotype Threat
Representing our Tribes
02014-12-07
A Stereotype threat is a threat that could personally reinforce a negative stereotype. Examples of such stereotypes include women having poor quantitative reasoning skills, African Americans having poor impulse control, or Scientists having poor social graces.
Why are situations that threaten to reinforce these stereotypes important? Primarily because, curiously, things that reinforce limitations on your tribe are more stressful to individuals than things that indicate personal limitations. Why that particularly is the case is up to speculation, and I have a few hypothesies why it might be, but that's neither here nor there. The important thing is, if someone percieves a stereotype threat, it is much more anxiety inducing, their amygdala (the lizard part of your brain that is awful and just, just no fun. Literally, no fun thoughts or emotions occur there.) goes bananas and any kind of cognitively demanding task goes much worse. The problem is everything that makes us as a species is a cognitive task.
It's difficult talking about personal experiences in this regard, partially because, to all outward appearances, I'm on easy mode for the US. Talking about being oppressed or stereotyped is met with a fair bit of incredulity. The closest thing that comes to it that is personally challenging is the fact that scientists are regarded somewhere between wastes of resources to majestic, but impractical, and uniformly a- or anti-social. Trying to engage in conversation about anything other than a technical subject is usually met with a certain amount of derision and marginalization. The only way I can really get around it is by only pushing a matter when I can turn it into a technical matter. When I can reformulate into something where math is relevant and then point at it and show, yes, this is how the thing works, it's worth noticing!
Helping other people who are facing one such threat, when they trust your judgement to some extent, is trying to pull them out of their tribal identity and tell them regardless of all the social balleyhoo, they as an individual are capable of this thing they are confronted with.


--- layout: home --- {% include header.html %} {% include nav.html %} {% include jumbotron.html %} {% include footer.html %}


Grocery List
Beverages: juice, coffee, soda, water
Snacks: chips, cookies, popcorn, nuts
Produce: apples, bananas, melons
Produce: apples, bananas, melons


The parser can be logically divided into 4 stages:
- db: when it grabs articles’ metadata directly from the database;
- xml: when it grabs articles’ metadata from the xml structure associated to each article;
- md: when it parses the content (markdown) of an article, retrieving information from it;
- normalization: when it computes inferred values or does simplifications to the article built.
Each stage is represented by a function in the file parser/parser.py
.
Public methods
The only public method the module exports is parse(article)
. It receives and
parses an article as it is retrieved from the wiki, and returns a dictionary
with the proper output. It encapsulates the stages mentioned above.
Private methods
Each private method implements one of the stages defined above. Their rationale follow.
_parse_db(article) => db_article
Retrieves (and returns) the relevant information from article
, directly from
the database structure implied from Django.
_parse_xml(xml_content) => xml_article
Retrieves and returns relevant xml tags from the article’s content. Might do some manipulations with the tags (such as popping them out of a nested structure).
_parse_md(md_content) => md_article
Sets up and calls a LL(*) parser (ANTLR grammar) that retrieves relevant information from the markdown itself.
Although not strictly imposed, it seems like a good police to not compute extra results after the parsing is done, contrary to what is done with the previous methods. The parser itself should handle the creation of new values.
The grammar used is defined in Article.g4
.
The parser’s generation needs an installation of ANTLR (which although easy is out of the scope of this document). Afterwards the process of generating it should be very streamlined. Notice that with the current implementation, there is no need to generate a parse tree listener not visitor.
Disclaimer: Currently this function does nothing. It used to, and thus we decided to leave it be for reference.
_normalize(article) => normalized_article
This function is used to ensure that the result of a parse is a well defined structure. Again, it might compute new values from the previous computed ones. No other stages have the ability to compute values based on others that are not from their stage only. This restriction is lifted in the normalizer.
Wrap up
After the execution of the first three methods, they are joined together and the result is normalized. The normalized article structure is then returned.


The MathReuse library provides the following math functions. Addition, Subtraction, Multiply, Division, Exponent, Square Root, and Base Conversion. Its functions are described below


We did arduino during this week. Arduino is taking electronics and running it along side code. It is very hard to do and unfortunately one day I did it I kept getting a error message about the board even though it was all set up correctly. There was so much to set up and it took a long time to complete each step. Every once and a while I incorrectly connected the wires in the breadboard and had to restart the entire thing. Arduino is fun but it is also very challenging. The one I designed with the code down below makes the light stay on for 10 minutes and off for a few seconds. For doing it for the first time I think I did good but, with more work comes better knowledge.


Twitter Handle:
Number of Tweets to Fetch:
Created by Bum and Cole.
© bumshakabum 2016 under The MIT License. || Created at CU Boulder during HackCU 2016.


Add Employees Earnings
Title
Mr.
Mrs.
Miss.
OverTime
Bonus
Dress Allowance
Travel Allowance
Car Allowance
Rent Allowance
Update Earnings
keyboard_backspace


The Folktale Contest is a story writing contest. Entry is free! It runs parallel to the 2020 NaNoWriMo event, so you can take part in both!
Because Folktale is a collaborative story telling platform, contributions are much smaller than an entire novel. Instead you're writing small story parts, to which other people can contribute.
Use it as a way to:


Sorry, but the page you’re looking for doesn’t not exist.
It looks like this was either the result of:
- A mis-typed address
- An out-of-date link
--- layout: error title: 404? ruh roh! ---
Sorry, but the page you’re looking for doesn’t not exist.
It looks like this was either the result of:


Misery
Author Name: Stephen King
Published November 1st 1988 by New English Library Paul Sheldon. He's a bestselling novelist who has finally met his biggest fan. Her name is Annie Wilkes and she is more than a rabid reader - she is Paul's nurse, tending his shattered body after an automobile accident. But she is also his captor, keeping him prisoner in her isolated house.


Items shipping from within US and sort by price.
Type item to search and hit enter key or Find button.
Filters are not retained. So, please come back to this page for every new search.


Kim Kardashian Changed Her Mind On Her Kids Wearing Makeup After Fight With Kanye West
November 24, 2019
Kim Kardashian Changed Her Mind On Her Kids Wearing Makeup After Fight With Kanye West
Kim Kardashian and Kanye West have argued over whether or not their kids should be wearing makeup in the past. Now, the mother of four admits that her views have changed after hearing her husband and family weigh in on the topic.
According to Hollywood Life, Kim was speaking on the Australian talk show The Sunday Project when she was asked about the fight that erupted after her daughter North was seen wearing makeup.
Back in October, the Keeping Up with the Kardashians star admitted that she and Kanye had fought after 6-year-old North was spotted wearing eyeliner and lipstick. Fans commented on pictures of North all made up, arguing that she was a baby and should embrace her natural beauty.
It seems as though Kanye agreed with the critics. As The Inquisitr previously reported, Kanye put an end to the practice because he thought his daughter should wait until she is a teenager to start wearing makeup.
“North is trying to get in on the makeup but she’s being blocked heavily because her dad has stopped all makeup for her until she is a teenager,” Kim said.
She added that it was a big fight in her house, but that she and Kanye were just trying to figure out how to best raise their kids, adding that she wasn’t allowed to wear makeup at that age.
Now, it appears as though Kim has come around to Kanye’s way of thinking. She explained that although she used to believe it was ok for her daughter to wear makeup, she has decided that it’s not fine after all.
“About the makeup thing, I don’t think a kid should really be wearing makeup either, you know,” she said.
While the debate in the Kardashian-West household raged on, Kim says that she chatted with her friends and family to figure out what to do about the situation.
“I think sometimes if you don’t understand a rule, it is good to learn and ask your friends. In my case [I asked] my siblings what they would do,” she says.
Loading...
She added that she and Kanye want to agree on how to raise their kids, but sometimes it takes time to figure out where to land on an issue.
“[We] bounce ideas around and develop a way that we’re going to parent and rules that we have. And we always have to stay aligned,” she said.


blink
not blinking
Blink elements blink me
Me chils
Me twin
Brussel sprouts soup are cabbage soup
You can see me
You can't see me


Vincent Yao
Project Portfolio
Vincent Yao is a student at UCSD who is tryna chill. He lives with Vincent Liaw. Just chilllin.
Projects
CHill
Hella chill
illin it
yoooooo


Given:You're bold but humble
And: Confident but love second opinion
And: You like to make people think and be assertive
Then: You're my guy to work with
Given:There is an incident
When: Pressure is high and action is required
And: Action requires clarity
And: Action requires precision
And: Action demands best application
Then: We work with composure, determination and thoroughness
towards the solution
This website's purpose is to demonstrate and give you an understanding of my technical skills. If you need to get to know me deeper feel free
to download my CV by pressing the button below or email me directly by scrolling down.


; Event: [PGCTF19] ; Version: [annual num; 3.0] ; Date: [23 february; {9:00A->3:00P}] ; Address: [300.albemarle.rd]


We buy blockchain!
- reintermediate turn-key content
- innovate distributed content
- utilize wireless channels
- generate impactful models
- synergize next-generation users
- maximize cutting-edge e-tailers
- synergize B2B convergence
- whiteboard world-class interfaces
- generate cross-media schemas
- deploy best-of-breed infomediaries
- enable mission-critical communities
- reinvent wireless deliverables
- grow e-business bandwidth


--- layout: post title: Autobuilder Update date: 2008-12-26 06:19:20.000000000 +05:30 categories: - Nexenta - Opensolaris - tech - ubuntu tags: - autobuilder - Nexenta status: publish type: post published: true meta: _edit_last: '1' author: login: admin email<EMAIL_ADDRESS>display_name: admin first_name: '' last_name: '' ---
The last time I mentioned the Nexenta autobuilder, it was just opened and not fully completed. That changed recently.
The autobuilder is now in the works and since the beinning of the week has been chugging away tirelessly, working on Ubuntu Hardy's 8.04 repository. The result.. over 2500 packages now reside in Nexenta's contrib repsoitory. Going at this rate, we should have triple this amount by the end of next week.
The autobuilder is built to scale, and all of the work is shared between 2 nodes. The pace of package porting will increase with more packages. Do you have a machine free for the autobuilder to use (and have the bandwidth to spare)? Drop in on #nexenta or the devel mailing list, and we'll help you setup. Look for Tim Spriggs (aka rootard). We're still a good while away from Ubuntu's 20000 packages.
The autobuilder will however not work for packages that need to be ported to Opensolaris/Nexenta. These should be few and far in between. It does fishily sound like another hackathon.


Growing Coder
PPTK Generator
Generate random images from reddit to create a
Powerpoint Karaoke
Slideshow
Seconds on First Image:
Seconds on Other Images:
Number of Images:
Links Only
Off
On
Allow NSFW(18+)
Off
On
Show Timer
Off
On
Generate Images
15


The mission of the Fugue Foundation is to alleviate poverty by utilizing decentralized, distributed ledger technology (blockchain). We achieve this goal through two means: direct giving and education. First, we identify impoverished individuals through a vetting process and guidance from local charitable organizations while simultaneously working with community businesses to enable blockchain-based payment methods. As a result, donors are empowered to directly contribute cryptocurrencies (such as bitcoin and ether) to the well-being of the person in need. Second, we aspire to locate underprivileged individuals with a hunger for knowledge of emerging technologies and provide them with grants, tuition payments, and appropriate resources to receive training on open source, blockchain-oriented projects in an effort to have them gain lasting employment.
Read our prospectus | Join our mailing list | info [at] fuguefoundation [.] org


Police: Woman in custody after 4 dogs stolen from Bronx driveway
CLAREMONT, Bronx -- A woman is in custody after police say she stole four dogs from a Bronx driveway.
Video shows the woman with one of the dogs.
Authorities say the dogs' owner left them in the driveway on Prospect Avenue in the Claremont section last Saturday morning.
When she came back for them, they were all gone.
Police say the suspect loaded them all into a red SUV and took off.


Wrapper Functions¶
-
wrapper.
barotropic_eqlat_lwa
(ylat, vort, area, dmu, n_points, planet_radius=6378000.0)[source]¶ Compute equivalent latitude and wave activity on a barotropic sphere.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of vorticity values; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
qref (numpy.array) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
lwa_result (numpy.ndarray) –
- 2-d numpy array of local wave activity values;
dimension = [nlat_s x nlon]
-
wrapper.
barotropic_input_qref_to_compute_lwa
(ylat, qref, vort, area, dmu, planet_radius=6378000.0)[source]¶ This function computes LWA based on a prescribed Qref instead of Qref obtained from the vorticity field on a barotropic sphere.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
qref (numpy.array) – 1-d numpy array of prescribed reference value of vorticity at each latitude; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of vorticity values; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
lwa_result – 2-d numpy array of local wave activity values; dimension = [nlat_s x nlon]
- Return type
numpy.ndarray
-
wrapper.
eqvlat_bracket_hemispheric
(ylat, vort, area, nlat_s=None, n_points=None, planet_radius=6378000.0, vgrad=None)[source]¶ Compute equivalent latitude and <…>_Q in Nakamura and Zhu (2010) in a hemispheric domain.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of vorticity values; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat_s.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
vgrad (numpy.ndarray, optional) – 2-d numpy array of laplacian (or higher-order laplacian) values; dimension = (nlat, nlon)
- Returns
q_part (numpy.ndarray) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
brac (numpy.ndarray or None) – 1-d numpy array of averaged vgrad in the square bracket. If vgrad = None, brac = None.
-
wrapper.
eqvlat_hemispheric
(ylat, vort, area, nlat_s=None, n_points=None, planet_radius=6378000.0)[source]¶ Compute equivalent latitude in a hemispheric domain.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of vorticity values; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat_s.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
q_part – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
- Return type
numpy.ndarray
-
wrapper.
qgpv_eqlat_lwa
(ylat, vort, area, dmu, nlat_s=None, n_points=None, planet_radius=6378000.0)[source]¶ Compute equivalent latitutde qref and local wave activity lwa_result based on Quasi-geostrophic potential vorticity field vort at a pressure level as outlined in Huang and Nakamura (2017).
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of Quasi-geostrophic potential vorticity field; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat_s.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
qref (numpy.ndarray) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
lwa_result (numpy.ndarray) –
- 2-d numpy array of local wave activity values;
dimension = [nlat_s x nlon]
-
wrapper.
qgpv_eqlat_lwa_ncforce
(ylat, vort, ncforce, area, dmu, nlat_s=None, n_points=None, planet_radius=6378000.0)[source]¶ Compute equivalent latitutde qref, local wave activity lwa_result and non-conservative force on wave activity capsigma based on Quasi- geostrophic potential vorticity field vort at a pressure level as outlined in Huang and Nakamura (2017).
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of Quasi-geostrophic potential vorticity field; dimension = (nlat, nlon).
ncforce (numpy.ndarray) – 2-d numpy array of non-conservative force field (i.e. theta in NZ10(a) in equation (23a) and (23b)); dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat_s.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
qref (numpy.ndarray) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
lwa_result (numpy.ndarray) – 2-d numpy array of local wave activity values; dimension = (nlat, nlon).
capsigma (numpy.ndarray) – 2-d numpy array of non-conservative force contribution value; dimension = (nlat, nlon).
-
wrapper.
qgpv_eqlat_lwa_options
(ylat, vort, area, dmu, nlat_s=None, n_points=None, vgrad=None, ncforce=None, planet_radius=6378000.0)[source]¶ Compute equivalent latitutde qref, local wave activity lwa_result and non-conservative force on wave activity capsigma based on Quasi- geostrophic potential vorticity field vort at a pressure level as outlined in Huang and Nakamura (2017).
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
vort (numpy.ndarray) – 2-d numpy array of Quasi-geostrophic potential vorticity field; dimension = (nlat, nlon).
ncforce (numpy.ndarray) – 2-d numpy array of non-conservative force field (i.e. theta in NZ10(a) in equation (23a) and (23b)); dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
n_points (int, default None) – Analysis resolution to calculate equivalent latitude. If input as None, it will be initialized as nlat_s.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
return_dict (dictionary) – A dictionary that consist of the 4 computed outputs listed below.
(1) qref (numpy.ndarray) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
(2) brac_result (numpy.ndarray) – 1-d numpy array of <…>_Q(y) in NZ10 where latitude y is given by ylat; dimension = (nlat).
(3) lwa_result (numpy.ndarray) – 2-d numpy array of local wave activity values; dimension = (nlat, nlon).
(4) capsigma (numpy.ndarray) – 2-d numpy array of non-conservative force contribution value; dimension = (nlat, nlon).
-
wrapper.
qgpv_input_qref_to_compute_lwa
(ylat, qref, vort, area, dmu, nlat_s=None, planet_radius=6378000.0)[source]¶ Compute equivalent latitutde qref and local wave activity lwa_result based on Quasi-geostrophic potential vorticity field vort at a pressure level as outlined in Huang and Nakamura (2017). This function computes lwa based on a prescribed qref instead of qref obtained from the QGPV field.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
qref (numpy.ndarray) – 1-d numpy array of value Q(y) where latitude y is given by ylat; dimension = (nlat).
vort (numpy.ndarray) – 2-d numpy array of Quasi-geostrophic potential vorticity field; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
lwa_result – 2-d numpy array of local wave activity values; dimension = (nlat, nlon).
- Return type
numpy.ndarray
-
wrapper.
theta_lwa
(ylat, theta, area, dmu, nlat_s=None, n_points=None, planet_radius=6378000.0)[source]¶ Compute the surface wave activity B based on surface potential temperature. See Nakamura and Solomon (2010a) for details.
- Parameters
ylat (numpy.array) – 1-d numpy array of latitude (in degree) with equal spacing in ascending order; dimension = nlat.
theta (numpy.ndarray) – 2-d numpy array of surface potential temperature field; dimension = (nlat, nlon).
area (numpy.ndarray) – 2-d numpy array specifying differential areal element of each grid point; dimension = (nlat, nlon).
dmu (numpy.array) – 1-d numpy array of latitudinal differential length element (e.g. dmu = planet_radius * cos(lat) d(lat)). Size = nlat.
nlat_s (int, default None) – The index of grid point that defines the extent of hemispheric domain from the pole. If input as None, it will be initialize as nlat // 2.
planet_radius (float, default 6.378e+6) – radius of spherical planet of interest consistent with input ‘area’.
- Returns
qref (numpy.array) – 1-d numpy array of value reference potential temperature Theta(y) approximated by box counting method, where latitude y is given by ylat; dimension = (nlat).
lwa_result (numpy.ndarray) – 2-d numpy array of local surface wave activity values; dimension = (nlat, nlon).


Inevitably, as soon as Exeter University opened its doors to students this year coronavirus cases began to spiral upwards on its campus. The cases in halls of residence, which mainly house first-year undergraduate students, reached around 140 a day before the scholastic term had even started.
Similar mass-spreading events happened at all universities which encouraged students to live on campus. Most students would not be considered particularly vulnerable to the virus but this does not hold for the communities that surround universities.
As a result, universities across the country went to great lengths to mitigate the virus’ spread. In most cases, this was a resounding success. In Exeter, the huge increase in virus cases was not replicated in the local community.
The measures that universities put in place have severely affected the wellbeing of students, adding to a mental health crisis that was underway well before the pandemic arrived. Before the pandemic, many universities struggled to manage what has been a steady and continuous rise in demand for mental health services.
Even as COVID-19 cases in universities dropped, the mental health of students failed to recover.
In 2011, just 2,500 UCAS applicants had declared a mental health disability in their application but by 2020 this had increased seven times over to around 17,500. Even then, many students with mental health problems do not declare them. According to a survey by IPPR in 2017, just under half of the students who reported experiencing mental health issues did not disclose it to their university.
Even though universities have made substantial efforts to raise awareness of mental health issues over the last several years, it is still difficult for students to seek treatment in most universities. According to a survey commissioned by Randstad, waiting times for counselling services can be up to three months due to lack of resources.
One student currently in his second year at university said: “Whilst I found the services to be very easy to use with quick response times and easy to access services, the lack of any follow up from the university was not impressive, had I not chosen to see a counsellor professionally I easily could have slipped through the cracks.”
The Covid-19 pandemic has greatly accelerated this trend, leaving more students in need of help than ever before. For first-year students in halls, the situation is particularly bad. Not only have they seen a more serious rise in Coronavirus cases compared to those that are in live-out accommodation, but they have also struggled to adapt to strict regulations and the total lack of social opportunities.
One student at the University of Edinburgh said: “Starting university should have been an exciting new chapter in my life. Instead, I was met by confusing and contradictory rules and poor communication from the university. Add in the hostile environment created by aggressive security and threats of fines for minor offences and, instead of being enjoyable, I found the situation very stressful.”
In some universities first-year students were grouped into households by floor, meaning that up to 30 people could occupy one ‘household’. Whenever one student in a household contracted the virus all had to isolate, resulting in students self-isolating several times, often for weeks on end.
This has severely affected the mental health of students. A report from Public Health Scotland mentioned that “the fear of repeat self-isolation for some students was such that they mentioned self-harm” in interviews.
One student, interviewed for the report, said: “They will tell you “It’s OK, there-there”, but no it’s not there-there, it’s there in my head and it’s just not going out of it. I just feel all alone ... You wake up feeling positive and then by mid-noon you are like, oh my god, the anxiety, it just kicks in.”
According to a survey from the National Union of Students, more than half of students have said their mental health has deteriorated or been affected negatively by Covid-19.
So far the government has provided £3 million to fund Student Space, an online platform for students to access mental health and wellbeing resources alongside university-specific resources. The government has also provided £9 million in extra funding to mental health charities, though this is not specifically aimed at students. It remains an open question whether the government has provided enough support to students so far.
Larissa Kennedy, NUS National President, said: “It should be no surprise that the majority of students have experienced deteriorating mental health as a result of the pandemic. It is deeply troubling that students are not getting the support that they need, with only 29 per cent of those reporting worse mental health accessing services.”
A growing backlash at the way some universities have handled the crisis has led to a wave of rent strikes across higher education. At least 20 rent strikes have been organised and they are set to be the largest in 40 years.


Replate
Home
About
Donate
Volunteer
Contact
Restaurant Login
Remember Me
Forgot
Password
Need To Create An
Account
Replate
Home
About
Donate
Volunteer
Contact


THe difference between bubbling and capturing event propagation
This parapgraph is bubbling
This paragraph is capturing


{% extends 'base.html'%} {% block content%}
we coordinate with clients to find the closest garage for quick service. We also give clients the will to choose their desired garage choice.


We are Mentor
Welcome, Please create your account.
First Name*
Last Name*
Email*
Username*
Password*
I accept terms & policy
Sign up
Already have an account ?
Sign In


OptMeowt
Do Not Sell Enabled!
0 blocked so far
3rd Party Domains
Website Response
Domain List
Dark Mode
Extension Disabled
You may enable the extension by clicking the play button above.


--- layout: post title: no title date: '2016-10-09T01:20:23+02:00' categories: - Rattrapage - Storyboards - Sketches picture_url: https://film-Storyboards.tumblr.com/post/151549588715 ---


Dear Apache Shiro Community,
We are proud and excited to offer Apache Shiro's first release as an Apache Top Level Project, Apache Shiro version 1.1.0.
This release includes a number of bug fixes, new features and one important security vulnerability fix - it is recommended that users upgrade to 1.1.0 as soon as possible.
Version 1.1.0 is available immediately for download here accompanied by associated documentation and Release Notes.
All binaries are available in Maven Central already. Please note that most of the Apache mirrors have been updated to reflect the source distribution, but some mirrors may not be updated yet. If a mirror download link does not work, please try another or wait another 12 to 24 hours.
Enjoy!


1 write to _useWildCards
System.Management.Automation (1)
engine\PSClassSearcher.cs (1)
30
_useWildCards
= useWildCards;
2 references to _useWildCards
System.Management.Automation (2)
engine\PSClassSearcher.cs (2)
171
if (!
_useWildCards
)
220
if (!
_useWildCards
)


| Total revenue |
$
|
|
|---|---|---|
| Book value (Estimated Addressible Size for the Deal) %3 |
$
|
|
| Percentage of stores launching (number of stores launching / total number of stores) |
%
|
|
| WeChat Pay |
%
|
|
| Alipay |
%
|
|
| UnionPay Cards |
%
|
|
| CUP_QR |
%
|
|
| Category In-store |
%
|
|
| Category Remote payment |
%
|
|
| Category E-Commerce |
%
|
|
| Total deal value In-Store |
$
|
|
| Total deal value Pay-By-Link |
$
|
|
| Total deal value E-Commerce |
$
|
| Previous In-store deal value already commissioned (only if you already signed a deal before) |
$
|
|
| Previous Pay-by-link deal value already commissioned (only if you already signed a deal before) |
$
|
|
| Previous E-Commerce deal value already commissioned (only if you already signed a deal before) |
$
|
|
| FINAL deal value In-Store |
$
|
|
|---|---|---|
| FINAL deal value Pay-By-Link |
$
|
|
| FINAL deal value E-Commerce |
$
|
| Total revenue |
$
|
|
|---|---|---|
| Book value (Estimated Addressible Size for the Deal) %5 |
$
|
|
| Percentage of stores launching (number of stores launching / total number of stores) |
%
|
|
| Paypal |
%
|
|
| Venmo |
%
|
|
| Category In-store |
%
|
|
| Total deal value In-Store |
$
|
| Previous In-store deal value already commissioned (only if you already signed a deal before) |
$
|
|
| FINAL deal value In-Store |
$
|
|---|


Nigeria, South Africa operate difficult visa regimes, say AfDB, AU
by Everest AmaefuleEverest Amaefule
A report of the African Development Bank Group and the African Union has ranked Nigeria and South Africa as some of the nations that make it difficult for prospective African travellers to secure entry visas.
The report titled, ‘Africa Openness Report 2019,’ ranked 54 African countries on three openness issues in securing visa – where no visa was required, where visa was issued on arrival and where visa was required.
The report ranked Nigeria 30 and South Africa 35 among 54 countries.
On top of the ranking were Seychelles and Benin Republic with their no visa policies. They were followed by Senegal, Rwanda, Uganda, Guinea Bissau, Cabo Verde, Togo and Mauritania in the same order.
From the bottom of the list were Equatorial Guinea, Libya, Sudan, Eritrea, South Sudan, Egypt, Morocco, Burundi, Algeria and Democratic Republic of Congo.
The ranking means that it is easier to visit the nations on top of the ranking and more difficult to visit the nations at the bottom of the ranking.
The report said, “The Africa Visa Openness Index measures how open African countries are when it comes to visas by looking at what they ask of citizens from other countries in Africa when they travel.
“It aims to show at a glance which countries are facilitating travel for citizens of other countries and how, whether they allow people to travel to their countries without a visa, if travellers can get a visa on arrival in the country, or if visitors need to get a visa before they travel.
“Data on visa openness was collected in June and July 2019. The primary source of information was from official country website and the International Air Transport Association.”
According to the report, Nigeria does not require visa from 17 African countries, issues visa on arrival from one country and requires visa from 35 African countries.
South Africa, on the other hand, does not require visa from 15 African countries, does not issue visa on arrival to any country in the region and requires visa procedures from 38 African countries.
Seychelles and Benin require no visa from 53 African countries while Equatorial Guinea on the bottom of the ladder requires visa from 53 African countries.
Countries that moved up the index included Ethiopia which leapfrogged 32 places from the 2018 rating to join the top 20 (now rated number 18).
Senegal moved 10 places from 2018 to hug number three position and Ghana moved 10 places from 2016 to place number five.
The report said championing greater visa openness across Africa would help to capitalise on the gains to be realised from the launch of the African Continental Free Trade Area, the Single African Air Transport Market and the Protocol on the Free Movement of Persons.
According to the report, Africans do not need a visa to travel to 25 per cent of other African countries, can get visas on arrival in 26 per cent of other African countries and need visas to travel to 49 per cent of other African countries.
In a foreword to the report, AfDB Vice-President, Regional Development, Integration and Business Directory, Dr Khaled Sherif, said integration depended on investments and interconnectivity.
He said, “As Africa paves the pathway to prosperity with the ACFTA, we are all responsible for accelerating its progress.”
The Deputy Chairperson, African Union Commission, Kwesi Quartey, said, “An African continent without travel and document restrictions should be an Africa we all can be proud of.”
Quartey said as Africa’s milestones ushered in an era of closer cooperation and connectivity for all citizens; it was time to collectively take down the barriers that remain.
Copyright PUNCH.
All rights reserved. This material, and other digital content on this website, may not be reproduced, published, broadcast, rewritten or redistributed in whole or in part without prior express written permission from PUNCH.
Contact: theeditor@punchng.com


Hey, I'm Nora. I'm currently doing some freelance design & front-end dev based in San Francisco. I'm interested in how well-designed experiences can shape how we interact with technology.
I'm happiest when I get to wear a bunch of hats on a team of like-minded, flexible people. I've done work as a UX/UI designer, a product manager, and a front-end developer.
Let's chat – nora.i.kako@gmail.com


nodes
address
position
Architectural documentation
Go client API documentation
call method
Endpoint
×
node
gob rpc address
JSON/HTTP rpc address
position
owned keys
held keys
load


Status of upload and ETL background task.
Unexpected errors have occurred; if anything seems strange - please contact a site administrator.
Building experiment: {{$ctrl.status.extras.experiment_name}}.
Globus transfer from endpoint: {{$ctrl.status.extras.globus_endpoint}}
Current process queue: {{$ctrl.status.queue}}
Current status: {{$ctrl.status.status}}
Upon sucess: to view results you will need to click the 'sync' button () in the left-side menu bar.
Status of upload and ETL background task is unavailable.
Please inform Site Administrator. Thanks.


fun <V> Future<V>.getOrThrow(timeout: Duration?): V
Waits if necessary for the computation to complete, and then retrieves its result.
This function is the same as Future.get except that it throws the underlying exception by unwrapping the ExecutionException.
timeout
- The maximum duration to wait until the future completes.
CancellationException
- If the computation was cancelled.
InterruptedException
- If the current thread was interrupted while waiting.
TimeoutException
- If the wait timed out.
Return
The computed result.
See Also
fun <V> Future<V>.getOrThrow(): V
Waits if necessary for the computation to complete, and then retrieves its result.
This function is the same as Future.get except that it throws the underlying exception by unwrapping the ExecutionException.
CancellationException
- If the computation was cancelled.
InterruptedException
- If the current thread was interrupted while waiting.
TimeoutException
- If the wait timed out.
Return
The computed result.
See Also


Display a map highlighting a region or area
This example displays a line connecting the cities of Dublin (53.3477°N, 6.2597°W), London (51.5008°N, 0.1224°W), Paris (48.8567°N, 2.3508°E) and Berlin (52.5166°N, 13.3833°E) and displays it on the map.
A polyline is created using the H.map.Polyline
class, passing in an
H.geo.LineString
holding the points of the line. The look-and-feel of the polyline can be altered by adding the style parameter


| Package | com.esri.solutions.flexviewer |
| Interface | public interface IBaseWidget |
| Implementors | BaseWidget |
Once a widget module is loaded into the container, the WidgetManager will cast the instance of the module into IBaseWidget.
| Method | Defined by | ||
|---|---|---|---|
|
setConfig(value:String):void
A widget can have its own configuration file.
| IBaseWidget | ||
|
setConfigData(value:ConfigData):void
For advanced widget developer, the global configuration data is availible for use.
| IBaseWidget | ||
|
setIcon(value:String):void
A widget can have 40x40 icon image.
| IBaseWidget | ||
|
setId(value:Number):void
Give a session generated ID to the widget so that the widget can be
identified during inter-component communication.
| IBaseWidget | ||
|
setMap(value:Map):void
Pass the map reference to the widget.
| IBaseWidget | ||
|
setState(value:String):void
The widget manager can change the state of the widget, such as close the widget.
| IBaseWidget | ||
|
setTitle(value:String):void
Widget title is coming from the configuration file.
| IBaseWidget |
| setConfig | () | method |
public function setConfig(value:String):void
A widget can have its own configuration file. The container and widget manager don't have the knowledge of the configuration content. The URL of the configuration file is specified in the config.xml. The widget is responsible for handling the configuration file. This file can be in any formate the widget developer perfers.
Parametersvalue:String — The URL of the configuration file.
|
| setConfigData | () | method |
public function setConfigData(value:ConfigData):void
For advanced widget developer, the global configuration data is availible for use.
Parametersvalue:ConfigData — the global configuration data
|
See also
| setIcon | () | method |
public function setIcon(value:String):void
A widget can have 40x40 icon image. The URL of the icon image file is specified in the config.xml file.
Parametersvalue:String — the URL string of the icon image file. Flex supports JPG and PNG.
|
| setId | () | method |
public function setId(value:Number):void
Give a session generated ID to the widget so that the widget can be identified during inter-component communication.
Parametersvalue:Number — a number generated by the session.
|
| setMap | () | method |
public function setMap(value:Map):void
Pass the map reference to the widget.
Parametersvalue:Map |
| setState | () | method |
public function setState(value:String):void
The widget manager can change the state of the widget, such as close the widget. TODO: define standard state.
Parametersvalue:String — the state token string.
|
| setTitle | () | method |
public function setTitle(value:String):void
Widget title is coming from the configuration file. The title text is passed into the widget implementation.
Parametersvalue:String — the title string from configuration file, config.xml
|


how operating systems are developed?
using C(or actually) C++, assembly and any programming languages like ada, fortran, pascal you can develop your own operating system
but you have to use assembly in some places
an intruduction to assembly language
assembly is a low-level programming language that you can use it to control everything like adding something to CPU registers, control the memory and much more
how can i start to develop an operating system?
firstly, you have to know everything of your programming language like pointers, functions (here i want to use C++)
secondly, you must have some knowledge of the assembly language
what tools i need to develop an operating system?
to develop an operating system you must have these:
1. an assembler
assembler takes your assembly code and give's you the low-level outputs like an object containing your controls on CPU registers
the assembler here i want to use is nasm(netwide assembler)
you can download it from http://nasm.us
2. a cross-compiler
in order to develop an operating system, you must have a cross compiler because you must compile your kernel for it's executable format
here i use gcc(gnu compiler collection)
you can download it from http://gcc.gnu.org/
3. a linker
the linker take's your objects and link them to getter
here i use gnu binutils
you can download it from http://gnu.org/software/binutils
4. a virtual machine
in order to test your operating system, you must have a vm(virtual machine)
but it isn't necessary
here i use virtualbox
you can download it from http://virtualbox.org/
notes before you get started
1. in developing an operating system, you cannot and cannot and cannot use <iostream>, <fstream>, <memory>, <cstdio>, <cstdlib>, <windows.h>, <unistd.h> and all the platform API's
you must create all of them yourself
2. you must very very be careful
when you are developing, you have control of everything
so, you can destroy one or some or all of your hardwares
in this case, i recommend to use a virtual machine to test your operating system instead of rebooting more and more times
the bootloader
a bootloader is a bunch of code that is written in assembly language and must be 512 byets(1 sector)
it load's your operating system's kernel
we skip this section and use grub as are bootloader
you can download grub source code from http://gnu.org/software/grub
or actually you maybe want a compiled for floppy: searching in google will help you
a simple kernel
we want to develop an operating system
so, we have to create the functions ourselves
firstly, we create a file boot.asm with these contents:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
;boot.asm:the bootloader to boot are operating system with grub
[bits 32] ;we are in 32 bit
global start ;start's the operating system:we call it in the linker script
extern _kernel_main ;this is in are .cpp file and it is the main function of are kernel
;do not modify these lines(these are needed by grub)!
section .mbHeader
align 0x4
; setting up the Multiboot header - see GRUB docs for details
MODULEALIGN equ 1<<0 ; align loaded modules on page boundaries
MEMINFO equ 1<<1 ; provide memory map
FLAGS equ MODULEALIGN | MEMINFO ; this is the Multiboot 'flag' field
MAGIC equ 0x1BADB002 ; 'magic number' lets bootloader find the header
CHECKSUM equ -(MAGIC + FLAGS) ; checksum required
MultiBootHeader:
dd MAGIC
dd FLAGS
dd CHECKSUM
;you can modify these
start:
push ebx ;this is optional and load's the grub structure
call _kernel_main
| |
now create a file: kernel.cpp with these contents:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#include <stddef.h> //we can use it: it doesnt use any platform-related api functions
#include <stdint.h> //include it to get int16_t and some integer types
/* Hardware text mode color constants. */
enum vga_color
{
COLOR_BLACK = 0,
COLOR_BLUE = 1,
COLOR_GREEN = 2,
COLOR_CYAN = 3,
COLOR_RED = 4,
COLOR_MAGENTA = 5,
COLOR_BROWN = 6,
COLOR_LIGHT_GREY = 7,
COLOR_DARK_GREY = 8,
COLOR_LIGHT_BLUE = 9,
COLOR_LIGHT_GREEN = 10,
COLOR_LIGHT_CYAN = 11,
COLOR_LIGHT_RED = 12,
COLOR_LIGHT_MAGENTA = 13,
COLOR_LIGHT_BROWN = 14,
COLOR_WHITE = 15,
};
uint8_t make_color(enum vga_color fg, enum vga_color bg)
{
return fg | bg << 4;
}
uint16_t make_vgaentry(char c, uint8_t color)
{
uint16_t c16 = c;
uint16_t color16 = color;
return c16 | color16 << 8;
}
size_t strlen(const char* str)
{
size_t ret = 0;
while ( str[ret] != 0 )
ret++;
return ret;
}
static const size_t VGA_WIDTH = 80;
static const size_t VGA_HEIGHT = 24;
size_t terminal_row;
size_t terminal_column;
uint8_t terminal_color;
uint16_t* terminal_buffer;
void terminal_initialize()
{
terminal_row = 0;
terminal_column = 0;
terminal_color = make_color(COLOR_LIGHT_GREY, COLOR_BLACK);
terminal_buffer = (uint16_t*) 0xB8000;
for ( size_t y = 0; y < VGA_HEIGHT; y++ )
{
for ( size_t x = 0; x < VGA_WIDTH; x++ )
{
const size_t index = y * VGA_WIDTH + x;
terminal_buffer[index] = make_vgaentry(' ', terminal_color);
}
}
}
void terminal_setcolor(uint8_t color)
{
terminal_color = color;
}
void terminal_putentryat(char c, uint8_t color, size_t x, size_t y)
{
const size_t index = y * VGA_WIDTH + x;
terminal_buffer[index] = make_vgaentry(c, color);
}
void terminal_putchar(char c)
{
terminal_putentryat(c, terminal_color, terminal_column, terminal_row);
if ( ++terminal_column == VGA_WIDTH )
{
terminal_column = 0;
if ( ++terminal_row == VGA_HEIGHT )
{
terminal_row = 0;
}
}
}
void terminal_writestring(const char* data)
{
size_t datalen = strlen(data);
for ( size_t i = 0; i < datalen; i++ )
terminal_putchar(data[i]);
}
void kernel_main()
{
terminal_initialize();
terminal_writestring("wellcome to my first operating system!");
for(;;);
}
| |
the linker script
create a file: linker.ld with these contents:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
/* The bootloader will look at this image and start execution at the symbol
designated as the entry point. */
ENTRY(start)
/* Tell where the various sections of the object files will be put in the final
kernel image. */
SECTIONS
{
/* Begin putting sections at 1 MiB, a conventional place for kernels to be
loaded at by the bootloader. */
. = 1M;
/* First put the multiboot header, as it is required to be put very early
early in the image or the bootloader won't recognize the file format.
Next we'll put the .text section. */
.text BLOCK(4K) : ALIGN(4K)
{
*(.mbHeader)
*(.text)
}
/* Read-only data. */
.rodata BLOCK(4K) : ALIGN(4K)
{
*(.rodata)
}
/* Read-write data (initialized) */
.data BLOCK(4K) : ALIGN(4K)
{
*(.data)
}
/* Read-write data (uninitialized) and stack */
.bss BLOCK(4K) : ALIGN(4K)
{
*(COMMON)
*(.bss)
}
/* The compiler may produce other sections, by default it will put them in
a segment with the same name. Simply add stuff here as needed. */
}
| |
how to compile it
go to the shell (on windows cygwin is required):
type these commands:
1 2 3
|
nasm -f elf boot.asm -o boot.o
g++ -c kernel.cpp -o kernel.o -ffreestandinng -fno-exceptions -fno-rtti
gcc loader.o kernel.o -T linker.ld -o kern -nostdlib -nodefaultlibs -lgcc
| |
kingratulations!
your first operating system has been compiled successfully!
now you can create an image using grub-mkrescue:
create a directory: iso
in that directory, create another directory: boot then in the boot directory, create a directory: grub and then create a file: grub.cfg with these contents(do not add the braces in a new line) in the grub directory:
1 2 3
|
menuentry "myOS" {
multiboot /boot/kern
}
| |
then copy your kernel (kern) to iso/boot directory and run your shell again:
switch to the main directory of your kernel and type:
|
grub-mkrescue iso --output=kern.iso
| |
now you can boot and enjoy from your first operating system:: this simple kernel without anything


Polymer materials are widely applicable to problems energy storage and renewable energy. I developed a method for constructing, equilibrating, running and analyzing polymer simulations. This method has been applied to examine fundamentally important processes, such as energy storage in lithium-ion batteries and gas diffusion through selectively permeable polymer membranes.
I developed a workflow for running polymer molecular dynamics simulations and applied it to a variety of problems, including polymer electrolytes for lithium-ion batteries and semipermeable membranes for CO2 reduction. Work is currently underway on a multiscale description of mixed matrix membranes for air and water treatment.
This workflow consists of several steps. First, the individual polymer chains are constructed in an amorphous builder. Then, the cell is equilibrated using the Desmond simulation package, with a critical Scaled Effective Solvent (SES) equilibration step, which allows for accelerated relaxation of the polymer chains. Afterwards, long timescale molecular dynamics simulations are performed. If needed, the structure can be converted to LAMMPS format for an improved description of electrostatics and surface equilibration.
This method was applied to study several problems including: understanding the diffusion mechanism in polymer electrolytes for lithium-ion batteries and developing an adjustable parameter-free description of gas permeation through polymer membranes.
Related Publications:
1. Atomistic description of ionic diffusion in PEO-LiTFSI: effect of temperature, molecular weight, and ionic concentration. In preparation, (2018).
2. Predictive simulation of non-steady-state transport of gases through rubbery polymer membranes. Polymer, (2018).
3. Polarizable charge equilibration model for predicting accurate electrostatic interactions in molecules and solids. The Journal of Chemical Physics, (2017).


Welcome!
RSMLH is located in the city of Guntur in the state of Andhra Pradesh of India, this hospital was started by a husband and wife team of health professionals with considerable experience, to provide cost effective comprehensive health care with emphasis on Healing from Christ for the masses.
This hospital has been started in an old missionary bungalow situated in the Heyer Hall Compound of the Andhra Evangelical Lutheran Church.
The Bungalow is about 100 years old and has been renovated. It was the place where the founding missionaries lived during their extensive work of building Churches, educational institutes and Hospitals. The last of these missionaries of the AELC was the late Ms. Ruth Sigmon. She served for 50 years among orphans and women in Guntur and the surrounding villages. The hospital has been named in her memory as she lived in this bungalow.
The hospital was established in 2010. Over the years in addition to the basic outpatient and inpatient medical facilities, we are now able to provide surgical, gynecological, medical and paediatric services. Patients have shown great interest in our unique method of physical, spiritual and emotional healing. We hope to expand our mission as we grow every day with the help of the Healing power of Jesus.
Praying
Every single patient who enters RSMLH encounters God through prayers with staff during every procedure
Counseling
Counseling of patients and their families is an integral part of patient care here.
Expertise
Comprehensive evidence based cost effective expert care is given to every single patient.
Equipment
Top of the line equipment is available with skilled technical care.


Select data from an ODBC database and return the results as a data frame.
selectData(MSSQLConnectionString = NULL, query, SQLiteFileName = NULL, randomize = FALSE)
| MSSQLConnectionString | A string specifying the driver, server, database, and whether Windows Authentication will be used. |
|---|---|
| query | The SQL query (in ticks or quotes) |
| SQLiteFileName | A string. If dbtype is SQLite, here one specifies the database file to query from |
| randomize | Boolean that dictates whether returned rows are randomized |
df A data frame containing the selected rows
http://healthcareai-r.readthedocs.io
# NOT RUN { # } # NOT RUN { # This example is specific to SQL Server # To instead pull data from Oracle see here # https://cran.r-project.org/web/packages/ROracle/ROracle.pdf # To pull data from MySQL see here # https://cran.r-project.org/web/packages/RMySQL/RMySQL.pdf # To pull data from Postgres see here # https://cran.r-project.org/web/packages/RPostgreSQL/RPostgreSQL.pdf connectionString <- ' driver={SQL Server}; server=localhost; database=SAM; trustedConnection=true ' query <- ' SELECT A1CNBR FROM SAM.dbo.HCRDiabetesClinical ' df <- selectData(connectionString, query) head(df) # }


And last, but not least ...
... Riddle me this
The person who built it sold it. The person who bought it never used it.
The person who used it never saw it. What is it?
Which room do ghosts avoid?
I don't have eyes, but once I did see.
Once I had thoughts, but now I'm white and empty.
Put answers here:
player information:
- lives: ♥ ♥ ♥ ♥ ♥
- Restart Level
- Restart Game
- save game