The sos convert
command allows you to convert from .sos
to some other formats including ipynb
(Jupyter notebook), HTML
and MD
(markdown), and from .ipynb
to .sos
. You can get a list of converters using command
!sos convert -h
The convert
command uses file extension and an option --to
to determine the converter to use, and allows you to convert to a file or print the output to standard output. For example, you can use command
% sos convert myscript.sos myscript.html
to convert a sos script to a HTML file, or
% sos convert myscript.sos --to html
to write the HTML file to standard output.
If you would like to know available parameters for a particular converter, you can use option -h
!sos convert myscript.sos --to html -h
The sos
to html
converter converts .sos
script to HTML format. It can be either written to a HTML file, or to standard output if option --to html
is specified without a destination filename.
!sos convert ../examples/update_toc.sos update_toc.html
The converter also accepts a number of parameters (as shown above). The raw
parameter adds a URL to filename in the HTML file so that you can link to the raw .sos
file from the .html
output. The linenos
adds line numbers, and style
allows you to choose from a number of pre-specified styles. Finally, the view
option would open the resulting HTML file in a browser.
For example,
sos convert ../examples/update_toc.sos --to html --view --style xcode
would show a HTML file as
You can convert an existing SoS script to the .ipynb
format using command
$ sos convert myscript.sos myscript.ipynb
and open the resulting notebook from the web interface.
Depending on how the sos file was written (or converted from .ipynb
file), sos takes different approach in splitting content of the script into cells of ipython notebook. More specifically,
%cell
, sos would split the sos script according to %cell
, and restore proper metadata (e.g. kernel used for each cell) and execution index. Such a .sos
file is usually exported from command sos convert ipynb sos --all
.The resulting .ipynb
files have only input code and markdown cells. However, you can execute the notebook from command line if you add an -e
(or --execute
) option to the converter. That is to say, if you execute
$ sos convert myscript.sos myscript.ipynb --execute
You would get a notebook with both input and output cells, as if you have opened the non-executed ipynb
file and selected Cell -> Run all
.
You can print out a .sos
script on to the terminal with syntax highlighting. For example, command
% sos convert ../examples/update_toc.sos --to term
would produce
This converter is still in experimental stage and you are welcome to improve the style of output MD files.
A Jupyter notebook can contain markdown cell and code cell with different kernels, and a sos cell might or might not contain a real sos step (with section header).
You can save a Jupyter notebook with SoS kernel to a SoS script using File -> Download As -> SoS
from the browser, or using command
$ sos convert myscript.ipynb myscript.sos
The conversion process will export the workflow defined in the jupyter notebook in the resulting .sos
file, ignoring all cell magics, non-sos cells, and sos cells that do not start with section headers. The resulting .sos
file is a proper SoS workflow and can be executed by the sos
command in batch mode.
If you would like to keep most of the information of the Jupyter notebook, you can convert the notebook using option --all
(or -a
),
$ sos convert myscript.ipynb myscript.sos --all
This option will export each cell with a %cell
magic and record meta data in the .sos
file. The resulting file can be converted back to ipynb
format with minimal lose of information (without result), but might not be able to be executed in batch mode.
This command essentially calls command jupyter nbconvert --to html
to convert notebook to HTML format. In addition to standard and third-party (e.g. template from hide code Jupyter extension) Jupyter templates, you can use a SoS provided template called sos-report
to convert the Jupyter notebook to a static HTML file with only markdown and selected ouptput cells (cells with report_cell
tag, output of cells with report_output
tag, suitable as a report, and a button to unhide all details input and output cells except for those marked by a scratch
tag.
This command essentially calls command jupyter nbconvert --to pdf
to convert notebook to PDF format.
This command essentially calls command jupyter nbconvert --to markdown
to convert notebook to Markdown format.
This command converts a Jupyter notebook in another kernel to a SoS notebook, with the original kernel language as the language of each code cell.
If the original notebook has kernel python3
, an option --python3-to-sos
can be used to convert code cells to SoS
.
This converter will copy the input notebook to output if the notebook is already a SoS notebook. However, if an option --inplace
is specified, it will overwrite the original notebook with the converted one.
Note that if you already have a non-SoS notebook opened in Jupyter, you can simply use
Kernel
-> Change kernel
-> sos
to convert the kernel to SoS. You can then use the global language selector to select the appropriate default langauge for the notebook and re-execute the notebook to set the language to each cell.
RMarkdown is a Markdown format with inline and block code executed by RStudio. SoS can convert RMarkdown files to a SoS notebook but the conversion is limited. In particular, SoS converts the block code to SoS code cells and the rest into Markdown cells, and leave inline expressions untouched. It also ignores all code options.
Note that SoS does not support string interpolation in markdown cells so inline expressions in RMarkdown are not converted. If you need to insert R expression in markdown, you can convert the paragraph into a code cell and use R to print the evaluated string to standard output (use cat
function). Then you can add a %render
magic to the beginning of the cell so to render the outputed markdown text.


Code Quiz!
Start
High Scores
Question
Answer A
Answer B
Answer C
Answer D
Next
Game Over!
Enter your initials!
Save
Play Again
High Scores
Time Is Up!
Play Again
High Scores
High Scores
Play Again


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/roption.20name.html ---
@Mario Carneiro What's the meaning behind the name of the type roption
? Sorry if I'm missing something obvious :p
I literally forget. I changed the name to part
in the recent CPP paper, and I need to update mathlib
because I didn't want to explain the crazy name
r
is for ... raw? right? no idea
haha, fair enough. part
does seem clearer. A friend of mine guessed "recursive option"
I seem to recall raw. Maybe in contrast with pfun which has an argument, roption is more minimalist
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Normally, an HTML or an XHTML file has the
<!DOCTYPE>
declaration which states the language level of the used in the source code from the file. This language level is used
as a standard against which the contents of the file are validated. If an HTML or an XHTML file does not have a
<!DOCTYPE>
declaration, the contents of the file will be validated against the default standard
(schema). In the Default HTML language level area, choose the default schema to
validate HTML and XHTML files without a <!DOCTYPE>
declaration. The available options are:
Note that code completion is available in this field: press Ctrl+Space to see the list of suggested URLs.


Welcome!
This is Prosimii, my seventh design for OSWD. The design was inspired by a former homepage of Ximian, a company that produces enterprise-level Linux products. The name is a play on the word simian (which sounds like Ximian). Prosimii is one of the suborders of the order Primates, and includes the lemur, loris and tree shrew genera.
I guess this design is most suitable as an introductory or sitemap page to a website. These boxes range in size from one-quarter to full-screen width, so they can accomodate information of various sizes. An alternative layout is also included in this template.
I hope you like this design. You are free to use this template for any purpose you wish — personal, commercial or otherwise — without any obligation. This template is donated to the public domain (ie: no rights reserved) and, as such, does not come with any express support, guarantee or limitation.
Latest News
Submitted to OSWD24 Oct 04
Template (finally!) submitted to OSWD.
Annoying bug fixed28 Apr 04
Thanks to Raphaél Enrici for spotting it!
Standards
Prosimii is 100% compliant with XHTML 1.0 Strict and uses CSS. [Validate XHTML]
Unlike this design’s inspiration, no tables have been used to layout elements and text.
Stylesheet
An external stylesheet dictates the format and layout of text in this design.
Thus, website-wide design changes can be achieved by editing only the stylesheet.
Compatibility
Prosimii’s stylesheet is more robust and comprehensive than my previous designs.
This design has been tested for consistent rendering in Gecko (Mozilla Firefox 0.10.1), Opera (7.01) and Internet Explorer (6.0).
Accessibility
Prosimii tentatively conforms to the WCAG double A rating and § 508 guidelines for web content accessibility.
Additionally, most document metrics (lengths, widths and spacings) are font-size relative.


The world is full of different people, cultures and cities. Thanks to today’s technology, we have access to a great amount of information about the most remote places—right in our pocket. We can use tools to explore any street, see its surroundings, but what about the feeling? What does that small village in Norway feel like? The Sound City Project is one step closer to bringing you that feeling. By using a combination of a panoramic view with high quality 3D sound recorded using a custom “soundhead” prototype, you can select places on a map and give yourself a better idea of what it’s like to actually be there.
The Sound City Project is a personal project created by David Vale in collaboration with Rick van Mook and Caco Teixeira. This is an ongoing project, so feel free to contact us for any further details or just to say hello.


{% extends "base.html" %} {% block page_content %}
Before you can access this site your account will need to be approved by an administrator.


For the header file:
Paste the code below into your
programing.html file which is located in
posts folder, make sure to put the code below the most recent post.
For the post file:
Download and move this file to
posts/programing or, copy the text below and then paste it into an
.html document called
postTitle.html,
then move the folder to
posts/programing


§490:9-339 Priority subject to subordination. This article does not preclude subordination by agreement by a person entitled to priority. [L 2000, c 241, pt of §1]


Cube.io
Solve your Rubik's cube just by taking a photo of it
Select the puzzle you would like to solve
2x2
3x3
4x4
Megaminx
Pyraminx
Skewb
Square-1


Spincast is now used to build itself!
How is this possible? Well, if you don't know yet, a Maven build process contains multiple phases, one of them is compile and this is where Spincast is actually compiled. But there are many other important phases following that one, and this is where the compiled Spincast classes can be used!
In spincast-website
's pom.xml,
during the prepare-package
phase, we declare exec-maven-plugin
plugins to dynamically call some Spincast classes.
One of those classes is SpincastMavenPreparePackage,
for example. Since Spincast is already compiled at this point, we can use it! In this particular case, we use Spincast to create a
modified version of the Quick Start application, to zip it, and then to add it to the website's "public" folder, where it can be downloaded.
If you look at SpincastMavenPreparePackage
's code, you'll see that in its main(...)
method we start a
Guice context using the SpincastDefaultGuiceModule
Spincast's Guice module, exactly as we could do for a real
Spincast application! This allows us to access all the functionalities, all the utilities provided by Spincast.
For example, here we use a Spincast utility to zip the Quick Start sources. Note that we don't start a HTTP server though,
since we don't need it!
In summary, instead of using a maven-antrun-plugin
plugin for example, and having to
deal with cumbersome XML logic when some custom steps are required during a build, we simply start a Guice context and we have
full access to Spincast.
We will probably use that little trick in a reusable Maven Mojo plugin one day, but for build steps that are specific to a project, this approach works very well.


The isilmar ports collection can also be used to install software completely in user land, without ever needing increased privileges. This page describes such a user-land installation.
Isilmar-ports take the directory layout they follow from environment variables, so you better set them once and for all. Also, to make your installation useful, you have to add the place you install to into your path.
In the following copy-and-paste example we assume that your shell is the bash (the most popular one on GNU/Linux systems) and use the following layout. Everything we do (apart from setting these environment variables) happens in a directory software in your home directory. In that directory, we have a directory install where everything is installed into, a directory distfiles where upstream sources are collected and a directory ports for the ports tree. Hence you might add the following to your .bashrc.
export PORTSDIR=$HOME/software/ports export DISTDIR=$HOME/software/distfiles export PREFIXBASE=$HOME/software/install export PATH=$PREFIXBASE/bin:$PATH
Don't forget to source the configuration again, to have these variables set (for fresh shells this will happen automatically once you've changed your configuration file).
$ . ~/.bashrc
The isilmar ports use stow(1) as packaging tool and the usual way to get a your ports tree is to do a checkout of a local copy of the ports cvs repository. So stow(1) and cvs(1) are needed; fortunately, they are both provided by the ports tree. However, that means that the first installation is slightly different, to avoid the chicken-egg problem.
Note:All files hosted on https://www.linta.de/ports are also hosted on http://www.linta.de/ports, and vice versa.
Get your ports tree as shell archive.
$ mkdir -p $PORTSDIR $ cd $PORTSDIR $ wget https://www.linta.de/ports/ports.shar $ /bin/sh ports.shar $ rm ports.shar
Then install the port stow by hand.
$ cd $PORTSDIR/stow && make install clean $ cd $PREFIXBASE/stow $ ./stow-*/bin/stow stow-*/
Then the port cvs can be installed in the usual way.
$ $PORTSDIR/bin/reinstallport cvs
Now it is time to replace the bootstrap ports tree by a proper cvs checkout. In that way, you have full history and can also choose to use older versions.
First remove the bootstrap ports tree
$ rm -rf $PORTSDIR
Then download the cvs repository. In our example we place it in software/isilmar in your home directory; any other place works equally well, so adapt to your needs.
$ mkdir -p $HOME/software/isilmar $ cd $HOME/software/isilmar $ wget https://www.linta.de/ports/ports.cvs.tar.gz $ tar xvfz ports.cvs.tar.gz $ rm ports.cvs.tar.gz $ CVSROOT=`pwd`/ports.cvs $ cd $HOME/software # the parent of $PORTSDIR $ cvs -d $CVSROOT checkout ports
Now you can walk around in $PORTSDIR and use the usual cvs commands, like log or update to learn about the history of a port or get an older version.
$PORTSDIR/bin/reinstallport units


001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.math.linear; 019 020 021 022 /** 023 * An interface to classes that implement an algorithm to calculate the 024 * Singular Value Decomposition of a real matrix. 025 *
 026 * The Singular Value Decomposition of matrix A is a set of three matrices: U, 027 * Σ and V such that A = U × Σ × VT. Let A be 028 * a m × n matrix, then U is a m × p orthogonal matrix, Σ is a 029 * p × p diagonal matrix with positive or null elements, V is a p × 030 * n orthogonal matrix (hence VT is also orthogonal) where 031 * p=min(m,n). 032 *
 033 *
This interface is similar to the class with similar name from the 034 * JAMA library, with the 035 * following changes:
 036 *
 037 *
the norm2 method which has been renamed as {@link #getNorm() 038 * getNorm},
 039 *
the cond method which has been renamed as {@link 040 * #getConditionNumber() getConditionNumber},
 041 *
the rank method which has been renamed as {@link #getRank() 042 * getRank},
 043 *
a {@link #getUT() getUT} method has been added,
 044 *
a {@link #getVT() getVT} method has been added,
 045 *
a {@link #getSolver() getSolver} method has been added,
 046 *
a {@link #getCovariance(double) getCovariance} method has been added.
 047 *
 048 * @see MathWorld 049 * @see Wikipedia 050 * @version $Revision: 928081 $ $Date: 2010-03-26 23:36:38 +0100 (ven. 26 mars 2010) $ 051 * @since 2.0 052 */ 053 public interface SingularValueDecomposition { 054 055 /** 056 * Returns the matrix U of the decomposition. 057 *
U is an orthogonal matrix, i.e. its transpose is also its inverse.
 058 * @return the U matrix 059 * @see #getUT() 060 */ 061 RealMatrix getU(); 062 063 /** 064 * Returns the transpose of the matrix U of the decomposition. 065 *
U is an orthogonal matrix, i.e. its transpose is also its inverse.
 066 * @return the U matrix (or null if decomposed matrix is singular) 067 * @see #getU() 068 */ 069 RealMatrix getUT(); 070 071 /** 072 * Returns the diagonal matrix Σ of the decomposition. 073 *
Σ is a diagonal matrix. The singular values are provided in 074 * non-increasing order, for compatibility with Jama.
 075 * @return the Σ matrix 076 */ 077 RealMatrix getS(); 078 079 /** 080 * Returns the diagonal elements of the matrix Σ of the decomposition. 081 *
The singular values are provided in non-increasing order, for 082 * compatibility with Jama.
 083 * @return the diagonal elements of the Σ matrix 084 */ 085 double[] getSingularValues(); 086 087 /** 088 * Returns the matrix V of the decomposition. 089 *
V is an orthogonal matrix, i.e. its transpose is also its inverse.
 090 * @return the V matrix (or null if decomposed matrix is singular) 091 * @see #getVT() 092 */ 093 RealMatrix getV(); 094 095 /** 096 * Returns the transpose of the matrix V of the decomposition. 097 *
V is an orthogonal matrix, i.e. its transpose is also its inverse.
 098 * @return the V matrix (or null if decomposed matrix is singular) 099 * @see #getV() 100 */ 101 RealMatrix getVT(); 102 103 /** 104 * Returns the n × n covariance matrix. 105 *
The covariance matrix is V × J × VT 106 * where J is the diagonal matrix of the inverse of the squares of 107 * the singular values.
 108 * @param minSingularValue value below which singular values are ignored 109 * (a 0 or negative value implies all singular value will be used) 110 * @return covariance matrix 111 * @exception IllegalArgumentException if minSingularValue is larger than 112 * the largest singular value, meaning all singular values are ignored 113 */ 114 RealMatrix getCovariance(double minSingularValue) throws IllegalArgumentException; 115 116 /** 117 * Returns the L2 norm of the matrix. 118 *
The L2 norm is max(|A × u|2 / 119 * |u|2), where |.|2 denotes the vectorial 2-norm 120 * (i.e. the traditional euclidian norm).
 121 * @return norm 122 */ 123 double getNorm(); 124 125 /** 126 * Return the condition number of the matrix. 127 * @return condition number of the matrix 128 */ 129 double getConditionNumber(); 130 131 /** 132 * Return the effective numerical matrix rank. 133 *
The effective numerical rank is the number of non-negligible 134 * singular values. The threshold used to identify non-negligible 135 * terms is max(m,n) × ulp(s1) where ulp(s1) 136 * is the least significant bit of the largest singular value.
 137 * @return effective numerical matrix rank 138 */ 139 int getRank(); 140 141 /** 142 * Get a solver for finding the A × X = B solution in least square sense. 143 * @return a solver 144 */ 145 DecompositionSolver getSolver(); 146 147 }


| oak:index | nt:unstructured | | |
| indexName | oak:QueryIndexDefinition | | lucene async index for full text,property,sorting etc... |
| compatVersion | long | | By default Oak uses older Lucene index implementation which does not supports property restrictions, index time aggregation etc. To make use of this feature set it to 2. |
| type | String | | set to lucene. Lucene index can be used to evaluate property constraints, full text constraints, path restrictions and sorting. |
| async | String | | set to async. sends the index update process to a background thread. it might lag behind in reflecting the current repository state while performing the query. |
| name | String | | Captures the name of the index which is used while logging |
| blobSize | long | | Size in bytes used for splitting the index files when storing them in NodeStore. |
| evaluatePathRestrictions | boolean | | If enabled the index can evaluate path restrictions. |
| includedPaths | String [] | / | Oak 1.0.14, 1.2.3 List of paths which should be included in indexing. |
| excludedPaths | String [] | empty | Oak 1.0.14, 1.2.3 List of paths which should be excluded from indexing. |
| maxFieldLength | long | 10000 | Numbers of terms indexed per field. |
| codec | String | | By default if the index involves fulltext indexing then Oak Lucene uses OakCodec which disables compression. Due to this the index size may grow large. To enable compression you can set the codec to Lucene46. Refer to OAK-2853 for details. |
| indexPath | String | | Path of the index definition in the repository. To speed up the indexing with CopyOnWrite you would also need to set indexPath in index definition to the path of index in the repository. For e.g. if your index is defined at /oak:index/lucene then value of indexPath should be set to /oak:index/lucene. This would enable the indexer to perform any read during the indexing process locally and thus avoid costly read from remote. For more details refer to OAK-2247. This feature can be enabled via Lucene Index provider service configuration |
| functionName | String | | Name to be used to enable index usage with native query support. |
| queryPaths | | | https://issues.apache.org/jira/browse/OAK-2599 |
| reindex | boolean | | |
| persistence | String | | To store the Lucene index in the file system, in the Lucene index definition node, set the property persistence to file, and set the property path to the directory where the index should be stored. |
| path | String | | To store the Lucene index in the file system, in the Lucene index definition node, set the property persistence to file, and set the property path to the directory where the index should be stored. |
| indexRules | nt:unstructured | | |
| ruleName | nt:unstructured | | An index configuration can define one or more indexingRules for different nodeTypes.The ruleName will be nodeName like nt:base |
| inherited | boolean | true | Determines if the rule is applicable on exact match or can be applied if match is done on basis of nodeType inheritance |
| indexNodeName | boolean | false | since Oak 1.0.20, 1.2.5 If set to true then index would also be created for node name. This would enable faster evaluation of queries involving constraints on Node name. For example:- select [jcr:path] from [nt:base] where NAME() = 'kite' |
| includePropertyTypes | String [] | | Applicable when index is enabled for fulltext indexingFor full text index defaults to include all typesString array of property types which should be indexed. |
| costPerExecution | Double | | For each query, the overhead is one operation. For each entry in the index, the cost is one. |
| costPerEntry | Double | | For each query, the overhead is one operation. For each entry in the index, the cost is one. |
| properties | nt:unstructured | | Each index rule consist of one ore more property definition defined under properties. |
| propertyName | nt:unstructured | | Can be any name generally provide property name. |
| name | String | | Property name. If not defined then property name is set to the node name. If isRegexp is true then it defines the regular expression only to immediate property. Can also be set to a relative property. |
| propertyIndex | boolean | | Whether the index for this property is used for equality conditions, ordering, and is not null conditions. |
| isRegexp | boolean | | " If set to true then property name would be interpreted as a regular expression and the given definition would be applicable for matching property names. Note that expression should be structured such that it does not match ‘/’. .* - This property definition is applicable for all properties of given node jcr:content/metadata/.* - This property definition is applicable for all properties of child node jcr:content/metadata" |
| nodeScopeIndex | boolean | | "Control whether the value of a property should be part of fulltext index. That is, you can do a jcr:contains(., ‘foo’) and it will return nodes that have a string property that contains the word foo. Example //element(*, app:Asset)[jcr:contains(., ‘image’)]" |
| boost | double | | since Oak 1.2.5 If the property is included in nodeScopeIndex then it defines the boost done for the index value against the given property name. |
| index | boolean | | Determines if this property should be indexed. Mostly useful for fulltext index where some properties need to be excluded from getting indexed. |
| useInExcerpt | boolean | | Controls whether the value of a property should be used to create an excerpt. The value of the property is still full-text indexed when set to false, but it will never show up in an excerpt for its parent node. If set to true then property value would be stored separately within index causing the index size to increase. So set it to true only if you make use of excerpt feature |
| analyzed | boolean | | "Set this to true if the property is used as part of contains. Example //element(*, app:Asset)[jcr:contains(type, ‘image’)]" |
| ordered | boolean | | "If the property is to be used in order by clause to perform sorting then this should be set to true. This should be set to true only if the property is to be used to perform sorting as it increases the index size. Example //element(*, app:Asset)[jcr:contains(type, ‘image’)] order by @size" |
| type | String | | JCR Property type. Can be one of Date, Boolean, Double or Long. Mostly inferred from the indexed value. However in some cases where same property type is not used consistently across various nodes then it would recommened to specify the type explicitly. |
| nullCheckEnabled | boolean | | " Since 1.0.12 If the property is checked for is null then this should be set to true. This should only be enabled for nodeTypes which are not generic as it leads to index entry for all nodes of that type where this property is not set. _//element(*, app:Asset)[not(jcr:content/@excludeFromSearch)] It would be better to use a query which checks for property existence or property being set to specific values as such queries can make use of index without any extra storage cost." |
| useInSuggest | boolean | | since Oak 1.1.17, 1.0.15 controls from which properties terms to be used for suggestions will be taken. |
| useInSpellcheck | boolean | | since Oak 1.1.17, 1.0.13 controls from which properties terms to be used for spellcheck corrections will be taken. |
| facets | boolean | | since Oak 1.3.14 "used for retrieving facets, in order to do so the property facets must be set to true on the property definition." |
| facets | nt:unstructured | | since Oak 1.3.14 By default ACL checks are always performed on facets by the Lucene property index however this can be avoided by setting the property secure to false in the facets configuration node. |
| secure | boolean | | |
| aggregates | nt:unstructured | | to include the contents of descendant nodes into a single node to easier search on content that is scattered across multiple nodes. |
| ruleName | nt:unstructured | | An index configuration can define one or more aggregates for different nodeTypes.The ruleName will be nodeName like nt:base |
| reaggregateLimit | long | 5 | (See JCR-2989 for details). |
| aggregateNodeInclude | nt:unstructured | | |
| path | String | | "Path pattern to include. Example jcr:content - Name explicitly specified * - Any child node at depth 1 */* - Any child node at depth 2 |
| primaryType | String | | Restrict the included nodes to a certain type. The restriction would be applied on the last node in given path |
| relativeNode | boolean | | Boolean property indicates that query can be performed against specific node |
| analyzers | nt:unstructured | | @since Oak 1.2.0 |
| default | nt:unstructured | | |
| class | String | | Example:- org.apache.lucene.analysis.standard.StandardAnalyzer |
| luceneMatchVersion | String | | To confirm to specific version specify it via luceneMatchVersion otherwise Oak would use a default version depending on version of Lucene it is shipped with. Ex:- LUCENE_47 |
| stopwords | nt:file | | |
| charFilters | nt:unstructured | | The filters needs to be ordered |
| HTMLStrip | | | |
| Mapping | | | |
| tokenizer | nt:unstructured | | The filters needs to be ordered |
| name | | | |
| filters | nt:unstructured | | The filters needs to be ordered |
| LowerCase | | | |
| Stop | nt:unstructured | | |
| words | | | |
| stopx.txt | nt:file | | one or more file nodes. x can be 1 to n |
| PorterStem | nt:unstructured | | |
| Synonym | nt:unstructured | | |
| synonyms | | | |
| synonym.txt | nt:file | | one or more file nodes. x can be 1 to n |
| pathText | nt:unstructured | | |
| tika | nt:unstructured | | |
| maxExtractLength | long | | |
| config.xml | nt:file | | https://github.com/apache/jackrabbit-oak/blob/trunk/oak-lucene/src/main/resources/org/apache/jackrabbit/oak/plugins/index/lucene/tika-config.xml |
| suggestion | nt:unstructured | | |
| suggestUpdateFrequencyMinutes | long | | |
| suggestAnalyzed | boolean | | Analyzed suggestions can be enabled by setting suggestAnalyzed property to true |
| indexName | oak:QueryIndexDefinition | | Synchronous property index |
| type | String | | set to property. Is useful whenever there is a query with a property constraint that is not full-text. |
| propertyNames | Name[] | | index one property per index. (If multiple properties are indexed within one index, then the index contains all nodes that has either one of the properties, which can make the query less efficient, and can make the query pick the wrong index.) |
| unique | boolean | | a uniqueness constraint on this property is added. Ensure you set declaringNodeTypes, otherwise all nodes of the repository are affected (which is most likely not what you want), and you are not able to version the node. |
| declaringNodeTypes | Name[] | | the index only applies to a specified node type |
| reindex | boolean | | |
| includedPaths | String[] | / | The index is only used if the query has a path restriction that is not excluded, and part of the included paths. |
| excludedPaths | String[] | none | The index is only used if the query has a path restriction that is not excluded, and part of the included paths. |
| entryCount | Long | | the estimated number of path entries in the index, to override the cost estimation (a high entry count means a high cost). |
| keyCount | Long | | the estimated number of keys in the index, to override the cost estimation (a high key count means a lower cost and a low key count means a high cost when searching for specific keys; has no effect when searching for “is not null”). |
| reindex-async | boolean | | pushing the property index updates to a background job and when the indexing process is done, the property definition will be switched back to a synchronous updates mode. need to start the dedicated background job via a jmx call to the PropertyIndexAsyncReindex#startPropertyIndexAsyncReindex MBean. future |
| indexName | oak:QueryIndexDefinition | | This is deprecated. The Ordered index is an extension of the Property index. It keeps the order of the indexed property persistent in the repository. |
| type | String | | set to ordered. Is useful speed up queries with "ORDER BY", equality and range clauses. |
| propertyNames | Name | | It has to be a simple value list of type Name. |
| async | String | | The index can be defind as asynchronous by setting the async property to async. |
| direction | String | ascending | The direction of the sorting can be configured, by adding the direction property. It can have a value of ascending or descending. |
| reindex | boolean | | The reindex flag which if set to true, will trigger a full content re-index. |
| indexName | oak:QueryIndexDefinition | | The purpose of the Solr index is mainly full-text search but it can also be used to index search by path, property restrictions and primary type restrictions. This means the Solr index in Oak can be used for any type of JCR query. |
| type | String | | set to solr. |
| async | String | | set to async |
| reindex | boolean | | The reindex flag which if set to true, will trigger a full content re-index. |


Apache Cassandra 4.0 has made several improvements to streaming. Streaming is the process used by nodes of a cluster to exchange data in the form of SSTables. Streaming of SSTables is performed for several operations, such as:
Streaming in Cassandra 4.0 is based on Non-blocking Input/Output (NIO) with Netty (CASSANDRA-12229). It replaces the single-threaded (or sequential), synchronous, blocking model of streaming messages and transfer of files. Netty supports non-blocking, asynchronous, multi-threaded streaming with which multiple connections are opened simultaneously. Non-blocking implies that threads are not blocked as they don’t wait for a response for a sent request. A response could be returned in a different thread. With asynchronous, connections and threads are decoupled and do not have a 1:1 relation. Several more connections than threads may be opened.
Pre-4.0, during streaming Cassandra reifies the SSTables into objects. This creates unnecessary garbage and slows down the whole streaming process as some SSTables can be transferred as a whole file rather than individual partitions. Cassandra 4.0 has added support for streaming entire SSTables when possible (CASSANDRA-14556) for faster Streaming using ZeroCopy APIs. If enabled, Cassandra will use ZeroCopy for eligible SSTables significantly speeding up transfers and increasing throughput. A zero-copy path avoids bringing data into user-space on both sending and receiving side. Any streaming related operations will notice corresponding improvement. Zero copy streaming is hardware bound; only limited by the hardware limitations (Network and Disk IO ).
In benchmark tests Zero Copy Streaming is 5x faster than partitions based streaming. Faster streaming provides the benefit of improved availability. A cluster’s recovery mainly depends on the streaming speed, Cassandra clusters with failed nodes will be able to recover much more quickly (5x faster). If a node fails, SSTables need to be streamed to a replacement node. During the replacement operation, the new Cassandra node streams SSTables from the neighboring nodes that hold copies of the data belonging to this new node’s token range. Depending on the amount of data stored, this process can require substantial network bandwidth, taking some time to complete. The longer these range movement operations take, the more the cluster availability is lost. Failure of multiple nodes would reduce high availability greatly. The faster the new node completes streaming its data, the faster it can serve traffic, increasing the availability of the cluster.
Zero copy streaming is enabled by setting the following setting in cassandra.yaml
.
stream_entire_sstables: true
By default zero copy streaming is enabled.
Zero copy streaming is used if all partitions within the SSTable need to be transmitted. This is common when using LeveledCompactionStrategy
or when partitioning SSTables by token range has been enabled. All partition keys in the SSTables are iterated over to determine the eligibility for Zero Copy streaming.
When enabled, it permits Cassandra to zero-copy stream entire eligible SSTables between nodes, including every component. This speeds up the network transfer significantly subject to throttling specified by stream_throughput_outbound_megabits_per_sec
.
Enabling this will reduce the GC pressure on sending and receiving node. While this feature tries to keep the disks balanced, it cannot guarantee it. This feature will be automatically disabled if internode encryption is enabled. Currently this can be used with Leveled Compaction.
Throttling would reduce the streaming speed. The stream_throughput_outbound_megabits_per_sec
throttles all outbound streaming file transfers on a node to the given total throughput in Mbps. When unset, the default is 200 Mbps or 25 MB/s.
stream_throughput_outbound_megabits_per_sec: 200
To run any Zero Copy streaming benchmark the stream_throughput_outbound_megabits_per_sec
must be set to a really high value otherwise, throttling will be significant and the benchmark results will not be meaningful.
The inter_dc_stream_throughput_outbound_megabits_per_sec
throttles all streaming file transfer between the datacenters, this setting allows users to throttle inter dc stream throughput in addition to throttling all network stream traffic as configured with stream_throughput_outbound_megabits_per_sec
. When unset, the default is 200 Mbps or 25 MB/s.
inter_dc_stream_throughput_outbound_megabits_per_sec: 200
Zero Copy Streaming streams entire SSTables. SSTables are made up of multiple components in separate files. SSTable components streamed are listed in Table 1.
Table 1. SSTable Components
| SSTable Component | Description |
| Data.db | The base data for an SSTable: the remaining components can be regenerated based on the data component. |
| Index.db | Index of the row keys with pointers to their positions in the data file. |
| Filter.db | Serialized bloom filter for the row keys in the SSTable. |
| CompressionInfo.db | File to hold information about uncompressed data length, chunk offsets etc. |
| Statistics.db | Statistical metadata about the content of the SSTable. |
| Digest.crc32 | Holds CRC32 checksum of the data file size_bytes. |
| CRC.db | Holds the CRC32 for chunks in an uncompressed file. |
| Summary.db | Holds SSTable Index Summary (sampling of Index component) |
| TOC.txt | Table of contents, stores the list of all components for the SSTable. |
Custom component, used by e.g. custom compaction strategy may also be included.
Repair with nodetool repair
involves streaming of repaired SSTables and a repair preview has been added to provide an estimate of the amount of repair streaming that would need to be performed. Repair preview (CASSANDRA-13257) is invoke with nodetool repair --preview
using option:
-prv, --preview
It determines ranges and amount of data to be streamed, but doesn’t actually perform repair.
The streaming of the different keyspaces for bootstrap and rebuild has been parallelized in Cassandra 4.0 (CASSANDRA-4663).
Range Streamer picks unique nodes to stream data from when number of replicas in each DC is three or more (CASSANDRA-4650).  Without the optimization, some node can be picked up to stream more data than others. This patch allows to select dedicated node to stream only one range.
This will increase the performance of bootstrapping a node and will also put less pressure on nodes serving the data. This does not affect if N < 3 in each DC as then it streams data from only 2 nodes.
It is important to know the type or purpose of a certain stream. Version 4.0 (CASSANDRA-13064) adds an enum
to distinguish between the different types of streams. Stream types are available both in a stream request and a stream task. The different stream types are:
CASSANDRA-12510 guards against decommission that will drop # of replicas below configured replication factor (RF), and adds the --force
option that allows decommission to continue if intentional; force decommission of this node even when it reduces the number of replicas to below configured RF.


Meet Aura
Characters
Curious how accurate we are about you?
Take the test and find out!
Take the TestTests taken so far.
“I can’t believe how accurate this was... Word for word. I never felt so understood.
I thought I was the only one of my kind.”
“I was honestly shocked how accurate it was. I teared up a bit because it was like there was a person looking inside my mind and telling me what they saw.”
“It is undeniably eerie how the description and traits nailed me so thoroughly.
Wish I had known about my personality type 20 years ago, that would have saved me much grief.”


Portland, Oregon Air Pressure
Atmospheric pressure determines the types of weather that are likely to occur.
Generally high pressure is associated with clear and sunny weather,
while low pressure is associated with cloudy, rainy, or snowy weather.
Portland's highest recorded pressure was 31.09 on Feb 1, 1920.
Portland's lowest recorded pressure was 28.40 on Dec 2, 1942.


Toggle navigation
Menu
MHS Physics
Resources
Welcome to Physics
Let's discover the secrets of the universe
Course Objectives
Mr Premvaree's Timeline
Tweets by mrpremvaree


sort-table.js is a pure JavaScript (no dependencies) solution to make HTML Tables sortable.
The basic table sorting functionality can be added simply by including sort-table.js anywhere in your document and adding CSS class 'js-sort-table' to all tables you want sortable. It works like this:
| Row | Strings | Dates |
|---|---|---|
| 1 | Shoe | 9/11/2001 |
| 2 | Twine | 12/7/1941 |
| 3 | Thread | 1/20/2008 |
| 4 | Rope | 9/17/1862 |
| 5 | Yarn | 8/6/1945 |
| 6 | Nylon | 7/4/1776 |
sort-table.js uses CSS classes to track its state. This allows for advanced styling by applying styles to the classes below.
Also demonstrated in the table below is the handling of
thead
-less tables. If no thead
is found in
the table, one will be created and the first row will be added to it.
| Row | CSS class | Description |
| 1 | js-sort-table | Apply this to the table to indicate sortability |
| 2 | js-sort-asc | This is applied to the table when sorting ascending |
| 3 | js-sort-desc | Likewise, this indicates descending sort |
| 4 | js-sort-0 | The zero-based number of the sorted column |
| 5 | js-sort-string | By default, string sorting is used, making this optional |
| 6 | js-sort-date | When applied to a cell in the header, column will be interpreted as dates |
| 7 | js-sort-number | This tells sort-table to treat the column as numbers |
| 8 | js-sort-last | Set this class to a TH to sort by the last word in each cell |
| 9 | js-sort-input | If your table has form inputs, this allows sorting by their value |
There are a few supported data types, and adding new ones is very simple. To indicate the data type a column should be sorted as, add its CSS class to the column's header (TH) tag. String sorting is the default type. Below are demonstrated the included types.


Click on an element to replay its animation
u-animatedSlideInTop
u-animatedSlideInRight
u-animatedSlideInBottom
u-animatedSlideInLeft
u-animatedScaleIn
u-animatedScaleInTop
u-animatedScaleInRight
u-animatedScaleInBottom
u-animatedScaleInLeft
u-animatedFadeIn
u-animatedSlideOutTop
u-animatedSlideOutRight
u-animatedSlideOutBottom
u-animatedSlideOutLeft
u-animatedScaleOut
u-animatedScaleOutTop
u-animatedScaleOutRight
u-animatedScaleOutBottom
u-animatedScaleOutLeft
u-animatedFadeOut
u-animatedPulse
u-animatedShake
| Options | Default value | Notes |
|---|---|---|
| duration |
fast: 100ms standard: 250ms slow: 350ms |
|
| translate | 3rem | Translation length of slinding effects |
| function | ease-out | |
| iteration-count | 5 | Iterations of pulse effect |
Edit animations theme in commons.override.scss
:
$commons: (
animations: (
durations: (
fast: 100ms,
standard: 250ms,
slow: 350ms
),
translate: 3rem
)
);
$theme: _set($theme, "commons", $commons);


Toni Braxton Hangs Out With Victoria Beckham And Calls Her A ‘Genius And Glam Goddess’
by Alexis StoneToni Braxton made her fans excited on social media after she posted a photo in which she’s hanging out with Victoria Beckham. Check out the photo below.
‘Enjoyed spending time with this mad genius & glam goddess, thank u for coming to the show! 🦋 ♥ @victoriabeckham 🇬🇧’ Toni captioned her post.
Someone said this about Victoria: ‘She needs to crack a smile, always looking miserable.’
One other commenter liked Toni’s look better than Victoria’s: ‘@tonibraxton you look 10 years younger than VB ( and she looks fabulous too!)  You look wayyyyy younger than her Toni. You’re just naturally gorgeous. 😩’
Another commenter said: ‘@tonibraxton I feel deprived lol can you do this show in LA so I can travel to see you again…. it’s affordable 💞💞’
One follower told Toni: ‘Please don’t stay away too long Toni! Your show was AMAZE INCREDIBLE!!! 💖U 👑’
Other than this, Toni shared a couple of new pics from a concert. She’s on stage, and Tamar Braxton’s sister looks amazing.
Toni’s fans agree, and they made sure to praise this lady in the comments, and Tamar did the same thing.
Both sisters are living their best lives, and just in case you’re wondering how’s Tamar doing these days, well, she seems to be really happy with her son Logan and BF David Adefeso.


--- layout: master title: Home description: Home Page for Jekyll Metro Theme ---
A full-stack developer who is passionate about well thought out design and UI's that navigate with ease. A perfect blend of creativity, energy, communication, clarity and restraint. An avid gamer, film nerd, and urban-rec enthusiast.'
First Rails app mocked after Rotten Tomatoes website (except only with good films)
An app to share songs through embedded youtube videos and then vote on favorties. My first implementation of Sinatra and ActiveRecord. Styled with Bootsrap.js
A app that utilizes Canvas to allow users to collaborate on comic strips together. Heavy on the front end and UI experience.
{{ post.content | strip_html | truncatewords: 10 }}


| ${ index+1 } |
${ r_book.room_details.room_name } |
${ r_book.room_details.room_no } |
${ r_book.room_details.hotel_details.hotel_name } |
${ r_book.cart_details.user_details.user_name } |
${ r_book.check_in_date } |
${ r_book.check_out_date } |
${ r_book.total_day } |
${ r_book.static_offer_price } |
|
PORZ${bookingIdDateFormat(r_book.cart_details.books[0].created_at, "fullDate")}${r_book.cart_details.books[0].booking_id} |


After looking at the different options for the tech blog this week, I decided to tackle the topic of Object Oriented Programming(OOP) vs. Functional Programming(FP) because I really had zero clue about it. I would say now, after reading up about it on various blogs, forums, and the ExplainLikeImFive subreddit that I know slightly more than zero.
Before I even begin my sad attempt at approaching this topic, I'd like to talk about a few glaring issues I noticed during my research. One, this is not a cut and dry answer. There is some debate out there as to what the exact definition of these two types of programming is. Secondly, I realized before I could even begin to understand their differences, I needed to research a few other terms that were being thrown around during the various discussions including composition, mutability, reduction, recursiveness, and stateless. For the sake of time, I will not be discussing these terms in detail here, but they should definitely be looked-up.
Ok, on to the main event. The first difference to understand between OOP and FP is that the former's basic unit of composition is, as you might have guessed, an object, and the latter's is a function.  Well, an object is a complex structure that is mutable, while a function contains data that should be immutable and can take on other functions as its input.
Here are a few more differences. Functional programming stays away from loops, using a recursive method of calling itself instead. OOP can also do this as well, however. Also, OOP is also reliant on functions as well, so I think when people refer to FPas the opposite of OOP, there are oversimplifying a complex issue.
After writing this post, I definitely feel that it is too early in my programming career to understand the major strengths and weaknesses of OOP and FP, and look forward to getting a better grasp on the situation as my experience grows.


Test for association between a set of SNPS/genes and continuous or binary outcomes by including variant characteristic information and using (weighted) score statistics.
| Version: | 1.0 |
| Depends: | CompQuadForm |
| Published: | 2013-12-14 |
| Author: | Jianping Sun, Yingye Zheng, and Li Hsu |
| Maintainer: | Jianping Sun <jsun at fhcrc.org> |
| License: | LGPL-2 | LGPL-2.1 | LGPL-3 [expanded from: LGPL (≥ 2.0)] |
| NeedsCompilation: | no |
| CRAN checks: | MiST results |
| Reference manual: | MiST.pdf |
| Package source: | MiST_1.0.tar.gz |
| Windows binaries: | r-devel: MiST_1.0.zip, r-release: MiST_1.0.zip, r-oldrel: MiST_1.0.zip |
| OS X binaries: | r-release: MiST_1.0.tgz, r-oldrel: MiST_1.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=MiST to link to this page.


Before Change
// set up the defaults parameters stored in the kw dictionary
keys = [
("model",""),
("mode","align_mode"),
("scale",""),
("factor",""),
("tree_calc",""),
("gap_weight",""),
("restricted_chars",""),
("classes",""),
("sonar",""),
("scorer",""),
("gop","")
]
kw = {}
for k,d in keys:
if k in keywords and not d:
kw[k] = keywords[k]
elif not d:
kw[k] = rcParams[k]
else:
kw[k] = rcParams[d]
model = kw["model"]
// create a string with the current parameters
self.params = "_".join(
After Change
// set up the defaults parameters stored in the kw dictionary
kw = dict(
model = rcParams["model"],
mode = rcParams["align_mode"],
scale = rcParams["align_scale"],
factor = rcParams["align_factor"],
tree_calc = rcParams["align_tree_calc"],
restricted_chars = rcParams["restricted_chars"],
classes = rcParams["align_classes"],
sonar = rcParams["align_sonar"],
scorer = rcParams["align_scorer"],
gop = rcParams["align_gop"],
gap_weight = rcParams["align_gap_weight"]
)
kw.update(keywords)
// define the model for convenience
model = kw["model"]


steal('can/util', 'can/construct', function (can) {
Create organized, memory-leak free, rapidly performing, stateful controls with declarative eventing binding. Used when creating UI controls with behaviors, bound to elements on the page.
steal('can/util', 'can/construct', function (can) {
var bind = function (el, ev, callback) {
can.bind.call(el, ev, callback);
return function () {
can.unbind.call(el, ev, callback);
};
},
isFunction = can.isFunction,
extend = can.extend,
each = can.each,
slice = [].slice,
paramReplacer = /\{([^\}]+)\}/g,
special = can.getObject("$.event.special", [can]) || {},
delegate = function (el, selector, ev, callback) {
can.delegate.call(el, selector, ev, callback);
return function () {
can.undelegate.call(el, selector, ev, callback);
};
},
binder = function (el, ev, callback, selector) {
return selector ?
delegate(el, can.trim(selector), ev, callback) :
bind(el, ev, callback);
},
basicProcessor;
var Control = can.Control = can.Construct(
/**
* @add can.Control
*/
/**
* @static
*/
{
This function pre-processes which methods are event listeners and which are methods of
the control. It has a mechanism to allow controllers to inherit default values from super
classes, like can.Construct
, and will cache functions that are action functions (see _isAction
)
or functions with an underscored name.
setup: function () {
can.Construct.setup.apply(this, arguments);
if (can.Control) {
var control = this,
funcName;
control.actions = {};
for (funcName in control.prototype) {
if (control._isAction(funcName)) {
control.actions[funcName] = control._action(funcName);
}
}
}
},
_shifter: function (context, name) {
var method = typeof name === "string" ? context[name] : name;
if (!isFunction(method)) {
method = context[method];
}
return function () {
context.called = name;
return method.apply(context, [this.nodeName ? can.$(this) : this].concat(slice.call(arguments, 0)));
};
},
Return true
if methodName
refers to an action. An action is a methodName
value that
is not the constructor, and is either a function or string that refers to a function, or is
defined in special
, processors
. Detects whether methodName
is also a valid method name.
_isAction: function (methodName) {
var val = this.prototype[methodName],
type = typeof val;
return (methodName !== 'constructor') &&
(type === "function" || (type === "string" && isFunction(this.prototype[val]))) &&
!! (special[methodName] || processors[methodName] || /[^\w]/.test(methodName));
},
Takes a method name and the options passed to a control and tries to return the data necessary to pass to a processor (something that binds things).
For performance reasons, _action
is called twice:
{window} foo
), it returns null. For non-templated method names it returns the event binding data. That data is added to this.actions
. _action: function (methodName, options) {
If we don’t have options (a control
instance), we’ll run this later. If we have
options, run can.sub
to replace the action template {}
with values from the options
or window
. If a {}
template resolves to an object, convertedName
will be an array.
In that case, the event name we want will be the last item in that array.
paramReplacer.lastIndex = 0;
if (options || !paramReplacer.test(methodName)) {
var convertedName = options ? can.sub(methodName, this._lookup(options)) : methodName;
if (!convertedName) {
!steal-remove-start
can.dev.log('can/control/control.js: No property found for handling ' + methodName);
!steal-remove-end
return null;
}
var arr = can.isArray(convertedName),
name = arr ? convertedName[1] : convertedName,
parts = name.split(/\s+/g),
event = parts.pop();
return {
processor: processors[event] || basicProcessor,
parts: [name, parts.join(" "), event],
delegate: arr ? convertedName[0] : undefined
};
}
},
_lookup: function (options) {
return [options, window];
},
An object of {eventName : function}
pairs that Control uses to
hook up events automatically.
processors: {},
A object of name-value pairs that act as default values for a control instance
defaults: {}
}, {
/**
* @prototype
*/
Setup is where most of the Control’s magic happens. It performs several pre-initialization steps:
this.element
$.data
delegate
The final step is to return pass the element and prepareed options, to be used in init
. setup: function (element, options) {
var cls = this.constructor,
pluginname = cls.pluginName || cls._fullName,
arr;
Retrieve the raw element, then set the plugin name as a class there.
this.element = can.$(element);
if (pluginname && pluginname !== 'can_control') {
this.element.addClass(pluginname);
}
Set up the ‘controls’ data on the element. If it does not exist, initialize it to an empty array.
arr = can.data(this.element, 'controls');
if (!arr) {
arr = [];
can.data(this.element, 'controls', arr);
}
arr.push(this);
The this.options
property is an Object that contains configuration data
passed to a control when it is created (new can.Control(element, options)
)
The options
argument passed when creating the control is merged with can.Control.defaults
in [can.Control.prototype.setup setup].
If no options
value is used during creation, the value in defaults
is used instead
this.options = extend({}, cls.defaults, options);
this.on();
return [this.element, this.options];
},
This binds an event handler for an event to a selector under the scope of this.element
If no options are specified, all events are rebound to their respective elements. The actions,
which were cached in setup
, are used and all elements are bound using delegate
from this.element
.
on: function (el, selector, eventName, func) {
if (!el) {
this.off();
var cls = this.constructor,
bindings = this._bindings,
actions = cls.actions,
element = this.element,
destroyCB = can.Control._shifter(this, "destroy"),
funcName, ready;
for (funcName in actions) {
Only push if we have the action and no option is undefined
if ( actions.hasOwnProperty(funcName) ) {
ready = actions[funcName] || cls._action(funcName, this.options, this);
if( ready ) {
bindings.control[funcName] = ready.processor(ready.delegate || element,
ready.parts[2], ready.parts[1], funcName, this);
}
}
}
Set up the ability to destroy
the control later.
can.bind.call(element, "removed", destroyCB);
bindings.user.push(function (el) {
can.unbind.call(el, "removed", destroyCB);
});
return bindings.user.length;
}
if el
is a string, use that as selector
and re-set it to this control’s element…
if (typeof el === 'string') {
func = eventName;
eventName = selector;
selector = el;
el = this.element;
}
…otherwise, set selector
to null
if (func === undefined) {
func = eventName;
eventName = selector;
selector = null;
}
if (typeof func === 'string') {
func = can.Control._shifter(this, func);
}
this._bindings.user.push(binder(el, eventName, func, selector));
return this._bindings.user.length;
},
Unbinds all event handlers on the controller. This should only be called in combination with .on()
off: function () {
var el = this.element[0],
bindings = this._bindings;
if( bindings ) {
each(bindings.user || [], function (value) {
value(el);
});
each(bindings.control || {}, function (value) {
value(el);
});
}
Adds bindings.
this._bindings = {user: [], control: {}};
},
Prepares a control
for garbage collection.
First checks if it has already been removed. Then, removes all the bindings, data, and
the element from the Control instance.
destroy: function () {
if (this.element === null) {
!steal-remove-start
can.dev.warn("can/control/control.js: Control already destroyed");
!steal-remove-end
return;
}
var Class = this.constructor,
pluginName = Class.pluginName || Class._fullName,
controls;
this.off();
if (pluginName && pluginName !== 'can_control') {
this.element.removeClass(pluginName);
}
controls = can.data(this.element, "controls");
controls.splice(can.inArray(this, controls), 1);
can.trigger(this, "destroyed");
this.element = null;
}
});
Processors do the binding. This basic processor binds events. Each returns a function that unbinds when called.
var processors = can.Control.processors;
basicProcessor = function (el, event, selector, methodName, control) {
return binder(el, event, can.Control._shifter(control, methodName), selector);
};
Set common events to be processed as a basicProcessor
each(["change", "click", "contextmenu", "dblclick", "keydown", "keyup",
"keypress", "mousedown", "mousemove", "mouseout", "mouseover",
"mouseup", "reset", "resize", "scroll", "select", "submit", "focusin",
"focusout", "mouseenter", "mouseleave",
"touchstart", "touchmove", "touchcancel", "touchend", "touchleave",
"inserted","removed",
"dragstart", "dragenter", "dragover", "dragleave", "drag", "drop", "dragend"
], function (v) {
processors[v] = basicProcessor;
});
return Control;
});


Roberto the SlackBot
Table of Contents
Overview
Project Management Board
This project utilizes GitHub Workflow / Projects boards. You can visit this board and see agile practices in action by clicking the link below. Workflow Board
Software Requirements
Please visit this link to view the Software Requirements
Installation
First clone down a copy of the repository from here Repo Link.
$ git clone https://github.com/401Mid/project/
Next move into project directory and install all required dependencies.
$ cd project/
$ npm install
Before we can get to running this application locally, you will need to create yourself a classic Slack Bot and assign it to your workspace. Please refer to the Slack API Documentation.
To see follow the steps we used to set up this bot checkout these set up instructions. This will go over creating a slack app, setting up initial scope, enabling listening events, and adding the appropriate slash commands required to run this project.
Once you have completed the initial creation of your slack app, we can move into assigning some environment variables. In this project we use dotenv
library to hold these values. Start off by creating this file.
$ touch .env # Note the . before env as this is a hidden file
After it is created you will need to add the following key value pairs
BOT_USER_TOKEN: # This is the Bot User OAuth token provided to you after creating a new Slack App
SLACK_SIGNING_SECRET: # Slack Signing Secret provided to you after creating a new Slack App
PORT: # Port number that you wish to use when running locally
Almost there! You have completed the initial setup of this bot application, leading into deploying and using this bot.
Deployment
These instructions will over how to deploy it locally utilizing localhost
and a tunneling library called ngrok
. In order for you to successfully run this bot locally you will need some way for outside users to access your localhost
url. ngrok
Exposes a local webserver to the internet. Please review the official documentation at the link below.
VSCode has several extensions that utilize ngrok and are quite intuitive. Our team used the following extension.
- ngrok for VSCode by philnash
Once you have set up ngrok to work with you, we can finally launch the bot! Lets start the application locally
$ npm start # Run from the root of your file
Set up ngrok to work on your the PORT
you are running your server on. Ngrok
will provide you an exposed web URL for use to hit your server. This URL will need to be added to your Slack App. There are two places this will need to be added:
Event Subscriptions
: Update the Request URL to match yourngrok
exposed URL.Slash Commands
: Each slash command will need the request url to match yourngrok
exposed URL.
 You can now travel over to your Slack Workspace where you have installed your bot and start using the built-in commands.
Commands
These are the currently available slash commands for this bot application.
NOTE:
Ensure you have read through all the Installation instructions to make sure you have set up your Slack App to work with these commands.
Timer
- Slash Command:
/settimer
- Description:
- Set timer - helps to count time, the time starts count from the moment when user set it. Also user can set timer for someome else.
- Optional parameter can be @username if user wants to set timer for another user.
- Example: These commands are executed within the Slack Workspace where the bot is installed.
/settimer @kshydlovska your timer is set. @someone, @kshydlovska just started timer for you.
- Slash Command:
/gettimer
- Description:
- Get timer - helps get current spent time whout stopping timer. Also any user can get current time for themself or someome else.
- Optional parameter can be @username if user wants to get timer for another user.
- Example: These commands are executed within the Slack Workspace where the bot is installed.
/gettimer @kshydlovska your current time is. @someone, your current time is.
- Slash Command:
/stoptimer
- Description:
- Stop timer - stops timer and send response with time user spent
- Optional parameter can be @username if user wants to stop timer for another user, but user can stop timer for another user ony if he set it. In case if user set timer for themself nobody else can't stop it.
- Example: These commands are executed within the Slack Workspace where the bot is installed.
/stoptimer @kshydlovska spent (and actualy time spent). @someone spent (and actualy time spent). Sorry @kshyd you cannot perform this operation.
Countdown
- Slash Command:
/countdown
- Description:
- Prompts the user to enter the time they would like to set a countdown for, in HH:MM:SS format.
- HH:MM:SS is converted to milliseconds behind the scenes and the Bot will alert the user when their input time ahas elapsed
- If the user inputs an invalid time, the Bot will prompt the user to try again and remind the user of the format needed.

 It looks like you are trying to set a countdown, [@username]. Try again, and please use HH:MM:SS format. For example: 00:30:00 will set a countdown for 30 minutes.
DieRoll
- Slash Command:
/dieroll
- Description:
- Simulates rolling a six die.  The outcome is visualized by a die emoji.
- Optional parameter include changing the number of sides a die has and the number of times the die is rolled.
- Example: These commands are executed within the Slack Workspace where the bot is installed.
'/dieroll' The default die has possible outcomes between 1 and 6. This die is rolled once. The outcome is the value of the single number rolled. '/dieroll 8 10' The die now has possible outcomes between 1 and 8. This die is rolled 10 times. The outcome is the average of all rolls.
CoinFlip
- Slash Command:
/coinflip
- Description:
- Simulates flipping a two-sided coin. Heads or Tails. The outcome will state the number of coins flipped, and the percentage ratio of the win.
- Optional parameter that can be passed in to indicate how many flips to occur.
- Example: These commands are executed within the Slack Workspace where the bot is installed.
/coinflip A coin was flipped 1 time and the results were 100.0% HEADS. /coinflip 100 A coin was flipped 50 times and the results were 56.0% TAILS.
UML Data Model
Approach to Testing
In this application we are utilizing a testing library called jest
. We have automated unit and integration tests for the current state of this application.
NOTE:
Anything you change / add on this application may or may not break these tests and that is the risk you have to take. Currently this application is configured to run the following command
$ npm test
# OR
$ npm watch
JSDocs
Throughout our project we have utilized Docstrings and are using a third party library called JSDocs
. This library will produce an browsable HTML file, that contains all the functions, classes, and methods that this application has to offer. To get these files you can execute the following script.
$ npm run build-documentation
This will create a ./public
folder within the root of the project. Inside you will find all the created HTML files from this project. You can now launch index.html
from your favorite browser!
Authors
- Software Developer: Cas Ibrahim
- Software Developer: Kateryna Shydlovska
- Software Developer: Joseph Zabaleta
- Software Developer: Reagan Roberts
Collaborations
- none
License
This project is under the MIT License.


| Field | Value |
|---|---|
| ReceivedOn | {{goodsReceivedAudit.receivedOn | date:'medium'}} |
| TxnNumber | {{goodsReceivedAudit.txnNumber}} |
| TypeReceipt | {{goodsReceivedAudit.typeReceipt}} |
| QtyReceived | {{goodsReceivedAudit.qtyReceived}} |
| receivedBy | {{goodsReceivedAudit.receivedById}} |
| supplier | {{goodsReceivedAudit.supplierId}} |
| purchaseOrder | {{goodsReceivedAudit.purchaseOrderId}} |
| product | {{goodsReceivedAudit.productId}} |


CLUELESS A film review by James Berardinelli Copyright 1995 James Berardinelli
RATING (0 TO 10): 5.7
United States, 1995 U.S. Availability: wide release 7/19/95 Running Length: 1:38 MPAA Classification: PG-13 (Double entendres, profanity) Theatrical Aspect Ratio: 1.85:1
Cast: Alicia Silverstone, Paul Rudd, Stacey Dash, Brittany Murphy, Dan Hedaya, Wallace Shawn, Twink Kaplan Director: Amy Heckerling Producers: Scott Rudin and Robert Lawrence Screenplay: Amy Heckerling Cinematography: Bill Pope Music: David Kitay U.S. Distributor: Paramount Pictures
As appealing as Alicia Silverstone is (and she possesses that ethereal "star quality" which is sadly lacking in many of today's up- and-coming performers), her presence can't rescue this aptly-titled movie. Part pop satire and part teen comedy, CLUELESS shows its unevenness early, runs out of steam about midway through, then sputters to a conclusion that takes an eternity to arrive at. Like THE BRADY BUNCH MOVIE, this film contains some amusing moments, but not enough to justify a feature-length running time. Charm this thin doesn't take long to wear off.
Silverstone (THE CRUSH) leads the cast as ultra-Valley girl Cher -- a 16-year old with a very rich daddy (Dan Hedaya, best known as Carla's ex on CHEERS) who uses a computer to assist with her wardrobe selection and would rather argue with her teachers for better grades than do assignments to earn them. Cher loves to talk, as is amply demonstrated by a series of endless voice-overs that occur throughout the film. Her best friend, Dionne (Stacey Dash), is equally as superficial, so it's not hard to understand why the two get along so well. CLUELESS looks at a number of Cher's "escapades": her attempts to turn a sweet-but-uncool schoolmate (Brittany Murphy) into the epitome of popularity, her matchmaking between two teachers (Twink Kaplan and respected character actor Wallace Shawn), and her search for true love. Essentially, nothing much happens -- the film is an excuse to plunge into the life of a caricature that Silverstone makes more appealing than one might reasonably expect.
Much of the humor is sophomoric. Moments of inventive comedy (such as an unexpected ride on the freeway) are far between. Writer/director Amy Heckerling creates a tone so light that it borders on vapid. On the other hand, some of the dialogue is clever, and there are a few memorable lines. Ren and Stimpy are described as "way existential". In the spirit of political correctness, female virgins are called "hymenally challenged". And Cher likens her hopeless quest for a high school boyfriend to "searching for meaning in a Pauly Shore movie."
Overall, though, that's all CLUELESS amounts to: a group of modestly amusing, satirical vignettes tied together by one-liners. The picture doesn't offer any big laughs, and there's never any character identification -- Heckerling's FAST TIMES AT RIDGEMONT HIGH, a top-level teen picture, worked in large part because the protagonists seemed real. In that case, Cameron Crowe's script aimed for fun and feeling. Here, the latter is sacrificed for the former, and the result doesn't leave much of an impression. In part because the film is so inoffensive (no sex, nudity, or violence), it has no edge. CLUELESS is the cinematic equivalent of cotton candy: certainly not unpleasant, but unsatisfying despite the sweet taste.
- James Berardinelli<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Aspiring Data Scientist and Web Developer specializing in both front end and backend development, along with a focus in database management.
This portoflio was created by reverse engineering a bootstrap template, and hosted using Heroku and a custom web application made with the python library Flask.
Main front end developer on the Global Terrorism Analysis project. Reverse engineered a template to fit our analysis, built and populated web pages with graphs and data write ups. Used responsive Javascript to customize the navbar to scroll to certain locations on the site and drop down. Spent a little time learning Django for the backend but ultimately due to time constraints focused 90% on front end and meeting the project goal.
Deployment still in works, github repository is here.An ETL Project (extract, transform, load) where our team manipulated a dataset on craft beers in the United States to analyze which beers were most popular, where they were being brewed, and which states produced the most craft beer. Very surface level market research that could be used to determine where to build a brewery, or what type of beer to brew in certain locations based on principles of supply and demand. My role was in the web design, and analytics. The site features a responsive navbar and drop down, made with Javascript. Everyone had a hand in trasforming our dataset with tools such as PANDAS to create multiple different dataframes in which we could graph from.
Hosted Project Website Github Repository for the projectCertification
Assosciate's Degree
Always interested in learning more and practicing the skills I use professionally. Loves working in a team environment to solve and tackle problems in a group. Always seeking to perfect and polish my skills wherever and whenever possible.
In addition to web development and database manipulation, I'm intersted in learning game and app development to express creative freedoms in my downtime.


<
|
Thoth Playing Cards (Neutral)
Minor Arcana - Clubs (Wands)
Minor Arcana - Hearts (Cups)
Minor Arcana - Spades (Swords)
Minor Arcana - Diamonds (Disks)
top
|
up


Let's have a class in "Classes for Ruby"
What is a Class?
A class is very useful and a powerful tool to be used in Ruby language. What a class does is define what an object is and define what an object can do. It is like the teacher of the classroom controlling all of the teacher's minions. A Class is always has capitalization of the first word with camel-cases there after.
Classes will do . . ?
Classes will group the code into discrete and well-categorized areas and make codes much easier to work with. Let's create a class called Animal. You begin by activating the object because Ruby is an object-oriented language and almost everything is an object. You activate the object by creating a NEW object from the class. Look below for an example.
After you activate the new object, you then assign this to a variable animal. And like we said before, everything in the class, the class has control over.
Instance Variables
Instance Variables have an "@" symbol before the variable name. This acts as an object created from the class, so that we can tell this object what to do and provide it functionality. Just like a application form, the forms all look the same, it just matters of HOW you fill out the form. That is the same as instance variable. The only downside to using the instance variable is that it cannot be called from the outside. It can only be called within the method. Luckily, we have a attribute method: reader, writer, and accessor to get and set the variable.


odsThemeBoxes
ods-widgets
The odsThemeBoxes widget enumerates the themes available on the domain by showing their pictograms and the number of datasets they contain. They require the themes setting to be configured in ODSWidgetsConfig.
themes
<ods-theme-boxes context="{CatalogContext}"> </ods-theme-boxes>
Catalog Context to pull the theme list from


{% extends "templates/partials/base.html" %} {% block content %}
Champions are not bigger and stronger than the competition, but they think differently. Start thinking like a champion
Increase your energy, jump higher and last longer. Plyometrics or cross fit? Lifting fast or slow? How to cure tendinitis? &more
Follow the drils and advice from world class players on improving your technique, strategy and beach volleyball game


OSSL_CMP_MSG_get0_header, OSSL_CMP_MSG_get_bodytype, OSSL_CMP_MSG_update_transactionID, OSSL_CMP_CTX_setup_CRM, OSSL_CMP_MSG_read, OSSL_CMP_MSG_write, d2i_OSSL_CMP_MSG_bio, i2d_OSSL_CMP_MSG_bio - function(s) manipulating CMP messages
#include <openssl/cmp.h>
OSSL_CMP_PKIHEADER *OSSL_CMP_MSG_get0_header(const OSSL_CMP_MSG *msg);
int OSSL_CMP_MSG_get_bodytype(const OSSL_CMP_MSG *msg);
int OSSL_CMP_MSG_update_transactionID(OSSL_CMP_CTX *ctx, OSSL_CMP_MSG *msg);
OSSL_CRMF_MSG *OSSL_CMP_CTX_setup_CRM(OSSL_CMP_CTX *ctx, int for_KUR, int rid);
OSSL_CMP_MSG *OSSL_CMP_MSG_read(const char *file, OSSL_LIB_CTX *libctx, const char *propq);
int OSSL_CMP_MSG_write(const char *file, const OSSL_CMP_MSG *msg);
OSSL_CMP_MSG *d2i_OSSL_CMP_MSG_bio(BIO *bio, OSSL_CMP_MSG **msg);
int i2d_OSSL_CMP_MSG_bio(BIO *bio, const OSSL_CMP_MSG *msg);
OSSL_CMP_MSG_get0_header() returns the header of the given CMP message.
OSSL_CMP_MSG_get_bodytype() returns the body type of the given CMP message.
OSSL_CMP_MSG_update_transactionID() updates the transactionID field in the header of the given message according to the CMP_CTX. This requires re-protecting the message (if it was protected).
OSSL_CMP_CTX_setup_CRM() creates a CRMF certificate request message from various information provided in the CMP context argument ctx for inclusion in a CMP request message based on details contained in ctx. The rid argument defines the request identifier to use, which typically is 0.
The subject DN included in the certificate template is the first available value of these:
The public key included is the first available value of these:
The set of X.509 extensions to include is computed as follows. If a PKCS#10 CSR is present in ctx, default extensions are taken from there, otherwise the empty set is taken as the initial value. If there is a reference certificate in ctx and contains Subject Alternative Names (SANs) and OSSL_CMP_OPT_SUBJECTALTNAME_NODEFAULT is not set, these override any SANs from the PKCS#10 CSR. The extensions are further augmented or overridden by any extensions with the same OIDs included in the ctx via OSSL_CMP_CTX_set0_reqExtensions(3). The SANs are further overridden by any SANs included in ctx via OSSL_CMP_CTX_push1_subjectAltName(3). Finally, policies are overridden by any policies included in ctx via OSSL_CMP_CTX_push0_policy(3).
OSSL_CMP_CTX_setup_CRM() also sets the sets the regToken control oldCertID for KUR messages using the issuer name and serial number of the reference certificate, if present.
OSSL_CMP_MSG_read() loads a DER-encoded OSSL_CMP_MSG from file.
OSSL_CMP_MSG_write() stores the given OSSL_CMP_MSG to file in DER encoding.
d2i_OSSL_CMP_MSG_bio() parses an ASN.1-encoded OSSL_CMP_MSG from the BIO bio. It assigns a pointer to the new structure to *msg if msg is not NULL.
i2d_OSSL_CMP_MSG_bio() writes the OSSL_CMP_MSG msg in ASN.1 encoding to BIO bio.
CMP is defined in RFC 4210.
OSSL_CMP_MSG_get0_header() returns the intended pointer value as described above or NULL if the respective entry does not exist and on error.
OSSL_CMP_MSG_get_bodytype() returns the body type or -1 on error.
OSSL_CMP_CTX_setup_CRM() returns a pointer to a OSSL_CRMF_MSG on success, NULL on error.
d2i_OSSL_CMP_MSG_bio() returns the parsed message or NULL on error.
OSSL_CMP_MSG_read() and d2i_OSSL_CMP_MSG_bio() return the parsed CMP message or NULL on error.
OSSL_CMP_MSG_write() returns the number of bytes successfully encoded or a negative value if an error occurs.
i2d_OSSL_CMP_MSG_bio() and OSSL_CMP_MSG_update_transactionID() return 1 on success, 0 on error.
OSSL_CMP_CTX_set1_subjectName(3), OSSL_CMP_CTX_set1_p10CSR(3), OSSL_CMP_CTX_set1_oldCert(3), OSSL_CMP_CTX_set0_newPkey(3), OSSL_CMP_CTX_set1_pkey(3), OSSL_CMP_CTX_set0_reqExtensions(3), OSSL_CMP_CTX_push1_subjectAltName(3), OSSL_CMP_CTX_push0_policy(3)
The OpenSSL CMP support was added in OpenSSL 3.0.
Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.


{% set title = 'Pagination' %} {% set filename = 'component-pagination.html' %} {% extends 'layouts/master.html' %} {% block content %}
Examples for showing pagination to indicate a series of related content exists across multiple pages.
Pagination with active item
Change prev and next button into icon
To add pagination with different color option, use class .pagination-{colorName}
with .pagination
class.
Fancy larger or smaller pagination? Add .pagination-lg
or
.pagination-sm
for additional sizes.
Change the alignment of pagination components with flexbox utilities.


Introduction
The app is connected with Laravel 5.5 based CMS using REST APIs, the following documentation will guide you through the process to connect the app with your backend. This guide assumes you have some experience in setting up PHP based web applications and Laravel Framework 5.5.
Setting up the server
-
Server Requirement
The server on which you are going to deploy the backend must fulfill the following requirements:
- PHP >= 7.0.0
- Mysql 5.7
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
- XML PHP Extension
-
Deploying Backend
Follow these steps:
- Extract the
cookfu.zip
on your server - For example if your domain is http://cookfu.com then you will be able to access the backend as http://cookfu.com/cookfu/public
- Extract the
-
Configuration
All the major configuration values you will need to set in .env file which is present in root folder of the accompanied source code. Following are the most important values, you may set other values in .env as well if you have experience and requirment to do so:
- App related:
- APP_NAME: Title of your app
- APP_URL: Url of your backend
- Database related:
- DB_HOST: Database host, usually it’s localhost
- DB_PORT: Database port, incase of mysql it’s usually 3306
- DB_DATABASE: Database Name
- DB_USERNAME: Database username
- DB_PASSWORD: Database password
- Push Notification related:
- FCM_SERVER_KEY
- FCM_SENDER_ID
- Email Related:
Email integration is provided with Mailgun, Amazon SES, SMTP. For more details refer to https://laravel.com/docs/5.5/mail.
If you are integrating with mailgun, you can simply set following values in .env
- MAILGUN_DOMAIN
- MAILGUN_SECRET
If you need more configuration or advance setting, you can look for keys starting with MAIL_ in .env
- Logo:
- APP_LOGO: Enter the url of your logo, this logo will be displayed in backend panel
-
Admin Notifications:
If you need to receive notification in admin panel for New Registerations, New Order etc you will need to following steps: Set following values in .env:
- PUSHER_APP_ID - Refer to https://pusher.com/
- PUSHER_APP_KEY - Refer to https://pusher.com/
- PUSHER_APP_SECRET - Refer to https://pusher.com/
- ADMIN_NOTIFICATIONS - Set to
true
- ADMIN_NOTIFICATION_CHANNELS - Set to
mail,database
- USE_QUEUE_FOR_EVENTS - Set to
false
, if you are hosting backend on VPS you may set this totrue
. Incase you set it to true you will need to enable you will have to cron job as well
- Google Maps:
- FIREBASE_API_KEY: Make sure you have enabled
Maps Javascript API
andBilling
in your https://console.cloud.google.com account as well.
- FIREBASE_API_KEY: Make sure you have enabled
-
Database
In accompanied source code you will find a sql file named chefqu_master.sql. Create the database and then import the file in your database.
-
Admin Panel
Admin panel is developed in Angular 7 and shipped in seperate folder. Normally you will not need to compile the files again for your deployment. If you are not going to make any change in Admin Panel source code, you can skip the angular compiling step. Following change in the file will still be required in any case:
- Open
public/admin/main.main.33d7d7e4287b585cb872.js.js
or if you do not see this specific file openpublic/admin/main.<some-random-code>.js
file in any editor of your choice - Update Base Url - Search for
http://opuslabs.in:9081/api/admin
and replace it with your backend url for examplehttp://cookfu.com/cookfu/public/api/admin
- Update Project Title - Search for
Cookfu
and replace it with your project title - Update Google Maps Key - Locate
GOOGLE_MAPS_API_KEY
variable in file and replace it’s value with your Google Maps Api Key - This is a just a quicker way to make ready your admin panel so that you do not have to compile whole angular project, if you want to customize source as per your requiremtn you will need to follow steps mentione below. If you do not want customization you can stop at these step.
- Open
cookfu-admin.zip
, it’s an Angualr 7 based project - If you are not familiar with Angular 7 we will suggest you to get basic idea from https://angular.io/guide/quickstart
- If you need to change api url, open
<EMAIL_ADDRESS>and update the value ofAPI_BASE_URL
variable - After making the required changes issue a command
ng build --prod
- Now angular would have created/updated the
dist
folder in root with updated compiled files - You need to copy all the files in
dist
folder to you Laravel’spublic/admin
folder. - For example
cp -r cookfu-angular/dist/* cookfu/public/admin/
assumingcookfu-angular
is your angular project folder andcookfu
is your laravel project folder
- Open
Mobile App
-
Setup Firebase and Api keys
- Login to http://console.firebase.google.com
- Click on “Add project” to add new project -> provide project name as you like and hit Create Project.
- Now you have to Register apps in this project. Click “Add app” -> choose platform Android
- Each app has its unique ID known as “Package name” or “ApplicationId”. For more info on how to name one visit https://developer.android.com/studio/build/application-id
- Enter package name as asked on firebase console(once for User’s app, Restaurant’s app and Driver’s app. ps-sequence doesnt matter).
- Set a nickname(optional, but we’ll add total of three apps so..)
- Enter your app signing certificate(Optional but important in order to make features work like social login and otp verification. here is how to have one -> https://developers.google.com/android/guides/client-auth)
- Click Register app. Upon succesful registration of app you’ll be provided with your configuration file(google-services.json) for that app.
- Next click continue or skip to proceed and Repeat this step 2 more times to register app for Restaurant’s application and Driver’s application
- Upon registering 3 applications in your firebase project you should have 3 applicationIds and 3 configuration files(google-services.json).
- Now for api keys visit https://console.cloud.google.com/cloud-resource-manager
- Select the project you just created in firebase
- Navigate to “Api and Services” section and click “ENABLE APIS AND SERVICES”
- Now Search and Enable 3 apis -> maps sdk for android, places sdk for android and directions api.
- Go to credentails and copy “Android key” and “Browser key”
-
Download/Setup Java and Android Studio
- Download Java here: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
- Download Android Studio here: https://developer.android.com/studio/ Install and restart.
-
Verify installation
- Easy steps: https://www.java.com/en/download/help/path.xml
-
Running project
- Add configuration files(google-services.json) aquired from step 1 into respective project’s app folder.
- Open Android studio -> Click on “Open an existing Android Studio project” to navigate and select project.
- Open and edit app level build.gradle file (app/build.gradle)
- Set respective applicationId also aquired from firebase console in step 1.
- Enter Directions api key(Browser key) and Geo/Maps api key(Android key)
- Lastly app’s name and colors can be changed by changing variables “app_name” and colorPrimary, colorPrimaryDark and colorAccent respectively.
- Change application’s BASE_URL with your’s in file app/src/main/java/com/verbosetech/cookfu/network/ApiUtils.java
- Android studio will be asking you to Sync project files since build.gradle is modified. Hit “Sync now”
- Done, now you can build apk from build section in navigation menu.
Note: If you are unable to understand any topic or find any topic needs more elaboration. Please raise an issue ticket at this link https://opuslabs.freshdesk.com


The following groups determine digging times. The rating can be between 1 and 3; higher ratings result in faster digging. eg:{crumbly = 2}


Today we're going to go over git, GitHub, and version control software. While these might sound foreign, don't worry! They're relatively easy concepts and we'll walk through them step by step. Version Control: What is it? Version control is a way of tracking any changes that have been made to a file, a folder, code, etc. It keeps track of any changes that have been made and stores those changes so you can go back to previous versions, correct mistakes, and more. Whenever changes have been made, version control stores a version of that file or document so you can go back to any previous versions of your file. Just like if you were playing a video game and came to a save point, you could always return to that point of the game. A common type of version control that many of us are used to is something like Google Docs that stores old versions of our documents and allows multiple users to collaborate on documents. So, to recap, the benefits of version control are: tracking and keeping a file of changes, storing previous versions of files, multiple users have access to edit one file, and merging changes from multiple users in one file. Git With It Git is a version control program that you can download onto your computer to work on files. Git allows you to copy files from online or someone else onto your local computer so you can work on them remotely. When you are done with your changes, you are able to save the version of your file and connect it to the original file, thereby changing the original version while still saving an old version and tracking all of the edits you ever made. Just like you would play a video game, get to a save point and continue playing, always knowing that if something got messed up, you could always come back to that save point. Git allows you to "push" your edits, which are known as "commits," to the file to save them, thereby altering the file. Git can also "pull" any changes that have been made to the file, so you are working on the most up-to-date version. Ultimately, Git ensures there is one concrete base file, a record of any and all changes, and that your file is the most up-to-date it can be. GitHub: Why We Love It So GitHub is a social website that utilizes an online version of git where one can store files, collaborate with others on a project, or work on code/file simultaneously. GitHub is an ideal place to store code because, just like git, it tracks all edits and changes ever made (and who made them and when!), stores old versions of code, and allows collaboration between individuals. If for any reason something goes wrong with your code, you always have a back-up version. There is also the option to copy an entire file or folder, so you can make changes to a version of code that doesn't change the original version. Developers can share, copy, tweak, and learn from each other by having access to other's work and have the ability to copy and edit it on their own. The collaboration part though, for me personally, is the best part: individuals can work on a project simultaneously but not necessarily together, all the while "pushing" their edits to the file everyone is editing and "pulling" edits other people are making. This way everyone is working on the most up-to-date version of a file and their edits are merging. In relation to Dev Bootcamp and Phase 0, it's a way for us students to have the newest version of the curriculum, learn how to edit and use git, and become familiar with the GitHub platform. So! That's a quick introduction to version control, git and GitHub, plus why they're so great.


The first two days of driving were the toughest - we thought this was a bad idea and wondered how we were actually going to pull this trip off. The morning of the third day, however, our spirits were back up after breakfast, and we started out towards Colorado. The day was mostly spent driving again, but this time there were some cool sights along the way. The most notable one was a giant Van Gogh painting right in the middle of a field. Who knew?!


Modules | |
| Login Event | |
| Receive Message Event | |
| Send SMS Event | |
| Dialog Event | |
| USER STATUS Event | |
| Libfetion System Event | |
| Libfetion Qun Event | |
| Libfetion Qun Event | |
Defines | |
| #define | FX_EVENT_BASE 0x0000 |
| the fetion event base value | |
| #define | FX_EVENT_SPARE 0x00F0 |
| the spare fetion event base value |