text:
# Quick Start

Please ensure you have read [The Service](service) and [Concepts](concepts) before using this data for anything serious! Additionally, you should consult the documentation for each Source you intend to use.

Most of the time you will want to grab the dataset in bulk, or for a paricular source, or a particular DOI prefix. You can then filter it, load it into your own data store, etc. Check the [Crossref blog](https://www.crossref.org/categories/event-data/) for ideas. We collect a few tens of thousands of Events per day, so that can weigh in at over 10MB of data per day. Bear this in mind if you point a browser at the URLs.

This quick start is going to show you how to fetch data and then do some rudimentary querying with it using the popular [JQ tool](https://stedolan.github.io/jq/).

Data is available on a per-day basis. To fetch everything that was collected on the 21st of February 2017 (14,815 Events):

      curl https://query.eventdata.crossref.org/collected/2017-02-27/events.json > 2017-02-21.json

That gives us all 10,760 events that were collected on that day.

If you're only interested in Reddit (25 Events), you can filter that:

    curl https://query.eventdata.crossref.org/collected/2017-02-27/sources/reddit/events.json > 2017-02-21-reddit.json

If you're only interested in PLOS articles (981 Events), you can filter by their prefix:

    curl  https://query.eventdata.crossref.org/collected/2017-02-27/prefixes/10.1371/events.json > 2017-02-21-plos.json

Now you've got a day's worth of data to crunch. Let's continue with the whole day's worth.

We can pipe it through `jq` to format it nicely. I've cut its head off at 28 lines:

    $ jq . 2017-02-21.json | head -n 28
    {
      "meta": {
        "status": "ok",
        "message-type": "event-list",
        "total": 14815,
        "total-pages": 1,
        "page": 1,
        "previous": "https://query.eventdata.crossref.org/collected/2017-02-26/events.json",
        "next": "https://query.eventdata.crossref.org/collected/2017-02-28/events.json"
      },
      "events": [
        {
          "obj_id": "https://doi.org/10.1007/s00266-017-0820-4",
          "source_token": "45a1ef76-4f43-4cdc-9ba8-5a6ad01cc231",
          "occurred_at": "2017-02-27T19:06:32.000Z",
          "subj_id": "http://twitter.com/Ulcerasnet/statuses/836291446168817665",
          "id": "00001916-bbf6-4698-b8b8-26dbd885afa9",
          "action": "add",
          "subj": {
            "pid": "http://twitter.com/Ulcerasnet/statuses/836291446168817665",
            "title": "Tweet<PHONE_NUMBER>68817665",
            "issued": "2017-02-27T19:06:32.000Z",
            "author": {
              "url": "http://www.twitter.com/Ulcerasnet"
            },
            "original-tweet-url": "http://twitter.com/UrgoTouch_es/statuses/836203902781517829",
            "original-tweet-author": "http://www.twitter.com/UrgoTouch_es"
          },

Note the previous and next links. You can use these to navigate your query back and forward through time on the API.

I'm going to use JQ to select the `events`, then I'm going to return all of the distinct source names.

    jq '.events | map(.source_id) | unique ' 2017-02-21.json
    [
      "reddit",
      "twitter"
    ]

We were only collecting for those two sources on that day. Now let's group by the DOI and count how many Events we got for each DOI. Again, I've snipped a long output.

    $ jq '.events | group_by(.obj_id) | map ([.[0].obj_id, length]) ' 2017-02-21.json  | head -n 17
    [
      [
        "https://doi.org/10.1001/journalofethics.2017.19.2.pfor1-1702",
        1
      ],
      [
        "https://doi.org/10.1001/journalofethics.2017.19.2.stas1-1702",
        3
      ],
      [
        "https://doi.org/10.1001/virtualmentor.2010.12.9.imhl1-1009",
        11
      ],
      [
        "https://doi.org/10.1001/virtualmentor.2013.15.5.imhl1-1305",
        4
      ],
      [

That's all for now. The [Query API](query-api) page describes the Query API and connected services in depth.

repository: jamesbloomer/event-data-user-guide

repo_name: jamesbloomer/event-data-user-guide


text:
# στεῖρος, ον.

<!-- Status: S2=NeedsReview -->
<!-- Lexica used for edits: BDAG LN FFM BN LSJM MM   -->

## Word data

* Strongs: G47230.

* Alternate spellings:

,  also [-α, -ον](),

* Principle Parts:

* Part of speech:

[Adjective used predicatively as a Noun](http://ugg.readthedocs.io/en/latest/noun_predicate_adj.html),
[Adjective used substantively as a Noun](http://ugg.readthedocs.io/en/latest/noun_substantive_adj.html).

* Instances in the New Testament: 4.

* All Scriptures cited: Yes.

## Etymology:

* LXX/Hebrew glosses:

in LXX for [עֲקֶרֶת](//en-uhl/H6135), [עֲקָרָה](//en-uhl/H6135)
 ;

* Time Period/Ancient Authors:

* Related words:

* Antonyms for all senses

* Synonyms for all senses:

## Senses

### Sense  1.0:

#### Definition:

barren, of a woman who is unable to conceive

#### Glosses:

barren

#### Explanation:

#### Citations:

[Luke 1:7](luk 1:7), [36](luk 1:36), [23:29](luk 23:29), [Gal 4:27](gal 4:27) {LXX}.

license: MIT

repository: mandolyte/uw-obsidian

branch_name: refs/heads/main

extension: md

license_type: permissive

repo_name: mandolyte/uw-obsidian


text:
# Byteball Cashback programm media
We have setup this repo to help the Byteball community to enable merchants using the Byteball Cashback program.

We also create an app for the Byteball Cashback API to lower the barrier for merchants using the program.
[Byteball Cashback App](https://github.com/myactivities/byteball-cashback-app)

## All details of the Byteball Cashback program
[https://medium.com/byteball/byteball-cashback-program-9c717b8d3173](https://medium.com/byteball/byteball-cashback-program-9c717b8d3173).

## Application form for merchants
[https://medium.com/byteball/byteball-cashback-program-9c717b8d3173](https://medium.com/byteball/byteball-cashback-program-9c717b8d3173)

## Donations
byteball:WR5FPYE6LHBQ57ZCFUTJXDDNHWK5355S

## Contributors
- Antonius Gress
- Rui Lun Tran

repository: myactivities/byteball-cashback-media

branch_name: refs/heads/master

repo_name: myactivities/byteball-cashback-media


text:
# SBT
* use `~test` in the play console to run the tests on every source code change
* hot deployment does not work, `play2 clean reload compile run`

# Ebean

* Model.Finder ... findRowCount() for count queries
* auto evolutions: in application.conf: `applyEvolutions.default=true` or start with `play start -DapplyEvolutions.default=true` (untested)

# H2

* login to in memory database: h2-browser in play console, a browser window opens, login with empty username and password

# Tests

* fill database not globaly for tests, only for tests which needs it

# Localization

* there no warnings if arguments missing for {0}, {1} etc.

# IntelliJ IDEA

* use the sbt console with the command `run` to start the play server
* after renaming or moving a controller class the routes have to be adjusted manually and the task `clean` must be called
* external dependencies have to be configured manually?

# Typical mistakes and errors

* wrong imports: the package play.api ist for Scala developers, play for Java developers
* Firefox WebDriver Plugin is outdated and does not work on the current Firefox: https://groups.google.com/forum/?fromgroups#!topic/selenium-users/TPch0MFPLX4

<pre>    org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host <IP_ADDRESS> on port 7055 after 45000 ms. Firefox console output:
    *** LOG addons.xpi: startup
    *** LOG addons.xpi: Ignoring file entry whose name is not a valid add-on ID: [...]</pre>

* ebean errors: Scala seems not to work well with ebean: https://groups.google.com/forum/?fromgroups#!topic/play-framework/WziP0HqjN4Y
* `Error with [models.ACLASS] It has not been enhanced but it's superClass [class play.db.ebean.Model] is? (You are not allowed to mix enhancement in a single inheritance hierarchy)` => mostly forgotten: build.scala: `val main = PlayProject(...etc...).settings(ebeanEnabled := true)`
* `Test CLass.method failed: java.sql.SQLException: Attempting to obtain a connection from a pool that has already been shutdown. ` => forgot `running(fakeApplication(inMemoryDatabase()), new Runnable() { [...]`
* IDEA does not find dependency, run in SBT reload, compile, idea
* don't include Google Guava Lib with SBT, it is already there with version 10.0 and extra Guavas JARs causes tests to crash
* Selenium tests: don't extend FluentTest, it does not work with play's `running(testServer(3333), HTMLUNIT, new F.Callback<TestBrowser>()`
`render(play.api.data.Form<models.User>) in views.html.index cannot be applied to (play.data.Form<models.User>)`, maybe in Build.scala set mainLanguage from SCALA to JAVA (better for mixed projects), controllers and forms not mixable between Java and Scala, for Scala controller templates us fully qualified name or you need the java version of the form: `@(contactForm: play.api.data.Form[Contact])`
* there are 3 states: isProd, isDev, isTest


text:
> Our Semester Project for OOP

# CIMP
## Introduction
CIMP is an image manipulation program that can apply filters to an image.

![logo](/media/icon.png)

### Dependencies
CIMP depends upon [wxWidgets](https://github.com/wxWidgets/wxWidgets). Library for its
Graphic User Interface. Do add it in your project prior to compilation.

### Screenshots

![original image](/media/sc1.jpg)

![alienate filter](/media/sc2.jpg)


text:
### 301 Daily Learning Journal - Day 03

## What I learned
- Learned a ton more about jQuery and how to actually use it. Got fairly comfortable with some of the methods. Also refreshed in constructors and prototypes which was useful to further understand each of them.
-
## What was Frustrating
- Nothing was really frustrating today in Lab, it was one of the rare days when we smashed it out.

## Group Stuff
- Dustin knows what he is doing and is very easy to work with! Today went really well and we finished in a few hours with little stress.

## Extras?
- Did some more Codewars on my own today and it was much more helpful in getting me some extra practice in coming up with solutions from scratch.
- I am working with some friends on project ideas for 301/401 and already want to work on them, but don't have the freetime after class and my brain is usually fried by the time 7pm rolls around :P, but here are the items I am thinking over:

1. Rotating Globe that shows click able pins/locations for a travel blog that can link to a blog article, a picture album, or maybe just basic destination info and or tourist attractions for that location.

2. Customer Database on a google map with all the customer information...

3. Application / Chrome Add-on that informs electronics consumers where, how, and what of they're product is built, and where the product they're replacing goes when they are done with it. The database for the information on each project would be difficult to find, but general information could be used for starters.


text:
*CS323 Compilation Principle*

Assignment 1

Name｜Yubin Hu

ID｜11712121

Date｜2020.09.23

# Required Exercises

## Exercise 1

> When a C compiler compiles the following statement, how many tokens will it generate? [5 points]
>
> ```
> int a3 = a * 3;
> ```

There are 7 tokens will be generated.

- <keyword, int>
- <id, a3>
- <id, a>
- <assign, =>
- <assign, *>
- <assign, ;>
- <number, 3>

## Exercise 2

> In a string of length n (n > 0), how many of the following are there?
>
> 1. Prefixes [5 points]
> 2. Proper prefixes [5 points]
> 3. Prefixes of length m (0 < m ≤ n) [5 points]
> 4. Suffixes of length m (0 < m ≤ n) [5 points]
> 5. Proper prefixes of length m (0 < m ≤ n) [10 points]
> 6. Substrings [10 points]
> 7. Subsequences [10 points]

1. $n+1$
2. $n-1$
3. $1$
4. $1$
5. $$res= \begin{cases} 0& \text{m=n}\\ 1& \text{otherwise} \end{cases}$$
6. $1+\frac{(1+n)n}{2}$
7. $2^n$

## Exercise 3

> Describe the languages denoted by the following regular expressions:
>
> 1. ((ε|a)\*b\*)\* [5 points]
>2. (a|b)\*a(a|b)(a|b) [5 points]
> 3. a\*ba\*ba\*ba\* [5 points]

1. A string consisting of a and b
2. A string consisting of a and b whose third-to-last digit is a
3. A string consisting of a and b with only three

## Exercise 4

> Write regular definitions or regular expressions for the following languages.
>
> 1. All strings representing valid telephone numbers in Shenzhen. A valid telephone number contains the country code (86), a hyphen, the area code 0755, another hyphen, and eight digits where the first one cannot be zero (e.g., 86-0755-88015159). [10 points]
>
> 2. All strings of a’s and b’s that start with a and end with b. [10 points]
> 3. All strings of lowercase letters that contain the five vowels in order. [10 points]

1. ```
   86-0755-[1-9][0-9]{7}
   ```

2. ```
   a(a|b)*b
   ```

3. ```
   pattern = [b-df-hj-np-tv−z]
   {pattern}*a{pattern}*e{pattern}*i{pattern}*o{pattern}*u{pattern}*
   ```

# Optional Exercises

## Exercise 1

> Suppose we have a alphabet Σ = {a, b, c}, write regular definitions to describe all strings over Σ without repeated letters. [Hint: You may draw an NFA for the language and convert the NFA to regular definitions.]

**The origin NFA figure**

Then, we should simplify the figure by removing the state 1, 2 , 3 to get the regular definitions.

**Remove state 1**

| edge   | Regular expression |
| ------ | ------------------ |
| 0 -> 2 | $b|ab$             |
| 0 -> 3 | $c|ac$             |
| 0 -> 4 | $a$                |
| 2 -> 2 | $ab$               |
| 2 -> 3 | $c|ac$             |
| 2 -> 4 | $a|\epsilon$       |
| 3 -> 2 | $b|ab$             |
| 3 -> 3 | $ac$               |
| 3 -> 4 | $a|\epsilon$       |

![image-20200930205248245](11712121_assignment1.assets/image-20200930205248245.png)

**Remove state 2**

| edge   | Regular expression                        |
| ------ | ----------------------------------------- |
| 0 -> 3 | $(c|ac)|((b|ab)(ab)^*(c|ac))$             |
| 0 -> 4 | $(a)|((b|ab)(ab)^*(a|\epsilon))$          |
| 3 -> 3 | $(ac)|((b|ab)(ab)^*(c|ac))$               |
| 3 -> 4 | $(a|\epsilon)|((b|ab)(ab)^*(a|\epsilon))$ |

![image-20200930211024302](11712121_assignment1.assets/image-20200930211024302.png)

**Remove state 3**

| edge   | Regular expression |
| ------ | ------------------ |
| 0 -> 4 | $(((a)|((b|ab)(ab)^*(a|\epsilon)))|(((c|ac)|((b|ab)(ab)^*(c|ac)))((ac)|((b|ab)(ab)^*(c|ac)))*((a|\epsilon)|((b|ab)(ab)^*(a|\epsilon)))))$          |

So, from NFA to regular expression, the result is $(((a)|((b|ab)(ab)^*(a|\epsilon)))|(((c|ac)|((b|ab)(ab)^*(c|ac)))((ac)|((b|ab)(ab)^*(c|ac)))*((a|\epsilon)|((b|ab)(ab)^*(a|\epsilon)))))$.

**regex101**

https://regex101.com/r/5C0PEp/1

![image-20200930211558277](11712121_assignment1.assets/image-20200930211558277.png)

repository: Eveneko/SUSTech-Courses

repo_name: Eveneko/SUSTech-Courses


text:
# js-toast

This is a small JavaScript library that produces a toast message. Toasts are small, unobtrusive notifictions to alert the user of something. This toast slides in from the bottom of the page, stays for a specified amount of time, and then slides away. This is much friendlier than using the `alert()` function in JavaScript.

A demo is available on my [playground](https://playground.michaelcheng.us/lib-js/toast/).

## Usage
Usage is extremely simple, but advanced customization can also be done. For starters, a toast can be created when a button is clicked

```html
<input type="button" value="Toast!" onclick="showAToast();">
```

Where the `showAToast()` function creates and shows a toast

```javascript
function showAToast() {
	iqwerty.toast.toast('Hello!');
}
```

This shows a toast with default settings.

If you'd like to close any toast, grab a reference to any toast and call `.hide()`.

```js
const toast = iqwerty.toast.toast('Hello!');
toast.hide();
```

Note this closes any toast currently visible, not the one you have a reference to. Because programming is hard :(

## Advanced customization
The toast is easy to use, and it looks great by default. However, it can also be customized to your liking.

### Styles
The toast style can be customized by specifying a style in the options parameter

```javascript
const options = {
	style: {
		main: {
			background: "pink",
			color: "black",
		},
	},
};

iqwerty.toast.toast('Hello!', options);
```

The styles are in CSS-ish syntax.

### Duration
The duration of the toast (the time that the toast stays on the screen) is set to 4000ms (4s) by default, but you can change this if you wish. If set to `0`, the toast will remain visible forever until `.hide()` is called.

```javascript
const options = {
	settings: {
		duration: 5000,
	},
};

iqwerty.toast.toast('Hello!', options);
```

Have fun!

## Accessibility (a11y)
I will add `aria-live` for a11y when I have time... Sorry to users with disabilities that are using this now :(

repository: hispanos/adopcion

repo_name: hispanos/adopcion


text:
[![Build Status](https://travis-ci.org/damdamo/Teri.svg?branch=master)](https://travis-ci.org/damdamo/Teri)

# Teri (TErm RewrIting)

Teri is a library for term rewriting using strategies.
Based on ADT (Algebraic Data Type), Teri describes formally types with their corresponding operations.
Moreover, a term is evaluated using a strategy.
Strategies select the way of evaluate a term.

## How to use Teri ?

You need to create a dependency in your project.
Follow steps write [here](https://github.com/apple/swift-package-manager/blob/master/Documentation/Usage.md#defining-dependencies) to complete your *Package.swift* file.

Here an example of how to include Teri in your project:

```Swift
let package = Package(
    name: "MyTest",
    dependencies: [
        .package(
            url: "https://github.com/damdamo/Teri.git",
            .branch("master")
        )
    ],
    targets: [
        .target(
            name: "MyTest",
            dependencies: ["Teri"]),
        .testTarget(
            name: "MyTestTests",
            dependencies: ["MyTest"]),
    ]
)
```
Now, you just need to import Teri in your swift file: `import Teri`

## How to write Terms

Terms which are already implemented with following operations are:

|         | Generators    | Operations                  |
|---------|:-------------:|:----------------------------|
| Nat     |*zero, succ*  |  *add(Nat,Nat), sub(Nat,Nat), mul(Nat,Nat), eq(Nat,Nat)* |
| Boolean | *true, false* | *not(Boolean), and(Boolean,Boolean), or(Boolean, Boolean)* |
| List\<T>| *empty, cons(T, List\<T>)* | *insert(T, List\<T>), insert(T, List\<T>), concat(List\<T>, List\<T>), contains(T, List\<T>), isEmpty(List\<T>), size(List\<T>)*|

Terms are implemented using Swift Enums.
The aim is to simplify the way to write terms.

Here a list of examples that you can write with Teri:

|                | Term  | Translate in Teri                   |
|----------------|:------|:-----------------------------------|
| Nat Example 1 | *zero*   | `let t: Nat = .zero`          |
| Nat Example 2 | *succ(zero)*| `let t: Nat = .succ(.zero)`|
| Nat Example 3 | *add(succ(zero), x)* | `let t: Nat = .add(.succ(.zero), .var("x"))`|
| Boolean Example 1 | *true*   | `let t: Boolean = .true`          |
| Boolean Example 2 | *not(true)*| `let t: Boolean = .not(.true)`|
| Boolean Example 3 | *and(or(true, x), true))* | `let t: Boolean = .and(.or(.true,.var("x")), .true)`|
| List Example 1 | *empty*   | `let t: List<Nat> = .empty`|
| List Example 2 | *insert(true, cons(false, empty))*   | `let t: List<Boolean> = .insert(.true, .cons(.false, .empty))`|
| List Example 3 | *concat(cons(0, empty), cons(add(0,0), empty))*   | `let t: List<Nat> = .concat(.cons(.zero, .empty), .cons(.add(.zero, .zero), .empty))`|

Notice that the type `List<T>` is generic, meaning that you can choose any type which is a term.
Thanks to the Swift type inference that gives you the possibility to write: `.succ(.zero)` instead of `Nat.succ(Nat.zero)`.

Teri adds the possibility to manipulate variables, which are written as `.var("nameOfTheVariable")`, for all types.
The name of the variable is a simple String in Swift.

If you want to see more examples, you can go directly inside: `Tests/TeriTests/TeriNatTests.swift`.

To help the final readability, the `CustomStringConvertible` protocol has been added and completed for all types, to have a pretty print for terms.
Try to print terms to see the result !
For example: `print(Boolean.and(.or(.true,.var("x")), .true))
` returns `(true ∨ x) ∧ true`.

## How to evaluate Terms ?

Evaluate terms needs to select an order to reduce all of them.
In Teri, you chose a strategy to apply to evaluate a term.
For instance, let suppose the term: *add(add(x,zero),zero)*.
Should we reduce from inside (*innermost*) or outside (*outermost*) ?
- *Innermost*: *add(sub(x,zero),zero)* --> *add(x,zero)* --> *x*
- *Outermost*: *add(sub(x,zero),zero)* --> *sub(x,zero)* --> *x*

In Teri:
```Swift
let t: Nat = .add(.add(.var("x"), .zero), .zero)
// Innermost strategy:
// Print: Optional(x)
print(Strategy.eval(t: t, s: .innermost(.axiom))!)
// Outermost strategy
// Print: Optional(x)
print(Strategy.eval(t: t, s: .outermost(.axiom))!)
```

Strategies can fail, for this reason the return result is an *Optional*.
If you are sure that the result is not *nil*, you can force to unwrap it using *!*.

The previous example gives the same answer for both cases, but this will not be the case each time.

For example, *add(add(zero,zero), add(zero,zero))*:
- *Innermost*: *add(add(zero,zero), add(zero,zero))* --> *zero*
- *Outermost*: *add(add(zero,zero), add(zero,zero))* --> *add(zero,zero)*

Strategies can be combined as you wish.
Here a list of all strategies which are implemented:
(t is the term to evaluate)
- **identity**: (Identity)[t] = t (returns the term)
- **fail**: (Fail)[t] = fail
- **axiom**: Rewrite the term with the first axiom that matches
- **sequence**:
  - (s1)[t] = fail => (Sequence(s1,s2))[t] = fail (If the first strategy fails, everything fails)
  - (s1)[t] = t' => (Sequence(s1,s2))[t] = (s2)[t]
- **choice**:
  - (s1)[t] = t' => (Choice(s1,s2))[t] = t'
  - (s1)[t] = fail => (Choice(s1,s2))[t] = (s2)[t] (If the first strategy fails, returns the result of the second)
- **all**:
  - (s)[t1] = t1', ..., (s)[tn] = tn' => (All(s))[f(t1,...,tn)] = f(t1',...,tn') (Rewrite direct subterms of f)
  - ∃i, (s)[ti] = fail => (All(s))[f(t1,...,tn)] = fail (If there exists at least one subterm that fails with the strategy, the whole strategy fails)
  - (All(s))[cst] = cst
- **try**: Try(s) = Choice(s, Identity)
- **innermost**: Innermost(s) = μx.Sequence(All(Innermost(x)), Try(Sequence(s,x))) (Strategy which consists to evaluate all subterms before to evaluate the outer term, and apply it recursively)
- **outermost**: Outermost(s) = μx.Sequence(Try(Sequence(s,x)), All(Innermost(x))) (Same logic that *innermost* but goes from outside to inside)

repository: damdamo/Teri

gha_language: Swift

gha_license_id: MIT

repo_name: damdamo/Teri


text:
# i_am_rich
An app that shows you are rich : )

## About
This app is the result of my studies when developing in Dart for iOS and Android. It is a very simple app, only to check how Flutter and Dart works and it is part of a Flutter course I made.

## Features
* Show the image of a diamond when the user open the app
* Shows a traditional mantra when the user clicks in the diamond. (TODO)

## Pictures

## License

This project is licensed under the [MIT License](https://github.com/inaldor/i_am_rich/blob/master/LICENSE)


text:
---
layout:     post
title:      "Communicamp Chicago"
subtitle:   "The first of many open space nonprofit tech conversations."
date:       2009-11-12 12:00:00
permalink: "/chicago-communications-conference/"
description: "Reflections from Community Media Workshop's CommuniCamp, '09."
image:
  feature: chicago-communications-conference.jpg
  credit: Unsplash.com

---

A couple of weeks ago, I volunteered at Community Media Workshop's first CommuniCamp, an open space conference for nonprofit communications staff. The event offered a chance to catch up with old friends in the nonprofit technology and communications space, as well as to hear from (non-technical!) organization staff.

Initial Thoughts

The event was incredible, as expected from CMW. My initial thoughts:

Nonprofiteers are interested in emerging technologies, like Facebook, but range from enthusiastic to skeptical about the potential benefits.

Technology actually figured in a large number of conversations. It's clear that tech is driving a lot of the communications models we're seeing today, ranging from online social networking to content management systems. This makes non-techie communications folks nervous sometimes.

"My CMS is better than your CMS." We had a couple of quick conversations on Drupal vs. Wordpress, Drupal vs. Joomla, and questions from an org using Plone. The group consensus seems to be that tools like Wordpress may be end-user friendly for DIY web development by non-techies, but building a more sophisticated web presence on a platform like Drupal requires technical skill. Once built, however, these systems allow non-techie users to manage and administer powerful websites, databases, and web applications without forcing them to learn "tech" skills. Maybe we should consider architecting and developing a content management solution and managing a web presence using that solution to be two separate stages of web development?

Organizations should focus on developing relationships with trusted vendors, rather than having non-techies select a technology platform. I pointed out that when we quoted "typical" nonprofit website specifications with some of the folks from the Joomla! project, the cost to develop a particular site (measured in hours of work) was very comparable between the two. The leading applications in the open source CMS space are all fairly powerful these days.

My friends around Chicago are doing amazing, empowering work.

extension: markdown


text:
# ArcProgressBar

This repository contains an Android project that showcases a custom view called "ArcProgressBar". The ArcProgressBar is a visually appealing and interactive view that represents progress within a circular arc, providing a unique and engaging progress visualization.

<image src=https://user-images.githubusercontent.com/20221469/58705533-21327500-83cd-11e9-8818-1fbe1faf6909.gif
 width=225 height=400>

 ## Features

- Customizable start and sweep angles for the arc.
- Smooth animation of the progress changes.
- Support for different colors and gradient fills.
- Customizable stroke width and background color.
- User-friendly UI with intuitive interactions and visual feedback.
- Flexible API for easy integration and customization.
- Integration with other views and layouts to create unique progress indicators.

 **for gradient color uncomment below line from RoundProgressBar.java**

```java
//        final LinearGradient linearGradient = new LinearGradient(0, 0, 0, (float) (getMeasuredHeight()), Color.parseColor("#0074ed"), Color.parseColor("#db458d"), Shader.TileMode.MIRROR);
//        paint.setShader(linearGradient);
```
### how to use
```xml
  <com.example.arcprogressbar.RoundProgressBar
        android:id="@+id/roundProgressBar"
        android:layout_width="250dp"
        android:layout_height="250dp"
        app:backcolor="#e0e0e0"
        app:endprogresscolor="#0000FF"
        app:endprogressradius="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:progress="50"
        app:progresscolor="#0000FF"
        app:strokewidth="5dp">
```

## Getting Started

To use the ArcProgressBar project, follow these steps:

1. Clone or download the repository.
2. Open the project in Android Studio.
3. Build and run the app on an Android device or emulator.
4. Interact with the ArcProgressBar view to explore the customization options and observe the progress updates.

## Usage

- Customize the appearance of the ArcProgressBar by modifying colors, angles, stroke width, and background color to match your design requirements.
- Integrate the ArcProgressBar into your own Android projects to provide visually appealing and interactive progress indicators.
- Update the progress value programmatically or through user interactions to reflect the progress of a specific task or operation.

## License
   Copyright 2019 jignesh khunt

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

gha_language: Java


text:
# k1 kit

The next Jetpack, but with less cancer. Works as a toolkit in WordPress development. "Designed" for REST API driven sites, but handy in traditional WordPress development as well.

New features are subject to be added, but it's up to you to decide if you use them.

**As this plugin is in pretty early development, backwards compatibility might break at any given time.** After reaching 1.0, the plugin will follow semantic versioning, and breaking changes will always come with a major version number increment: 1.2.3 => 2.0.0

## Features
- Custom Gutenberg block support
  - Sample blocks available at [k1sul1/wordpress-theme-base](https://github.com/k1sul1/wordpress-theme-base)
- Support for multiple languages using Polylang
  - ACF Options page for each language
  - Falling back to core i18n functions if Polylang isn't available
- Reusable & combinable data-driven templates
  - Since there's no JSX support for PHP *yet*, they're admittedly a bit ugly
  - If you don't like the style, plugging Twig or some other solution should be possible
  - Sample templates available at [k1sul1/wordpress-theme-base](https://github.com/k1sul1/wordpress-theme-base)
- URL resolver
  - Maintains an index of each resource in wp_posts (filterable)
  - Resources can be requested from the REST API with an URL. Handy for single page applications following WordPress permalink structure.
- Transient overhaul
  - Built with the assumption of Redis availability
  - List of transients & UI for managing*
  - Full usage depends on Redis!
- Compact API for REST route generation
  - Automagical caching
<!-- Not sure if this is worth implementing, as I recommend talking to the API via a middle man like NodeJS
- Cacheproxy API endpoint*
  - For storing "3rd" party or native API requests
-->

*: WIP, you might want to hide the feature in production.

## Install
Installs like any other plugin, drop the plugin folder into wp-content/plugins, or if you're sophisticated:

```
composer require k1sul1/k1kit
```

## Quickstart
Install the plugin. You can activate it too, but that isn't necessary, if you ensure that this plugin is loaded, which you might want to do.

```php
require_once WP_PLUGIN_DIR . '/k1kit/src/php/init.php';
```

Doing that also ensures that the plugin is always active.

I recommend that you create a new function, which you use to access the App class. You'll be using it a lot.

```php
/**
 * $options is doesn't do anything on subsequent runs
 */
function app($options = []) {
  return \k1\App::init($options);
}
```

The App class is a singleton (it was either that or global variables) so you can call `app()` as many times as you want, the "expensive" part is only done once. That also means that the location of the first call matters, so I recommend that you do so in `functions.php` or early in your plugin.

There are a few options for you to decide on:
```php
$options = [
  'blocks' => [],
  'templates' => [],
  'languageSlugs' => ['en'],
  'generateOptionsPages' => true,
  'manifests' => [
    'client' => __DIR__ . '/dist/client-manifest.json',
    'admin' => __DIR__ . '/dist/admin-manifest.json'
  ],
]
```

`$options['blocks']` should contain an array of paths to files that contain blocks. Leave empty to "disable" block feature.
`$options['templates']` should contain an array of paths to files that contain the templates. Leave empty and you'll load no templates.
`$options['languageSlugs']` should contain an array of language slugs the site will be using.
`$options['generateOptionsPages']` determines whether or not to create ACF options pages for your languages.
`$options['manifests']` should contain a key-value array of paths to manifest files. Set to false to disable manifest feature.

See https://github.com/k1sul1/wordpress-theme-base/blob/master/functions.php for an example on how to properly do it in a theme that builds asset manifests.

The App class itself doesn't contain many public methods:

```php
$app = app();

$app->getOption('key'); // Get value from an ACF options field, using the current language unless other specified
$app->getBlock('Hero'); // Get a custom block instance. Useful if you want to render a block manually.
```

Some of the functionality is broken up to "subclasses": AssetManifest and i18n. They're instantiated for you, and placed somewhere nice. Any public methods in them are game.

```php
$app = app();

$app->i18n->getText('Something that should be translated');
$app->i18n->getLanguage();
$app->i18n->getLanguages();

// A different AssetManifest instance if created for each manifest
$app->manifests['client']->enqueue('client.js');
$app->manifests['client']->getAssetFilename('something.svg', false) // Set second parameter to false to return a filesystem path instead of an URL
```

### That's it?
Kinda. There's also a few files worth of helpers under `src/php/lib` that you may find useful. My personal favourites are k1\params, k1\withTransient, k1\dotty, k1\Media\svg & k1\Media\image. `svg` depends on the svg being present in the `client` manifest. I suggest that you skim the files and see if there's anything you like.

### But wait, there's more!
Behind the scenes, there are classes Block, Resolver, RestRoute, TransientList and Transientify.

`Block` is used as an ACF blocks base class. `class SomeBlock extends \k1\Block`
`Resolver` creates a new database table and builds a permalink index in it for a *fast* url_to_postid equivalent. You can configure what will be indexed with filters.
`RestRoute` is used as the base class for building REST API routes & endpoints. Light abstraction that provides caching functionality and a compact API.
`TransientList` is the hackiest thing you'll see in a while. If a suitable object cache (Redis) exists, refs to transients created by Transientify are kept in a list, stored as a transient. The purpose of it is to allow finetuned cache control, but you still need to know what you're doing. **Ironically, if you run into performance problems, this might be the reason. Unlikely, but still possible.**
`Transientify` is a fancy API for *_transient functions. An earlier version of it is keeping one of the biggest tech magazines in Finland standing. It can be a bit daunting at first, look where it's used if you're lost. `\k1\withTransient` can be your friend.

### There's even more!
Some functionality exposes REST API endpoints: (note that this list may be out of date, best to check `src/php/api`)

- k1/v1/transientlist
- k1/v1/transientlist/delete
- k1/v1/resolver/url
- k1/v1/resolver/index
- k1/v1/resolver/index/build
- k1/v1/resolver/index/continue

`Resolver` is bound into class `Kit`, if you need access to the PHP api of `Resolver`, you can do `\k1\kit()->resolver`. `TransientList` is not bound anywhere, but it also isn't initialized at any point, it simply serves as a static class. If you want to try your hand on managing transients, simply access it directly: `\k1\TransientList::read()` & `\k1\TransientList::delete()`.

This repository by itself is a bit raw, be sure to see [k1sul1/wordpress-theme-base](https://github.com/k1sul1/wordpress-theme-base) on how I'm using it in client projects, and [k1sul1/kisu.li](https://github.com/k1sul1/kisu.li) in my personal portfolio. (WIP, not public _yet_)

## Warnings
### Resolver
The resolver is on by default. You can turn it off with `add_filter('k1kit/use-resolver', '__return_false')`. If you don't use it, you should turn it off.

When you activate the plugin, it will build the resolver index. The index will contain all post types that are marked as public, but you can change that with a filter. As you add, modify or delete posts, the index will be updated automatically.

**If you change the site domain** (`wp search-replace`), the index will be corrupted, as the index table indexes are sha1 hashes of the URLs. You can easily fix this by rebuilding the index at any time from the admin. The old index will remain functional until the new version has been generated.

The database table is very lightweight:
```
MariaDB [wordpress]> DESCRIBE wp_k1_resolver;
+---------------+---------------+------+-----+---------+-------+
| Field         | Type          | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| object_id     | bigint(20)    | NO   | PRI | NULL    |       |
| permalink     | varchar(2048) | NO   |     | NULL    |       |
| permalink_sha | char(40)      | NO   | UNI | NULL    |       |
+---------------+---------------+------+-----+---------+-------+
3 rows in set (0.002 sec)
```

### Transients
Overhauling the transients kinda requires overhauling the software behind them. You _can_ use WP DB as the transient store, but you shouldn't.

If theres's no object-cache.php present, data compression will be turned off, and there won't be a TransientList.

This is tested with Redis, with the most popular plugins: [WP Redis](https://wordpress.org/plugins/wp-redis/) and [Redis Object Cache](https://wordpress.org/plugins/redis-cache/).

As long as WP is using an actual key-value store for set_transient & get_transient, this plugin should work just fine.

#### Memcached
Memcached will work for small sites, but it has a hardcoded maximum value size of 1MB, which makes it impossible to store the TransientList in memcached if it gets bigger than that. After that it will fail.

## #GOTTAGOFAST
The transients could be a bit faster if the abstraction of the object cache was removed. That would mean ditching WordPress *_transient functions, and using something like Predis, but the cost of loading WordPress makes that pretty much useless, and this plugin wouldn't be object cache agnostic anymore.

The keys generated *can* be predictable, so it's possible to store something like REST API responses, and serve them to users directly from the object cache, and only loading WordPress if a transient doesn't exist, but that's out of the scope of this project.

gha_language: PHP


text:
# Blog example project with Heroku hosting

[![Deploy to Heroku](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy?template=https://github.com/wejs-examples/blog-heroku/tree/master)

Blog project example with heroku configuration, articles, acl, views, theme and without email and file upload

Email dont are configured, then you need to use the admin account bellow to login

**Admin account:**:
- Email<EMAIL_ADDRESS>- Password: admin

## How to install localy

1. Clone this project
2. Create one database for this project
2. Enter in project folder
3. Copy config/local.example to config/local.js
4. Configure you database params
5. install npm packages:
```sh
npm install
```
6. start with:
```sh
we go
```

See http://wejs.org for we.js docs

## After deploy, generate one build with:

```sh
npm run build
```

This command will optimize your assets for production env.

**Build With:**

- We.js
-
## Test

```
npm test
```

## License

MIT

repository: wejs-examples/blog-heroku

repo_name: wejs-examples/blog-heroku


text:
# Hope Kid Shows Off New Bae Months After Three Some Scandal [Photos]

Published at: **2019-11-03T19:24:28+00:00**

Author: **Francis Muli**

Original: [KahawaTungu](https://www.kahawatungu.com/2019/11/03/hope-kid-shows-off-new-bae-months-after-three-some-scandal-photos/)

Gospel singer Simon Peter Wambua popularly known as Hope Kid has introduced the beautiful woman in his life to the world.
The lad took to Instagram to share photos of the woman identified as Njambi Giitwa.
Fans thronged the comment section to congratulate him for his newly found love.
“Now it’s official… CONGRATULATIONS MY PEOPLE .. God bless your union, ” Mr Seed Wrote.
His friend DK Kwenye Beat was also not left behind only saying, “MR & MRS WAMBUA.”
This comes months after Hope Kid and DK were involved in a threesome scandal that broke the internet.
The two were accused of infecting a 20-year-old Nakuru woman with herpes.
Read: Gospel Artist Hope kid Admits To Receiving Nude Pictures From Female Fans
The reports caused a stir online, with a section of netizens calling for the arrest and prosecution of the two.
Some netizens were quick to revisit the scandal after DK’s comment.
“She looks herpy,, I Hope they live herpilly ever after,, Their hearts should beat together forever,,, When is the new wedding?” said Phyllis Karonji.
Ndungu Joseph said, “Such a Herpy couple. May they be herpy forever. Congratulations!
“Decay Kwenye Beat introducing Herpy people I am very Happy (Herpy) for them in the Herpeness Venture in marriage, ” said O’neal Collins Sande.
Read Also: ‘None Of Us Has Herpes’ Hope Kid Cries Foul On Threesome Scandal
Recently, Hopekid denied ever being part of a sex group and infecting the woman with any sort of sexually transmitted infection.
In an interview with Heads Up, the artiste admitted to having being tested for herpes after the story came out and the results were negative.
“After the story came out, we were subjected to a herpes test both me and DK Kwenye Beat and the results were negative and the case was dismissed (sic),” he said.
Asked if he is seeing someone at the moment, Hope Kid noted that he is single but admitted to having had sex in the past despite being a born again Christian.
“I am not dating, I believe in abstaining but at the end of the day, I am not going to sit here and lie to you that I have not done such thing, ” he added.

license: Unlicense

repository: dsadlollioygjmzvcxv/tdc-exported

repo_name: dsadlollioygjmzvcxv/tdc-exported


text:
---
layout: post
title: RhoHub Editor Officially Sunsetted
---

[{{ page.title }}]({{ page.url }})
==================================

As [mentioned previously](/2012/11/08/sunsetting-rhohub-editor.html), the RhoHub Editor has been removed.

We encourage you to try out the [Motorola RhoMobile Suite](http://www.motorola.com/Business/US-EN/Business+Product+and+Services/Software+and+Applications/RhoMobile+Suite) for building [Rhodes](http://www.motorola.com/Business/US-EN/RhoMobile+Suite/Rhodes), [RhoElements](http://www.motorola.com/Business/US-EN/Business+Product+and+Services/Software+and+Applications/RhoMobile+Suite/RhoElements) and [RhoConnect](http://www.motorola.com/Business/US-EN/Business+Product+and+Services/Software+and+Applications/RhoMobile+Suite/RhoConnect) applications.


text:
GIF size getting 10x the size of original video ? Don't worry, I got you!

1. Always create a custom palette
2. Don't increase/decrease file dimensions
3. Save unnecessary frame conversion by using `-t` to convert video until a timestamp.
4. Experiment with `fps` (default value is 24)

```bash
# Get video dimensions
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 video.mp4
# generate a palette
ffmpeg -i video.mp4 -vf "fps=22,scale=1024:-1:flags=lanczos,palettegen" palette.png
# use the generated palette
ffmpeg -t 29 -i video.mp4 -i palette.png -filter_complex "fps=22,scale=1024:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif
```

Download complete script [**here**](https://github.com/Bhupesh-V/.Varshney/blob/master/scripts/gif)

### Resources

- [High quality GIF from video](https://d12frosted.io/posts/2018-10-13-gifify.html)

repository: Bhupesh-V/til

gha_language: Python

repo_name: Bhupesh-V/til


text:
# Module 2 – Lab 2 - Exercise 1 – Create Mail Flow Rules

In this lab, you will continue in your role as Holly Dickson, Adatum’s Messaging Administrator. You will use your client computer to access the Exchange Admin Center from the Microsoft 365 admin center. You will then create a series of mail flow rules that are designed to protect Adatum’s messaging environment.

You will first create a mail flow rule that quarantines messages that are sent from inside the organization that have the words “Secret”, “Classified”, or “Sensitive” in the body or subject of the message. You will create a second rule will also quarantine messages that have attachments that can’t be scanned or where the scanning can’t finish. Both rules will generate a reply message that lets the sender know they have a message that is undeliverable. Finally, you will create a mail flow rule that restricts the size of emails.

## Task 1 - Create Mail Flow rule for sensitive material

In this exercise you will return to the Exchange Admin Center, but this time you will access it from your client computer (LON-CL1) through the Microsoft 365 admin center. This will be the EAC for Exchange Online. You will then create a mail flow rule that checks for sensitive information in emails sent from inside the organization.

1. Switch to LON-CL1 and log in as the **Administrator** account with a password of **Pa55w.rd**.

2. Select the **Microsoft Edge** icon either on the desktop or the taskbar. Maximize your browser window when it opens.

3. In your browser navigate to the **Office 365 home page** by entering the following URL: [**https://portal.office.com/**](https://portal.office.com/)

4. In the **Sign in** dialog box, copy and paste in the **Tenant Email** account provided by your lab hosting provider<EMAIL_ADDRESS>where ZZZZZZ is your unique tenant suffix ID provided by your lab hosting provider) and then select **Next**.

5. In the **Enter password** dialog box, copy and paste in the **Tenant Password** provided by your lab hosting provider and then select **Sign in**.

6. On the **Stay signed in?** dialog box, select the **Don’t show this again** check box and then select **Yes.**

7. If a **Get your work done with Office 365** dialog box appears, select the **X** to close it.

8. In the **Office 365 home** page, in the **Apps** section, select the **Admin** app.

9. In the **Microsoft 365 admin center**, in the left-hand navigation bar, select **Show All** to display all the navigation menu options.

10. On the left-hand navigation bar, in the **Admin centers** section, select **Exchange**.

11. In the **Exchange admin center, i**n the left-hand navigation pane, select **mail flow.**

12. At the top of the page, the **rules** tab is displayed by default. Stay in this tab.

13. The first mail flow rule that you create will check for emails sent from inside the organization that have sensitive words in the email subject line or body. Select the **plus sign (+)** icon in the menu bar, and in the drop-down menu that appears, select **Modify messages.**

14. In the **new rule** window that appears, enter **Sensitive material** in the **Name** field.

15. Note that by default, you can only enter one condition (the **Apply this rule if…** field); there is no option to enter multiple conditions. Therefore, to enter multiple conditions, scroll down and select **More options**… This enables you to enter multiple conditions and actions.

16. Scroll up to the top of the window. Note how an **add condition** button now appears below the **Apply this rule if…** field. To add the first condition, select the drop-down arrow in the **Apply this rule if…** field. Hover over **The subject or body…** and in the menu that appears, select **subject or body includes any of these words.**

17. This opens a **specify words or phrases** window. In the text field, enter **secret** and select the **plus (+) sign**.

18. In the text field, enter **classified** and select the plus sign, then repeat this step and enter **sensitive**.

19. The three words should be displayed below the text field. Select **OK**.

20. In the **new rule** window, the three words should be displayed to the right of the **The subject or body includes…** condition. Select the **add condition** button to add another condition.

21. Select the drop-down arrow in the second condition field that appears (Note how this creates a Boolean **And** condition). Hover over **The sender…** and in the menu that appears, select **is external/internal**.

22. In the **select sender location** window, select the drop-down arrow, select **Inside the organization**, and then select **OK**.

23. Select the drop-down arrow in the **Do the following…** field. Hover over **Redirect the message to…** and in the menu that appears, select **hosted quarantine.**

24. Select the **add action** button to add another action.

25. Select the drop-down arrow in the second action field that appears. Hover over **Apply a disclaimer to the message…** and in the menu that appears, select **append a disclaimer.**

26. To the right of the second action field that displays **Append the disclaimer…,** select **Enter text.**

27. In the **specify disclaimer text** window, enter the following message in the field: **This message contains sensitive material that can harm the company or your team.**

28. Select **OK.**

29. To the right of the second action field that displays **Append the disclaimer…,** select **Select one.**

30. In the **specify fallback action** window, **Wrap** is displayed as the default fallback option. This is the option you want to select as the fallback option (Wrap means if the disclaimer cannot be inserted into the original email, it will attach the message to a new disclaimer email) so select **OK**.

31. Scroll down in the **new rule** window and under **Properties of this rule**, verify the **Audit this rule with severity level:** checkbox is selected. If it’s not checked, then select it now.

32. Select the severity level drop-down arrow and select **Medium**.

33. In the **Choose a mode for this rule:** option, select **Enforce**.

34. Select **Save.**

35. This returns you to the **rules** tab in the Exchange admin center. The new **Sensitive material** rule should be displayed in the list of rules. This rule should be selected, and a **Sensitive material** pane should appear that displays the conditions and actions of this rule. Verify the conditions and actions are correct; if any corrections are needed, select the **pencil (Edit)** icon in the menu bar and make the necessary corrections.

36. Leave the Exchange Admin Center open to the mail flow page and proceed to the next task.

## Task 2 - Create first Mail Flow rule for attachments

In this exercise you will create two mail flow rules related to attachments. Adatum wants to check for emails containing attachments that were either not scanned or the scanning did not complete. You cannot include both conditions in one rule, since multiple conditions in a rule are treated in a Boolean **AND** fashion (for example, condition 1 is true AND condition 2 is true; this is similar to what you did in the prior task where you checked for specific words in the email AND the email was received from inside the organization).

In this case, it does not make logical sense to check for attachments that were not scanned AND for attachments in which scanning did not complete. Therefore, you will need to create two rules; one for messages with attachments that were not scanned and one for messages with attachments where scanning of the attachments did not complete. This task will create the first rule; the next task will create the second rule.

**Important:** Because these two conditions will be defined in separate rules, the rules will be applied in a Boolean **OR** fashion (for example, condition 1 is true OR condition 2 is true).

1. You should still be logged into LON-CL1 as the **Administrator** with a password of **Pa55w.rd**; however, if the log-in page appears, then log in now.

2. If the **Exchange Admin Center** is still open from the prior task, then proceed to the next step; otherwise, if necessary, navigate to the **Office 365 home** page ([**https://portal.office.com**](https://portal.office.com/)), log in as **admin@M365xZZZZZZ.onmicrosoft.com,** navigate to the **Microsoft 365 admin center**, navigate to the **Exchange admin center**, then select **mail flow** in the left-hand navigation pane and select the **rules** tab.

3. In this task, you will create a mail flow rule that checks for emails that contain attachments that cannot be scanned. In the **rules** tab, select the **plus (+) sign** icon in the menu bar and in the drop-down menu, select **Modify messages.**

4. In the **new rule** window, enter **Attachments could not be scanned** in the **Name** field.

5. Select drop-down arrow in the **Apply this rule if…** field. In the menu that appears, review the available options. Note that in the default list of menu options, the only attachment-related option is **Any attachment’s content includes**; there is no option related to the status of an attachment.

Therefore, select **Select one** to collapse the menu and then scroll down in the **new rule** window and select **more options…**

6. Scroll up to the top of the window. Select drop-down arrow in the **Apply this rule if…** field. Hover over **Any attachment…** and in the menu that appears, select **content can’t be inspected.**

7. Select the drop-down arrow in the **Do the following…** field. Hover over **Redirect the message to…** and in the menu that appears, select **hosted quarantine.**

8. Select the **add action** button to add another action.

9. Select the drop-down arrow in the second action field that appears. Hover over **Apply a disclaimer to the message…** and in the menu that appears, select **append a disclaimer.**

10. To the right of the second action field that displays **Append the disclaimer…,** select **Enter text.**

11. In the **specify disclaimer text** window, enter the following message in the field: **Attachments in this message were not scanned.**

12. Select **OK.**

13. To the right of the second action field that displays **Append the disclaimer…,** select **Select one.**

14. In the **specify fallback action** window, **Wrap** is displayed as the default fallback option. This is the option you want to select as the fallback option, so select **OK**.

15. Scroll down in the **new rule** window and under **Properties of this rule**, verify the **Audit this rule with severity level:** checkbox is selected. If it’s not checked, then select it now.

16. Select the severity level drop-down arrow and select **Medium**.

17. In the **Choose a mode for this rule:** option, select **Enforce**.

18. Select **Save.**

19. This returns you to the **rules** tab in the Exchange admin center. The new **Attachments could not be scanned** rule should be displayed in the list of rules. This rule should be selected, and an **Attachments could not be scanned** pane should appear that displays the conditions and actions of this rule. Verify the conditions and actions are correct; if any corrections are needed, select the **pencil (Edit)** icon in the menu bar and make the necessary corrections.

20. Leave the Exchange Admin Center open to the mail flow page and proceed to the next task.

## Task 3 - Create second Mail Flow rule for attachments

In the prior task, you created a mail flow rule for messages with attachments that were not scanned. In this task, you will create a second mail flow rule for messages with attachments; however, in this case, it will be for messages with attachments in which scanning of the attachments did not complete. Because these conditions will be defined in separate rules, the rules will be applied in a Boolean OR fashion.

1. You should still be logged into LON-CL1 as the **Administrator** with a password of **Pa55w.rd**; however, if the log-in page appears, then log in now.

2. If the **Exchange admin center** is still open from the prior task, then proceed to the next step; otherwise, if necessary, log into the **Office 365 home** page, navigate to the **Exchange Admin Center**, select **mail flow**, and select the **rules** tab using the instructions in the prior task.

3. You will now create a mail flow rule that checks for emails that contain attachments where the scanning of the attachments didn’t finish. In the **rules** tab, select the **plus (+) sign** icon in the menu bar and in the drop-down menu that appears, select **Modify messages.**

4. In the **new rule** window, enter **Attachment scanning did not complete** in the **Name** field.

5. Scroll down and select **more options.** The reason you must select **more options** at this point in the process is that you want to apply this rule if an attachment was not scanned or the scanning didn’t finish. However, as you saw in the prior task, those attachment options are not available in the initial **Apply this rule if…** condition field. You must select **more options** to see the attachment conditions.

6. Scroll up to the top of the window. Select the drop-down arrow in the **Apply this rule if…** field. Hover over **Any attachment…** and in the menu that appears, select **didn’t complete scanning.**

7. Select the drop-down arrow in the **Do the following…** field. Hover over **Redirect the message to…** and in the menu that appears, select **hosted quarantine.**

8. Select the **add action** button to add another action.

9. Select the drop-down arrow in the second action field that appears. Hover over **Apply a disclaimer to the message…** and in the menu that appears, select **append a disclaimer.**

10. To the right of the second action field that displays **Append the disclaimer…,** select **Enter text.**

11. In the **specify disclaimer text** window, enter the following message in the field: **Scanning of attachments in this message did not complete.**

12. Select **OK.**

13. To the right of the second action field that displays **Append the disclaimer…,** select **Select one.**

14. In the **specify fallback action** window, **Wrap** is displayed as the default fallback option. This is the option you want to select as the fallback option, so select **OK**.

15. Scroll down in the **new rule** window and under **Properties of this rule**, verify the **Audit this rule with severity level:** checkbox is selected. If it’s not checked, then select it now.

16. Select the severity level drop-down arrow and select **Medium**.

17. In the **Choose a mode for this rule:** option, select **Enforce**.

18. Select **Save.**

19. This returns you to the **rules** tab in the Exchange admin center. The new **Attachment scanning did not complete** rule should be displayed in the list of rules. This rule should be selected, and an **Attachment scanning did not complete** pane should appear that displays the conditions and actions of this rule. Verify the conditions and actions are correct; if any corrections are needed, select the **pencil (Edit)** icon in the menu bar and make the necessary corrections.

20. Leave the Exchange Admin Center open and proceed to the next task.

## Task 4 – Create Mail Flow rule restricting email size

After Holly reviewed the messaging environment at Adatum Corporation, she realized that she could provide a more efficient and secure environment if she created a set of mail flow rules that identify and take action on messages that are in-transit through her Exchange Online organization, as opposed to simply waiting until the messages are delivered to mailboxes before being acted upon by Inbox rules in Outlook and Outlook on the web.

Holly has discovered that mail flow rules contain a richer set of conditions, exceptions, and actions, all of which will provide her with the flexibility to implement many types of messaging policies for Adatum. She is eager to put this to the test regarding a significant issue currently affecting Adatum’s messaging environment - users who send extremely large email messages. She has decided that her first task will be to create a mail flow rule that restricts email size.

1. You should still be logged into LON-CL1 as the **Administrator** with a password of **Pa55w.rd**; however, if the log-in page appears, then log in now.

2. If the **Exchange admin center** is still open from the prior task, then proceed to the next step; otherwise, if necessary, log into the **Office 365 home** page, navigate to the **Exchange Admin Center**, select **mail flow**, and select the **rules** tab using the instructions in the prior task.

3. You will now create a mail flow rule that checks the size of emails and restricts those that exceed a specific size. In the **rules** tab, select the **plus (+) sign** icon in the menu bar and in the drop-down menu that appears, select **Filter messages by size.**

4. In the **new rule** window, enter **Email size restriction** in the **Name** field.

5. Select the drop-down arrow in the **Apply this rule if…** field. Hover over **The message…** and in the menu that appears, select **size is greater than or equal to.**

6. To the right of this condition field that displays **The message size is greater than or equal to…**, select **Enter text**.

7. In the **specify size (KB)** window, enter **1024** and then select **OK**.

8. Select the drop-down arrow in the **Do the following…** field. Hover over **Block the message...** and in the menu that appears, select **reject the message and include an explanation**.

9. In the **specify rejection reason** window that appears, enter the following text: **Your message exceeds the size limit. Please adjust the message size or compress the email content and send it as a zipped file.**

10. Select **OK.**

11. Scroll down to the **Choose a mode for this rule:** option and select **Enforce**.

12. Select **Save.**

13. This returns you to the **rules** tab in the Exchange admin center. The new **Email size restriction** rule should be displayed in the list of rules. This rule should be selected, and an **Email size restriction** pane should appear that displays the conditions and actions of this rule. Verify the conditions and actions are correct; if any corrections are needed, select the **pencil (Edit)** icon in the menu bar and make the necessary corrections.

14. Leave the Exchange Admin Center open to the mail flow page and proceed to the next task.

# End of Lab 2


text:
# console-ui

[![Build Status](https://travis-ci.org/ember-cli/console-ui.svg?branch=master)](https://travis-ci.org/ember-cli/console-ui)
[![Build status](https://ci.appveyor.com/api/projects/status/38tkats2frmmxt2f/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/console-ui/branch/master)

The goal of this library is to declare a common interface that various
node_modules can utilize allowing their UI interactions to be well
coordinated and interoperable. This repo provides reference UI
and test mock implementations. In theory, an alternate implementation abiding
by the describe API could be provided, and the system and all participating
libraries would continue to function correctly.

Features:

* unified and pluggable input/output streams for all participants
* system wide writeLevels enabling ability to easily silence/warn/debug print
  while abiding by shared configuration
* unified progress
* unified CI state (to disable CI unfriendly features such as progress spinners)
* simple
* test mock

## Usage

```js
const UI = require('console-ui')
const ui = new UI({
  inputStream: process.stdin,
  outputStream: process.stdout,
  errorStream: process.stderr,
  writeLevel: 'DEBUG' | 'INFO' | 'WARNING' | 'ERROR',
  ci: true | false
});
```

write to output:

```js
ui.write('message');
ui.write('message', 'ERROR'); // specify  writelevel
```

write + newline to output:

```js
ui.writeLine('message');
ui.writeLine('message', 'ERROR'); // specify  writelevel
```

write + newline to stderr;

```js
ui.writeErrorLine('message');
```

write with DEBUG writeLevel

```js
ui.writeDebugLine('message');
```

write with INFO writeLevel

```js
ui.writeInfoLine('message');
```

write with WARN writeLevel

```js
ui.writeWarnLine('message');
```

write a message related to a deprecation

```js
ui.writeDeprecateLine('some message', true | false); // pass boolean as second argument indicating if deprecated or not
```

write an error nicely (in red) to the console:

* if error.file || error.filename, nicely print the file name
  * if error.line also nicely print file + line
  * if error.col also nicely print file + line + col

* if error.message, nicely print it
* if error.stack, nicely print it

```js
ui.writeError(error);
```

to adjust the writeLevel on the fly:

```js
ui.setWriteLevel('DEBUG' || 'INFO' || 'WARNING' || 'ERROR');
```

to begin progress spinner \w message (only if INFO writeLevel is visible)

```js
ui.startProgress('building...');
```

to end progress spinner

```js
ui.stopProgress();
```

to prompt a user, via [inquirer](https://www.npmjs.com/package/inquirer)

```js
ui.prompt(queryForInquirer, callback);
```

to query if a given `writeLevel` is visible:

```js
ui.writeLevelVisible('DEBUG' || 'INFO' || 'WARNING' || 'ERROR'); // => true | false
```

repository: aantakli/AJAN-editor

gha_language: JavaScript

repo_name: aantakli/AJAN-editor


text:
# keycloak-custom-themes

This is a repo for custom themes for our keycloak

---

## Getting Started
1. git clone this repository && cd to the project directory

### Installation

```
Install keycloak(). After installing keycloak, take a theme of ypur choice from theme file and paster it in themes file of your keycloak
```

### Start Dev Server

```
Start your keycloak server(you can run it with docker or by running standalone.sh scripts file )
```

### Build Prod Version

## Pre-requisites
* Keycloak
* Git
* VSCode, Eclipse, Intellij or even any other code editor of your prefered choice.

## Installing
* Install [keyclok](https://www.keycloak.org/downloads) if you dont have it installed.
* Install [git](https://www.digitalocean.com/community/tutorials/how-to-contribute-to-open-source-getting-started-with-git), (optional) if you dont have it installed.
* Install a Code Editor either Eclipse or VSCode, or even any other of your prefered choice.

### Docker file

```
Coming soon

```

### Building new tar file

```
tar -cvf <path-to-keycloak>/themes/oltranz.tar -C <path-to-keycloak>/themes oltranz
```

## Running the Tests
Currently Tests are under development, They'll be available soon

## Deployment
Coming Soon

## Built With
* Ftl
* Git
* Javascript
* Css
* HTML

## Authors
* **JABIRO Christian** (https://github.com/jabichris)

## Acknowledgments
https://keycloak.discourse.group/t/creating-custom-theme-in-keycloak-x/7896/4
mvn package

## Licence
This software is published by `Oltranz Engineers Team` under the [MIT licence](http://opensource.org/licenses/MIT).

repository: douit/keycloak-custom-themes

repo_name: douit/keycloak-custom-themes


text:
# Averto [![Build Status](https://travis-ci.org/mishamyrt/averto.svg?branch=master)][ci]

Averto is beautiful replacement for the `alert()` function.

**UX.** The main advantage is that the averto is not modal.
This means that the notification does not block the interface.

**Small.** 1.8 kilobytes (minified and gzipped). No dependencies.

**Accessible.** All options are used to increase availability.

## Get

[Download the repository code](https://github.com/mishamyrt/averto/archive/master.zip) and move `dist/averto.js` to the desired directory.

Or use npm:

```sh
$ npm install mishamyrt-averto --save
```

## Setup

Link the file `averto.js` from the compiled sources.

If downloaded directly:
```html
<!-- Head -->
<script src="path/to/averto.js" type="text/javascript"></script>
```

If installed with npm:

```html
<!-- Head -->
<script src="node_modules/mishamyrt-averto/dist/averto.js"
        type="text/javascript"></script>
```

Then, call the function

```js
Averto.show({
    title: 'Hello world!'
})
```

### Using as a CommonJS or ES6 module

Averto can be used as a module, so you can use it within webpack or rollup build systems.

First, install Averto using npm:

```sh
$ npm install mishamyrt-averto --save-dev
```

Then, use it as CommonJS or ES6 module somewhere in your program:

```js
// ES6
import Averto from 'mishamyrt-averto'
// CommonJS
var Averto = require('mishamyrt-averto')

// Modifies the DOM, adjusts itself
Averto.initiate()
```

## Options

You can configure Averto by specifying parameters when calling functon:

```js
Averto.show({
    timeout: 3000,
    autohide: true,
    color: '#663399',
    title: 'WOW!',
    message: 'Look at that color!',
    blocking: false,
})
```

* `timeout` - Delay before message will hidden
* `autohide` - It seems to be obvious
* `color` - Why do I write documentation?
* `title` - Message title. The only mandatory parameter
* `message` - Text for the second line
* `blocking` - Makes the message modal

Also there is a parameter for debugging:

```js
parameters.debug = {
    background = '#fff'
}
```

Dyes the container's background to the specified one

## Supported browsers

I support IE 11, Safari 10+ and the latest versions of Chrome, Firefox and Edge. Averto could work in the older versions too, but i don’t do anything specific to maintain its compatibility with them and don’t test it there.

[ci]: https://travis-ci.org/mishamyrt/averto

repository: mishamyrt/averto

repo_name: mishamyrt/averto


text:
# runibic: UniBic biclustering algorithm for R

This package contains implementation of UniBic biclustering algorithm for gene expression data [Wang2016]
The algorithm tries to locate trend-preserving biclusters within complex and noisy data.

## Functions
This package provides the following main functions:
* `BCUnibic`/`runibic` - parallel UniBic for continuous data
* `BCUnibicD` - parallel UniBic for discrete data

The package provides some additional functions:
* `pairwiseLCS` - calculates Longest Common Subsequence (LCS) between two vectors
* `calculateLCS` - calculates LCSes between all pairs of the input dataset
* `backtrackLCS` - recovers LCS from the dynamic programming matrix
* `cluster` - main part of UniBic algorithm (biclusters seeding and expanding)
* `unisort` - returns matrix of indexes based on the increasing order in each row
* `discretize` - performs discretization using Fibonacci heap (sorting method used originally in UniBic) or standard sorting

## Installation
The package may be installed as follows:
```r
install.packages("devtools")
devtools::install_github("athril/runibic")
```

## Example
### Gene expression dataset
This example presents how to use runibic package on gene expression dataset:
```r
library(runibic)
library(biclust)
data(BicatYeast)
res <- biclust(method=BCUnibic(),BicatYeast)
drawHeatmap(BicatYeast, res, 1)
parallelCoordinates(BicatYeast,res,1)
```

### Summarized experiment
This example presents how to use runibic package on SummarizedExperiment:
```r
library(runibic)
library(biclust)
library(SummarizedExperiment)
data(airway, package="airway")
se <- airway[1:20,]
res<- runibic(se)
parallelCoordinates(assays(se)[[1]], res[[1]], 2)
```

## Tutorial
Please check [runibic tutorial](https://github.com/athril/runibic/tree/master/vignettes/runibic.Rmd)

## Citation
For the original sequential version of the UniBic please use the following citation:

**Zhenjia Wang, Guojun Li, Robert W. Robinson, Xiuzhen Huang
*UniBic: Sequential row-based biclustering algorithm for analysis of gene expression data*
Scientific Reports 6, 2016; 23466, doi: https://doi:10.1038/srep23466**

If you use in your work this package with parallel version of UniBic please use the following citation:

**Patryk Orzechowski, Artur Pańszczyk, Xiuzhen Huang Jason H. Moore:
*runibic: a Bioconductor package for parallel row-based biclustering of gene expression data*
bioRxiv, 2017; 210682, doi: [https://doi.org/10.1101/210682](https://doi.org/10.1101/210682)**

BibTex entry:
```
@article{orzechowski2018runibic,
  author = {Orzechowski, Patryk and Pańszczyk, Artur and Huang, Xiuzhen and Moore, Jason H},
  title = {runibic: a Bioconductor package for parallel row-based biclustering of gene expression data},
  journal = {Bioinformatics},
  volume = {},
  number = {},
  pages = {bty512},
  year = {2018},
  doi = {10.1093/bioinformatics/bty512},
  URL = {http://dx.doi.org/10.1093/bioinformatics/bty512},
  eprint = {/oup/backfile/content_public/journal/bioinformatics/pap/10.1093_bioinformatics_bty512/4/bty512.pdf}
}
```

## References
* [Wang2016] Wang, Zhenjia, et al. "UniBic: Sequential row-based biclustering algorithm for analysis of gene expression data." Scientific reports 6 (2016): 23466.

repository: athril/runibic

repo_name: athril/runibic


text:
# RAMLing

RAML is a YAML-based format for REST API documentation. For more about
RAML, see: [raml.org](http://raml.org)

## State of oc_erchef RAML Documentation

Official and complete documentation of the Chef Server API is hosted at
[docs.chef.io](http://docs.chef.io/api_chef_server.html). We find RAML
useful during development of new features, but at this time have no
plans to make these docs official or comprehensive.

## Building HTML Docs From RAML Source

1) swallow your pride and get node.js
2) `npm install -g raml2html`
3) `raml2html SOURCE_FILE.yml > OUTFILE.html`

repository: andy-dufour/chef-server

repo_name: andy-dufour/chef-server


text:
---
title: "Leetcode | Solution of Valid Parentheses in JavaScript"
description: "In this post, we will solve valid parentheses problem from leetcode and compute the time and space complexities. Let's begin."
author: "Rishabh Jain"
keywords: ["leetcode","js","javascript","solution of valid parentheses problem","rishabh","jain","rishabh jain","rishabh1403","blog","competitive","coding","programming","tech","technology", interview", "interview questions"]
tags: ["leetcode","coding","javascript"]
categories: ["leetcode","coding","javascript"]
date: 2020-03-30T05:07:36.545Z
path: "posts/coding/leetcode/2019/09/leetcode-solution-of-valid-parentheses-in-javascript"
image: "./valid-parentheses.png"
draft: false
---

In this post, we will solve valid parentheses problem from leetcode and compute it's time & space complexity. Let's begin.

# Problem Statement
The question can be found at [leetcode valid parentheses problem](https://leetcode.com/problems/valid-parentheses/).

The problem states that we need to determine if a given string has all its parentheses balanced.

# Constraints and challenges

A string is valid if
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.

# Solution

 We will discuss a solution using a stack and a hash map.

In this method, we will follow the following approach

- we will create a map of parentheses with opening parentheses as key and corresponding closing ones as value
- will declare an empty array to use as a stack :books:
- will check the string character by character
- if the character is an opening bracket will push it to stack
- if it is a closing bracket, will check the last entry in the stack
- if the last entry is an opening bracket of the same type, will pop that from the stack
- else, the string is not balanced
- at last, when we have checked all the characters, the stack should be empty, why? :astonished:
- to keep the string balanced, each closing bracket will have an opening one, and since when this case occurs, we clear the last entry from stack. Hence the stack should be empty after the iteration to ensure the string is balanced.

We have discussed the approach, **I urge you to go ahead on leetcode and give it another try**. :smile:

If you are here, it means something went wrong in implementation or you are just too lazy :smile: . In any case, let's see a simple implementation of the above logic.

```js

var isValid = function (s) {

  const obj = {
    "(": ")",
    "{": "}",
    "[": "]",
  }

  const stack = [];

  for (const paran of s) {
    if (obj.hasOwnProperty(paran)) {
      stack.push(paran)
    } else {
      const closeParan = stack.pop();
      if (paran !== obj[closeParan]) {
        return false;
      }
    }
  }

  return stack.length === 0;
};

```

Let's discuss the implementation.

We declare a hashmap with opening brackets as key and closing ones as their values. Next, we initialize an empty array and will use it as our stack to store opening braces.

Next, we are looping over all the characters of the string, and in this case, all the braces present in the string. In the next condition, we check if the character is an opening bracket, if yes we push it to the stack.

If the character is a closing bracket, we check for the last entry in the stack. If the last entry in the stack is the opening counterpart of the current closing bracket, we remove the entry from stack. It balances the bracket. If no, the braces are not balanced, hence we return false and exit.

In the end, if the stack is not empty, it means there was some opening bracket for which closing bracket was not found in order. Thus we return false or true depending on stack length.

This is all we need to solve the problem, once we submit it, these are the stats.
```yaml

Status: Accepted
Runtime: 56ms
Memory: 33MB

```

## Time and space complexity

### Time complexity

We loop over the characters of the string for every string. We also use some of the methods on object and stack, but they are constant time, so time complexity would be **O(len S)**, proportional to the length of the string.

### Space complexity

We are taking a string as input, but also using a stack to keep characters of the string. In the worst case (no closing bracket in the string ), we will end up storing all the characters in the stack. We have an object but the size is always constant. So space will again be proportional to the length of the string. **O(len S)**.

# Summary

So, we solved the valid parentheses problem, used a stack and a hashmap and saw a couple of object method. At last, calculated the time and space complexities.

I hope you enjoyed solving this question. This is it for this one, complete source code for this post can be found on my [Github Repo](https://github.com/rishabh1403/leetcode-javascript-solutions). Will see you in the next one.

  Subscribe to my [youtube channel](https://www.youtube.com/channel/UC4syrEYE9_fzeVBajZIyHlA) for regular updates. Follow me on [twitter](https://www.twitter.com/rishabhjain1403), drop me a mail or leave a comment here if you still have any doubts and I will try my best to help you out. Thanks

Stay tuned and see you around :)
`youtube: OuRH74PiPas`


text:
# OCscriptToolbox
A Django-based framework that contains a series of scripts as web applications

>At this moment it only contains one application, OC Scheduler, more tools will come later.

![sample demo](docs/resources/OCScheduler_example_longV2.gif)

## Installation

Like any Django application is needed a Web Server Gateway Interface (WSGI) server to work. In my case I developed OCscriptToolboox using [mod_wsgi](http://www.modwsgi.org/).

If you only want to develop or try also is possible to run it using the [`runserver` command](https://docs.djangoproject.com/en/2.2/ref/django-admin/#runserver) (After installing the virtual environment)

### Prerequisites

OCscriptToolbox was designed under Python 3.6, to work is required that the WSGI server supports Python 3.

For installation of mod_wsgi in Centos 7, please look the [appendix](#Appendix).

### Configure Webserver (Apache)

> This instructions use the standard folders for apache in Centos 7, similar installation is for the other flavors of linux.

1. Clone this repository in `/var/www/`
1. move the file `config_files/apache/oc-toolbox.conf` to the folder `/etc/httpd/conf.d/` or add the contents to the end of the apache config file.

### Configure the Webapp

1. In the root folder of the app (Ex: `/var/www/OCscriptToolbox/`) create a new virtual environment called "env"

    `$ virualenv env --no-site-packages`

1. Activate the virtual environment.

    `$ source env/bin/activate`

1. Now that the Venv is activated, install the dependencies with PIP.

    `(env)$ pip install -r requirements.txt`

1. Collect the Static files
    ```bash
    (env)$ cd /var/www/OCscriptToolbox
    (env)$ python3 manage.py collectstatic
    ```
1. Set the [Allowed hosts](https://docs.djangoproject.com/en/2.2/ref/settings/#allowed-hosts) in the app settings located in `/var/www/OCscriptToolbox/OCscheduler/settings.py`

1. Deactivate the virtual environment.

    `(env)$ deactivate`

### Configure credentials and capture agent dictionary

In the file `OCscheduler/properties.py`,
* Add the credentials. The credentials has to be with a user able to access to the external API of opencast.

* Set the Opencast server address

* Set the capture agent dictionary, this parameter is very important because allows to map the room code from the KLIPS system with the list of names registered in Opencast.

The names of each option are the same that are set on the user options in the Workflows.

### Configure webform

The webform is actually configured for a custom made options for the University of cologne. If you want to use with your own parameters, you need to modify the options names in:

* [forms.py](OCscheduler/scheduleForm/forms.py)
* [views.py](OCscheduler/scheduleForm/views.py)
* [xml_scheduler.py](OCscheduler/scheduleForm/xml_scheduler.py)

The option names are in the start workflow to start a task in Opencast, also you have to change in the last file the name of the

### Restart apache and enter to the application

Restart apache using `$ sudo systemctl restart httpd`. After restart enter to the webpage using `<hostname>/oc-toolbox/scheduler`

# Troubleshooting

## The site shows errors

* Look the apache error log `$ sudo tail /var/log/httpd/error_log` if there is some configuration error

* Enable the [Django debug mode](https://docs.djangoproject.com/en/2.2/ref/settings/#debug), with this you can found more easy the error.

# Apendix

## How to install mod WSGI for python 3.x in Centos 7

mod_wsgi, the WSGI server that uses apache, install from `pip3` to have python 3.x compability.

```console
$ pip3 install mod_wsgi
$ sudo rm /etc/httpd/conf.modules.d/10-wsgi.conf
$ sudo cp /usr/local/bin/mod_wsgi-express /usr/bin/
$ sudo mod_wsgi-express install-module > /etc/httpd/conf.modules.d/02-wsgi.conf
```

**Please note:** it can be installed directly from the Centos 7 repository, unfortunately, this version is only for Python 2.x and it will not work with applications made for Python 3.x

repository: mliradelc/OCscriptToolbox

repo_name: mliradelc/OCscriptToolbox


text:
---
layout:     post
title:      原子操作与内存屏障
subtitle:   C++的leveldb中的实例
date:       2018-12-12
author:     tingjieee
header-img: img/post-bg-memory-barriers.png
catalog: true
tags:
    - atomic
    - memory barriers
---

> 不使用锁做多线程的同步，用原子操作和内存屏障来替换

```

template<typename Key, class Comparator>
void SkipList<Key,Comparator>::Insert(const Key& key) {
  // TODO(opt): We can use a barrier-free variant of FindGreaterOrEqual()
  // here since Insert() is externally synchronized.
  Node* prev[kMaxHeight];
  Node* x = FindGreaterOrEqual(key, prev);

  // Our data structure does not allow duplicate insertion
  assert(x == nullptr || !Equal(key, x->key));

  int height = RandomHeight();
  if (height > GetMaxHeight()) {
    for (int i = GetMaxHeight(); i < height; i++) {
      prev[i] = head_;
    }
    //fprintf(stderr, "Change height from %d to %d\n", max_height_, height);

    // It is ok to mutate max_height_ without any synchronization
    // with concurrent readers.  A concurrent reader that observes
    // the new value of max_height_ will see either the old value of
    // new level pointers from head_ (nullptr), or a new value set in
    // the loop below.  In the former case the reader will
    // immediately drop to the next level since nullptr sorts after all
    // keys.  In the latter case the reader will use the new node.
    max_height_.NoBarrier_Store(reinterpret_cast<void*>(height));
  }

  x = NewNode(key, height);
  for (int i = 0; i < height; i++) {
    // NoBarrier_SetNext() suffices since we will add a barrier when
    // we publish a pointer to "x" in prev[i].
    x->NoBarrier_SetNext(i, prev[i]->NoBarrier_Next(i));
    prev[i]->SetNext(i, x);
  }
}
```

```
inline void NoBarrier_Store(void* v) {
  rep_.store(v, std::memory_order_relaxed);
}
```

path: /_posts/2018-12-12-来自level中的原子操作与内存屏障.md


text:
# TransPyData

[![PyPI version](https://badge.fury.io/py/transpydata.svg)](https://badge.fury.io/py/transpydata)
[![PyPI version](https://img.shields.io/github/license/salpreh/transpydata.svg)](https://img.shields.io/github/license/salpreh/transpydata.svg)

**A minimal framework for managing migrations**

---

## Overview
TransPyData implements a generic pipeline to perform migrations. It has 2 main components. First one is `TransPy` class, which executes the migration pipeline according to a configuration. Second the _data services_ implementations (`IDataInput`, `IDataProcess` and `IDataOutput`), this services manages how data is gathered, processed and sent to the new destination.

### TransPy
The `TransPy` class manages the migration pipeline. It needs to be provided with an instance of:
- `IDataInput`: Manages the gathering of source data.
- `IDataProcess`: Manages data transformation and filtering prior to pass it to the data output.
- `IDataOutput`: Manages data sending to the new destination.

_**NOTE**: Data services overview below_

Apart from the data services there are other optional configurations:
```python
trans_py = TransPy()

config = {
  'datainput_source': [], # If working with single record pipeline this should be an iterable of data to feed IDataInput
  'datainput_by_one': False, # Enable single record pipeline on input
  'dataprocess_by_one': False, # Enable single record pipeline on processing
  'dataoutput_by_one': False, # Enable single record pipeline on output
}
trans_py.configure(config)
```

The values in the snippet are the defaults, so by default the migration will move all migration data through the pipeline at once.

#### All processing mode
When all data services have the "_by\_one_" flag to `False` the migration will move all data at once through the pipeline. So the `TransPy` instance will call the method `get_all` of `IDataInput` configured to get all input data, with the response will call `process_all` of `IDataProcess`, and with the response of `IDataProcess` will call `send_all` of `IDataOutput`. Finally a list with `IDataOutput` results is returned by `TransPy`.

#### Single record mode
If "_by\_one_" flags are `True` the data are "_queried_" by one and moved through all the pipeline. The `IDataOutput` return are accumulated and returned as list at the end of the processing, so the `TransPy` return type is the same.

There are some additional cases, what if ***datainput*** and ***dataprocess*** are in "_by\_one_" mode and dataoutput not? In this case the data is gathered and processed one by one, at the end of processing (`IDataProcess`) the results are accumulated and the `IDataOutput` is called with all data. Similar case when ***dataprocess*** and ***dataoutput*** are in "_by\_one_" mode, data is gathered all at once and then piped one by one through `IDataProcess` and `IDataOutput`.

### Data services
_under construction_

## Getting started
To start a migration create an instance of `TransPy` and configure it. At least instances of `IDataInput`, `IDataProcess` and `IDataOutput` needs to be provided. Prior to starting the migration the data services might need to be configured too. Here is an code example:

```python
import json

from transpydata import TransPy
from transpydata.config.datainput.MysqlDataInput import MysqlDataInput
from transpydata.config.dataprocess.NoneDataProcess import NoneDataProcess
from transpydata.config.dataoutput.RequestDataOutput import RequestDataOutput

def main():
    # Configure imput
    mysql_input = MysqlDataInput()

    config = {
        'db_config': {
            'user': 'root',
            'password': 'TryingTh1ngs',
            'host': 'localhost',
            'port': '3306',
            'database': 'migration'
        },
        'get_one_query': None, # We'll go with all query
        'get_all_query': """
            SELECT s.staff_Id, s.staff_name, s.staff_grade, m.module_Id, m.module_name
            FROM staff s
            LEFT JOIN teaches t ON s.staff_Id = t.staff_Id
            LEFT JOIN module m ON t.module_Id = m.module_Id
        """,
        'all_query_params': {} # No where clause, no interpolation
    }
    mysql_input.configure(config)

    # Configure process
    none_process = NoneDataProcess()

    # Configure output
    request_output = RequestDataOutput()
    request_output.configure({
        'url': 'http://localhost:8008',
        'req_verb': 'POST',
        'headers': {
            'content-type': 'application/json',
            'accept-encoding': 'application/json',
            'x-app-id': 'MT1'
        },
        'encode_json': True,
        'json_response': True
    })

    # Configure TransPy
    trans_py = TransPy()
    trans_py.datainput = mysql_input
    trans_py.dataprocess = none_process
    trans_py.dataoutput = request_output

    res = trans_py.run()
    print(json.dumps(res))

if __name__ == '__main__':
    main()
```

Full working example could be found at `examples/mysql_to_http/`, there is a [docker-compose](https://docs.docker.com/compose/gettingstarted/#step-6-re-build-and-run-the-app-with-compose) to launch an instance of mysql and a webserver.

## Custom data services
For now you can check the interfaces `IDataInput`, `IDataProcess` and `IDataOutput` to see what needs to be implemented in a custom data service.

_(I'll improve this section in the future)_

repository: salpreh/transpydata

branch_name: refs/heads/develop

repo_name: salpreh/transpydata


text:
<img src="https://raw.githubusercontent.com/wiki/akiyosi/goneovim/images/GoNeovim.png" width="250" align="top" >

---

[![Join the chat at https://gitter.im/goneovim/community](https://badges.gitter.im/goneovim/community.svg)](https://gitter.im/goneovim/community)
[![Go Report Card](https://goreportcard.com/badge/github.com/akiyosi/goneovim)](https://goreportcard.com/report/github.com/akiyosi/goneovim)
![GitHub Releases](https://img.shields.io/github/downloads/akiyosi/goneovim/v0.4.4/total)

*GoNeovim* is a Neovim GUI written in Go, using a [Qt binding for Go](https://github.com/therecipe/qt).
This repository forked from the original [Gonvim](https://github.com/dzhou121/gonvim) for the purpose of maintenance and enhancement.

## Features

* Fast
* Cross-platform
* Markdown Preview
* Minimap
* Smooth scroll
* Fuzzy Finder
* Workspace feature which manages multiple nvim
* External File Explorer
* Transparent window
* Indent guide
* Independent font settings per window (alpha stage)
* Support display ligatures
* Support InputMethod Editor
* Desktop Notification of the messages
* Remote attachment

## Screenshots

* Workspaces, external file explorer
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/workspaces-fileexplorer.png)
* Fuzzy Finder
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/fuzzyfinder.png)
* Markdown preview
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/markdown-preview.png)
* Minimap
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/minimap.png)
* Indentguide, display ligatures(Fira Code)
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/indentguide.png)
* Transparent app window, Transparent message window
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/transparent.png)
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/transparent-message.png)
* Independent font settings per window
![](https://raw.githubusercontent.com/wiki/akiyosi/goneovim/screenshots/font-setting-per-window.png)

## Requirements
* Neovim (v0.4.2 or later)

See [Installing Neovim](https://github.com/neovim/neovim/wiki/Installing-Neovim)

## Getting Started
Pre-built packages for Windows, MacOS, and Linux are found at the [Releases](https://github.com/akiyosi/goneovim/releases) page.

## Usage

See [wiki](https://github.com/akiyosi/goneovim/wiki/Usage)

## ToDo

* Add test

* Improve startup time

* Add tree view for external file explorer

* Improve Imput Method Editor(IME) feature

In the current implementation, it is not possible to highlight the keyword being converted in the input method input. At the moment I have no idea about how to improve this

* Keyword filtering feature in external file explorer

* Support GPU rendering

* Support neovim ui `ext_statusline`

## Development

* [Development](https://github.com/akiyosi/goneovim/wiki/Development)

## Similar projects

* [Gnvim](https://github.com/vhakulinen/gnvim)
* [Veonim](https://github.com/veonim/veonim)

## Credits

* Gonvim was created by dzhou121 ([https://github.com/dzhou121/gonvim](https://github.com/dzhou121/gonvim))

repository: tssm/goneovim

repo_name: tssm/goneovim


text:
# Summary Portals

Use a combination of inheritance and [control structures](../syntax/control-structures.md), in particular `for` and `endfor`, to build multi-server portals with minimal configuration.

![](./images/summary-portals.png)

[![](../images/button.png)](https://apps.axibase.com/chartlab/3230deb6/1)

```ls
list servers = awsswgvml001, nurswgvml003, nurswgvml009
[widget]
    type = chart
    metric = nmon.cpu_total.busy%
    for server in servers
[series]
   entity = @{server}
   endfor
```

When the list includes elements with multiple fields, such as hostname, IP address, location, or function, use the `var` array instead of `list` to print out field values as tooltips or properties.

![](./images/summary-portals-1.png)

[![](../images/button.png)](https://apps.axibase.com/chartlab/b657e69d)

This example displays how a `var` array incorporates server properties displayed in legend tooltip on mouseover.

As an alternative to specifying list elements manually, lists can be retrieved from the server using FreeMarker expressions.

`getResourcesForGroup(group_id, [list of product codes])`:

Return the list of agents collecting data. If the group contains hosts with agents, they are traversed to the agent level to return the list of agents. For example, if the groups contains hosts `ABC` (ITM Linux) and `CDE.axibase.com` (SCOM), the method returns agent identifiers: `abc:LX` and `Microsoft.Window.Computer:CDE.axibase.com`.

```ls
list resources = ${getResourcesForGroup("linux")?join(",")}
list resources = ${getResourcesForGroup("windows_server_2008")?join(",")}
```

`getHostsForGroup(group_id [, list of product codes])`:

Return list of hosts. If the group contains agents, they are traversed up the tree to return hosts.

```ls
list hosts = ${getHostsForGroup("scom-itm_group", "LZ")?join(",")}
```

If the group contains agents with different product codes, address specifics using a `if` or `endif` condition based on the agent name, or the method can executed multiple times by filtering the group by different product codes.

```ls
[widget]
  type = chart
  title = Memory Usage for Linux and Windows Servers
  #retrieve SCOM agents first
  list resources = ${getResourcesForGroup("scom-itm_group", "01")?join(",")}
  for rsc in resources
    [series]
      table = Microsoft.Windows.Server.2008.Monitoring_Memory
      attribute = % Committed Bytes In Use
      entity = @{rsc}
  endfor
  #retrieve Linux agents second
  list resources = ${getResourcesForGroup("scom-itm_group", "LZ")?join(",")}
  for rsc in resources
    [series]
      table = KLZ_VM_Stats
      attribute = Memory_Used_Pct
      entity = @{rsc}
endfor
```

The Table widget is the most compact method of displaying many metrics together.

![](./images/summary-portals2.png)

[![](../images/button.png)](https://apps.axibase.com/chartlab/bb65c060)

repository: Arthasasyan/charts

gha_language: Vue

repo_name: Arthasasyan/charts