Sadaffe Abid
Zein Ahmed
Exhibition Details
Venue: Alliance Française, Karachi
Date: 7th AND 8th May, 2018
Time: 11am To 7pm
Exhibition opening & talk by Sadaffe Abid ‘Creating prosperity for artisans through business’ Venue: Alliance Française, Karachi Date: Monday, 7 May, 2018 Time: 6 pm
Sadaffe Abid is one of Pakistan’s most successful businesswomen. She was the chief executive of the Kashf Foundation, one of the largest microfinance institutions in Pakistan, growing it from a pilot project in two rooms, to serve 300,000 female clients with micro-loans. Ms Abid also co-founded the Buksh Foundation, a Pakistani start-up that enhances financial access to micro entrepreneurs. After 13 years in micro-financing, Ms Abid now splits her time between Dubai and Pakistan, conducting leadership training focused on developing high-potential female professionals and entrepreneurs and emerging talent.
Zein Ahmed’s journey with ethical design began nearly three decades ago in Lahore. This was the early 1990s, and it marked the beginning of her love for handloom textiles. In 1998 Zein shifted to New York where she became part of the slow fashion movement, setting up her own clothing label, Guru. Her lifestyle range of linen tunics and dresses were borne out of that first impulse—classic silhouettes, crafted with urban flair, and based on social as well as environmentally conscious production modes. Zein works with a bold heart (and phenomenal speed). Making Life Matter, her new ensemble line, draws upon a year-long passion project with Sindh-based artisans. She has spent about 8 months in research, before launching production in January this year. The outcome—a limited edition show of 4, 8, and 12-panel kurtas, as well as short tunics, made with pure, breathable fabric. Inspired by the practice of ‘truest form,’ Zein engaged traditional, master craftsmen from the region—weaving ustad, Wazir Ali, and ajrak ustad, M. Riaz—in order to develop her base textiles. These were then crafted with embroidery by gifted Sukker-based artisans. ‘The textiles are so happy because of this!—these craftswomen claim what they are working on. 99%, their own ideas.’ Zein’s own guidance has been in terms of fabric quality, input on colour palette, minor feedback on works. Her guidance comes in fact as a shift in view. Encouraging ownership of freeform embroidery work and claim to fair wage practice—these values are perhaps her real lines of support. As a financial model, Zein made 50% payment in advance and 50% upon completion of works. With direct imbursement to individual makers, middle person access (and potential of pilferage) was removed. Craftswomen were paid well above standard market wages. And in total, 150 artisans were employed for the project term. Good design is then not about the surface of a garment alone. For this designer-entrepreneur, it is about a purity of practice from the ground up. Design, for Zein, resonates all stages of production and artisanal making. There’s something invisible here, in a tunic’s intimate feel. A transparent joy in adornment. Ethical excellence. - *Tankas or embroidery stitches include: hurmich, makri tanka, bharti tanka, kachi sui tanka, kundi, mirror work, and balochi tanka. *Block-print ustad M. Soomro, from Bhit Shah, worked with customised inks and blocks for the blockprint line.


Version Control, Git and Github
How are all these terms related?
Febuary, 28th, 2015
The first week at DBC we learned about version control, Git and Github. So how are all these terms related?
Let’s start with Version Control. Version Control, also referred to as Source or Revision Control, is the ability to keep track of file or project changes. It provides ‘snapshots” of your project, and the ability to go back to specific points.
One of the benefits to Version Control is that you can "undo” changes to your project. Say you have Ms. Newbie Developer working on your 3 month code project, and she accidentally gets a bug in the code, well, having version control allows you to go back, and “undo” the changes made, to the version of the code that was working. This benefit is very important as it avoids starting on a project all over again. Imagine you had to do that?! Ouch!
So how does this version control get tracked? Who does this? This is were Git comes into play. Git is a version control management software. Git tracks your commit, or ‘snapshot”, saved on your project to your computer or server, often referred to as “local” because it’s being use within the constraint of a local environment.
But let’s say you wanted to share your work with others and collaborate on the project. This can be quite hard to coordinate. What work will each individual be responsible for? How do we combine our work? How can we be sure that all the changes will be updated accordingly? Luckily, Github does all of that that for you! Yes! How cool is that!? Github is a webpage specifically made to work with Git. It allows users to upload their projects onto their webpage as “repositories”, and stores it on the internet. It allows others to “fork” or clone a copy of the repository, and work on their own copy. Then once changes are made, Github tracks the most current “Master” project.
Version control is essential for any web developer or anyone that wants to collaborate on a project. Next time you work on something give it it try! :)
Dina


Chapter 5 Reproducible research #1
The video lectures for this chapter are embedded at relevant places in the text, with links to download a pdf of the associated slides for each video. You can also access a full playlist for the videos for this chapter.
5.1 What is reproducible research?
Download a pdf of the lecture slides for this video.
A data analysis is reproducible if all the information (data, files, etc.) required is available for someone else to re-do your entire analysis. This includes:
- Data available
- All code for cleaning raw data
- All code and software (specific versions, packages) for analysis
Some advantages of making your research reproducible are:
- You can (easily) figure out what you did six months from now.
- You can (easily) make adjustments to code or data, even early in the process, and re-run all analysis.
- When you’re ready to publish, you can (easily) do a last double-check of your full analysis, from cleaning the raw data through generating figures and tables for the paper.
- You can pass along or share a project with others.
- You can give useful code examples to people who want to extend your research.
Here is a famous research example of the dangers of writing code that is hard to double-check or confirm:
Some of the steps required to making research reproducible are:
- All your raw data should be saved in the project directory. You should have clear documentation on the source of all this data.
- Scripts should be included with all the code used to clean this data into the data set(s) used for final analyses and to create any figures and tables.
- You should include details on the versions of any software used in analysis (for R, this includes the version of R as well as versions of all packages used).
- If possible, there should be no “by hand” steps used in the analysis; instead, all steps should be done using code saved in scripts. For example, you should use a script to clean data, rather than cleaning it by hand in Excel. If any “non-scriptable” steps are unavoidable, you should very clearly document those steps.
There are several software tools that can help you improve the reproducibility of your research:
knitr
: Create files that include both your code and text. These can be rendered to create final reports and papers. They keep code within the final file for the report.knitr
complements: Create fancier tables and figures within RMarkdown documents. Packages includetikzDevice
,animate
,xtables
, andpander
.packrat
: Save versions of each package used for the analysis, then load those package versions when code is run again in the future.
In this section, I will focus on using knitr
and RMarkdown files.
5.2 Markdown
Download a pdf of the lecture slides for this video.
R Markdown files are mostly written using Markdown. To write R Markdown files, you need to understand what markup languages like Markdown are and how they work.
In Word and other word processing programs you have used, you can add formatting using buttons and keyboard shortcuts (e.g., “Ctrl-B” for bold). The file saves the words you type. It also saves the formatting, but you see the final output, rather than the formatting markup, when you edit the file (WYSIWYG – what you see is what you get).
In markup languages, on the other hand, you markup the document directly to show what formatting the final version should have (e.g., you type **bold**
in the file to end up with a document with bold).
Examples of markup languages include:
- HTML (HyperText Markup Language)
- LaTex
- Markdown (a “lightweight” markup language)
For example, Figure 5.1 some marked-up HTML code from CSU’s website, while Figure 5.2 shows how that file looks when it’s rendered by a web browser.
To write a file in Markdown, you’ll need to learn the conventions for creating formatting. This table shows what you would need to write in a flat file for some common formatting choices:
| Code | Rendering | Explanation |
|---|---|---|
**text** |
text | boldface |
*text* |
text | italicized |
[text](www.google.com) |
text | hyperlink |
# text |
first-level header | |
## text |
second-level header |
Some other simple things you can do in Markdown include:
- Lists (ordered or bulleted)
- Equations
- Tables
- Figures from file
- Block quotes
- Superscripts
For more Markdown conventions, see RStudio’s R Markdown Reference Guide (link also available through “Help” in RStudio).
5.3 Literate programming in R
Download a pdf of the lecture slides for this video.
Literate programming, an idea developed by Donald Knuth, mixes code that can be executed with regular text. The files you create can then be rendered, to run any embedded code. The final output will have results from your code and the regular text.
The knitr
package can be used for literate programming in R. In essence, knitr
allows you to write an R Markdown file that can be rendered into a pdf, Word, or HTML document.
Here are the basics of opening and rendering an R Markdown file in RStudio:
- To open a new R Markdown file, go to “File” -> “New File” -> “RMarkdown…” -> for now, chose a “Document” in “HTML” format.
- This will open a new R Markdown file in RStudio. The file extension for R Markdown files is “.Rmd”.
- The new file comes with some example code and text. You can run the file as-is to try out the example. You will ultimately delete this example code and text and replace it with your own.
- Once you “knit” the R Markdown file, R will render an HTML file with the output. This is automatically saved in the same directory where you saved your .Rmd file.
- Write everything besides R code using Markdown syntax.
To include R code in an RMarkdown document, you need to separate off the code chunk using the following syntax:
```{r}
my_vec <- 1:10
```
This syntax tells R how to find the start and end of pieces of R code when the file is rendered. R will walk through, find each piece of R code, run it and create output (printed output or figures, for example), and then pass the file along to another program to complete rendering (e.g., Tex for pdf files).
You can specify a name for each chunk, if you’d like, by including it after “r” when you begin your chunk. For example, to give the name load_nepali
to a code chunk that loads the nepali
dataset, specify that name in the start of the code chunk:
```{r load_nepali}
library(faraway)
data(nepali)
```
Here are a couple of tips for naming code chunks:
- Chunk names must be unique across a document.
- Any chunks you don’t name are given numbers by
knitr
.
You do not have to name each chunk. However, there are some advantages:
- It will be easier to find any errors.
- You can use the chunk labels in referencing for figure labels.
- You can reference chunks later by name.
You can add options when you start a chunk. Many of these options can be set as TRUE / FALSE and include:
| Option | Action |
|---|---|
echo |
Print out the R code? |
eval |
Run the R code? |
messages |
Print out messages? |
warnings |
Print out warnings? |
include |
If FALSE, run code, but don’t print code or results |
Other chunk options take values other than TRUE / FALSE. Some you might want to include are:
| Option | Action |
|---|---|
results |
How to print results (e.g., hide runs the code,
but doesn’t print the results) |
fig.width |
Width to print your figure, in inches (e.g.,
fig.width = 4 ) |
fig.height |
Height to print your figure |
Add these options in the opening brackets and separate multiple ones with commas:
```{r messages = FALSE, echo = FALSE}
nepali[1, 1:3]
```
I will cover other chunk options later, once you’ve gotten the chance to try writting R Markdown files.
You can set “global” options at the beginning of the document. This will create new defaults for all of the chunks in the document. For example, if you want echo
, warning
, and message
to be FALSE
by default in all code chunks, you can run:
```{r global_options}
knitr::opts_chunk$set(echo = FALSE, message = FALSE,
warning = FALSE)
```
If you set both global and local chunk options that you set specifically for a chunk will take precedence over global options. For example, running a document with:
```{r global_options}
knitr::opts_chunk$set(echo = FALSE, message = FALSE,
warning = FALSE)
```
```{r check_nepali, echo = TRUE}
head(nepali, 1)
```
would print the code for the check_nepali
chunk, because the option specified for that specific chunk (echo = TRUE
) would override the global option (echo = FALSE
).
You can also include R output directly in your text (“inline”) using backticks:
“There are `r nrow(nepali)`
observations in the nepali
data set. The average age is `r mean(nepali$age, na.rm = TRUE)`
months.”
Once the file is rendered, this gives:
“There are 1000 observations in the nepali
data set. The average age is 37.662 months.”
Download a pdf of the lecture slides for this video.
Here are two tips that will help you diagnose some problems rendering R Markdown files:
- Be sure to save your R Markdown file before you run it.
- All the code in the file will run “from scratch”– as if you just opened a new R session.
- The code will run using, as a working directory, the directory where you saved the R Markdown file.
You’ll want to try out pieces of your code as you write an R Markdown document. There are a few ways you can do that:
- You can run code in chunks just like you can run code from a script (Ctrl-Return or the “Run” button).
- You can run all the code in a chunk (or all the code in all chunks) using the different options under the “Run” button in RStudio.
- All the “Run” options have keyboard shortcuts, so you can use those.
You can render R Markdown documents to other formats:
- Word
- Pdf (requires that you’ve installed “Tex” on your computer.)
- Slides (ioslides)
Click the button to the right of “Knit” to see different options for rendering on your computer.
You can freely post your RMarkdown documents at RPubs. If you want to post to RPubs, you need to create an account. Once you do, you can click the “Publish” button on the window that pops up with your rendered file. RPubs can also be a great place to look for interesting example code, although it sometimes can be pretty overwhelmed with MOOC homework.
If you’d like to find out more, here are two good how-to books on reproducible research in R (the CSU library has both in hard copy):
- Reproducible Research with R and RStudio, Christopher Gandrud
- Dynamic Documents with R and knitr, Yihui Xie
5.4 Style guidelines
Download a pdf of the lecture slides for this video.
R style guidelines provide rules for how to format code in an R script. Some people develop their own style as they learn to code. However, it is easy to get in the habit of following style guidelines, and they offer some important advantages:
- Clean code is easier to read and interpret later.
- It’s easier to catch and fix mistakes when code is clear.
- Others can more easily follow and adapt your code if it’s clean.
- Some style guidelines will help prevent possible problems (e.g., avoiding
.
in function names).
For this course, we will use R style guidelines from two sources:
These two sets of style guidelines are very similar.
Hear are a few guidelines we’ve already covered in class:
- Use
<-
, not=
, for assignment. - Guidelines for naming objects:
- All lowercase letters or numbers
- Use underscore (
_
) to separate words, not camelCase or a dot (.
) (this differs for Google and Wickham style guides) - Have some consistent names to use for “throw-away” objects (e.g.,
df
,ex
,a
,b
)
- Make names meaningful
- Descriptive names for R scripts (“random_group_assignment.R”)
- Nouns for objects (
todays_groups
for an object with group assignments) - Verbs for functions (
make_groups
for the function to assign groups)
5.4.1 Line length
Google: Keep lines to 80 characters or less
To set your script pane to be limited to 80 characters, go to “RStudio” -> “Preferences” -> “Code” -> “Display”, and set “Margin Column” to 80.
# Do
my_df <- data.frame(n = 1:3,
letter = c("a", "b", "c"),
cap_letter = c("A", "B", "C"))
# Don't
my_df <- data.frame(n = 1:3, letter = c("a", "b", "c"), cap_letter = c("A", "B", "C"))
This guideline helps ensure that your code is formatted in a way that you can see all of the code without scrolling horizontally (left and right).
5.4.2 Spacing
- Binary operators (e.g.,
<-
,+
,-
) should have a space on either side - A comma should have a space after it, but not before.
- Colons should not have a space on either side.
- Put spaces before and after
=
when assigning parameter arguments
5.4.3 Semicolons
Although you can use a semicolon to put two lines of code on the same line, you should avoid it.
5.4.4 Commenting
- For a comment on its own line, use
#
. Follow with a space, then the comment. - You can put a short comment at the end of a line of R code. In this case, put two spaces after the end of the code, one
#
, and one more space before the comment. - If it helps make it easier to read your code, separate sections using a comment character followed by many hyphens (e.g.,
#------------
). Anything after the comment character is “muted”.
5.4.5 Indentation
Google:
- Within function calls, line up new lines with first letter after opening parenthesis for parameters to function calls:
Example:
5.4.6 Code grouping
- Group related pieces of code together.
- Separate blocks of code by empty spaces.
# Load data
library(faraway)
data(nepali)
# Relabel sex variable
nepali$sex <- factor(nepali$sex,
levels = c(1, 2),
labels = c("Male", "Female"))
Note that this grouping often happens naturally when using tidyverse functions, since they encourage piping (%>%
and +
).
5.5 More with knitr
Download a pdf of the lecture slides for this video.
5.5.1 Equations in knitr
You can write equations in RMarkdown documents by setting them apart with dollar signs ($
). For an equation on a line by itself (display equation), you two $
s before and after the equation, on separate lines, then use LaTex syntax for writing the equations.
To help with this, you may want to use this LaTex math cheat sheet.. You may also find an online LaTex equation editor like Codecogs.com helpful.
Note: Equations denoted this way will always compile for pdf documents, but won’t always come through on Markdown files (for example, GitHub won’t compile math equations).
For example, writing this in your R Markdown file:
$$
E(Y_{t}) \sim \beta_{0} + \beta_{1}X_{1}
$$
will result in this rendered equation:
\[ E(Y_{t}) \sim \beta_{0} + \beta_{1}X_{1} \]
To put math within a sentence (inline equation), just use one $
on either side of the math. For example, writing this in a R Markdown file:
"We are trying to model $E(Y_{t})$."
The rendered document will show up as:
“We are trying to model \(E(Y_{t})\).”
5.5.2 Figures from file
You can include not only figures that you create with R, but also figures that you have saved on your computer.
The best way to do that is with the include_graphics
function in knitr
:
This example would include a figure with the filename “MyFigure.png” that is saved in the “figures” sub-directory of the parent directory of the directory where your .Rmd is saved. Don’t forget that you will need to give an absolute pathway or the relative pathway from the directory where the .Rmd file is saved.
5.5.3 Saving graphics files
You can save figures that you create in R. Typically, you won’t need to save figures for an R Markdown file, since you can include figure code directly. However, you will sometimes want to save a figure from a script. You have two options:
- Use the “Export” choice in RStudio
- Write code to export the figure in your R script
To make your research more reproducible, use the second choice.
To use code export a figure you created in R, take three steps:
- Open a graphics device (e.g.,
pdf("MyFile.pdf")
). - Write the code to print your plot.
- Close the graphics device using
dev.off()
.
For example, the following code would save a scatterplot of time versus passes as a pdf named “MyFigure” in the “figures” subdirectory of the current working directory:
pdf("figures/MyFigure.pdf", width = 8, height = 6)
ggplot(worldcup, aes(x = Time, y = Passes)) +
geom_point(aes(color = Position)) +
theme_bw()
dev.off()
If you create multiple plots before you close the device, they’ll all save to different pages of the same pdf file.
You can open a number of different graphics devices. Here are some of the functions you can use to open graphics devices:
pdf
png
bmp
jpeg
tiff
svg
You will use a device-specific function to open a graphics device (e.g., pdf
). However, you will always close these devices with dev.off
.
Most of the functions to open graphics devices include parameters like height
and width
. These can be used to specify the size of the output figure. The units for these depend on the device (e.g., inches for pdf
, pixels by default for png
). Use the helpfile for the function to determine these details.
5.5.4 Tables in R Markdown
If you want to create a nice, formatted table from an R dataframe, you can do that using kable
from the knitr
package.
| letters | numbers |
|---|---|
| a | 1 |
| b | 2 |
| c | 3 |
There are a few options for the kable
function:
| arg | expl |
|---|---|
colnames |
Column names (default: column name in the dataframe) |
align |
A vector giving the alignment for each column (‘l’, ‘c’, ‘r’) |
caption |
Table caption |
digits |
Number of digits to round to. If you want to round columns different amounts, use a vector with one element for each column. |
my.df <- data.frame(letters = c("a", "b", "c"),
numbers = rnorm(3))
kable(my.df, digits = 2, align = c("r", "c"),
caption = "My new table",
col.names = c("First 3 letters",
"First 3 numbers"))
| First 3 letters | First 3 numbers |
|---|---|
| a | 0.71 |
| b | -0.10 |
| c | 1.10 |
From Yihui:
“Want more features? No, that is all I have. You should turn to other packages for help. I’m not going to reinvent their wheels.”
If you want to do fancier tables, you may want to explore the xtable
and pander
packages. As a note, these might both be more effective when compiling to pdf, rather than html.
5.6 In-course exercise Chapter 5
For all of today’s tasks, you’ll use the code from last week’s in-course exercise to do the exercises. This week we are not focusing on writing new code, but rather on how to take R code and put it in an R Markdown file, so we can create reports from files that include the original code.
5.6.1 Creating a Markdown document
First, you’ll create a Markdown document, without any R code in it yet.
In RStudio, go to “File” -> “New File” -> “R Markdown”. From the window that brings up, choose “Document” on the left-hand column and “HTML” as the output format. A new file will open in the script pane of your RStudio session. Save this file (you may pick the name and directory). The file extension should be “.Rmd”.
First, before you try to write your own Markdown, try rendering the example that the script includes by default. (This code is always included, as a template, when you first open a new RMarkdown file using the RStudio “New file” interface we used in this example.) Try rendering this default R Markdown example by clicking the “Knit” button at the top of the script file.
For some of you, you may not yet have everything you need on your computer to be able to get this to work. If so, let me know. RStudio usually includes all the necessary tools when you install it, but there may be some exceptions.
If you could get the document to knit, do the following tasks:
- Look through the HTML document that was created. Compare it to the R Markdown script that created it, and see if you can understand, at least broadly, what’s going on.
- Look in the directory where you saved the R Markdown file. You should now also see a new, .html file in that folder. Try opening it with a web browser like Safari.
- Go back to the R Markdown file. Delete everything after the initial header information (everything after the 6th line). In the header information, make sure the title, author, and date are things you’re happy with. If not, change them.
- Using Markdown syntax, write up a description of the data (
worldcup
) we used last week to create the fancier figure. Try to include the following elements:- Bold and italic text
- Hyperlinks
- A list, either ordered or bulleted
- Headers
5.6.2 Adding in R code
Now incorporate the R code from previous weeks’ exercises into your document. Once you get the document to render with some basic pieces of code in it, try the following:
- Try some different chunk options. For example, try setting
echo = FALSE
in some of your code chunks. Similarly, try using the optionsresults = "hide"
andinclude = FALSE
. - You should have at least one code chunk that generates figures. Try experimenting with the
fig.width
andfig.height
options for the chunk to change the size of the figure. - Try using the global commands. See if you can switch the
echo
default value for this document from TRUE (the usual default) to FALSE.
5.6.3 Working with R Markdown documents
Finally, try the following tasks to get some experience working with R Markdown files in RStudio:
- Go to one of your code chunks. Locate the small gray arrow just to the left of the line where you initiate the code chunk. Click on it and see what happens. Then click on it again.
- Put your cursor inside one of your code chunks. Try using the “Run” button (or Ctrl-Return) to run code in that chunk at your R console. Did it work?
- Pick a code chunk in your document. Put your cursor somewhere in the code in that chunk. Click on the “Run” button and choose “Run All Chunks Above”. What did that do? If it did not work, what do you think might be going on? (Hint: Check
getwd()
and think about which directory you’ve used to save your R Markdown file.) - Pick another chunk of code. Put the cursor somewhere in the code for that chunk. Click on the “Run” button and choose “Run Current Chunk”. Then try “Run Next Chunk”. Try to figure out all the options the “Run” button gives you and when each might be useful.
- Click on the small gray arrow to the right of the “Knit HTML” button. If the option is offered, select “Knit Word” and try it. What does this do?


-
Virtual Telethon, October 15, 2020
To support the Multiple Sclerosis Society visit the Minimal Viable Peddlers donation page.
Join the 1904labs in-house band, MVB, in supporting and raise money via a virtual telethon for the Multiple Sclerosis Society.
Normally around this time of year, our cycling team - the Minimum Viable Peddlers - are out on our bicycles, raising money to support the MS Society in their annual MS150 bike ride. We had a great ride last year, and raised several thousand dollars.
In 2020 the pandemic sidelined us, so instead of riding, we were at the Cortex on that fall evening, socially distanced, doing a virtual musical fundraiser. For an enjoyable hour, we were there to ask you to open your hearts and your wallets while we make some music, share some great videos from the MS Society, and have some fun.Telethon Recording
About Multiple Sclerosis
Multiple Sclerosis is an unpredictable disease of the central nervous system that disrupts the flow of information within the brain, and between the brain and body. So many in our community, our friends, our family, are diagnosed with this disease. The cause of MS is still unknown. The MS Society is dedicated to a vision of a world free of MS. And we at 1904labs and Lifting the Lou are here tonight to help them. So let’s get together virtually, listen to some music, and put the FUN in FUNdraising!
To support the Multiple Sclerosis Society visit the Minimal Viable Peddlers donation page.
MS Society Videos
The Time Is NowWhatever It TakesWe BelieveKids Get MS, Too


Our teaching team consists of Shivani Surti, Kevin Luk, and Diego Hernandez, all of which are studying computer science at the University of Virginia School of Engineering and Applied Science. We are passionate about this constantly evolving field of study and want to serve our communities through teaching and engaging with students.
Partnering with engineering faculty members Keivan Esfarjani and Hui Ma, the Center for Diversity in Engineering at UVA initiated The Circle Project in efforts to support the passions of engineering students around local communities. Our goal is to provide students with an engaging engineering experience through interactive courses on intriguing topics and problems, allowing them to discover new found interests and passions.


|
|||||||||||
| PREV NEXT | FRAMES NO FRAMES |
| Packages that use mdes.slick.sui.event | |
| mdes.slick.sui | Contains a set of Sui components and utilities. |
| mdes.slick.sui.event | Contains classes for event handling with Sui components. |
| mdes.slick.sui.skin.simple | Contains classes used by SimpleSkin, the default skin for SUI. |
| Classes in mdes.slick.sui.event used by mdes.slick.sui | |
| ActionEvent
An event that indicates a component-defined event has occurred. |
|
| ActionListener
A listener to receive action events (such as button presses). |
|
| ChangeEvent
Indicates that a component/object state has changed. |
|
| ChangeListener
|
|
| ControllerListener
An interface to receive controller events. |
|
| KeyAdapter
A convenience class for SuiKeyListeners which receives key events. |
|
| KeyEvent
A keyboard event, such as key press or key release. |
|
| KeyListener
An interface to receive key events. |
|
| Listener
A tagging interface which all SUI event listeners should extend. |
|
| MouseAdapter
A convenience class for MouseListener which receives mouse events. |
|
| MouseEvent
A mouse event, including motion and press/release. |
|
| MouseListener
An interface to receive mouse events. |
|
| MouseWheelEvent
A mouse wheel event which holds the amount the wheel has changed since the last event. |
|
| MouseWheelListener
An interface to receive mouse wheel events. |
| Classes in mdes.slick.sui.event used by mdes.slick.sui.event | |
| ActionEvent
An event that indicates a component-defined event has occurred. |
|
| ChangeEvent
Indicates that a component/object state has changed. |
|
| ControllerEvent
A controller event, such as button pressed or released. |
|
| ControllerListener
An interface to receive controller events. |
|
| EventObject
The base class for SuiEvents. |
|
| KeyEvent
A keyboard event, such as key press or key release. |
|
| KeyListener
An interface to receive key events. |
|
| Listener
A tagging interface which all SUI event listeners should extend. |
|
| MouseEvent
A mouse event, including motion and press/release. |
|
| MouseListener
An interface to receive mouse events. |
|
| MouseWheelEvent
A mouse wheel event which holds the amount the wheel has changed since the last event. |
| Classes in mdes.slick.sui.event used by mdes.slick.sui.skin.simple | |
| ChangeListener
|
|
| Listener
A tagging interface which all SUI event listeners should extend. |
|
| MouseAdapter
A convenience class for MouseListener which receives mouse events. |
|
| MouseEvent
A mouse event, including motion and press/release. |
|
| MouseListener
An interface to receive mouse events. |
|
|||||||||||
| PREV NEXT | FRAMES NO FRAMES |


[*Back to Index*](index.md.html) *Thank you for creating mods for Surviving Mars! If you have questions or encounter any problems, please contact us at mars-modding@haemimontgames.com.*


This example uses @rednax-skyhook/sortable
. It's similar to
the other one, but doesn't use @ngrx
, just
Immer
. There are two kinds of sortable in play here:
- One horizontal one, whose 'cards' are the vertical lists. Try grabbing a whole list by its header, and reordering.
- Many vertical ones, which contain the kanban cards. Try moving the cards between lists.


RBI Governor Shaktikanta Das calls for tighter governance at state-run banks
by BloombergReserve Bank of India (RBI) Governor, Shaktikanta Das, called for stronger corporate governance at state-run lenders to make the country’s banking sector more efficient.
Describing the lack of strict governance as the elephant in the room, Das said this had led to elevated levels of non-performing assets, capital shortfalls, fraud and inadequate risk management.
The role of independent boards in fostering a compliance culture by establishing the proper systems of control, audit and distinct reporting of business and risk management has been found wanting in some public-sector banks leading to build-up of NPAs, Das added.
State-run lenders control about 60 per cent of India’s banking industry. They are owned by the Government, with the RBI having limited supervision and legal powers to bring about changes in management, unlike privately-owned ones over which is holds more sway. That creates an uneven playing field leading to question marks about the efficacy of the apex bank’s regulations over state-run institutions.
India’s banking sector has the highest ratio of stressed assets in the world, with many bad loans to companies in sectors such as energy and steel. A crisis in shadow banking has also raised further concern that banks, which have 7 per cent of their loans to non-banking finance companies, will face a fresh spate of debt defaults.
Das said that while the number of non performing assets (NPAs) has declined recently, the provision coverage ratio has increased to 60.5 per cent from 48.3 per cent a year ago. The capital adequacy ratio in the banking system has also climbed to above the Basel requirements, he said.
- Get Free Trial
- Hurry! Prices Increase Soon
Existing users, please Sign in here
Thank you for being a loyal user of Portfolio.
Portfolio will be a paid section hereon.
Please Subscribe to get access to one of our early bird packs. Or click on Free Trial to get 14 days free trial.
What You'll Get
-
Web + Mobile
Access exclusive content of the Hindu Businessline across desktops, tablet and mobile device.
-
Exclusive Portfolio and Investment Advice, Banking, Lifestyle and Specials
Get diverse set of perspectives from our trusted experts on Portfolio, Banking, Economy, Environment and others.
-
Ad free experience
Experience cleaner site with zero ads and faster load times.
-
Personalised dashboard
Customize your preference and get a personalized recommendation of stories based on your interest.
- Get Free Trial
- Hurry! Prices Increase Soon
Existing users, please Sign in here


Want Some Custom Made Pizza?, We Got you covered;
Select your size;
Pick Pizza Crust
Topping prices for large sized pizza;-
Topping prices for medium sized pizza;-
Topping prices for small sized pizza;-
Hawaiian Pizza
BBQ Chicken Pizza
Margherita Pizza
Pepperoni Pizza
Neapolitan Pizza
Chicago Pizza
Contact Us @;


Kandys
Flames
Color Match
Touch Up
Kandys #2
Flames #2
Color Match #2
Touch Up #2
Pearls
Stencils
Pin Stripes
Smoke
Pearls #2
Stencils #2
Pin Stripes #2
Smoke #2
Pearls #3
Stencils #3
Touch Up #3
Smoke #3


in FF 47 it was executable href="http://<IP_ADDRESS>:8000/?title=%3Cscript%3Ealert%2842%29%3C/script%3E" - Click here to see bad example
Click here to see bad example HTML file


--- layout: post title: ESANN 2019 tags: - News - Research ---
From April 24th to April 26th, I had the pleasure to attend the 27th European Symposium on Artificial Neural Networks (ESANN) at Bruges, Belgium for the second time. Again, there were a lot of interesting research sessions and I had the opportunity to discuss our papers Predicting vehicle behaviour using LSTMs and a vector power representation for spatial positions and Short-term trajectory planning using reinforcement learning within a neuromorphic control architecture during the poster sessions of the conference. You can also find the pdf files of the posters online linked in the publication list in my resume.


The goals of this lab are to
The motion assignment has been added to your AnimationFramework repository. To get the source, run
> cd cs56/AnimationToolkit > git pull > cd build > cmake .. > make
You should now have a new directory under assignments called a8-blend.
In this question, you will blend the walk motion with a strafe motion. Implement your solution in assignments/a8-blend/ABlend.cpp inside of the method blend().
// m1: First input motion // m2: Second input motion // alpha: blend value // returns the result of m1 * (1-alpha) + m2 AMotion blend(const AMotion& m1, const AMotion& m2, double alpha)
Your implementation should be based on the code from class
duration = duration1 * (1-alpha) + duration2 * alpha deltaT = 1/fps for t from 0 to duration, increment by deltaT APose pose1 = pose from motion1 APose pose2 = pose from motion2 APose newPose = lerp pose1 and pose2 by alpha result.appendKey(newPose) return result
To run the demo from the build directory, type
build> ../bin/a8-blend
Controls
Your program should have the following features
In this question, you will modify the walk motion to have the arm motion from gangnam style dancing. Implement your solution in assignements/a8-blend/ASplice.cpp.
// orig: Starting input motion // upper: Motion for the modifying the upper body (all joints which are descendants of the spine) // alpha: blend value // returns a new motion such that // the lower body matches the motion in 'orig' // the upper body is the result of blending the upper body motion with // the original's upper body motion, e.g. newupper = upper * (1-alpha) + orig * alpha AMotion spliceUpperBody(const AMotion& orig, const AMotion& upper, double alpha)
For this question, use keys for blending instead of durations, e.g.
for i in range numKeys in orig APose pose = orig.getKey(i) // compute new pose and either call appendKey() or editKey() set the pose
To run the demo from the build directory, type
build> ../bin/a8-splice
Controls
Your program should have the following features
In this question, you will modify the walk motion to have zombie arms. Implement your solution in assignements/a8-blend/AZombieArms.cpp.
To run the demo from the build directory, type
build> ../bin/a8-zombie
Part 1: Freeze Arms (5 points)
To freeze the arms, we will set both the shoulders and elbows to a constant rotation. Implement your solution in ComputeArmFreeze.
// motion: input motion // returns a new motion with the shoulders and elbows outstretched AMotion ComputeArmFreeze(const AMotion& motion)
Freeze arms should have the following features:
Part 2: Offset Arms (5 points)
To offset the arms, we will apply an offset rotation to shoulder's animation curve. We will freeze the elbows as before. Implement your solution in ComputeArmOffset.
// motion: input motion // returns a new motion with the shoulders and elbows outstretched but moving AMotion ComputeArmOffset(const AMotion& motion)
To compute the offset, we will
use the local rotation of the should on the first frame to compute an offset
rotation.
\(
R_{offset} = R_{desired} (R_i^j)^{-1}
\)
where $R_i^j$ is the local to parent rotation for the shoulder joint. $R_{desired}$ is the target rotation we want for the joint. For the right joint,
the desired rotation will be the XYZ euler angles (14, 88, -33). For the
left joint, the desired rotation will be the XYZ euler angles (-53, -88, -33).
Offset arms should have the following features:
In this question, you will modify a motion so it starts in a new location and orientation. You will need to perform the same calculation in crossfade to align two motions. Implement your solution in assignements/a8-blend/AReorient.cpp
// motion: the input motion // pos: the new starting position of the motion // heading: the new starting orientation as an angle (radians) around the world UP axis (e.g. Y) // returns a new motion whose starting pose has a root position and rotation that matches pos and heading AMotion reorient(const AMotion& motion, const AVector3& pos, double heading)
To run the demo from the build directory, type
build> ../bin/a8-reorient
Your demo should have teh following features
In this question, you will implement a cross fade transition between two motins. You have a application with a GUI to help you test. You will implement your solution in libsrc/animation/AMotionBlender-basecode.cpp.
To run the demo from the build directory, type
build> ../bin/a8-crossfade
Part 1 (5 points) Implement AMotionBlender::append.
This method should grab the keys in range
[startKeyId, endKeyId) from the input motion and append them to the output motion. Test your new
function by extending AMotionBlender::blend() to append the keys [0, startKeyId) from
motion 1 and the keys [endKeyId, motion2.getNumKeys) from motion 2. Your assignment should
look as follows: the walk motion plays and then snaps back to the origin to play the jump.
Part 2 (5 points) Implement AMotionBlender::crossfade.
So far, the transition snaps from the first motion to the
second motion. Fix this problem by implementing AMotionBlender::crossfade. This function
should blend the frame between motion 1 and motion 2 and append the blended frames to
'blend'. Extend AMotionBlender::blend to call your new crossfade function.
Now, your assignment should look as follows: the motion is smooth but the character slides to
the origin to play the jump motion.
Part 3 (5 points) Align the positions in AMotionBlender::align.
Now we have a smooth result but the jump unrealistically moves back to the origin. We want the jump to occur at the character's current location! We will fix this by aligning the sequence from motion 2 with the start transition key from motion 1. Note that you can re-use the logic from reorient!
Translate the keys so that the second sequence is aligned with the first sequence. Extend AMotionBlender::blend to call align. Your assignment should now look as follows.
Part 4 (5 points) Align the root headings in AMotionBlender::align.
Reorient the keys (e.g. rotate and translate) so that the second sequence is aligned with the first. Now your blend should look good in all cases.
Testing tip: A correct crossfade should return the original motion whenever you crossfade between the same motion. For example, try blending two walk motions over the starting 10 frames. The result should look identical to the original motion.
Option 1 (2 points) Create a unique animation or character.
Option 2 (2 points) Infinite motion. Create a character that can walk or dance or jump forever by repeatedly blending the walking motion with itself.
Option 3 (2 points) Mirror. Try creating a mirrored motion which plays forward and backward.
Option 4 (4 points) Motion analysis. Detect when feet are in contact with the floor. Draw a cube at the location of the contact so we can visualize it.
Be sure to include a gif or video of your demo for full credit!


!Cheiren:
What's holding you back? If you're not up for this mission, you'd better let me know now...
Otherwise, go hunt Ragna Orcs and the Evil Spirit of Baranka, the Destroyer of Baranka. Since they are possessed by evil spirits emanating from the Ragna Orc Amulets they wear, you must retrieve those accursed pendants. The more you bring me, the higher your reward.
Some Ragna Orcs carry the Soul Core Containing Evil Spirit instead of an amulet. If you collect 10 of those, you may challenge the Leader of the Ragna Orcs to a duel. Do not do so lightly!
[Quest _311_ExpulsionOfEvilSpirits quit|Say you want to quit.]
[Quest _311_ExpulsionOfEvilSpirits continue|Keep hunting.]


{{ define "home" }} {{ template "header" }}
{{ template "navbar" }}Currently working as a Senior SRE at pawaPay and previously worked as Lead/Senior DevOps Engineer at Tarabut Gateway, Abu Dhabi which is MENA’s first and largest regulated Open Banking platform and have successfully trained more than 400 professionals worldwide on DevOps and Kubernetes.


// Model and optimizer
model = GAN()
optim = torch.optim.Adam(model.parameters(), lr=lr, betas=(0.5, 0.999))
@tb.metrics.running_mean
state[DISC_OPT].step()
from torchbearer.metrics import mean, running_mean
metrics = ["loss", mean(running_mean(D_LOSS)), mean(running_mean(G_LOSS))]
trial = tb.Trial(generator, None, criterion=gen_crit, metrics=metrics, callbacks=[saver_callback])
trial.with_train_generator(dataloader, steps=200000)


Curly and Floppy Twistytail, the Funny Piggie Boys
by Howard R. Garis
Chapter 6: “Flop and the Bag of Meal”
Additional Information
- Year Published: 1918
- Language: English
- Country of Origin: United States of America
- Source: Garis, H. R. (1918). Curly and Floppy Twistytail, the Funny Piggie Boys. New York, NY: A. L. Burt Co.
-
Readability:
- Flesch–Kincaid Level: 4.4
- Word Count: 1,395
- Genre: Fantasy
- ✎ Cite This
Downloads
Now, let me see, I promised to put in this story, something about the elephant; didn’t I? That’s because I left it out of the story on the page before this, where Curly had such a dreadful time with the bad egg dog.
Well, now, if I leave the elephant out of this story I promise that I’ll give each one of you an ice cream cone with a raisin in it. All you’ll have to do—in case I forget to tell about the elephant and how he helped Flop—all you have to do, I say, is to come up to my house and say “Magoozilum!” at me, just like that, and turn two somersaults on the parlor rug, and the ice cream cone is yours for the asking.
But now let’s get right at the story. You see it happened this way. Once upon a time, when Curly and his brother Flop were out in the yard of the piggy-house, playing “ring around the apple tree,” their mother called to them:
“Oh, boys! come in here!” she said, and when they got to the kitchen where she was working, she asked them: “Do you know what I’m making?”
“Pies,” said Curly.
“Pudding,” suggested Flop, as he tried to make his slimpsy ear stand up straight, but he couldn’t.
“Neither one,” said their mother. “But if one of you will go to the store for me I’ll make a Johnny cake for supper.”
“A Johnny cake?” asked Curly. “Is it called that because a boy has to be named Johnny to eat it?”
“No,” answered his mother with a laugh, “but lots of boys named Johnny do eat it. However, just at the last minute I find that I have no corn meal. Now who wants to go to the store for a bag full, so I can make the Johnny cake?”
“I went for the eggs, last time,” said Curly, sort of slow and thoughtful like.
“Then I suppose it’s Flop’s turn to go for the bag of meal,” said his mother. “But I do hope the bad dog doesn’t chase him.”
“Oh, I’m not afraid, mamma,” said the little piggie boy. “If he comes after me I’ll throw corn meal dust in his nose and make him sneeze, and then he can’t see to catch me.”
“Very well,” said Mrs. Twistytail, so she gave Flop the money for the bag of meal. Off he started to the store, while his brother, Curly, went back in the yard to play hop-skip-and-jump, all by himself.
Flop went along the street, whirling his tail in a little circle like a pin-wheel, or a merry-go-round, and he was thinking how good the Johnny cake would taste, when, all of a sudden, he heard a noise.
It was a noise something like thunder, yet not quite so loud, and Flop was wondering what it was, when, all at once, as he turned around the corner, he saw a big elephant sitting on a stump, and crying as hard as he could cry. And this elephant had made the noise.
Ah ha! That’s the time I caught you; I’ve got the elephant in this story after all, so you can’t have the ice cream cones this time. But never mind, maybe some other day you may.
Anyhow, there was the elephant crying, and he shed as many tears as you could cry in a year, even if you’ve been vaccinated. And Flop instead of being afraid, went right up to the big creature and said, most politely:
“What is the matter? Can I help you?”
“Eh? What’s that?” exclaimed the elephant. “Bless my trunk strap! It’s a little pig. Oh dear!”
“What is the matter?” asked Flop.
“Oh, I ran a big sliver in my left hind foot,” said the elephant, “and I can’t get it out.  And I was to go to the codfish ball tonight, and now I can’t, for I never could dance with a sliver in my foot.”
“Perhaps I can pull it out,” said Flop, and when the elephant held up his foot, which was nearly as large as a washtub, the little piggie boy could see the splinter as plainly as anything.
“I’ll get it out,” he exclaimed and then he wound his kinky, curly tail around the splinter and pulled it right out of the elephant’s foot as quick as a wink.
“Oh, how kind of you!” cried the big creature. “If ever I can do you a favor I will. Now I can go to the party tonight and dance. But I’ll just sit here awhile and rest, before I go.”
So Flop went on to the store to get the corn meal, and he told the man about how Mrs. Twistytail was going to make a Johnny cake and how he had pulled the splinter out of the elephant’s foot, and the store man said:
“You are a brave little piggie boy, and here is a lollypop for you.”
Well, Flop was on his way home, carrying the bag of meal, and he was taking little nips and nibbles off the lolly-pop, when all at once what should happen but that, out from behind a tree sprang the bad skillery-scalery alligator.
“Ah, ha!” he cried. “Now I have you. Now for some roast pork and apple sauce!” and he made a grab for Flop, but he didn’t quite catch him, I’m glad to say. And how that little piggie boy did run! Faster and faster he ran, carrying the bag of meal for the Johnny cake, but still the ‘gator came after him and almost had him.
“Oh, will no one save me?” cried Flop, for he could hardly run any more, and then all of a sudden, he came to the place where the elephant was still sitting on a stump, resting himself.
“Oh, help me! Help me!” cried Flop.
“Indeed, I will!” shouted the elephant. And with that, in his strong trunk, he lifted Flop up on his broad back. Still the skillery-scalery alligator came on, and he cried in his rasping voice:
“I want that pig!”
“Oh you do, eh?” asked the elephant, sarcastic like. “Well, you can’t have him.  Aker-choo! Boo-hoo! Hoo hoo! Splitzie-doo! Foo-foo!” sneezed the alligator, turning forty-’leven somersaults. “Oh, dear me, what a cold I have!” and he sneezed so hard that all of his back teeth dropped out, and he couldn’t bite any one for nearly a week. And then he crawled off, leaving Flop to go home in peace and quietness and watch his mamma make a Johnny cake.
And when the cake was baked they gave the kind elephant some to take to the codfish ball with him, and that’s the end of this story, if you please.
But on the next page, if I have left any of those ice cream cones with raisins inside, to give to the trolley car conductor when he punches my transfer, I’ll tell you about the piggie boys at school.


Visual Machine Learning
- Visual Machine Learning
- Algorithms Visualization
- Algorithms by Type
- Algorithms by Learning Type
- By Complexity
- By Language
- By Package
- Tree Based Algorithms
- By Application and Usability
Note: Please select any of the above option to learn
Top AI/ML/DL Projects


My friend and I wanted to try tripping on a Beautiful Sat. Morning. We launched off into town in search of the seeds. We had to go to a couple of stores before we found packets that were specifically marked “untreated” on the labels. There were several varieties of the glories to choose from. Having read the FAQ we decided on the heavenly blues. 3 packets each. The brand escapes me at this point but they came in a yellow packet and were from Holland. The lady at the shop gave us a strange look as we bought 8 packs. It was the off season for planting, but there was no problem buying them.
We took them home and used a mortar and pistil to grind up the seeds. Each pack contained about 50 seeds. We took three packs crushed them and put the crushed material into a glass of water. Repeated this procedure for my buddy’s dose. We let the material soak for about ˝ and hour stirring occasionally. The majority of the gunk and seed debris separated and sunk to the bottom of the glass. The mixture was an off yellow cloudy liquid. It didn’t smell unpleasant. We sipped at the stuff avoiding the sludge at the bottom. The taste was not at all bitter or unpleasant. It was actually kind of earthy. Almost like a very weak unsweetened tea. I noticed a slight tingle on the tip of my tongue shortly after drinking the stuff. The debris was discarded.
We left shortly after and picked up a sober friend and headed out to the beach. We took the seed mixture around 2 PM. We hit the beach around 4 or so.
Onset occurred in about 45-60 min. and started with an uncomfortable (but not unbearable) feeling in the stomach accompanied by a mushroomy drowsiness. We both had a bit of anxiety and mild discomfort for about 1/2 an hour. (note: later experiences have revealed that a small 10mg dosage of diphenhydramine negated the negative effects of onset).
Coming up and peak happened in waves. The dreamy quality fading into a strangely narcotic sort of state. We both felt pleasant. The emotional state was somewhat less intense but similar to mushrooms. The really strange thing about LSA is that neither of us had the really strange reeling thoughts that usually come with pot, acid and shrooms. Our judgment didn’t seem impaired and our thought processes were for the most part fairly normal, and our emotions were fairly normal. There was a heavy body load, dreamy narcotic. Enhanced colors and edges, no movement or trails to speak of. It was like having the full body effect of a hallucinogen including reality separation with out loosing your noodle at all.
It came in increasing waves for about the next 4 hours. We went home and decided to eat more.
We crushed up and ate 2 more packs with out any water this time. The same effects occurred as with the water solution but came on stronger with more stomach discomfort. Pot increased the effects dramatically at the end of the night.
We both slept well and felt OK the next day. I had a headache, which could have been from not drinking enough water the previous day. All in all it was a pleasant experience. I have talked to other folks who have gotten the treated seeds and have had terrible effect form them so I am careful. It is also worth noting that I take 20 Mg. of Paxil a day for mood control. LSD and Mushrooms are dulled by this drug, however LSA didn’t seem to be affected.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


I am a cognitive psychologist at the University of Manchester and Fellow of the Software Sustainability Institute.
My current research projects include how people understand data visualisations, how readers understand meaning that is implied by a linguistic utterance (rather than that which is conveyed explicitly), the mechanisms by which conditional information is processed and mentally represented, and (more generally) how meaning is integrated across sentences. My research involves the use of eye-tracking to examine moment-by-moment processing.
I teach data science and statistical methods to students in Psychology and Biological Sciences with an emphasis on R, open research, and reproducibility.


Linked Connections in Spain
Transforming open Spainsh GTFS to Linked Data
Using the Linked Connections specification and open GTFS datasets available in different open data portals
in Spain we provide useful Linked Data to route planner developers.
We also provide the metadata of this datasets following
TransportDCAT-AP, an application profile of DCAT-AP developed during the CEF-OASIS project (2016-2018)


Asynchronous JavaScript: Making AJAX Calls Using Fetch & Async/Await
Check the developer console for output
|
View Page Source for the code


▢ : Green colored outline depicts the target image
▢ : Yellow colored outline depicts the image chosen by Qbot after each round
Press 'START' button below to get started!


| Device Date/Time: | |
|---|---|
| Received Date/Time: | |
| Facility: | |
| Severity: | |
| Syslog Tag: | |
| Message: |
| Event Date/Time: | |||||
|---|---|---|---|---|---|
| Logger ID: | Hostname: | ||||
| IP Address: | Authname: | ||||
| Status: | Size: | protocol: | |||
| Path: | |||||
| Refer(r)er: | |||||
| User Agent: |
| Event Date/Time: | Level: | ||||||
|---|---|---|---|---|---|---|---|
| Logger ID: | Logger: | ||||||
| Class: | Method: | Line: | |||||
| Message: | |||||||
| Exception: |


--- products: new: limit: {{theme_settings.homepage_new_products_count}} featured: limit: {{theme_settings.homepage_featured_products_count}} top_sellers: limit: {{theme_settings.homepage_top_products_count}} carousel: {{theme_settings.homepage_show_carousel}} blog: recent_posts: limit: {{theme_settings.homepage_blog_posts_count}} --- {{#partial "page"}} {{> components/home/hero}}


---
layout: blank
body_class: home-intro
---
Australian Individual Income
Whats your gross (Pre-tax) income?
How do you think you fair against others?
This is how you think you are doing as an individual


What you're seeing...
For five hours a day, three days a week, more than 150 aging Bangladeshis exercise, eat, pray and talk together at the Jamaica Muslim Center in Queens, New York.
A few kilometers away, at the Desi Senior Center, immigrants ages 60 and older exercise on a stage with guidance from a teacher.
These seniors are taking part in programs that they cannot find - and in many cases cannot pay for - elsewhere in the city.
Free Clinics
- New York Free Clinic •<PHONE_NUMBER> • 230 West 17th Street, New York, NY 10003
- Weill Cornell Community Clinic •<PHONE_NUMBER> • 505 East 70th Street, 1st Floor, New York, NY 10021
- East Harlem Health Outreach Program - Mount Sinai •<PHONE_NUMBER> • 17 East 102nd Street, 7th Floor, New York, NY 10029
- Columbia Student Medical Outreach •<PHONE_NUMBER> • 21 Audubon Avenue, New York, NY 10033
- Columbia-Harlem Homeless Medical Partnership •<PHONE_NUMBER> • St. Mary's Episcopal Church, 521 West 126th Street, New York, NY 10027
- St. Anthony's Free Clinic •<PHONE_NUMBER> • 421 East 155th Street, Bronx, NY 10455
- ECHO Free Clinic •<PHONE_NUMBER> • 1894 Walton Ave, Bronx, NY 10453
Sliding Scale Facilities
HHC Options Facilities – Requires proof of income or letter of support
- Bellevue •<PHONE_NUMBER> • 462 First Avenue, New York, NY 10016
- Metropolitan Hospital Center •<PHONE_NUMBER> • 1901 First Avenue, New York, NY 10029
- Sydenham Family Health Center •<PHONE_NUMBER> • 264 West 118th Street, New York, NY 10027
- Jacobi Medical Center •<PHONE_NUMBER> • 1400 Pelham Parkway South, Bronx, NY 10461
- Elmhurst Hospital Center •<PHONE_NUMBER> • 79-01 Broadway, Queens, NY 11373
- Health and Home Care •<PHONE_NUMBER>
Institutes for Family Health
- Sidney Hillman/Phillips Family Practice •<PHONE_NUMBER> • 230 West 17th Street, New York, NY 10003
- Family Health Center of Harlem •<PHONE_NUMBER> • 1824 Madison Avenue, New York, NY 10035
- Amsterdam Family Health Center •<PHONE_NUMBER> • 690 Amsterdam Avenue, New York, NY 10025
- P.S. 57 James Weldon Johnson School-Based Health Center •<PHONE_NUMBER> • 176 East 115th Street, New York, NY 10029
- High School of Fashion Industries School-Based Health Center • N/A • 225 West 24th Street, New York, NY 10011
- The IFH Center for Counseling at ASC •<PHONE_NUMBER> • 64 West 35th Street, New York, NY 10001
- Washington Irving Campus School-Based Health Center •<PHONE_NUMBER> • 40 Irving Place, Room 422, New York, NY 10003
- Walton Family Health Center and Center for Counseling •<PHONE_NUMBER> • 1894 Walton Avenue, Bronx, NY 10453
- Mt. Hope Family Practice •<PHONE_NUMBER> • 130 West Tremont Avenue, Bronx, NY 10453
- Urban Horizons Family Health Center •<PHONE_NUMBER> • 50-98 East 168th Street, Bronx, NY 10452
- The IFH Center for Counseling at Frisby Avenue •<PHONE_NUMBER> • 2590 Frisby Avenue, 1st Floor, Bronx, NY 10461
- Stevenson Family Health Center •<PHONE_NUMBER> • 731 White Plains Road, Bronx, NY 10473
Dental Programs
- NYU Dental School •<PHONE_NUMBER>/00 • 345 East 24th Street, New York, NY 10010
- Family Health Center of Harlem •<PHONE_NUMBER> • 1824 Madison Avenue, New York, NY 10035
- Heritage Healthcare Center •<PHONE_NUMBER> • 1727 Amsterdam Avenue, 4th Floor, New York, NY 10031
- Columbia University Dental Center •<PHONE_NUMBER> • 622 West 168th Street, New York, NY 10032
- Walton Family Health Center •<PHONE_NUMBER> • 1894 Walton Avenue, Bronx, NY 10453
- Stevenson Family Health Center •<PHONE_NUMBER> • 731 White Plains Road, Bronx, NY 10473
- NYU Lutheran Department of Dental Medicine •<PHONE_NUMBER> • 150 55th Street, Brooklyn, NY 11220
- NYC College of Technology Dental Hygiene Clinic •<PHONE_NUMBER> • 300 Jay Street, 2nd floor, Brooklyn, NY 11201


Interculturality:
Describes a set of multi-faceted processes of interaction through which relations between different cultures are constructed, aiming to enable groups and individuals to forge links between cultures based on equity and mutual respect.
Ethnocentrism:
The concept of evaluating other cultures according to preconceptions originating in the standards of one's own culture.
Books
• Ethnocentrism: Integrated Perspectives by Boris Bizumic (2018)
ISBN:<PHONE_NUMBER>628
• The Authoritarian Personality by Theodor W. Adorno (1950)
ISBN:<PHONE_NUMBER>321
Videos


Rapid querying, colocalization, and plotting of summary stats from the eQTL Catalogue.
eQTL Catalogue currently contains 110 QTL datasets (full, genome-wide, standardized summary statistics and metadata) from 20 different studies (including GTEx V8), across many tissues/cell types/conditions (updated: 7/5/20).
The functions in catalogueR are partly derived from the eQTL Catalogue tutorial.
Additional eQTL Catalogue resources:
NOTE: The ALT allele is always the effect allele in eQTL Catalogue.
To ensure all dependendencies are installed and don’t conflict with each other, you can create a conda environment by downloading this yaml` file and entering the following in command line:
conda env create -n <path_to_yml>/catalogueR.yml
If you don’t use the conda env, you will also need to make sure tabix is installed.
if(!"devtools" %in% installed.packages()){install.packages("devtools")}
devtools::install_github("RajLabMSSM/catalogueR")
Supply one or more paths to [GWAS] summary stats files (one per locus) and automatically download any eQTL data within that range. The files can be any of these formats, either gzip-compressed (.gz
) or uncompressed: .csv
, .tsv
, space-separated
The summary stats files must have the following column names (order doesn’t matter):
SNP
(rsid for each SNP)CHR
(chromosome; with or without the “chr” prefix is fine)POS
(basepair position)
sumstats_paths <- example_sumstats_paths()
gwas.qtl_paths <- eQTL_Catalogue.query(sumstats_paths = sumstats_paths,
qtl_search = c("myeloid","Alasoo_2018"),
output_dir = "./catalogueR_queries",
split_files = T,
merge_with_gwas = T,
force_new_subset = T,
nThread=4)
GWAS.QTL <- gather_files(file_paths = gwas.qtl_paths)
# Interactive datatable of results
## WARNING: Don't use this function on large datatables, might cause freezing.
createDT(head(GWAS.QTL))


Honestly, I do not understand why people use social networking. What is one thing about social networking is good? I could just sit here and name all the bad things about it.
I only use Facebook. And it is only as good as the people who use it. It's only bad if the people you're friends with are bad.
I use it as a convenient way to text my friends and organize events. Apart from that it's just me and my friends sharing funny pictures/videos/quotes.
As a general rule... I typically unfollow people who post the following:
- "top 10" lists
- "Which X are you" Quizzes
- "viral" images
- Any image that instructs you to like/share it in the image itself
- Image macros.
- articles that have gimmicky cliffhanger titles... like "Foobar was driving down the street, you won't believe what happens next"... or "This child was playing violin, then this happened."
- anything sports related
I basically only use facebook to talk with other people.
On my profile now, there's just my profile picture and a picture of my (partially obscured by my car keys) driving license.
I also unfollow people, but I only unfollow people who:
- Share nudity or similar content
- Posts many images asking for like/shares
- Cliffhangers, or "copy and paste this for luck" (I used to block anybody pasting these like everywhere. Sometimes, I still do. A cleaner facebook is a better facebook.)
- Share games / Invites (Disch probably forgot this) (I also used to block every game I was invited into. Not sure if you still can block them nowadays, I can't find the related buttons)
As for top-10's and Which-X-are-you, unless I'm required to like/share stuff to see the result (e.g. it is displayed right there), it doesn't really bother me.
Lately, I'm giving slightly less hate on Facebook.
Maybe because I block/hide a lot of stuff, maybe because I'm heading into my 20's.
I mean like never seeing the outside world, and being on a computer all day, and being distracted from your real friends. By real friends i'm talking about the people that send friend request to anyone, just so they can have more "friends". Have you ever been eating diner with people and there all on there phones, talking to someone?
^ Yes. That's something I hate. I stopped going outside with people like that about a couple of months ago. I really hate that. I mean REALLY. I don't go outside, pay car, spend time and everything to watch people on the phone.
I don't really have much to say except to share the occasional video, article, or other link. I don't use Facebook or Twitter, but I do use Google+ to share pictures and links with my family. We have phones and email for text.
Social networking is like being in a room with everyone shouting at the top of their lungs at each other. Maybe you'll overhear someone you knew in high school. But is that important to you? Why does everyone in the room need to know what you're eating for dinner?
There's no reason to complain about it. That's like going to the book store, seeing books you don't like, and then telling everyone in the book store that you don't like the books they read.
The two questions in my previous post were not rhetorical. To some people, it is important to them.
I generally agree with that, but I don't think it completely applies here. Whats happening does not only affect the person doing it, but the people around them.


But don't call her a hero yet. In a city desperate for a savior, Kate must overcome her own demons before embracing the call to be Gotham's symbol of hope.


(stdin)
1 [Sun Jun 09 15:25:47 PDT 2013] [::oomoore::wm1] [info] 'Signal: {} - Run {} -> ::wm1'
2 [Sun Jun 09 15:25:47 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: Idle - Run -> FillingForWashing'
3 ::wm1: Opening water valve
4 [Sun Jun 09 15:25:52 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Full {} -> ::wm1'
5 [Sun Jun 09 15:25:52 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: FillingForWashing - Full -> Agitating'
6 ::wm1: Closing water valve
7 ::wm1: Setting motor to agitate
8 [Sun Jun 09 15:25:55 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Done {} -> ::wm1'
9 [Sun Jun 09 15:25:55 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: Agitating - Done -> EmptyingWashWater'
10 ::wm1: Stopping motor
11 ::wm1: Starting pump
12 [Sun Jun 09 15:26:00 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Empty {} -> ::wm1'
13 [Sun Jun 09 15:26:00 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: EmptyingWashWater - Empty -> FillingForRinse'
14 ::wm1: Stopping pump
15 ::wm1: Opening water valve
16 [Sun Jun 09 15:26:05 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Full {} -> ::wm1'
17 [Sun Jun 09 15:26:05 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: FillingForRinse - Full -> Rinsing'
18 ::wm1: Closing water valve
19 ::wm1: Setting motor to agitate
20 [Sun Jun 09 15:26:08 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Done {} -> ::wm1'
21 [Sun Jun 09 15:26:08 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: Rinsing - Done -> EmptyingRinseWater'
22 ::wm1: Stopping motor
23 ::wm1: Starting pump
24 [Sun Jun 09 15:26:13 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Empty {} -> ::wm1'
25 [Sun Jun 09 15:26:13 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: EmptyingRinseWater - Empty -> Spinning'
26 ::wm1: Stopping pump
27 ::wm1: Setting motor to spin
28 [Sun Jun 09 15:26:17 PDT 2013] [::oomoore::wm1] [info] 'Signal: ::wm1 - Done {} -> ::wm1'
29 [Sun Jun 09 15:26:17 PDT 2013] [::oomoore::wm1] [info] 'Transition: ::wm1: Spinning - Done -> Idle'
30 ::wm1: Stopping motor
Generated by GNU Enscript <IP_ADDRESS>.


--- title: Effective teams and leadership excerpt: To keep myself on my toes and try out new ideas in practice, I'm always on the lookout for new books on teams. date: '2022-07-12 07:18:43 +0100' categories: - Agile - Books - Motivation - Teams image: path: /assets/images/social/team_books.jpg ---
A team is a unit, and a human system. It's the team that self-manages the work - often with other teams - to create the desired outcome. It's the teams that are accountable for the value created. And it's the team members that hold each other accountable as professionals. Finally, we shouldn't forget the fun, be it at the office or remote :)
To keep myself on my toes and try out new ideas in practice, I'm always on the lookout for new books to read. These are just some examples of my favourite books on effective teams and leadership:
I'm only touching the surface here. It's a blurred line, and fascinating stuff :)


bz2 Live Demo
This demo decompresses bz2 archives in your web browser. No data is sent to an external server.
Source code on GitHub
Drag a bzip2 file into this area to see the contents
Download decompressed output (Recommended for .tar.bz2 and other compressed binary data)


Upgrading PostgreSQL Using Slony
This guide describes the steps one can take to upgrade their PostgreSQL database to the latest version without the need for hours of downtime. This guide assumes you have two database servers: one database server running an older version of PostgreSQL (e.g. 9.2.18) and one server running a newer version (e.g. 9.6.0).
For this process we'll use a PostgreSQL replication tool called "Slony". Slony allows replication between different PostgreSQL versions and as such can be used to upgrade a cluster with a minimal amount of downtime.
In various places we'll refer to the user gitlab-psql
. This user should be the
user used to run the various PostgreSQL OS processes. If you're using a
different user (e.g. postgres
) you should replace gitlab-psql
with the name
of said user. This guide also assumes your database is called
gitlabhq_production
. If you happen to use a different database name you should
change this accordingly.
Database Dumps
Slony only replicates data and not any schema changes. As a result we must ensure that all databases have the same database structure.
To do so we'll generate a dump of our current database. This dump will only contain the structure, not any data. To generate this dump run the following command on your active database server:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql -p 5432 -U gitlab-psql -s -f /tmp/structure.sql gitlabhq_production
If you're not using GitLab's Omnibus package you may have to adjust the paths to
pg_dump
and the PostgreSQL installation directory to match the paths of your
configuration.
Once the structure dump is generated we also need to generate a dump for the
schema_migrations
table. This table doesn't have any primary keys and as such
can't be replicated easily by Slony. To generate this dump run the following
command on your active database server:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/pg_dump -h /var/opt/gitlab/postgresql/ -p 5432 -U gitlab-psql -a -t schema_migrations -f /tmp/migrations.sql gitlabhq_production
Next we'll need to move these files somewhere accessible by the new database server. The easiest way is to simply download these files to your local system:
scp your-user@production-database-host:/tmp/*.sql /tmp
This will copy all the SQL files located in /tmp
to your local system's
/tmp
directory. Once copied you can safely remove the files from the database
server.
Installing Slony
Slony will be used to upgrade the database without requiring long downtimes. Slony can be downloaded from http://www.slony.info/. If you have installed PostgreSQL using your operating system's package manager you may also be able to install Slony using said package manager.
When compiling Slony from source you must use the following commands to do so:
./configure --prefix=/path/to/installation/directory --with-perltools --with-pgconfigdir=/path/to/directory/containing/pg_config/bin
make
make install
Omnibus users can use the following commands:
./configure --prefix=/opt/gitlab/embedded --with-perltools --with-pgconfigdir=/opt/gitlab/embedded/bin
make
make install
This assumes you have installed GitLab into /opt/gitlab.
To test if Slony is installed properly, run the following commands:
test -f /opt/gitlab/embedded/bin/slonik && echo 'Slony installed' || echo 'Slony not installed'
test -f /opt/gitlab/embedded/bin/slonik_init_cluster && echo 'Slony Perl tools are available' || echo 'Slony Perl tools are not available'
/opt/gitlab/embedded/bin/slonik -v
This assumes Slony was installed to /opt/gitlab/embedded
. If Slony was
installed properly the output of these commands will be (the mentioned "slonik"
version may be different):
Slony installed
Slony Perl tools are available
slonik version 2.2.5
Slony User
Next we must set up a PostgreSQL user that Slony can use to replicate your
database. To do so, log in to your production database using psql
using a
super user account. Once done run the following SQL queries:
CREATE ROLE slony WITH SUPERUSER LOGIN REPLICATION ENCRYPTED PASSWORD 'password string here';
ALTER ROLE slony SET statement_timeout TO 0;
Make sure you replace "password string here" with the actual password for the user. A password is required. This user must be created on both the old and new database server using the same password.
Once the user has been created make sure you note down the password as we will need it later on.
Configuring Slony
Now we can finally start configuring Slony. Slony uses a configuration file for most of the work so we'll need to set this one up. This configuration file specifies where to put log files, how Slony should connect to the databases, etc.
First we'll need to create some required directories and set the correct permissions. To do so, run the following commands on both the old and new database server:
sudo mkdir -p /var/log/gitlab/slony /var/run/slony1 /var/opt/gitlab/postgresql/slony
sudo chown gitlab-psql:root /var/log/gitlab/slony /var/run/slony1 /var/opt/gitlab/postgresql/slony
Here gitlab-psql
is the user used to run the PostgreSQL database processes. If
you're using a different user you should replace this with the name of said
user.
Now that the directories are in place we can create the configuration file. For this we can use the following template:
if ($ENV{"SLONYNODES"}) {
require $ENV{"SLONYNODES"};
} else {
$CLUSTER_NAME = 'slony_replication';
$LOGDIR = '/var/log/gitlab/slony';
$MASTERNODE = 1;
$DEBUGLEVEL = 2;
add_node(host => 'OLD_HOST', dbname => 'gitlabhq_production', port =>5432,
user=>'slony', password=>'SLONY_PASSWORD', node=>1);
add_node(host => 'NEW_HOST', dbname => 'gitlabhq_production', port =>5432,
user=>'slony', password=>'SLONY_PASSWORD', node=>2, parent=>1 );
}
$SLONY_SETS = {
"set1" => {
"set_id" => 1,
"table_id" => 1,
"sequence_id" => 1,
"pkeyedtables" => [
TABLES
],
},
};
if ($ENV{"SLONYSET"}) {
require $ENV{"SLONYSET"};
}
# Please do not add or change anything below this point.
1;
In this configuration file you should replace a few placeholders before you can use it. The following placeholders should be replaced:
OLD_HOST
: the address of the old database server.NEW_HOST
: the address of the new database server.SLONY_PASSWORD
: the password of the Slony user created earlier.TABLES
: the tables to replicate.
The list of tables to replicate can be generated by running the following command on your old PostgreSQL database:
sudo gitlab-psql gitlabhq_production -c "select concat('\"', schemaname, '.', tablename, '\",') from pg_catalog.pg_tables where schemaname = 'public' and tableowner = 'gitlab' and tablename != 'schema_migrations' order by tablename asc;" -t
If you're not using Omnibus you should replace gitlab-psql
with the
appropriate path to the psql
executable.
The above command outputs a list of tables in a format that can be copy-pasted
directly into the above configuration file. Make sure to replace TABLES
with
this output, don't just append it below it. Once done you'll end up with
something like this:
"pkeyedtables" => [
"public.abuse_reports",
"public.appearances",
"public.application_settings",
... more rows here ...
]
Once you have the configuration file generated you must install it on both the
old and new database. To do so, place it in
/var/opt/gitlab/postgresql/slony/slon_tools.conf
(for which we created the
directory earlier on).
Now that the configuration file is in place we can finally start replicating
our database. First we must set up the schema in our new database. To do so make
sure that the SQL files we generated earlier can be found in the /tmp
directory of the new server. Once these files are in place start a psql
session on this server:
sudo gitlab-psql gitlabhq_production
Now run the following commands:
\i /tmp/structure.sql
\i /tmp/migrations.sql
To verify if the structure is in place close the session, start it again, then
run \d
. If all went well you should see output along the lines of the
following:
List of relations
Schema | Name | Type | Owner
--------+---------------------------------------------+----------+-------------
public | abuse_reports | table | gitlab
public | abuse_reports_id_seq | sequence | gitlab
public | appearances | table | gitlab
public | appearances_id_seq | sequence | gitlab
public | application_settings | table | gitlab
public | application_settings_id_seq | sequence | gitlab
public | approvals | table | gitlab
... more rows here ...
Now we can initialize the required tables and what not that Slony will use for its replication process. To do so, run the following on the old database:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slonik_init_cluster --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf | /opt/gitlab/embedded/bin/slonik
If all went well this will produce something along the lines of:
<stdin>:10: Set up replication nodes
<stdin>:13: Next: configure paths for each node/origin
<stdin>:16: Replication nodes prepared
<stdin>:17: Please start a slon replication daemon for each node
Next we need to start a replication node on every server. To do so, run the following on the old database:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_start 1 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf
If all went well this will produce output such as:
Invoke slon for node 1 - /opt/gitlab/embedded/bin/slon -p /var/run/slony1/slony_replication_node1.pid -s 1000 -d2 slony_replication 'host=<IP_ADDRESS> dbname=gitlabhq_production user=slony port=5432 password=hieng8ezohHuCeiqu0leeghai4aeyahp' > /var/log/gitlab/slony/node1/gitlabhq_production-2016-10-06.log 2>&1 &
Slon successfully started for cluster slony_replication, node node1
PID [26740]
Start the watchdog process as well...
Next we need to run the following command on the new database server:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_start 2 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf
This will produce similar output if all went well.
Next we need to tell the new database server what it should replicate. This can be done by running the following command on the new database server:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slonik_create_set 1 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf | /opt/gitlab/embedded/bin/slonik
This should produce output along the lines of the following:
<stdin>:11: Subscription set 1 (set1) created
<stdin>:12: Adding tables to the subscription set
<stdin>:16: Add primary keyed table public.abuse_reports
<stdin>:20: Add primary keyed table public.appearances
<stdin>:24: Add primary keyed table public.application_settings
... more rows here ...
<stdin>:327: Adding sequences to the subscription set
<stdin>:328: All tables added
Finally we can start the replication process by running the following on the new database server:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slonik_subscribe_set 1 2 --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf | /opt/gitlab/embedded/bin/slonik
This should produce the following output:
<stdin>:6: Subscribed nodes to set 1
At this point the new database server will start replicating the data of the old database server. This process can take anywhere from a few minutes to hours, if not days. Unfortunately Slony itself doesn't really provide a way of knowing when the two databases are in sync. To get an estimate of the progress you can use the following shell script:
#!/usr/bin/env bash
set -e
user='slony'
pass='SLONY_PASSWORD'
function main {
while :
do
local source
local target
source=$(PGUSER="${user}" PGPASSWORD="${pass}" /opt/gitlab/embedded/bin/psql -h OLD_HOST gitlabhq_production -c "select pg_size_pretty(pg_database_size('gitlabhq_production'));" -t -A)
target=$(PGUSER="${user}" PGPASSWORD="${pass}" /opt/gitlab/embedded/bin/psql -h NEW_HOST gitlabhq_production -c "select pg_size_pretty(pg_database_size('gitlabhq_production'));" -t -A)
echo "$(date): ${target} of ${source}" >> progress.log
echo "$(date): ${target} of ${source}"
sleep 60
done
}
main
This script will compare the sizes of the old and new database every minute and
print the result to STDOUT as well as logging it to a file. Make sure to replace
SLONY_PASSWORD
, OLD_HOST
, and NEW_HOST
with the correct values.
Stopping Replication
At some point the two databases are in sync. Once this is the case you'll need to plan for a few minutes of downtime. This small downtime window is used to stop the replication process, remove any Slony data from both databases, restart GitLab so it can use the new database, etc.
First, let's stop all of GitLab. Omnibus users can do so by running the following on their GitLab server(s):
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-ctl stop mailroom
If you have any other processes that use PostgreSQL you should also stop those.
Once everything has been stopped you should update any configuration settings, DNS records, etc so they all point to the new database.
Once the settings have been taken care of we need to stop the replication process. It's crucial that no new data is written to the databases at this point as this data will be lost.
To stop replication, run the following on both database servers:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/slon_kill --conf /var/opt/gitlab/postgresql/slony/slon_tools.conf
This will stop all the Slony processes on the host the command was executed on.
Resetting Sequences
The above setup does not replicate database sequences, as such these must be reset manually in the target database. You can use the following script for this:
#!/usr/bin/env bash
set -e
function main {
local fix_sequences
local fix_owners
fix_sequences='/tmp/fix_sequences.sql'
fix_owners='/tmp/fix_owners.sql'
# The SQL queries were taken from
# https://wiki.postgresql.org/wiki/Fixing_Sequences
sudo gitlab-psql gitlabhq_production -t -c "
SELECT 'ALTER SEQUENCE '|| quote_ident(MIN(schema_name)) ||'.'|| quote_ident(MIN(seq_name))
||' OWNED BY '|| quote_ident(MIN(TABLE_NAME)) ||'.'|| quote_ident(MIN(column_name)) ||';'
FROM (
SELECT
n.nspname AS schema_name,
c.relname AS TABLE_NAME,
a.attname AS column_name,
SUBSTRING(d.adsrc FROM E'^nextval\\(''([^'']*)''(?:::text|::regclass)?\\)')
AND has_table_privilege(c.oid,'SELECT')
AND (NOT a.attisdropped)
AND d.adsrc ~ '^nextval'
) seq
GROUP BY seq_name HAVING COUNT(*)=1;
" > "${fix_owners}"
sudo gitlab-psql gitlabhq_production -t -c "
SELECT 'SELECT SETVAL(' ||
quote_literal(quote_ident(PGT.schemaname) || '.' || quote_ident(S.relname)) ||
', COALESCE(MAX(' ||quote_ident(C.attname)|| '), 1) ) FROM ' ||
quote_ident(PGT.schemaname)|| '.'||quote_ident(T.relname)|| ';'
FROM pg_class AS S,
pg_depend AS D,
pg_class AS T,
pg_attribute AS C,
pg_tables AS PGT
WHERE S.relkind = 'S'
AND S.oid = D.objid
AND D.refobjid = T.oid
AND D.refobjid = C.attrelid
AND D.refobjsubid = C.attnum
AND T.relname = PGT.tablename
ORDER BY S.relname;
" > "${fix_sequences}"
sudo gitlab-psql gitlabhq_production -f "${fix_owners}"
sudo gitlab-psql gitlabhq_production -f "${fix_sequences}"
rm "${fix_owners}" "${fix_sequences}"
}
main
Upload this script to the target server and execute it as follows:
bash path/to/the/script/above.sh
This will correct the ownership of sequences and reset the next value for the
id
column to the next available value.
Removing Slony
Next we need to remove all Slony related data. To do so, run the following command on the target server:
sudo gitlab-psql gitlabhq_production -c "DROP SCHEMA _slony_replication CASCADE;"
Once done you can safely remove any Slony related files (e.g. the log directory), and uninstall Slony if desired. At this point you can start your GitLab instance again and if all went well it should be using your new database server.


CADWOLF has a mission to change engineering.We are looking for people to join our team
CADWOLF was founded by an Aerospace engineer looking to provide tools that change the way engineers do their jobs and bring those tools to every person in the world.
Programmer
CADWOLF is built using a number of languages and technologies. The primary language is Javascript with the use of popular packages such as bootstrap, Angular, and three.js. On the server side we are using PHP on a LAMP stack. We are looking for someone that is fluent in javascript with some experience with these packages, especially with three.js. The person should have some experience developing algorithms to solve mathematical problems. Experience with AWS is also a plus. Contact the email above if you are interested.
Designer
On the front end, we use the standard packages like bootstrap and LESS along with standard CSS. We are looking for designers to join our team and direct the look and feel of the site. You will be given a wide degree of discretion to go in any direction you want. Contact the email above if you are interested.
Engineering is still done in very modular components where one platform is used for design, another for analysis, another for documentation, and another for project management. CADWOLF will change this. It will be a single point of contact for all engineering needs. It will also be free for students and for individual entrepreneurs to discover and invent.
Engineering is Broken
The fact that a lot of engineering and scientific work is now done on a computer creates a tendency to believe that the fields have evolved along with technology. This is not the case. It is true that we now use CAD and that many other things that were once done by hand are now done through computer programs. However, taking an action that was once done by hand and doing it on a computer is not the same as taking full advantage of what computers can do.
Engineering, math, and science are too bloated, too labor intensive, too slow, and too expensive. Our goal is to change that.
What's Wrong
There are two major problems. First, we use too many platforms. We use platforms to analyze data and design components, another to document results, and possibly still another to crunch large amounts of data. CADWOLF takes all of those tasks and moves them to one - web based - platform. Everyone is on the same page doing the same thing with the same software.
The second problem involves the amount of time to redesign components. Engineers typically design a component only to see requiremnts change a week later and their entire analysis and documentation has to be updated. Today, large changes can take dozens of engineers weeks or months to adatpt to. CADWOLF does this in a matter of seconds.
The Future
CADWOLF will eventually contain a full CAD system that is integrated with all other aspects of the system, making it the first CAD system based on the mathematics of the parts represented. This means that when a design changes, both the math and the CAD will change as well.
Help Students and Researchers
For as long as possible, CADWOLF will be free for students and for engineers or entrepreneurs who are not yet making money. People should not have to pay for a license to learn a platform to expand their careers. Any engineer that wants to design a product to change the world should have access to quality engineering software as a means to develop that idea.


A typical class with fields and methods
Highlighting of control flow for a conditional jump
Searching for System.out references
A method instruction being edited
A local variable opcode being edited
A class being decompiled by CFR


Cambridge, MA: How 1 Team of Math Nerds is Disrupting the Insurance Industry
Cambridge, Massachusetts: How 2 Math Grads are Disrupting the Auto Insurance Industry
Monday May 11, 2020
Cambridge, Massachusetts – With over 260 million licensed drivers in the US, it's no wonder this startup is taking off and saving people money, for free!
Are you aware that you could receive a large discount by using this new startup's service? In addition, if you live in certain zip codes, you may get extremely low rates.
For a long time, there was no easy way to compare quotes from all of these huge car insurance companies. You had to check one site, then jump to another and enter all of your information all over again. Drivers were stuck doing all the work to save money. Now, all that is changing. Thanks to this new startup, US Auto Insurance Now™, the information you need to help you save can be found in one place. US Auto Insurance Now™ is not an insurer, but a comparison shopping marketplace. Featured in the Inc. 5000 list as one of the fastest growing companies for 2017, it is not a question that customers are finding what they are looking for - lower quotes.
What exactly do you need to do? Here is one easy rule to follow.
You have to compare quotes. Don’t even consider buying car insurance without doing this first. After all the results we came across, we just couldn’t believe how many drivers have been overpaying. And with free services like US Auto Insurance Now™, comparing quotes today so that you aren’t accidentally costing yourself money is a breeze.
Drivers don’t always realize that they may be overpaying for car insurance. If you haven't compared quotes recently, even if you have a low rate, you could still be paying too much. Fortunately, millions of smart drivers have used US Auto Insurance Now™'s free service to save hundreds on their insurance bills.
It’s really no wonder that with so many drivers saving money, US Auto Insurance Now™ is gaining momentum. US Auto Insurance Now™ is an efficient source that tries to give consumers the lowest rates with tools you can trust. Just imagine what you could do with the money you save!
Here's How You Do It:
- Simply check your ZIP code below.
- After you enter your ZIP code and some driver information, you can compare all of your quotes from top-rated car insurance companies and agents local to you.
- Put money back into your pocket!
© 2020 US Auto Insurance Now™.


you are jay-z
you know what happens when kanye gets the mic
don't let kanye get the mic
wasd to move; hit kanye to win
dog cmon you gotta use a browser with html5 support it's 2015


Shallow work and physician burnout Orgave criminal anteater parrot much fallible goodness hence fluent ahead much waked some thus strived interwove unanimous one hugged o Olohundare Nasirudeen in sport 19 1 min read