@(record: deployment.DeployRecord)
@defining(record.report.cascadeState) { state =>
@state match {
case RunState.NotRunning => {
Waiting to run
}
case RunState.Completed => { Deploy completed
}
case RunState.Failed => {
Deploy failed
@defining(java.util.UUID.randomUUID.toString) { id =>
@record.report.failureMessage.map{ fail =>
@fail.detail.name @fail.detail.message
Show exception details
}
}
}
case _ => {}
} }


Use .btn .btn-*
class to quickly create buttons
Use .btn .btn-transparent-*
class to create transparent buttons
Use .btn .btn-outline-*
class to quickly create outline buttons
Use .btn .disabled
class or disabled
attribute to disable button
Use .btn .btn-block
class to create block level buttons
Use .btn .btn-block
class to use block level buttons
Use .btn .btn-ripple
class to create buttons with ripple effect
Use .btn .btn-animated
class and add
i
for icon to create animated buttons
Use .btn-circle
class with icon
Use .btn-square
class with icon
Use .btn .rounded-pill
class to quickly create rounded buttons
Use .btn .rounded-pill .btn-outline-*
class to quickly create rounded buttons with outline
Use .btn-lg
class for large, .btn-sm
for small and
.btn-xs
for extra small buttons
Use .btn-icon
class to button
element,
i
for icon and span
for text. Additionally, you can specify, icon-left
or
icon-right
to align the icon


{% extends 'layout.html' %} {% block title %}About{% endblock %} {% block main %}
Hi! My name is Jeff Eng and I'm the developer of Commune.
This web app was inspired by a final project challenge for the Harvard CS50 Intro to Computer Science course. My motivation for this app was to solve a practical problem where I would loan things out to friends and family, then end up forgetting who borrowed which item. This app aims to solve that problem by creating an inventory system with the ability to check out and return items like you would in a library.
The app is built using Django and Django REST framework integrated with JavaScript to provide a seamless user experience and minimize page reloads.
Thank you for making a rest stop at Commune on your road trip around the web!


|
My Project
|
A token/command object in the pretty printing stream. More...
#include <prettyprint.hh>
Public Types | |
| enum | printclass { begin, end, tokenstring, tokenbreak, begin_indent, end_indent, begin_comment, end_comment, ignore } |
| An enumeration denoting the general class of a token. More... | |
| enum | tag_type { docu_b, docu_e, func_b, func_e, bloc_b, bloc_e, rtyp_b, rtyp_e, vard_b, vard_e, stat_b, stat_e, prot_b, prot_e, vari_t, op_t, fnam_t, type_t, field_t, comm_t, label_t, synt_t, opar_t, cpar_t, oinv_t, cinv_t, spac_t, bump_t, line_t } |
| The exhaustive list of possible token types. More... | |
Public Member Functions | |
| TokenSplit (void) | |
| Constructor. | |
| int4 | beginDocument (void) |
| Create a "begin document" command. More... | |
| void | endDocument (int4 id) |
| Create an "end document" command. More... | |
| int4 | beginFunction (const Funcdata *f) |
| Create a "begin function body" command. More... | |
| void | endFunction (int4 id) |
| Create an "end function body" command. More... | |
| int4 | beginBlock (const FlowBlock *b) |
| Create a "begin control-flow element" command. More... | |
| void | endBlock (int4 id) |
| Create an "end control-flow element" command. More... | |
| int4 | beginReturnType (const Varnode *v) |
| Create a "begin return type declaration" command. More... | |
| void | endReturnType (int4 id) |
| Create an "end return type declaration" command. More... | |
| int4 | beginVarDecl (const Symbol *sym) |
| Create a "begin variable declaration" command. More... | |
| void | endVarDecl (int4 id) |
| Create an "end variable declaration" command. More... | |
| int4 | beginStatement (const PcodeOp *o) |
| Create a "begin source code statement" command. More... | |
| void | endStatement (int4 id) |
| Create an "end source code statement" command. More... | |
| int4 | beginFuncProto (void) |
| Create a "begin function prototype declaration" command. More... | |
| void | endFuncProto (int4 id) |
| Create an "end function prototype declaration" command. More... | |
| void | tagVariable (const char *ptr, EmitXml::syntax_highlight h, const Varnode *v, const PcodeOp *o) |
| Create a variable identifier token. More... | |
| void | tagOp (const char *ptr, EmitXml::syntax_highlight h, const PcodeOp *o) |
| Create an operator token. More... | |
| void | tagFuncName (const char *ptr, EmitXml::syntax_highlight h, const Funcdata *f, const PcodeOp *o) |
| Create a function identifier token. More... | |
| void | tagType (const char *ptr, EmitXml::syntax_highlight h, const Datatype *ct) |
| Create a data-type identifier token. More... | |
| void | tagField (const char *ptr, EmitXml::syntax_highlight h, const Datatype *ct, int4 o) |
| Create an identifier for a field within a structured data-type. More... | |
| void | tagComment (const char *ptr, EmitXml::syntax_highlight h, const AddrSpace *s, uintb o) |
| Create a comment string in the generated source code. More... | |
| void | tagLabel (const char *ptr, EmitXml::syntax_highlight h, const AddrSpace *s, uintb o) |
| Create a code label identifier token. More... | |
| void | print (const char *str, EmitXml::syntax_highlight h) |
| Create a token for other (more unusual) syntax in source code. More... | |
| void | openParen (char o, int4 id) |
| Create an open parenthesis. More... | |
| void | closeParen (char c, int4 id) |
| Create a close parenthesis. More... | |
| int4 | openGroup (void) |
| Create a "start a printing group" command. More... | |
| void | closeGroup (int4 id) |
| Create an "end a printing group" command. More... | |
| int4 | startIndent (int4 bump) |
| Create a "start a new indent level" command. More... | |
| void | stopIndent (int4 id) |
| Create an "end an indent level" command. More... | |
| int4 | startComment (void) |
| Create a "start a comment block" command. More... | |
| void | stopComment (int4 id) |
| Create an "end a comment block" command. More... | |
| void | spaces (int4 num, int4 bump) |
| Create a whitespace token. More... | |
| void | tagLine (void) |
| Create a line break token. | |
| void | tagLine (int4 indent) |
| Create a line break token with special indentation. | |
| void | print (EmitXml *emit) const |
| Send this token to emitter. More... | |
| int4 | getIndentBump (void) const |
| Get the extra indent after a line break. | |
| int4 | getNumSpaces (void) const |
| Get the number of characters of whitespace. | |
| int4 | getSize (void) const |
| Get the number of content characters. | |
| void | setSize (int4 sz) |
| Set the number of content characters. | |
| printclass | getClass (void) const |
| Get the print class of this. | |
| tag_type | getTag (void) const |
| Get this tag type. | |
A token/command object in the pretty printing stream.
The pretty printing algorithm (see EmitPrettyPrint) works on the stream of tokens, constituting the content actually being output, plus additional embedded commands made up begin/end or open/close pairs that delimit the (hierarchy of) groups of tokens that should be printed as a unit. Instances of this class represent all the possible elements of this stream.
All instances exhibit a broad printclass that generally reflects whether the token is one of the begin/end delimiters or is actual content. Instances also have a tag_type that indicate the specific function of the token within the stream, which mirror the begin/end/open/close/tag methods on the emitter classes (EmitXml).
An enumeration denoting the general class of a token.
| enum TokenSplit::tag_type |
The exhaustive list of possible token types.
|
inline |
Create a "begin control-flow element" command.
| b | is the block structure object associated with the section |
|
inline |
Create a "begin document" command.
|
inline |
Create a "begin function prototype declaration" command.
|
inline |
Create a "begin function body" command.
|
inline |
Create a "begin return type declaration" command.
| v | (if non-null) is the storage location for the return value |
|
inline |
Create a "begin source code statement" command.
| o | is the root p-code operation of the statement |
|
inline |
Create a "begin variable declaration" command.
| sym | is the symbol being declared |
|
inline |
Create an "end a printing group" command.
| id | is the id associated with the group (as returned by openGroup) |
|
inline |
Create a close parenthesis.
| c | is the close parenthesis character to emit |
| id | is the id associated with the matching open parenthesis (as returned by openParen) |
|
inline |
Create an "end control-flow element" command.
| id | is the id associated with the section (as returned by beginBlock) |
|
inline |
Create an "end document" command.
| id | is the id associated with the document (as returned by beginDocument) |
|
inline |
Create an "end function prototype declaration" command.
| id | is the id associated with the prototype (as returned by beginFuncProto) |
|
inline |
Create an "end function body" command.
| id | is the id associated with the function body (as returned by beginFunction) |
|
inline |
Create an "end return type declaration" command.
| id | is the id associated with the return type (as returned by beginReturnType) |
|
inline |
Create an "end source code statement" command.
| id | is the id associated with the statement (as returned by beginStatement) |
|
inline |
Create an "end variable declaration" command.
| id | is the id associated with the declaration (as returned by beginVarDecl) |
|
inline |
Create a "start a printing group" command.
|
inline |
Create an open parenthesis.
| o | is the open parenthesis character to emit |
| id | is an id to associate with the parenthesis |
|
inline |
Create a token for other (more unusual) syntax in source code.
| str | is the character data of the syntax being emitted |
| h | indicates how the syntax should be highlighted |
| void TokenSplit::print | ( | EmitXml * | emit | ) | const |
Send this token to emitter.
Emit markup or content corresponding to this token on a low-level emitter. The API method matching the token type is called, feeding it content contained in the object.
| emit | is the low-level emitter to output to |
|
inline |
Create a whitespace token.
| num | is the number of space characters to emit |
| bump | is the number of characters to indent if the spaces force a line break |
|
inline |
Create a "start a comment block" command.
|
inline |
Create a "start a new indent level" command.
| bump | the number of additional characters to indent |
|
inline |
Create an "end a comment block" command.
| id | is the id associated with the block (as returned by startComment) |
|
inline |
Create an "end an indent level" command.
| id | is the id associated with the nesting (as returned by startIndent) |
|
inline |
Create a comment string in the generated source code.
| ptr | is the character data for the comment |
| h | indicates how the comment should be highlighted |
| s | is the address space of the address where the comment is attached |
| o | is the offset of the address where the comment is attached |
|
inline |
Create an identifier for a field within a structured data-type.
| ptr | is the character data for the identifier |
| h | indicates how the identifier should be highlighted |
| ct | is the data-type associated with the field |
| o | is the (byte) offset of the field within its structured data-type |
|
inline |
Create a function identifier token.
| ptr | is the character data for the identifier |
| h | indicates how the identifier should be highlighted |
| f | is the function |
| o | is the CALL operation associated within the syntax tree or null for a declaration |
|
inline |
Create a code label identifier token.
| ptr | is the character data of the label |
| h | indicates how the label should be highlighted |
| s | is the address space of the code address being labeled |
| o | is the offset of the code address being labeled |
|
inline |
Create an operator token.
| ptr | is the character data for the emitted representation |
| h | indicates how the token should be highlighted |
| o | is the PcodeOp object associated with the operation with the syntax tree |
|
inline |
Create a data-type identifier token.
| ptr | is the character data for the identifier |
| h | indicates how the identifier should be highlighted |
| ct | is the data-type description object |
|
inline |
Create a variable identifier token.
| ptr | is the character data for the identifier |
| h | indicates how the identifier should be highlighted |
| v | is the Varnode representing the variable within the syntax tree |
| o | is a p-code operation related to the use of the variable (may be null) |


{{> mainTitle}}
{{> navbar }}
{{> info}}
Epicenter is website where you can upload files that will be spread across
other nodes connected to a mongo database. If you want to have files that
are shared to other locations running an Epicenter application, you just
need to connect to a shared MongoDB. On the backend, epicenter will create
a swarm of data between all epicenter nodes by turning the uploaded file
into a torrent, the torrent gets sent to MongoDb, and the other nodes
begin add the torrent to a running instance of
Transmission.
Currently, epicenter is supported on Windows, and Linux. Documentation for
this project can be found here at the
docs


Home
›
Tools
› Notepad
File
insert_drive_file
New
folder_open
Open
save
Save
save
Save As...
print
Print
Edit
undo
Undo
redo
Redo
content_cut
Cut
content_copy
Copy
content_paste
Paste
clear
Delete
select_all
Select All
View
zoom_in
Zoom In
zoom_out
Zoom Out
check
Text Lines
Help
help
Help
feedback
Send feedback
insert_drive_file
folder_open
save
content_cut
content_copy
content_paste
undo
redo
zoom_out
zoom_in
Enter file name:


We are PulseFFT, an easy to use and versatile Fast Fourier Transform library for signal processing on the web.
Having compiled the KissFFT library through the power of WebAssembly, we have taken advantage of the inherent power and speed of lower level languages like C.
This project provides forward and inverse FFTs for both real and complex inputs that can be used for spectral analysis such as the example sound visualizer above.
| Implementation | Buffer Size | Time (1st half) | Time (2nd half) | Rate (2nd half) |
|---|---|---|---|---|
| FFT:asm | ||||
| FFT:asm (c2c) | ||||
| FFT:wasm | ||||
| FFT:wasm (c2c) |


My Store
Welcome [[${#httpServletRequest.remoteUser}]]
My Cart
Your Store
Select the product you need and purchase with multiple payment options.
iPhone XR
$500
Add to Cart
iPhone Xs
$600
Add to Cart
iPhone Xs Max
$700
Add to Cart
iPad Pro 12"
$1500
Add to Cart


The convex hull of a shape is the original shape together with the minimum additional area needed to make it convex. To visualize the convex hull, imagine placing a rubber band tightly around the perimeter of the shape. If the shape is a square, or a rectangle, the rubber band will fit exactly along the edges of the shape. If the shape is not rectangular, the rubber band will stretch across any gaps created between corners of the shape. This region enclosed by the rubber band is the convex hull. The picture below shows our district together with its convex hull:
in-context


MusicRNN
implements Magenta's LSTM-based language models, which
are useful if you want to generate a NoteSequence
to continue an
input one. In the demos below, we call continueSequence()
with the
provided input, and display the result. Each section uses a different model
checkpoint (melody, drums or chord pitches) to generate the output sequence.
Input NoteSequence: Loading...
Result: Loading...
It took:
Input NoteSequence:
Result: Loading...
It took:
Input NoteSequence:
Result: Loading...
It took:
Total Leaked Memory:


Welcome to Hangman!
Select a game below to view results or keep playing
ID
GuessBoard
Guessed Letters
Game Over
Link
Make a new game


HaiR was conceived and created by an international and multidisciplinary team of university students.

Linked by the same goal, we work every day cooperating towards a very specific purpose: the well-being of the customer.
Our mission is to increase our service as much as possible, so as to be able to guarantee a continuous development of the
datasets which allow us to give more and more accurate answers to the customer's problems.
Our vision is a world in which having answers to problems becomes simple, fast but above all within everyone's reach.
F.A.Q.
What is HaiR?
HaiR is a system based on the state-of-the-art Artificial Intelligence algorithms and huge
number of past experience analyzes to provide you the best fitted treatment in accordance
to your specific needs.
All this complicated analysis happens in just a few seconds giving you an almost
transparent user experience. Other than that, we propose you a set of filters so that you
can customize the search and find the most suitable product.
How does HaiR works?
Thanks to an Artificial Intelligence algorithm that use a huge number of past experience, photoes and everything usuful for evaluating each case and identify not only the problem but also the best treatment. All this complicated analysis happen in just a few seconds giving you an almost transparent user experience. Other than that filters will be proposed so that our customers can customize the search and find the most suitable product.
Why should I choose HaiR?
Right now there is not a service like HaiR. The only real alternative are represented by expert with long queue and expansive parcel. HaiR instead is an efficient solution able to give you a quick, reliable and accessible consultation. HaiR team is also very customer oriented and ready to meet any customer needs and doubt, feel free to contact us anytime needed!


database
Classes
BuildingDAO
EventDAO
NotificationDAO
OrgaMemberDAO
OrganizationDAO
ParticipationDAO
RoomDAO
SchoolDAO
SiteDAO
UserDAO
WaitingDAO


Output Format
Binary File Format
Note that all binary data is stored using little endian byte ordering. All x86 processors are little endian and thus no special care has to be taken when reading COLMAP binary data on most platforms.
Indices and Identifiers
Any variable name ending with *_idx
should be considered as an ordered,
contiguous zero-based index. In general, any variable name ending with *_id
should be considered as an unordered, non-contiguous identifier.
For example, the unique identifiers of cameras (CAMERA_ID), images (IMAGE_ID), and 3D points (POINT3D_ID) are unordered and are most likely not contiguous. This also means that the maximum POINT3D_ID does not necessarily correspond to the number 3D points, since some POINT3D_ID’s are missing due to filtering during the reconstruction, etc.
Sparse Reconstruction
By default, COLMAP uses a binary file format (machine-readable, fast) for storing sparse models. In addition, COLMAP provides the option to store the sparse models as text files (human-readable, slow). In both cases, the information is split into three files for the information about cameras, images, and points. Any directory containing those three files constitutes a sparse model. The binary files have the file extension .bin and the text files the file extension .txt. Note that when loading a model from a directory which contains both binary and text files, COLMAP prefers the binary format.
To export the currently selected model in the GUI, choose File > Export
model
. To export all reconstructed models in the current dataset, choose
File > Export all
. The selected folder then contains the three files, and
for convenience, the current project configuration for importing the model to
COLMAP. To import the exported models, e.g., for visualization or to resume the
reconstruction, choose File > Import model
and select the folder containing
the cameras, images, and points3D files.
To convert between the binary and text format in the GUI, you can load the model
using File > Import model
and then export the model in the desired output
format using File > Export model
(binary) or File > Export model as text
(text). In addition, you can export sparse models to other formats, such as
VisualSfM’s NVM, Bundler files, PLY, VRML, etc., using File > Export as...
.
To convert between various formats from the CLI, use the model_converter
executable.
There are two source files to conveniently read the sparse reconstructions using
Python (scripts/python/read_write_model.py
supporting binary and text) and Matlab
(scripts/matlab/read_model.m
supporting text).
Text Format
COLMAP exports the following three text files for every reconstructed model: cameras.txt, images.txt, and points3D.txt. Comments start with a leading “#” character and are ignored. The first comment lines briefly describe the format of the text files, as described in more detailed on this page.
cameras.txt
This file contains the intrinsic parameters of all reconstructed cameras in the dataset using one line per camera, e.g.:
# Camera list with one line of data per camera:
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 3
1 SIMPLE_PINHOLE 3072 2304 2559.81 1536 1152
2 PINHOLE 3072 2304 2560.56 2560.56 1536 1152
3 SIMPLE_RADIAL 3072 2304 2559.69 1536 1152 -0.0218531
Here, the dataset contains 3 cameras based using different distortion models with the same sensor dimensions (width: 3072, height: 2304). The length of parameters is variable and depends on the camera model. For the first camera, there are 3 parameters with a single focal length of 2559.81 pixels and a principal point at pixel location (1536, 1152). The intrinsic parameters of a camera can be shared by multiple images, which refer to cameras using the unique identifier CAMERA_ID.
images.txt
This file contains the pose and keypoints of all reconstructed images in the dataset using two lines per image, e.g.:
# Image list with two lines of data per image:
# IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
# POINTS2D[] as (X, Y, POINT3D_ID)
# Number of images: 2, mean observations per image: 2
1 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180141.JPG
2362.39<PHONE_NUMBER>6 1784.7<PHONE_NUMBER>7 1784.7 268.254 -1
2 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180142.JPG
1190.83<PHONE_NUMBER>6 1258.77<PHONE_NUMBER>0
Here, the first two lines define the information of the first image, and so on.
The reconstructed pose of an image is specified as the projection from world to
the camera coordinate system of an image using a quaternion (QW, QX, QY, QZ)
and a translation vector (TX, TY, TZ). The quaternion is defined using the
Hamilton convention, which is, for example, also used by the Eigen library. The
coordinates of the projection/camera center are given by -R^t * T
, where
R^t
is the inverse/transpose of the 3x3 rotation matrix composed from the
quaternion and T
is the translation vector. The local camera coordinate
system of an image is defined in a way that the X axis points to the right, the
Y axis to the bottom, and the Z axis to the front as seen from the image.
Both images in the example above use the same camera model and share intrinsics (CAMERA_ID = 1). The image name is relative to the selected base image folder of the project. The first image has 3 keypoints and the second image has 2 keypoints, while the location of the keypoints is specified in pixel coordinates. Both images observe 2 3D points and note that the last keypoint of the first image does not observe a 3D point in the reconstruction as the 3D point identifier is -1.
points3D.txt
This file contains the information of all reconstructed 3D points in the dataset using one line per point, e.g.:
# 3D point list with one line of data per point:
# POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)
# Number of points: 3, mean track length: 3.3334
63390 1.67241 0.292931 0.609726 115 121 122 1.33927 16 6542 15 7345 6 6714 14 7227
63376 2.01848 0.108877 -0.0260841 102 209 250 1.73449 16 6519 15 7322 14 7212 8 3991
63371 1.71102 0.28566 0.53475 245 251 249 0.612829 118 4140 117 4473
Here, there are three reconstructed 3D points, where POINT2D_IDX defines the zero-based index of the keypoint in the images.txt file. The error is given in pixels of reprojection error and is only updated after global bundle adjustment.

Depth and Normal Maps
The depth maps are stored as mixed text and binary files. The text header
defines the dimensions of the image in the format with&height&channels&
followed by row-major float32 binary data. For depth maps channels=1
and
for normal maps channels=3
. The depth and normal maps can be conveniently
read with Python using the functions in scripts/python/read_dense.py
and
with Matlab using the functions in scripts/matlab/read_depth_map.m
and
scripts/matlab/read_normal_map.m
.
Consistency Graphs
The consistency graph defines, for all pixels in an image, the source images a
pixel is consistent with. The graph is stored as a mixed text and binary file,
while the text part is equivalent to the depth and normal maps and the binary
part is a continuous list of int32 values in the format
<row><col><N><image_idx1>...<image_idxN>
. Here, (row, col)
defines the
location of the pixel in the image followed by a list of N
image indices.
The indices are specified w.r.t. the ordering in the images.txt
file.


×
CAMPAIGNS
SURVEYS
EVENTS
NEWS
TOPICS
SERVICES
Switch to English
Switch to Xhosa
NAME
TYPE
PROVINCE
DISTRICT
MUNICIPALITY
VILLAGE
ACTIONS


This example will deploy a VPN into an AWS VPC and show how to connect to it using OpenVPN from either a Mac or Linux host. It will use Certificates for authentication, many other authentication options are available.
Terraform source code can be found at Github
If will deploy a simple VPC in one AZ and then create a VPN, the required certificates for the VPN will be stored in AWS Parameter Store.
Deployment
- Check out the code and update the region in
variables.tf
to the desired region. - Make sure you have valid AWS credentials in the environment or update
provider.tf
with the required values. - Run
terraform init
andterraform apply
➜ vpn git:(main) ✗ (⎈ |N/A:default) terraform init
Initializing modules...
Initializing the backend...
Initializing provider plugins...
- Reusing previous version of hashicorp/aws from the dependency lock file
- Reusing previous version of hashicorp/tls from the dependency lock file
- Using previously-installed hashicorp/aws v4.42.0
- Using previously-installed hashicorp/tls v4.0.4
Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
➜ vpn git:(main) ✗ (⎈ |N/A:default) terraform apply
data.aws_availability_zones.available: Reading...
data.aws_availability_zones.available: Read complete after 0s [id=us-east-1]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# aws_acm_certificate.ca will be created
+ resource "aws_acm_certificate" "ca" {
....
aws_ec2_client_vpn_network_association.vpn[0]: Still creating... [8m50s elapsed]
aws_ec2_client_vpn_network_association.vpn[0]: Still creating... [9m0s elapsed]
aws_ec2_client_vpn_network_association.vpn[0]: Creation complete after 9m1s [id=cvpn-assoc-0ae03994bfbf5dea9]
╷
│ Warning: Argument is deprecated
│
│ with aws_ec2_client_vpn_network_association.vpn[0],
│ on vpn.tf line 155, in resource "aws_ec2_client_vpn_network_association" "vpn":
│ 155: security_groups = [aws_security_group.vpn.id]
│
│ Use the `security_group_ids` attribute of the `aws_ec2_client_vpn_endpoint` resource instead.
╵
Apply complete! Resources: 30 added, 0 changed, 0 destroyed.
Outputs:
VPN-endpoint = "cvpn-endpoint-0b1df2b162a5679e1"
Connecting to the VPN
Install OpenVPN brew install openvpn
Get the parameters
aws ssm get-parameter --name "dev_vpn_key" --with-decryption \
--output text --query Parameter.Value > key.txt
aws ssm get-parameter --name "dev_vpn_certificate" --with-decryption \
--output text --query Parameter.Value > cert.txt
aws ec2 export-client-vpn-client-configuration \
--client-vpn-endpoint-id cvpn-endpoint-0b1df2b162a5679e1 \
--output text > vpn.txt
Connect to the VPN
➜ vpn git:(main) ✗ (⎈ |N/A:default) sudo openvpn --config vpn.txt \
--key key.txt --cert cert.txt
Password:
2022-12-02 09:35:06 WARNING: file 'key.txt' is group or others accessible
2022-12-02 09:35:06 OpenVPN 2.5.7 arm-apple-darwin21.5.0 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [MH/RECVDA] [AEAD] built on Jun 8 2022
2022-12-02 09:35:06 library versions: OpenSSL 1.1.1s 1 Nov 2022, LZO 2.10
2022-12-02 09:35:06 TCP/UDP: Preserving recently used remote address: [AF_INET]<IP_ADDRESS>:443
2022-12-02 09:35:06 Socket Buffers: R=[131072->131072] S=[131072->131072]
2022-12-02 09:35:06 Attempting to establish TCP connection with [AF_INET]<IP_ADDRESS>:443 [nonblock]
2022-12-02 09:35:06 TCP connection established with [AF_INET]<IP_ADDRESS>:443
2022-12-02 09:35:06 TCP_CLIENT link local: (not bound)
2022-12-02 09:35:06 TCP_CLIENT link remote: [AF_INET]<IP_ADDRESS>:443
2022-12-02 09:35:06 TLS: Initial packet from [AF_INET]<IP_ADDRESS>:443, sid=ee28dcaa 0ddbf149
2022-12-02 09:35:07 VERIFY OK: depth=1, O=demo, CN=dev.vpn.ca
2022-12-02 09:35:07 VERIFY KU OK
2022-12-02 09:35:07 Validating certificate extended key usage
2022-12-02 09:35:07 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2022-12-02 09:35:07 VERIFY EKU OK
2022-12-02 09:35:07 VERIFY OK: depth=0, O=demo, CN=dev.vpn.server
2022-12-02 09:35:07 Control Channel: TLSv1.2, cipher TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384, peer certificate: 2048 bit RSA, signature: RSA-SHA256
2022-12-02 09:35:07 [dev.vpn.server] Peer Connection Initiated with [AF_INET]<IP_ADDRESS>:443
2022-12-02 09:35:08 SENT CONTROL [dev.vpn.server]: 'PUSH_REQUEST' (status=1)
2022-12-02 09:35:08 PUSH: Received control message: 'PUSH_REPLY,route <IP_ADDRESS> <IP_ADDRESS>,route-gateway <IP_ADDRESS>,topology subnet,ping 1,ping-restart 20,ifconfig <IP_ADDRESS> <IP_ADDRESS>,peer-id 0,cipher AES-256-GCM'
2022-12-02 09:35:08 OPTIONS IMPORT: timers and/or timeouts modified
2022-12-02 09:35:08 OPTIONS IMPORT: --ifconfig/up options modified
2022-12-02 09:35:08 OPTIONS IMPORT: route options modified
2022-12-02 09:35:08 OPTIONS IMPORT: route-related options modified
2022-12-02 09:35:08 OPTIONS IMPORT: peer-id set
2022-12-02 09:35:08 OPTIONS IMPORT: adjusting link_mtu to 1626
2022-12-02 09:35:08 OPTIONS IMPORT: data channel crypto options modified
2022-12-02 09:35:08 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-12-02 09:35:08 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
2022-12-02 09:35:08 Opened utun device utun7
2022-12-02 09:35:08 /sbin/ifconfig utun7 delete
ifconfig: ioctl (SIOCDIFADDR): Can't assign requested address
2022-12-02 09:35:08 NOTE: Tried to delete pre-existing tun/tap instance -- No Problem if failure
2022-12-02 09:35:08 /sbin/ifconfig utun7 <IP_ADDRESS> <IP_ADDRESS> netmask <IP_ADDRESS> mtu 1500 up
2022-12-02 09:35:08 /sbin/route add -net <IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>
add net <IP_ADDRESS>: gateway <IP_ADDRESS>
2022-12-02 09:35:08 /sbin/route add -net <IP_ADDRESS> <IP_ADDRESS> <IP_ADDRESS>
add net <IP_ADDRESS>: gateway <IP_ADDRESS>
2022-12-02 09:35:08 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
2022-12-02 09:35:08 Initialization Sequence Completed
You can now connect directly to the endpoints in the private subnet
Tidy Up
terraform destroy


Version 0.1
Copyright (C) 2004, Netherlands Forensic Institute
Rddgui is a Graphical User Interface (GUI) for the Robust Disk Duplicaitor (rdd) imaging software. Rdd used to be a command line utililty. With version 2.0 it comes with a GUI that can be used to avoid typing long command lines. A command line version of rdd is still available.
This help applies to rddgui verision 1.0. It might be useful for later versions too, although some modifications might be made to the user interface. This help might also be useful for the command line version of rdd because it extensively explains all options. The options on the rdd command line version are the same, the only difference is the GUI.
All screens in the GUI have a Help button. Clinking this button will show this help page.
The screens are connected to each other in a wizard like style. Clicking the Next button will show the next screen while the Previous button will show the previous screen.
Some settings, like e.g. the input file or device settings can be customized to a high level. The regular settings are displayed in the wizard like screen while the less regular and more difficult settings are 'hidden' behind an Advanced button.
Whenever a path to a file or device must be entered, there is a Browse button available. This button will show a file open dialog screen in which the file or device can be selected.
A listing of screens in alphabetical order:
The rdd-gui can make an image or verify an image that already has been made. An image is a bitstream copy of all bytes of a device or file.
Rdd can run in 3 modes:
Local mode does not use a network in which two versions of rdd are communicating with each oter. In local mode, rdd makes an image of a file or device and stores it either as an image file or on a target device. The file or device must be avialable on the computer rdd is running on. The location can be on a server that is avialable on your network.
In client mode, rdd reads the device or file that has to be imaged. The data read from the device or file is transmitted over the network to a computer running rdd in server mode. Because in client mode rdd reads the file or device, the file or device must be accessible by rdd.
In server mode, rdd reads the data that is transmitted by another computer running rdd in client mode and stores it as an image file or on a target device. Rdd in server mode is typically run on a server that stores several images.
By selecting a profile, the GUI sets some default values for the chosen profile. The list of profiles contains several types of media. All settings that are set to default values can be changed in screens that are to come.
The input file or device is the file or device you want to image. You must specify this file or device.
Rdd is designed not to change the input file or device. But, as all software, rdd is not free of bugs. When possible, use a hardware writeblocking device.
Rdd can read the input file or device from the start to the end.
Rdd can also read any part of the file. The following items can be set:
All values can be specified in bytes, kilobytes (kB), Megabytes (MB) and Gigabytes (GB).
You must specify the output image and the logfile.
The output image can be a file or a device and must be specified.
Rdd logs all its activity to a file. This file must be specified.
Rdd can write the output image as one piece or rdd can split the output image in files of a specified size. When splitting, rdd will add a sequence number to the names of the output files.
Splitting an ouput image can be useful if you know you will have to burn a large image on a set of cd-recordables.
Some filesystems like FAT12, FAT16, and FAT32 have a maximum file size. These filesystems can not handle files larger than this size.
Rdd can calculate MD5 and SHA-1 hash values over the bytes it reads.
We recommend that you use both MD5 and SHA-1. MD5 is widely used, but its one-way hash function has been under attack for a while.
We recommend that you compare the MD5 or SHA-1 hash value that rdd calculated during imaging with the MD5 or SHA-1 hash values obtained by:
For this check, we recommend you use other software than rdd. Linux
md5sum
and sha1sum
are good options.
When your device reports non reproducable readerrors, the verification hash might not be the same as the hash rdd calculated.
Besides calculating an MD5 or SHA-1 hash rdd can calculate Adler-32 checksums and CRC-32 checksums over the bytes it reads. Where MD5 and SHA-1 hashes are calculated over the complete input file or device, Adler-32 and CRC-32 checksums are calculated over smaller blocks of data. All Adler-32 checksums are written to one file and all CRC-32 checksums are written to one file.
When you have an rdd image with one of these checksum files, and the hash of the image is different from the hash rdd calculated during imaging, rdd can pinpoint the exact blocknumbers that have been changed.
This screen has boxes for selecting the checksum method, the size of the block to calculate checksums over, and the files in which all checksums are written.
In most cases it is not necessary to calculate both Adler-32 checksums CRC-32 checksums. One checksumming method is enough. Adler-32 is a bit faster than CRC-32. Checksumming can be used in addition to hashing. Checksumming is not implemented in rdd to replace hashing because checksums are much less distinguishing than hashes.
A blocksize of 64 kB is the default value in rdd. You clould select larger blocksizes for large hard disk drives. This will reduce the size of the checksum file. For smaller media, like a floppy disk, you might want to use a smaller blocksize. We recommend not to use blocksizes smaller than 64 kB for the Adler-32 checkusum because the checksums might not be distinguishing enough with smaller blocksizes.
Refereces:
Most copying software read files or devices in blocks, using a certain blocksize. When they encounter a read error, the whole block of e.g. 256 kB, will be lost. Even though only one sector of 512 bytes was damaged and is responsible for the read errors. In this case nearly 256 kB of data is lost unnecessary.
Rdd will reduce its blocksize when it encounters a read error when the option for error recovery is chosen. Reducing the blocksize and retrieving as much data as possible was one of the major design goals rdd.
Choosing error-recovery will set the default values. To what blocksize rdd reduces its blocksize, can be set in the Error-recocery Advanced screen. The deault size is 512 bytes.
When rdd is unable to read the block, it will replace the block with zero bytes in the image.
When rdd encounters a read error it will try to read the block it was reading with a blocksize of the retry blocksize. The default value is 512 bytes. This is the sector size of a hard disk drive. Setting a smaller blocksize when imaging a hard disk drive is useless because a standard hard disk drive will never read less bytes than 512.
The operating system might try to read a damaged block a couple of times. Rdd can drop the block after a certain number of retries and proceed to the next block.
Trying to recover as much as possible can take a lot of time. Rdd can give up after processing a certain number of damaged blocks or rdd can proceed until a crash of the operating system or a power brownout.
Rdd can calculate the entropy and the MD5 hash value of blocks of bytes it reads. These entropy and MD5 hash values are stored in textfiles. Rdd comes with programs that can produce a plot of the entropy and block-MD5 values from these textfiles.
The entropy of a group of bytes is a measure of the amount of randomness of the bytes in the group. Good predictability (poor randomness) results in a low entropy and poor predictability (good randomness) results in a high entropy. An expample of good predictability is a block containing zeroes. Examples of poor predictability are files that are crypted with a good crypto algorithm or files that are heavily compressed. Calculating the entropy can help distinguishing between unused areas and areas that might contain a crypto container or heavily compressed data.
Besides calculating an MD5 hash over the complete image, rdd can calculate an MD5 hash over blocks it reads. Calculating MD5 hash values over blocks can show if the evidence contains much re-occurring blocks. In most cases, blocks that have a high entropy cannot be discarded. Although a series of blocks have a high entropy, the blocks might be exactly the same. Analyzing the block-MD5 plot together with the entropy plot might reduce the amount of bytes worth researching.
This document describes how to make and interpret the plots. It also gives some examples.
In this screen you can set the blocksizes and the ouput files for the data to generate the entropy and block MD5 plots from. Please refer to the help on the Statistics screen for an explanation of these values.
This screen provides information on the progress of making an image. The following information is available:
Pressing the Cancel button will stop the imaging in progress.
This screen provides information on the completed image. The following information is available:
Rdd logs everything it does. Click the 'Show logfile' button to view the logfile.
The button 'Image or verify another file or device' will return to the 'image or verify' screen.
Rdd can use a network to transprort an image from one computer to another. Rdd uses the TCP/IP protocol over an ethernet connection. Before you try to establish a connection, make sure you have a computer with a network card installed and your computer supports the TCP/IP and ethernet protocols.
When rdd runs in client mode, rdd reads the file or device that must be imaged. Instead of storing the image locally, all data is sent over a network to another computer that runs rdd in server mode. Rdd in server mode receives the image and stores it locally. To minimize the network load the image can be sent in a compressed format.
All settings like selecting the file or device to image, the blockize, etc. are configured in rdd running in client mode. Even the location where to store the file on the server is selected in client mode. Before the image is sent, the rdd client notifies the rdd server where to store the image.
Rdd in client mode will try to establish a connection to the specified rdd server. The server must therefore be configured first. It must be 'listening' on the network for an rdd client that wants to establish a connection.
Make sure there is a network route from the rdd client to the rdd server and that it is not blocked by a firewall. If a firewall is blocking the route you will have to open a port on the firewall. You can configure rdd to use any TCP port.
Please refer to the Networking section of for the basics of rdd in client mode and rdd in server mode.
In this screen you can configure rdd in client mode. You can enter the name or the IP address of the computer that is running rdd in server mode. The image can be compressed to minimize the network load and increase the speed. In most cases the network speed will be lower than the speed of the hard disk drive. Reducing the number of bytes to send will reduce the time that is needed to perform an imaging operation over a network.
Rdd in client mode will write a log file on the connection and transferring the image locally. This file is not sent over the network. This logfile will look much the same as the logfile rdd makes in local mode. Note that the compression option does not apply to the logfile. It only applies to the image that is sent over the network.
Rdd can use any TCP port in the range from 0 to 65535. Make sure the rdd client and the rdd server both use the same TCP port.
This screen shows rdd is running in client mode trying to connect to a computer that is running in server mode. When the connection is established, this screen will disappear and be replaced by a progess screen. If no connection can be established, make sure the computer that is running rdd in server mode is waiting for a connection and there is a network route from the rdd client to the rdd server.
Please refer to the Networking section of for the basics of rdd in client mode and rdd in server mode.
Rdd in server mode will write a logfile on the connection and transferring the image.
Rdd can use any TCP port in the range from 0 to 65535. Make sure the rdd client and the rdd server both use the same TCP port.
This screen shows rdd is running in server mode, waiting for an rdd client trying to establish a connection. When the connection is established, this screen will disappear and be replaced by a progress screen. If no connection can be established, make sure the computer that is running rdd in client mode is trying to connect and that there is a network route from the rdd client to the rdd server.
This screen shows there is a connection between the rdd client and the rdd server. The following information is avialable:
This screen provides information on the completed image. The following information is available:
Rdd logs everything it does. Click the 'Show logfile' button to view the logfile.
The button 'Image or verify another file or device' will return to the 'image or verify' screen.
Rdd can canculate MD5 and SHA-1 hashes over all bytes it reads. Besides these hashes over the complete image, rdd can calculate Adler-32 and CRC-32 checksums over blocks of data it reads. All these hashes and checksums can be used, up to a certain extent, to verify the integrity of an image produced by rdd.
Please refer to the sections Integrity and Integrity, advanced for a discussion on these hashes and checksums.
In this screen you can conofigure the following items:
Note that rdd does not verify the hashes. Verification must be done by comparing the hash rdd calculates at verifying with the hash rdd calculated at imaging.
The default is that rdd expects an Adler-32 checksum file is available named like the image file, but with the extension a32. This setting can be changed in the Verify, Advanced screen.
In this screen you can select the correct Adler-32 checksum file and the correct CRC-32 checksum file. If rdd did not make these files during imaging, you should not use them in verifying an image. Information that is not available can not be verified.
This screen shows rdd is verifying and image file. The following information is avialable:
This screen is shown when rdd has finished verifying an image file. The following information is avialable:
Rdd logs everything it does. Click the 'Show logfile' button to view the logfile.
The button 'Image or verify another file or device' will return to the 'image or verify' screen.


Infrastructure As A Code
Redhat’s definition
Infrastructure as Code (IaC) is the managing and provisioning of infrastructure through code instead of through manual processes. With IaC, configuration files are created that contain your infrastructure specifications, which makes it easier to edit and distribute configurations.
So Terraform is one of the tools which helps us in automating Infrastructure provisioning by writing code in HCL(Hashicorp Language)
In Terraform basic building blocks are Resources. Each Resource block can be used to define one or more infrastructure elements like EC2 instances or VPC or Subnet
The Basic syntax of a Resource:
recource resource_type localname {
parameter_name = parameter_value
}
# Note: resourcetype = provider_resourceType
# Example: aws_instance (this will create an instance in aws and AWS is provider here)
Example:** main.tf**
resource "local_file" "samplefile" {
filename = "C:\\sample.txt"
content = "This is a sample file"
}
So in the above example, we are trying to create a local file and the provider we are using in this example is local and resource type is file
There are 3 basic commands which we use most of the time and they are
terraform init
terraform plan
terraform apply
-
terraform init
- This will download any providers from terraform registry that are needed for creating resources
- We can observe
hashicorp/local v2.1.0
is downloaded and installed - https://registry.terraform.io/providers/hashicorp/local/latest
So Terraform registry is a place where we can find Terraform authorized, 3rd Party modules related to various providers and helps us in creating resources.
-
terraform plan
– This will give us the plan that Terraform is going to use to create our resource
–
+
create-
destroy-/+
replace (destroy and then create, or vice-versa if create-before-destroy is used)~
update in-place<=
read -
terraform apply
– This will create a resource. In this case, it is a local file -
terraform.tfstate
– Whenever a resource is created, terraform stores the state of the resource created in this statefile.– How is this useful? So it helps in maintaining the state of all resources that were created.
– So If we make a change to the created resource outside of terraform, then terraform will use this state file to identify the change and act accordingly.
-
terraform destroy
This will destroy resources that were created. We can observe destroy operation in the plan. Also, observe the statefile, text file resource is deleted from statefile when we run destroy command
Play time (Scenario 1):
-
Initially run
terraform apply
and we can see the resource is created. ** main.tf**resource "local_file" "samplefile" { filename = "C:\\sample.txt" content = "This is a sample file" }
-
Re-run
terraform apply
and we can observe no changes are made. This is because it is using statefile that was created in 1st step and the resource in .tf file. Since both of them match no changes are made. -
Modify resource in tf file and run
terraform apply
. So in this case, it is destroying the existing file and recreating a new one with updated text content (“This is a sample file changed”). For example inmain.tf
change content to “This is a sample file changed” -
Change the content of resource and content in statefile to match (But already created resource has a different value).. Old file on disk,statefile has text content “This is a sample file changed”. But I am changing statefile content and .tf content to a new value (“Making changes to tf resource in both statefile and resource”)
So here we are cheating :) Terraform to think like the content on file(disk) and content in .tf resource is same using statefile, though the text in file(disk) is different. So It doesn’t physically check for file content but it is depending on statefile as proof for truth. And hence there is no change when we did apply. -
Delete the statefile and run
terraform apply
. We observe a new resource is created. Since in this case, it is a physical file. It is overwritten but we can see the plan and observe it as a add operation. In case, if it is a AWS EC2 resource, It will create a duplicate resource
Play time (Scenario 2: Multiple tf files):
main.tf
resource "local_file" "sample1" {
content = "This is sample file 1"
filename = "sample1.txt"
}
child.tf
resource "local_file" "sample3" {
content = "This is sample text from sample3 resource in child.tf"
filename = "sample3.txt"
}
Now run terraform init
, terraform plan
and terraform apply
and we can observe that it creates 2 resources sample1.txt and sample3.txt
My Session recording
Thanks,
Pavan Kumar Aryasomayajulu


Welcome to Window Engine !
Window Engine helps you start projects that need draggable and beautiful custom windows.
Window Engine 2.2
Window Engine
×Welcome to Window Engine !
Window Engine helps you start projects that need draggable and beautiful custom windows.
Second Window
×Cyan
With fade effect !
Third Window
×Brown
With fade effect !
Fourth Window
×Orange - Small
Fifth Window
×Crimson - Large
Sixth Window
×Green


1. (30 min) What's new in ClickHouse 22.5.
2. (30 min) Q&A.
May's stable release.
GROUP BY modifiers:
— WITH TOTALS;
— WITH ROLLUP;
— WITH CUBE;
— GROUPING SETS;
Developers: Dmitriy Novik, taylor12805, Maksim Sipliviy.
GROUP BY modifiers:
(demo)
— WITH TOTALS:
add a row with total values;
— WITH ROLLUP;
aggregate by all prefixes of keys:
given k1, k2, aggregate by (), (k1), (k1, k2);
— WITH CUBE;
aggregate by all subsets of keys;
given k1, k2, aggregate by (), (k1), (k2), (k1, k2);
— new: GROUPING SETS;
aggregate by any sets of keys;
generalization of all the above;
Upcoming:
— GROUPING function to distinguish different sets.
— rollup_use_null setting for standard compatibility.
MySQLDump as input format:
--
-- Table structure for table `test`
--
DROP TABLE IF EXISTS `test`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `test` (
`x` int DEFAULT NULL,
`y` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `test`
--
LOCK TABLES `test` WRITE;
/*!40000 ALTER TABLE `test` DISABLE KEYS */;
INSERT INTO `test` VALUES (1,NULL),(2,NULL),(3,NULL),(3,NULL),(4,NULL),
(5,NULL),(6,7);
/*!40000 ALTER TABLE `test` ENABLE KEYS */;
UNLOCK TABLES;
MySQLDump as input format:
Use case:
— you cannot connect to MySQL for direct import;
— you cannot create a TSV dump from MySQL;
— all that you have is a table dump from MySQL;
Developer: Pavel Kruglov.
MySQLDump as input format:
Options:
— input_format_mysql_dump_table_name
— select one of the tables from the dump;
— input_format_mysql_dump_map_column_names
— match corresponding column names;
Bonus:
— MySQLDump format supports schema inference!
SELECT * FROM file('dump.sql', MySQLDump);
Prometheus as output format
Use case:
— output data exactly as Prometheus expects;
— define a custom HTTP handler for a query with custom metrics;
Developer: Vladimir Cherkasov.
Prometheus as output format
Result should have columns:
— name;
— value;
— type (counter, gauge, histogram, summary, untyped or empty);
— labels (optional);
— help (optional);
Prometheus as output format
# HELP metric0 info 0
# TYPE metric0 counter
metric0 0
metric1 1
# HELP metric2 info 2
metric2 2<PHONE_NUMBER>000
# TYPE metric3 counter
metric3 3
Bonus:
— histograms are supported.
Prometheus as output format
global:
scrape_interval: 3s
scrape_configs:
- job_name: node
metrics_path: '/'
params:
query: ["SELECT ... FORMAT Prometheus"]
static_configs:
- targets: ['localhost:8123']
FIPS 140-2 compliance:
— "crypto" module of the SSL library (BoringSSL)
is switched to FIPS 140-2 compliant version.
Developer: Meena-Renganathan.
system.certificates table:
— introspection of the root certificates that ClickHouse can use.
— check that no malicious certificates are used;
check issues with SSL certificates.
Developer: Yakov Olkhovskiy.
Previous versions:
— rigid max_memory_usage, set to 10 GB by default;
— max_memory_usage_for_user can be set;
— when memory limit exceeded, exception is thrown;
Since 22.5:
— max_memory_usage is not set by default;
— new settings memory_overcommit_ratio_denominator, memory_overcommit_ratio_denominator_for_user;
Developers: Dmitriy Novik.
Since 22.5:
— max_memory_usage is not set by default;
— new settings memory_overcommit_ratio_denominator,
memory_overcommit_ratio_denominator_for_user;
— in case of memory shortage,
the most "overcommitted" query will be killed;
— other queries will wait for up to
memory_usage_overcommit_max_wait_microseconds;
— max_memory_usage and max_memory_usage_for_user
can act as hard limits;
Developers: Dmitriy Novik.
TLDR:
Heavy query can use as much memory as available
as long as no smaller queries need memory.
Developers: Dmitriy Novik.
avg and sum without GROUP BY:
SELECT sum(revenue), avg(price) FROM table
Up to 1.5 times faster!
Developers: Maksim Kita.
Unary arithmetic functions
bitCount, bitNot, abs, sign, intExp*, negate, round*:
Up to 7 times faster!!!
Developers: Maksim Kita.
JIT compilation for sorting comparator.
For ORDER BY, INSERT INTO MergeTree, Merge JOIN.
SELECT * FROM test
ORDER BY value
— 0 rows in set. Elapsed: 5.299 sec. Processed 100.00 million rows, 1.70 GB (18.87 million rows/s., 320.81 MB/s.)
SET compile_sort_description=1;
SELECT * FROM test
ORDER BY value
— 0 rows in set. Elapsed: 4.131 sec. Processed 100.00 million rows, 1.70 GB (24.21 million rows/s., 411.50 MB/s.)
— +30% performance improvement!
Developers: Maksim Kita.
Indices for vector embeddings.
Search for nearest objects: images, texts, etc...
FAISS, Annoy, HNSW, DiskAnn.
Prototype stage, expected in Autumn 2022.
Already tested by first customers!
Sign up for wait-list: https://clickhouse.com/cloud/
Serverless operation, no infrastructure to manage.
Roadmap 2022 is published:
https://github.com/ClickHouse/ClickHouse/issues/32513
— open for discussions.
... all great stuff is discussed there, don't miss.


About: Demonstrates how to create a DelayedConfirmationView in your wearable app. In this sample, pressing a button on the phone app sends a message to the wearable to start a simple activity. This activity displays a DelayedConfirmationView that starts when the user presses "Start Timer." Then, callbacks are implemented on both the wearable and phone to show when the timer is selected or finishes. The activity on the wearable uses BoxInsetLayout to automatically apply appropriate margins based on whether the display is square or circular.
How to run: Install the Application APK on the companion, and the Wearable APK on the wearable. Start the sample by running the DelayedConfirmation application on the companion and pressing "Start".
Wearable APIs used: MessageApi, NodeApi, WearableListenerService, BoxInsetLayout, DelayedConfirmationView
Screenshots:


Expected behavior of a session container used with CodeIgniter.
| package |
Default |
|---|
destroy()
get(string $key = null) : array|null
If the property exists as "normal", returns it. Otherwise, returns an array of any temp or flash data values with the property key.
Replaces the legacy method $session->userdata();
string
Identifier of the session property to retrieve
array|null
The property value(s)
getFlashdata(string $key = null) : array|null
If the item key is null, return all flashdata.
string
Property identifier
array|null
The requested property value, or an associative array of them
getFlashKeys() : array
array
The property names of all flashdata
getTempdata(string $key = null) : mixed
string
Session data key
mixed
Session data value or null if not found.
getTempKeys() : array
array
has(string $key) : boolean
string
Identifier of the session property we are interested in.
boolean
keepFlashdata(string $key)
string
Property identifier or array of them
markAsFlashdata(string|array $key) : False
string|array
Property identifier or array of them
False
if any of the properties are not already set
markAsTempdata(string|array $key, integer $ttl = 300) : boolean
string|array
Property identifier or array of them
integer
Time to live, in seconds
boolean
False if any of the properties were not set
regenerate(boolean $destroy = false)
boolean
Should old session data be destroyed?
remove(string|array $key)
If $key is an array, it is interpreted as an array of string property identifiers to remove. Otherwise, it is interpreted as the identifier of a specific session property to remove.
string|array
Identifier of the session property or properties to remove.
removeTempdata(string $key)
string
Session data key
set(string|array $data, string|array $value = null)
If $data is a string, then it is interpreted as a session property key, and $value is expected to be non-null.
If $data is an array, it is expected to be an array of key/value pairs to be set as session properties.
string|array
Property name or associative array of properties
string|array
Property value if single key provided
setFlashdata(string|array $data, null $value = null)
Perfect for use with single-use status update messages.
If $data is an array, it is interpreted as an associative array of key/value pairs for flashdata properties. Otherwise, it is interpreted as the identifier of a specific flashdata property, with $value containing the property value.
string|array
Property identifier or associative array of properties
null
Property value if $data is a scalar
setTempdata(string|array $data, mixed $value = null, integer $ttl = 300)
string|array
Session data key or associative array of items
mixed
Value to store
integer
Time-to-live in seconds
unmarkFlashdata(string|array $key)
string|array
Property identifier or array of them
unmarkTempdata(string|array $key)
string|array
Property identifier or array of them


BATMAN FOREVER A film review by Chuck Dowling Copyright 1995 Chuck Dowling
I went with a group of friends to see the new Batman movie, and when we left, I was scared. I was scared to mention to my friends that the movie I just witnessed was horrible. Finally in the car, I said, "Would anyone be truly offended if I say that was an awful movie?" They felt relieved. All four of us hated it. Ok, you probably want to know why. I liked Batman Returns. Everyone else in the world didn't, but it remains my favorite of the three.  From frame one, I realized that movie was truly awful. Lets get the good point out first, this is an extremely well made film. The stunts, the special effects, and just the overall look of the film were all top-notch. That's it for the good.
 How many times in this movie did Batman get caught in some situation and only luck saved him? So, if the bank guard in the vault at the beginning didn't wear a hearing aid, Batman would be dead? Come on.
Second, Batman doesn't need to be cracking jokes. When Michael Keaton played the character, the humor came out of Bruce Wayne. Batman was the dark one. It reversed in this one.
Third, THE BATMOBILE DOES NOT NEED TO BE DRIVING UP WALLS! I wanted to leave at this point.
Fourth, there was no satisfactory explanation for Two-Face's origin. Some guy at a trial somehow manages to get A VAT OF ACID to the stand and throws it in Harvey Dent's face (by the way, Billy Dee Williams must be mad as hell) while Batman looks on. Yes, Batman, not Bruce Wayne attended this trial, comfortably seated in the front row.
 Was this supposed to be a cool moment? Once again, I wanted to walk out.
Sixth, did the Riddler's riddles have anything to do with anything? So eventually they decoded to spell The Riddler's name. Oooooo. Big help for Batman and company.
Seventh, the cliches. When Grayson got into that street fight, I said to myself, "Watch, these 200 punks are going to attack him one at a time." They did. And why would Robin want to save Two-Face?  Come on.
There are MANY other things that I had a problem with in this film, but they will probably be considered as nit-picking, so I'll end my review by saying that I hope this Batman doesn't last forever.
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


Gary Lineker: Lewis Hamilton is "arguably" Britain's greatest-ever sports person
by Bobby VincentFormer England football striker Gary Lineker has heaped the praise on Lewis Hamilton after the British driver picked up his sixth world title on Sunday, calling on the Mercedes driver to be knighted.
Lineker said it is "extraordinary" how Hamilton hasn't already been knighted and called the six-time world champion "arguably our greatest-ever sportsperson" via his personal Twitter account.
It's a massive claim from Lineker, but certainly one many would agree with. Hamilton has now won three Drivers' titles on the bounce, with Nico Rosberg the last man to stop him back in 2016.
Hamilton made his Formula 1 debut back in 2007 in Australia for McLaren; since then, he has won 83 times and Sunday's race in the USA was his 150th podium in F1, scoring 3399 points along the way.


A MIDNIGHT CLEAR A film review by Edwin Jahiel Copyright 1996 Edwin Jahiel
A MIDNIGHT CLEAR (1992) *** 1/2. Directed and written by Keith Gordon from a novel by William Wharton. Photography, Tom Richmond. Production design, David Nichols. Editing, Don Brochu. Music, Mark Isham. Cast: Peter Berg, Kevin Dillon, Arye Gross, Ethan Hawke, Gary Sinise, Frank Whaley, John C. McGinley. An Interstar Release. 107 minutes. Rated R (wartime violence, strong language).
Television these days is invaded by older movies about W.W.II. In 1992 it was as if the small screen did not celebrate 1492 but 1942, with older viewers in mind. Yet Hollywood's annual production stream of war movies in the 40's and 50's--stressing patriotism and exciting action--became a trickle in recent decades .
In a non-conformist move, the producers of 'A Midnight Clear' had the courage to make a non-commercial war film at a time when the genre was not popular among the masses, and a film whose anti-war message, unlike the premise of most Second World War pictures, is that even the 'cleanest' conflict in US. history, W.W.II, was not a Good War.
In style and substance the picture is halfway between the disillusioned , pacifist movies about W.W. I ("All Quiet on the Western Front," "The Man I Killed," "Grand Illusion," "Paths of Glory") and the few revisionist movies about W.W.II, mostly adaptations of sarcastic novels ("Catch-22," "Slaughterhouse Five") that underscored the surreal dementia of armed conflict.
"A Midnight Clear" comes from a semi-autobiographical novel, and it convinces. It was made with a young cast and by a then-30 year old actor directing his second movie. His first was "The Chocolate War" (1988), about a power struggle in a Catholic boys' school.
The setting is the Ardennes Forest--Park City, Utah, doubles nicely-- a snowy no-man's land that could be France, Germany, Belgium or Luxembourg. The time is December 1944, during the Battle of the Bulge, Germany's last but devastating counter-attack .
An Infantry and Reconnaissance squad of G.I.s is ordered by martinet Major Griffin (McGinley) to hole up in an deserted chateau (actually a fancy country house) and report on enemy movements. The soldiers had been trained for I & R because of their high I.Q.s--which automatically make of them skeptical warriors. From twelve the squad has dwindled to six.You take for granted that the "Ten Little Indians" syndrome will continue.
In the woods, the Yanks encounter a group of those last-ditch draftees (too old or too young) that the Third Reich called up for its desperate "Totalkrieg" (Total War).The Germans make with the "Amis" a deal that's unusual and will have unexpected consequences. But then strangeness is more rule than exception in wartime.
The squad is led by its junior,William Knott (Hawke). His name had been abbreviated to Will Not, then to Won't, but typically the film does not milk this for effect. Knott is puzzled and not especially pleased at having been made sergeant.He is the film's narrator and speaks matter-of-factly about his comrades and the absurdities and atrocities of war. We're close to Kurt Vonnegut's Billy Pilgrim territory.
The group includes John Lennon-ish "Mother" Wilkins played by the co-founder of Chicago's famed Steppenwolf Theater, stage actor, then filmmaker Gary Sinise. Here he is called "Mother" because at 26 he is the oldest, married and fussy about neatness. He is going crazy fast and his companions try to protect him."Father" Mundy (Whaley), is a seminary dropout who has made the men promise to keep their language clean. The others are called Bud Miller (a beerish Anglo name), Mel Avakian (Armenian), and Stan Schutzer (Jewish)
This, however, is not the old movies' motley group of G.I.s, (or the Dirty Half-Dozen), with the machine-stamped dosage of religions, ethnicities,professions, voices (one Brooklyn accent per movie was de rigueur), or the sameness of their post-war dreams which invariably featured "dames" and "big, juicy steaks."
In "A Midnight Clear," neither the I.Q.s, nor the men's backgrounds, physical characteristics, temperaments, skills, differences or idiosyncrasies are highlighted. Partly on purpose and mostly, I think, by serendipity, there is about the soldiers a general vagueness that borders on impersonality, as if the mad tragedy of war made customary distinctions futile.
Some bits of religious symbolism seem unnecessary, as does a flashback of four of the boys losing their virginity, serially and in one night, to the distraught fiancee of a killed soldier. That's a most unhygienic sequence. Otherwise though, the film plays down melodrama and sentimentality, has a clever but not smartie-pants script and does not push its points.It even keeps a rein on the character of despicable Major Griffin, clearly suggesting that for the squad it is this fatuous commander who is the real enemy, not the Krauts.
The movie had an excellent critical reception, but given its seriousness and the lack of a promotional campaign it soon returned to the orphanage.
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


It’s Friday and you all know what that means: Time for This Week in React ⚛.
🌏 Is React Translated Yet? ¡Sí! Sim! はい！
A new blog post explains the React documentation internationalization effort and mentions the first three live websites: Spanish, Japanese, and Brazilian Portuguese.
In the ESLint rule for hooks, it’s now allowed to pass dependencies that are not used inside the effect to the dependency array. Check out the PR for an example of when this is useful.
This PR improves messaging for when you try to pass literals. Additionally it now warns when ref.current is used in an effect cleanup that it assumes is a component ref.
🐛 Fix Compatibility Between react-debug-tools and useContext()
react-debug-tools is an experimental package for debugging React renderers. This PR fixes a bug that was causing issues with this package and useContext().
The eslint-plugin-react-hooks/exhaustive-deps lint rule now allows you to omit defining constant primitives (e.g. const a = 123;) in the dependencies array if you close over them.


Just remember the first letter of what you want to do and it's just a very simple txt message to interact with Shoppley!
Merchant
#m email zipcode business_name
#merchant email zipcode business_name
Sign up for a merchant account.
return: A random password is returned that user uses to login to the web site.
example: #merchant<EMAIL_ADDRESS>02142 Joe’s Bakery
#o offer_description
#offer offer_description
Creates an offer. offer_description is recommended to be within 80 characters.
return: A tracking_code that can be used with #status commands
example: #offer Extra $5 off any pair of pants that are on sale
Checks the status of the latest offer.
return: How many people have been reached and how many redeemed.
#s tracking_code
#status tracking_code
Checks the status of the offer with tracking_code.
return: How many people have been reached and how many redeemed.
example: #status itrwpo
#r offer_code customer_number
#redeem offer_code customer_number
Redeems the customer’s offer. You will receive points back. customer_number is the customer’s phone number. Customer’s phone number is used to verify that the offer belongs to the customer and to reward points to the customer.
return: Confirmation or error that the reward code is invalid
example: #redeem<PHONE_NUMBER>372009
return: The point balance on your account
#z new_zip
#zip new_zip
#zipcode new_zip
Change the active zip code
return: Confirmation or error that the zip code is invalid
example: #zipcode 94112 (changing to San Francisco for mobile merchant)
return: List of commands and brief descriptions
Customers
#c email zip_code
#signup email zip_code
Sign up new user with email address email and zip_code.
return: A random password is returned that you can use to login to the web site.
example: #signup<EMAIL_ADDRESS>02139
return: Detailed information about the most recent offer code which details the store location and phone number.
#i offer_code more_offer_codes
#info offer_code more_offer_codes
Offer codes are listed separated by space.
return: Detailed information about one or more offer codes which details the store location and phone number.
example: #info<PHONE_NUMBER>15
#f offer_code friend_num more_friend_nums
#forward offer_code friend_num more_friend_nums
Forwards the offer_code to one or more number of friends. List the phone numbers separated by space. When your friends redeem an offer, you will get points.
example: #forward<PHONE_NUMBER>092424<PHONE_NUMBER><PHONE_NUMBER>
#w any message, brand, product, service describing what you want
#iwant any message, brand, product, service describing what you want
Submit to Shoppley what type offers you would like to receive
example: #iwant offers on cheap designer jeans
#stop
Stop receiving offers
#start
Start receiving offers
return: The point balance on your account
#z new_zip
#zip new_zip
#zipcode new_zip
Change the active zip code
return: Confirmation or error that the zip code is invalid
example: #zipcode 94112 (changing to receive offers from San Francisco)
return: List of commands and brief descriptions


Tree
Create from HTML markup
Folder
Sub Folder 1
File 11
File 12
File 13
File 2
File 3
File 4
File 5
File21
Create from JSON data
reload
getChildren
getChecked
getSelected
collapse
expand
collapseAll
expandAll
append
remove
update
isLeaf
getNodes
获取所有checkbox选中节点id
Append
Remove
Expand
Collapse


The front-end:
- Component Pattern with AngularJS (only directives)
- It is composed of 3 modules: app.js, home.js, books.js
- Each module has the same folder structure:
- scripts folder
- css folder
- views folder
- data folder (Optional)
- images folder (Optional)
- Fully Responsive
- State machine routing with ui-router
app.js
- Main module that contains home and books
var app = angular.module('app', [
'ui.router',
'home',
'books'
]);
- It has its own router
- It handles 404 page not found errors
app.config([ '$stateProvider', '$urlRouterProvider', '$locationProvider',
function ($stateProvider, $urlRouterProvider, $locationProvider) {
$stateProvider
//////////////////////////
// State Configurations //
//////////////////////////
.state('404', {
url: '/{path:.*}',
template: '<page-not-found></page-not-found>'
})
$locationProvider.html5Mode({
enabled: true
});
}
]);
home.js
- Module home contains a description of the site
- It has its own router
home.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
//////////////////////////
// State Configurations //
//////////////////////////
.state('home', {
url: '/',
template: '<home></home>'
})
});
books.js
- This module displays the books
- It has its own router
- It contains 2 pages:
- /books: Is the books index
- /books/:bookName: Receives in the URL the :bookName as a parameter and displays it
books.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.when('/books/', '/books');
$stateProvider
//////////////////////////
// State Configurations //
//////////////////////////
.state('books', {
abstract: true,
url: '/books',
template: '<ui-view></ui-view>'// This is the 'Web Component' books
})
// Nested Views
.state('books.list', {
url: '',
template: '<books-index></books-index>'// This is the books Index
})
.state('books.open', {
url: '/:bookName',
template: '<book></book>'// This is the book
})
});
- The books index page:
- Allows filtering by category and genre
- Allows search by title and author
- Is pageable on the front end side
- Shows: the number of books that match the current filter or search, the cover image, the title, the author,the votes and the relative time for the publication date
- In addition to the info displayed in the index, the book page shows:
- Author avatar
- Introductory contents
- Short description of the book
- All the related books with the same genre/catergory (if any)
- Service 'Books' provides 2 methods to READ the resource books
- list: provides all the books. It mocks a database API and gets the books from the file books.json
- open(bookName): provides the books 'bookName'. It mocks a database API and gets the book from the file books.json
- Have a look to the service here: link to the service


Don't forget to search the Internet as well! This will catch issues at github.com/aws, the multitude of additional 3rd party guides, and blogs from Jeff Barr, Werner Vogels, and James Hamilton for example.


Your application has been submitted. {{ today | date:'mediumDate' }} --- Request number: {{ paddedConfirmationNumber() }}
Next Steps
Important: Keep your request number – write it down, or print this page for your records.
Allow up to 15 business days for your application to be processed. Once your application is processed, you
will be sent an email confirmation.
If you have questions regarding the status of your request, contact<EMAIL_ADDRESS>and include the request
number.
Your application did not submit successfully. Please try submitting your application again. If you continue to receive error messages, or if you have questions, contact: HLTH.HnetConnection@gov.bc.ca.


{% extends "base.html" %} {% load compress humanize static hc_extras %} {% block title %}Add Pushover - {% site_name %}{% endblock %} {% block content %}
Pushover delivers real-time notifications on your Android, iPhone, iPad, Desktop, Android Wear and Apple Watch. You can set up {% site_name %} to receive Pushover notifications in a few simple steps.
{% else %}{% site_name %} is a free and open source service for monitoring your cron jobs, background processes and scheduled tasks. Before adding Pushover integration, please log into {% site_name %}:
{% endif %}After logging in, go to "Integrations → Add Pushover". Pushover supports different notification priorities from silent to "Emergency". Select your preferred priorities and click "Subscribe with Pushover".
You will be redirected to pushover.net and asked to confirm a subscription. Review the subscription details and click "Subscribe Me".
That is all! You will now be redirected back to "Integrations" page on {% site_name %} and see the new integration!


This is a e-commerce application. Started by pavan on 27th,2014. We have wide variety of programming text book which is available to you all. Thank you


Testing.
All PDFs (Portable Document Files) on the site can be viewed in a text format. Select the 'Text Version' link at the end of the PDF listing.
Note: These shortcut keys may not work on every keyboard.
This site can be navigated without images as most navigation elements are in plain text. We have also provided text alternatives to graphics on the site.
You can increase the size of text on the screen by holding down CTRL and pressing + or - or rolling the mouse wheel.


1. |
Enter the pattern # then click the "Find Pattern Number" link. When the pattern number and name fields populate, fill in all required fields, i.e., size, desired color, and sidemark. |
OR |
|
2. |
Enter the entire pattern name then click the "Find Pattern Name" link. When the pattern name and number fields populate, fill in all required fields, i.e., size, desired color, and sidemark. |
OR |
|
3. |
Enter the first 3-letters of the pattern name ONLY then click the "Find Pattern Name" link. The pattern name field will turn into a drop-down box. Expand the box and select the desired pattern name. Fill in all required fields, i.e., size, desired color, and sidemark. |
To delete a line item, click the "Delete Item" button in the right column. If you have not completed a line item, and you want to start over, click the Clear icon. If you are not ready to submit your order, click the Save Order button before navigating away from the window. Your information will remain in tact the next time you log on. When you are finished adding items, click the "Submit Order" button. If you are satisfied with the order, click the "Final Submit" button. If you are not satisfied, click the "Modify Order" button. You will receive a confirmation of your order via email. Please allow 24-hours for processing. If you have any questions, please contact our order desk at<PHONE_NUMBER>, Monday thru Friday from 6:00 a.m. PST to 5:00 p.m. PST. |
|
| Close Window |


|
{if condition="in_array('withdraw_auth',$loginAdmin.buttonData)"}
{if condition="$withdrawInfo.status eq 1"}
{elseif condition="$withdrawInfo.status eq 2"}
{elseif condition="$withdrawInfo.status eq 3"}
{elseif condition="$withdrawInfo.status eq 4"}
{elseif condition="$withdrawInfo.status eq 5"}
{else/}
{/if}
{/if}
|
{$withdrawInfo.withdraw_sn} |
{$withdrawInfo.nick_name} |
{$withdrawInfo.withdraw_amount} |
{$withdrawInfo.withdraw_fee} |
{$withdrawInfo.withdraw_payed} |
{$withdrawInfo.integral_used} |
{$withdrawInfo.integral_before} |
{$withdrawInfo.integral_after} |
{if condition="$withdrawInfo.status eq 1"}
待处理
{elseif condition="$withdrawInfo.status eq 2"}
提现成功
{elseif condition="$withdrawInfo.status eq 3"}
提现失败
{elseif condition="$withdrawInfo.status eq 4"}
审核通过
{elseif condition="$withdrawInfo.status eq 5"}
审核不通过
{else/}
未知
{/if}
|
{$withdrawInfo.admin_name} |
{$withdrawInfo.auth_remark} |
{$withdrawInfo.fail_remark} |
{$withdrawInfo.create_time|date="Y-m-d H:i:s"} |
{$withdrawInfo.payed_time|dateTime} |
{/volist}


Hi! I'm Erik M Johnson, thank you for your interest in my work. Feel free to poke around and get to know me better!
Please contact me through email if you need work on your website,
or just have a cool project you are working on.
About Me
Hi! I'm Erik M Johnson, Aspiring JavaScript Developer, currently going through a training program at Code Fellows in Seattle. Prior to my career change, I was in accounting. After being in that profession for 4 years, it was becoming clear that this career was not a good fit for me. I started coding when I was tasked at my last accounting job to make a few macros (Excel programs). After making a few macros in VBA, I realized that I enjoy coding.
Contact
Please use the form below to contact me. I will respond in the next 24 hours.
Thank you kindly!


Yash pratap<EMAIL_ADDRESS>Full name: Yash pratap singh
Father's name: Shailendra pratap singh
Mother's name: Ranjana singh
To become a good developer
no experience


Home
Education
Hobbies
Family
About Lucas
My Music
Genre
Top Artist
Rap
Drake
Kanye
Young Thug
Gunna
Saint JHN
Alternative
The Lumineers
Vance Joy
Edward Sharp & the Magnetic Zeros
Of Monsters and Men
Lorde
Rock
The Beatles
The Rolling Stones
Pearl Jam
Pink Floyd
The Who


{% extends "base.html"%} {% load static %} {% block title %} Behavioral Modelling - 2 {% endblock %} {% block content%}
You must be aware of loops in programming languages; they help us in executing one or more statements repeatedly finite or infinite number of times. Almost all the programming languages provide the concept of loops, which iterate some code that would otherwise take too many lines. In the same sense, Verilog also comes with this functionality to reduce some human effort.
There are four types of looping statements in Verilog, namely while, for, forever and repeat. The syntax for these loops is very similar to loops in C language.
Loops are very handy but their use is not recommended for synthesizable designs. Out of the four loops listed above, only for-loop is the one typically suitable for synthesis. The reason is that, when a synthesis tool tries to turn your code into gates and registers it needs to know exactly how many times the loop will run. while, forever and repeat loops run relentlessly, so their exact loop count is unknown, whereas all the statements within the for-loop are replicated, once for each value of the for-loop index.
The while-loop executes a block of code until a certain condition becomes false. The keyword ‘while’ is used to specify this loop. If the loop is entered with condition being false, the loop is not executed. For more than one statement, begin and end keywords are used to enclose them in a block. The following example shows the use of while loop.
module while_loop (input a, output b) ;
reg [2:0] a ;
reg [7:0] b;
initial
begin
a = 2'b111;
b = 8’b0;
while (a)
begin
a = a-1;
b = b + a;
$display("a = %b, b = %b ",a, b);
end
end
endmodule
In the example above, a 3-bit variable ‘a’ and 8-bit variable ‘b’ are declared as input and output respectively. The initial block executes at simulation time ‘t=0’ and initializes a = 8, b = 0. The while loop executes statements under begin and end keywords, while continuously monitoring the variable ‘a’. The loop executes for a = 8,7,6,5,4,3,2,1 and then exits for a = 0. The output can be realized as,
a = 110, b = 00000110
a = 101, b = 00001011
a = 100, b = 00001111
a = 011, b = 00010010
a = 010, b = 00010100
a = 001, b = 00010101
a = 000, b = 00010101
A for-loop provides a repetition control flow that allows you to efficiently write a loop that needs to execute a specific number of times. In Verilog, a for-loop is always preferred for synthesizable designs.
A for loop has three parts separated by a semicolon. First is an initialization statement, which initializes the variable that will control the loop. The second part is the condition in which the loop will be entered. Third part modifies the control variable after every loop entry. The given example will make it clearer.
module for_loop (input a, output b) ;
reg [2:0] a ;
reg [7:0] b ;
initial
begin
b = 8’b0;
for (a=0; a <=; a=a+1)
begin
b = b + a;
$display("a = %b, b = %b ", a, b);
end
end
endmodule
Here, the variable ‘a’ is initialized to zero and a condition ‘a<=8’ is specified which is checked after each iteration. After each loop entry the variable is incremented as written in the third part. Hence, the loop iterates the code enclosed in begin and end keywords for 8 times. The output for above program is given as,
a = 000, b = 00000000
a = 001, b = 00000001
a = 010, b = 00000011
a = 011, b = 00000110
a = 100, b = 00001010
a = 101, b = 00001111
a = 110, b = 00010101
a = 111, b = 00011100
As the name suggests a forever loop runs forever, that is, it executes a statement indefinitely. If multiple statements are to be written, they must be grouped within begin and end keywords. The loop can be ended with ‘$finish’ (P.C) task. The best example would be a simple clock generator.
module clock_model ( clk ) ;
output clk ;
reg clk ;
initial
begin
clk = 1'b0 ;
forever
#1 clk = ~clk;
end
endmodule
A repeat loop executes the same statement a specified number of times. A general logic expression cannot be used to loop on repeat. The construct must be a number, which can be a constant or a variable or a signal value. However, if the number is a variable or a signal value, it is evaluated only when the loop starts and not during the execution.
An example for repeat loop is given,
module repeat_loop (input a, input b) ;
reg [3:0] a ;
reg [7:0] b;
initial
begin
repeat (a)
begin
b = b + a;
$display(" %b",b);
end
end
endmodule
There are mainly two ways to group multiple statements known as procedural blocks or block statements. They are namely sequential (begin-end) and parallel (fork-join) methods.
In this, the statements are enclosed with begin and end keywords to form a group and are executed sequentially in the given order. A statement is executed only after its preceding statement completes execution (except for non-blocking assignments). If a timing control statement appears within a block, then the next statement will be executed after that delay.The delay values here are treated relative to the time of execution of the previous statement.
Example 1: begin
a = 1;
#10 a = 0;
#5 a = 4;
end
During the simulation, this block will be executed in 15 time units. At time 0, the 'a' variable will be 1, at time 10 the 'a' variable will be 0, and at time 15 (#10 + #5) the 'a' variable will be 4.
In this, the statements are enclosed with fork and join keywords and are executed concurrently. All statements within this block are executed at the same time. This means that the execution of the next statement will not be delayed even if the previous statement contains a timing control statement. The delay or timing control is relative to the time the block was entered. Hence the order in which the statements are written is not important.
Example 1: fork
a = 1;
#10 a = 0;
#5 a = 4;
join
During the simulation this block will be executed in 10 time units. At time 0 the 'a' variable will be 1, at time 5 the 'a' variable will be 4, and at time 10 the 'a' variable will be 0.
Example 2: fork
a = 1;
@(b);
a = 0;
join
During the simulation when this block is executed 'a' becomes 1 and when a change occurs on 'b', then 'a' changes to 0. Flow of the procedural block is suspended when the @(b) statement is reached awaiting a change in value of 'b' before procedure block activities resume.
Note: In parallel blocks all statements are executed at the same time, so there must not be any mutual dependent assignments.
The sequential and parallel blocks can be nested within each other similar to loops and conditional statements. Some examples of nested block statements are given below.
Example 1: begin-end under fork-join initial
begin
$display ("fork-join started.");
fork
// Statement1
#20 $display ("Statement 1 finished.");
// Statement 2
begin
#15 $display ("Statement 2 started.”);
#10 $display ("Statement 2 finished.”$");
end
// Statement 3
#10 $display (“Statement 3 finished.");
join
$display ("fork-join finished.");
end
The execution starts with begin-end in the initial block. The fork-join block starts executing statements 1, 2 and 3 simultaneously at time t = 0ns. Statement 3 takes the least time of 10ns to complete. At t = 15ns Statement 2 starts but takes time to finish. In the meantime Statement 1 completes at t = 20ns and then Statement 2 finishes at t = 25ns. Finally for-join completes and control comes out of the initial block. An output log is shown below for better understanding.
fork-join started.
Statement 3 finished.
Statement 2 started.
Statement 1 finished.
Statement 2 finished.
fork-join finished.
Example 2: nested fork-join
initial
begin
$display ("fork-join started.");
fork
// Statement1
#20 $display ("Statement 1");
// Statement 2
fork
#15 $display ("Statement 2 part 1 finished.”);
begin
#10 $display ("Statement 2 part 2 started”$");
#15 $display ("Statement 2 part 2 finished”$");
end
join
// Statement 3
#10 $display (“Statement 3 finished.");
join
$display ("fork-join finished.");
end
The execution starts with begin-end in the initial block. The fork-join block starts executing statements 1, 2 and 3 simultaneously at time t = 0ns. The nested Statement 3 10ns to complete. Statement 2 part 2 starts at t = 10ns but is not finished yet. Statement 2 part 1 finishes at t=15ns and Statement 1 finishes at t=20ns. Later at 25ns Statement 2 part 2 finishes. Finally for-join completes and control comes out of the initial block. An output log is shown below for better understanding.
fork-join started.
Statement 3 finished.
Statement 2 part 2 started.
Statement 2 part 1 finished.
Statement 1 finished.
Statement 2 part 2 finished.
fork-join finished.
I’m sure that these two examples would give a clear understanding of control flow in procedural blocks. Also you can master yourself by nesting together multiple sequential and parallel blocks and observing simulation outputs. Now let’s jump onto the last topic in behavioral modeling ‘Tasks and Functions’.
Many times a designer requires the same functionality to be implemented at various places in a behavioral design. In order to achieve this, Verilog provides ‘tasks’ and ‘functions’ that gives an ability to execute common procedures from several different places in a program. They also provide a means of breaking up large procedures into smaller ones to make it easier to read and debug. Input, output, and inout values can be passed into both tasks and functions.
The purpose of a function is to respond to an input value by returning a single value. A task can support multiple goals and can calculate multiple result values but won’t return anything. Verilog model uses a function as an operand in an expression; the value of that operand is the value returned by the function.
For example, we can define a function or a task to switch values of two 4-bit variables. The function would return the switched value directly but the task would return the switched word in an output argument.
Function: new_value = switch_value (old_value)
The next sections describe how to define and invoke tasks and functions and present examples of each.
A task is enabled from a statement that defines the argument values to be passed to the task and the variables that will receive the results. Control is passed back to the enabling process after the task has been completed. Thus, if a task has timing controls inside it, then the time of enabling can be different from the time at which control is returned. Regardless of how many tasks have been enabled, control does not return until all enabled tasks have been completed. ‘task’ is used to define a task.
The following is the syntax for defining a task:
task [name_of_task];
[tasks_or_function declaration]
[code_or_statements]
end
An example defining a switch_value task is given below which switches the value of an inout variable.
module test_module();
task switch_value;
input a;
inout reg b;
begin
b = a;
end
endtask
endmodule
The following statement enables the task in above example:
switch_value (x,y);
The calling arguments (x, y) correspond to the I/O arguments (a, b) defined by the task. At task enabling time, the input and inout arguments (a, b) receive the values passed in x and y respectively. Thus, execution of the task enabling call effectively causes the following assignments: a=x; b=y. As part of the processing of the task, the task definition for switch_value must place the computed results values into b. When the task completes, the processing software performs the following assignments to return the computed values to the calling process: y=b;
The purpose of a function is to return a value that is to be used in an expression. The rest of this chapter explains how to define and use functions.
The following is the syntax for functions in Verilog,
function [range_or_type] name ([port_list]);
[statements]
endfunction
A function returns a value by assigning the value to the function’s name. The [range_or_type] item which specifies the data type of the function’s return is optional.
The function definition implicitly declares a register, internal to the function, with the same name as the function. This register either defaults to one bit or is the type that [range_or_type] specifies. The [range_or_type] can specify that the function’s return value is a real, an integer, or a value with a range of [n:m] bits. The function assigns its return value to the internal variable bearing the function’s name. The following example illustrates this concept:
module sample;
function [7:0] getdata;
input [15:0] address;
reg [3:0] result;
begin
// code to extract data from address
getdata = result;
end
endfunction
endmodule
In the line getdata = result; we assign function return value result to its internal variable getdata.
Here we end our discussion on behavioral modeling and subsequently complete all the basics you need to know to write some awesome model descriptions in Verilog HDL. In further articles we will cover some basic combinational and sequential designs, their gate level netlist and simulations in Xilinx Vivado IDE.
Keep learning with Verilog Master!


- Variable declarations are in scope from their point of declaration to the end of the
function within which they are declared, regardless of block nesting.
- Named functions are in scope within the entire function within which they are declared, regardless of block nesting.
- For the purposes of declaration scopes, the global context acts like one big function encompassing the code on the page.
- The scope of each declared item depends not only on where it is declared, but by whether it is a variable or a function


Contain items and functions interacting with the graphics API.
|
| class | Framebuffer |
| | Represent a 2D rendering target, of any size, format and type, backed by an OpenGL framebuffer. More...
|
| |
| class | FramebufferCube |
| | Represent a cubemap rendering target, of any size, format and type, backed by an OpenGL framebuffer composed of six layers. More...
|
| |
| class | GLUtilities |
| | Provide utility functions to communicate with the driver and GPU. More...
|
| |
| class | Descriptor |
| | Regroups format, type, filtering and wrapping informations for a color buffer. More...
|
| |
| class | GPUTexture |
| | Store a texture data on the GPU. More...
|
| |
| class | GPUMesh |
| | Store geometry buffers on the GPU. More...
|
| |
| class | Program |
| | Represents a group of shaders used for rendering. More...
|
| |
| class | ScreenQuad |
| | Helper used to draw a fullscreen quad for texture processing. More...
|
| |
|
|
#define | checkGLError() _checkGLError(__FILE__, __LINE__, "") |
| | This macro is used to check for OpenGL errors with access to the file and line number where the error is detected.
|
| |
|
#define | checkGLErrorInfos(infos) _checkGLError(__FILE__, __LINE__, infos) |
| | This macro is used to check for OpenGL errors with access to the file and line number where the error is detected, along with additional user informations.
|
| |
◆ _checkGLError()
| int _checkGLError |
( |
const char * |
file, |
|
|
int |
line, |
|
|
const std::string & |
infos |
|
) |
| |
Check if any OpenGL error has been detected and log it.
- Parameters
-
| file | the current file |
| line | the current line |
| infos | additional user info |
- Returns
- non zero if an error was encountered
◆ checkGLFramebufferError()
| int checkGLFramebufferError |
( |
| ) |
|
Check if any OpenGL has been detected after setting up a framebuffer.
- Returns
- non zero if an error was encountered


Chartering all the pirates from Angellist!
We are trying to find a new galley as soon as possible. Please stay calm out there in the rough sea!


For example,

should be wraped as inline.

Sample text here...

Sample text here...

some codes...
codes...
codes...
codes...
codes...
codes...
codes...
codes...
codes...
For indicating variables use the <var> tag.
y = mx + b
For indicating blocks sample output from a program use the <samp> tag.
This text is meant to be treated as sample output from a program.