assert.equal(2, this.v1.x, 'The first view is at inset.');
assert.equal(112, this.v1.width, 'The first view has a width of 112.');
assert.closeTo(120.62, this.v2.x, 0.01, 'The second view is at 120.62.');
assert.closeTo(177.24, this.v3.x, 0.01, 'The third view is at 177.24.');
assert.closeTo(228.24, this.v4.x, 0.01, 'The fourth view is at 228.24.');
assert.closeTo(307.43, this.v5.x, 0.01, 'The fifth view is at 307.43.');
assert.closeTo(67.24, this.height, 0.01, 'Auto sizing should set the height to 67.24.');
assert.equal(2, this.v1.x);
assert.equal(107, this.v2.x);
assert.equal(167, this.v3.x);
assert.equal(237, this.v4.x);
assert.equal(288, this.v5.x);
var container = this.container,
layout = container.layout,
v1 = container.v1,
v2 = container.v2,
v3 = container.v3,
v4 = container.v4,
v5 = container.v5;
// Verify all views are positioned correctly
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(271, v1.width, 'The first view has a width of 271.');
assert.equal(278, v2.x, 'The second view is at 278.');
assert.equal(330, v3.x, 'The third view is at 330.');
assert.equal(382, v4.x, 'The fourth view is at 382.');
assert.equal(434, v5.x, 'The fifth view is at 434.');
// The updateparent attributes should be ignored
layout.setAttribute('updateparent', true);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(271, v1.width, 'The first view has a width of 271.');
assert.equal(278, v2.x, 'The second view is at 278.');
assert.equal(330, v3.x, 'The third view is at 330.');
assert.equal(382, v4.x, 'The fourth view is at 382.');
assert.equal(434, v5.x, 'The fifth view is at 434.');
assert.equal(494, container.innerwidth, 'Collapse parent has no effect.');
// Resize parent larger
container.setAttribute('width', 510);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(281, v1.width, 'The first view has a width of 281 since it gets the extra space.');
assert.equal(288, v2.x, 'The second view is at 288.');
assert.equal(340, v3.x, 'The third view is at 340.');
assert.equal(392, v4.x, 'The fourth view is at 392.');
assert.equal(444, v5.x, 'The fifth view is at 444.');
// Resize a non stretchy view
v2.setAttribute('width', 100);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(231, v1.width, 'The first view has a width of 231 since it lost space to v2.');
assert.equal(238, v2.x, 'The second view is at 238.');
assert.equal(340, v3.x, 'The third view is at 340.');
assert.equal(392, v4.x, 'The fourth view is at 392.');
assert.equal(444, v5.x, 'The fifth view is at 444.');
// Hide a view
v5.setAttribute('visible', false);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(283, v1.width, 'The first view has a width of 283.');
assert.equal(290, v2.x, 'The second view is at 290.');
assert.equal(392, v3.x, 'The third view is at 392.');
assert.equal(444, v4.x, 'The fourth view is at 444.');
// Show a view
v5.setAttribute('visible', true);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(231, v1.width, 'The first view has a width of 231 since it lost space to v2.');
assert.equal(238, v2.x, 'The second view is at 238.');
assert.equal(340, v3.x, 'The third view is at 340.');
assert.equal(392, v4.x, 'The fourth view is at 392.');
assert.equal(444, v5.x, 'The fifth view is at 444.');
// Make another view stretchy. No change should occur until a layout update occurs.
v5.setAttribute('layouthint', '{"weight":1}');
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(141, v1.width, 'The first view has a width of 141 since it shares space equally with v5.');
assert.equal(148, v2.x, 'The second view is at 148.');
assert.equal(250, v3.x, 'The third view is at 250.');
assert.equal(302, v4.x, 'The fourth view is at 302.');
assert.equal(354, v5.x, 'The fifth view is at 354.');
assert.equal(140, v5.width, 'The fifth has a width of 140 since it shares space equally with v1 but v1 gets left over space.');
// Increase parent width by 1 and observe space going to v5
container.setAttribute('width', 511);
assert.equal(5, v1.x, 'The first view is at inset.');
assert.equal(141, v1.width, 'The first view has a width of 141 since it shares space equally with v5.');
assert.equal(148, v2.x, 'The second view is at 148.');
assert.equal(250, v3.x, 'The third view is at 250.');
assert.equal(302, v4.x, 'The fourth view is at 302.');
assert.equal(354, v5.x, 'The fifth view is at 354.');
assert.equal(141, v5.width, 'The fifth has a width of 141 since it shares space equally with v1.');
// Reverse the layout
layout.setAttribute('reverse', true);
assert.equal(5, v5.x, 'The fifth view is at inset.');
assert.equal(141, v5.width, 'The fifth view has a width of 141 since it shares space equally with v1.');
assert.equal(148, v4.x, 'The fourth view is at 148.');
assert.equal(200, v3.x, 'The third view is at 200.');
assert.equal(252, v2.x, 'The second view is at 252.');
assert.equal(354, v1.x, 'The first view is at 354.');
assert.equal(141, v1.width, 'The first has a width of 141 since it shares space equally with v5.');
layout.setAttribute('reverse', false);
// Change axis (also cleanup old positions and sizes so things look cleaner).
container.setAttribute('height', 511);
layout.setAttribute('axis', 'y');
container.setAttribute('width', 56);
var layoutH = this.createChild({class: 'constantlayout', parent:container, attribute:'x', value:0});
layoutH.setAttribute('attribute', 'width');
layoutH.setAttribute('value', 50);
layoutH.destroy();
// Verify all views are positioned correctly
assert.equal(5, v1.y, 'The first view is at inset.');
assert.equal(166, v1.height, 'The first view has a height of 166 since it shares space equally with v5.');
assert.equal(173, v2.y, 'The second view is at 173.');
assert.equal(225, v3.y, 'The third view is at 225.');
assert.equal(277, v4.y, 'The fourth view is at 277.');
assert.equal(329, v5.y, 'The fifth view is at 329.');
assert.equal(166, v5.height, 'The fifth has a height of 166 since it shares space equally with v1.');
// Change width to make sure all the constraints have been updated
container.setAttribute('width', 100);
assert.equal(5, v1.y, 'The first view is at inset.');
assert.equal(166, v1.height, 'The first view has a height of 166 since it shares space equally with v5.');
assert.equal(173, v2.y, 'The second view is at 173.');
assert.equal(225, v3.y, 'The third view is at 225.');
assert.equal(277, v4.y, 'The fourth view is at 277.');
assert.equal(329, v5.y, 'The fifth view is at 329.');
assert.equal(166, v5.height, 'The fifth has a height of 166 since it shares space equally with v1.');


Example build job:
cd /home/jenkins/janus-bootstrap/$NAME git add . git commit -m "Initialized project." git push -u origin master
The build job should be parameterized with a string parameter called NAME. The value will be the repository's name.


Beautiful sites & web applications that scale on any device, including iOS, Android, and other major platforms.
Intuitive, interactive experiences. Pixel-perfect, dynamic web apps.
Application logic, databases, APIs and other back-end processes.
CallHero Tech. is a high level analytics and conversion software. Clinic owners have the power to monitor and optimize the entire marketing and conversion process on their call centers.
Lighthouse Labs graduates are professional developers across Canada and around the world. Graduates understand coding logic using popular languages and frameworks, while learning how to think like a programmer by building software from the ground up.
Responsive design and development of hybrid Web Applications that can work on cross-platforms and scale on any device.
Research assistant in Electro-Optical instrumentation. How light can be manipulated in many various ways through different physical experiments to produce new technology like LEDs and Displays.
Research assistant in Electro-Optical instrumentation. How light can be manipulated in many various ways through different physical experiments to produce new technology like LEDs and Displays.
Courses in design theory, material processes and technology, drawing and graphic design. Developing a methodology of research, analysis, strategy, development and execution, strongly emphasizing concept development and strategic and applied innovation.
UI/UX designer and junior full-stack web developer who enjoys both front-end and back-end development. Capable of quickly and practicaly turning ideas into immersive realities, I enjoy taking on new challenges and am seeking opportunities to develop my skills within the Vancouver tech scene.


I'm a full stack web & mobile developer with a passion for startups and all things makeable.
When I'm not coding: I'm most likely climbing rocks, snowboarding, riding motorcycles or drinking a lot of coffee.


USNO Modem Time Service
Synopsis
Address: 127.127.24.u
Reference ID: USNO
Driver ID: ACTS_USNO
Serial Port: /dev/cuau; 1200 baud, 8-bits, no parity
Requires: /usr/include/sys/termios.h header file with modem
control
Description
No information available.
Fudge Factors
-
time1 time
-
Specifies the time offset calibration factor, in seconds and fraction,
with default 0.0.
-
time2 time
-
Not used by this driver.
-
stratum number
-
Specifies the driver stratum, in decimal from 0 to 15, with default 0.
-
refid string
-
Specifies the driver reference identifier, an ASCII string from one to
four characters, with default USNO.
-
flag1 0 | 1
-
Not used by this driver.
-
flag2 0 | 1
-
Not used by this driver.
-
flag3 0 | 1
-
Not used by this driver.
-
flag4 0 | 1
-
Enable clockstats recording if set.
David L. Mills (mills@udel.edu)


Plugin Information |
|---|
View Deployment Sphere on the plugin site for more information. |
Jenkins plugin to have a bird's eye view of your continuous deployment pipeline.
Configuration
- Install dependency plugins:
- Open “Manage Jenkins”
- Go to “Available”
- Find and install H2 Database Plugin
- Install plugin into Jenkins:
- Open “Manage Jenkins”
- Go to “Available”
- Find and install Deployment Sphere Plugin
- Restart Jenkins
- Additional menu item "Deployment Sphere" in the left navigation block should appear
- Now you need to configure your Jenkins system:
- Open “Manage Jenkins”
- Open “Configure system”
- Navigate to “Deployment Sphere configuration” to add Applications and Environments you're working with
Features
- Collects application versions
- Collects application versions deployments
- Configures environments
- Configures applications
- Provides dashboard of deployed applications versions across environments
Usage
- Create any type Jenkins project to collect Build Metadata by adding post-build action "Collect Build Metadata" and select Application that is being built by current project.
where *"0.0.Unknown macro: {v}"* is a version naming template that could be changed according to your convention. - Crate any type Jenkins project to collect Deploy Metadata by adding post-build action "Collect Deploy Metadata" and select Application that is being deployed by current project.
- Now build your application and go to deploy project
- Select environment and application version you'd like to deploy
- Now you can check out to what environment and what version of your application was deployed
Roadmap
TODO
About
This plugin is started as a hack-a-thon at the EPAM Grand Hackathon 2015 in Minks. It is licensed under Apache License, Version 2.0.
Changelog
TODO
Attachments:
jenkins.png (image/png)
jenkins_apps_ens.png (image/png)
jenkins_deploy.png (image/png)
jenkins_select_app.png (image/png)
jenkins_deploy_app.png (image/png)
jenkins_env_version.png (image/png)
deployment_sphere.png (image/png)
build_job.png (image/png)
build_project_2.png (image/png)
jenkins_apps_ens.png (image/png)
jenkins_deploy.png (image/png)
jenkins_select_app.png (image/png)
jenkins_deploy_app.png (image/png)
jenkins_env_version.png (image/png)
deployment_sphere.png (image/png)
build_job.png (image/png)
build_project_2.png (image/png)


Art Frankly is an integrated platform that provides unbiased information about the art world and the opportunities available within it. With listings that cater to the greater visual arts community, Art Frankly enables you to find a position directly matched to your skillset and experience.
Create a professional profile to discover unlimited opportunities. Create and manage several profiles based upon your needs. For personal professional development, begin with your arts professional profile. Create an institutional profile for your gallery, museum, or nonprofit. Service provider profiles are tailored for promotion and advertising.
Use our robust search function to find and filter jobs, spaces, opportunities, and people. A radius function allows you to narrow in on the location you’re seeking.
From commercial rentals to studio spaces to pop-up venues, Art Frankly can help you find it.  Define your search using specific criteria such as dates of availability, location, size, and facility amenities.


Brought to you by Starikov Mikhail
Sentry.configureScope(function(scope) {
scope.setExtra("character_name", "Mighty Fighter");
});
- Implementing dynamic injection in core app with useFactory
{ provide: ErrorHandler,
useClass: async (featuresService: ActiveFeaturesService) => {
const isEnabled = await featuresService.isFeatureEnabled('sntry').subscribe(
isEnabled => {
if (isEnabled) {
return new SentryErrorHandler();
} }); },
deps: [ ActiveFeaturesModule ] }


During sprint 4 we had to do a number of exercise on freeCodeCamp. Some of these I found really tricky. To solve the problems I thought about what I knew already, I tried to talk out loud to myself to see if I could make sense of the problem and I also went back and redid some of the previous exercises again. At times I felt frustrated because I wasn’t able to understand the question and code. I learned during these times it was best for me to go and do something else and then I could come back to it with a fresh and much clearer perspective.
When I was redesigning my website I really wanted to have a drop down box for the blogs. To do this I googled how to do it and I found a really helpfully YouTube video. I was able to follow the steps on the video and create a drop down box. Unfortunately, when it was done it was stuck on the left hand side of my website. I had everything else on my website centered so it looked out of place and I wasn’t really happy with it. After some more googling and just trying things out I was able to get it to the center of my page. I was so happy when it worked! I learned a lot from just playing with the code to see what would happen when I changed certain things.
I like using pseudocode. I feel that this allows me to think about what I need to do in order to solve the problem and what the steps are.
I like trying things as then I have something that I can run, and I can get ideas from there.
I haven’t tried talking to a rubber ducky but I do talk out loud to myself (when no one is around). I find that talking the problem over makes me think about what I do know and gives me a place to start.
I don’t feel confident reading error messages. I have just learned how to use the inspect tool and then go to console to check to see what is logging to the console. If there is an error it would give a line that this error is on and means that I have a place to start to check my code.
Again, I am not very confident with this.
This is something that I have found very helpful. The trick has been to us the right keywords so that you return the information you are looking for.
This is something that I hope I will be able to use during bootcamp. At the moment, I feel because I don’t really know anyone well I have been reluctant to ask for help and relied more on the other strategies. The two main things that have stopped my from asking others is I don’t always know what is wrong and I am also not too sure I would understand their answer because I have a very basic knowledge. It has been nice to see that when other people are blocked they have reached out on the slack channel and got a really positive response from others. I think that this has encouraged me to know that if I did get stuck I could ask for help from my peers and it would be okay.
As above, I haven’t asked the coaches for help.
I haven’t utilised this strategy as much as I probably should have. Reflection was something that we did all the time in my previous job so I know the value in it. I am going to try and use this strategy more often as I think it would be very useful.


(Sorry for the low quality, GitHub limits to 100MB, and Netlify is slow… I’ll need to pay to make it better 😬)


Huawei MateBook D 14 & 15 Announced, Both with Intel & Ryzen CPUs - Gizchina.com
by PierreRate this post
Along with the most interesting Huawei MatePad Pro, a tablet that’s expected to compete with Apple’s iPad Pro, the Chinese tech giant also announced a new series of laptops – meet the Huawei MateBook D 14 and MateBook D 15.
As the name suggests, the difference between the two models is in the size of the display. A 14-inch panel for the smaller and 15.6-inch for the bigger brother. But these aren’t the only specs that differ between the laptops, as a matter of fact Huawei decided to bring as many versions as possible, including Intel and Ryzen alternatives as well.
So, let’s start with the most affordable of them all, the Huawei MateBook D 14 Ryzen Edition with a price tag of 3999 Yuan, around $570. The laptop does, of course, feature a 14-inch panel of the IPS type with 1920x1080p resolution. We then find 4.8mm thin bezels, a screen to body ratio of 84% and 16:9 aspect ratio.
Huawei MateBook D 14 & 15 Announced, Both with Intel & Ryzen CPUs
Internal specs wise, the MateBook D 14 Ryzen Edition features a Ryzen R5 CPU, 8GB of RAM and 512GB of storage. There’s also a variant with 16GB of RAM selling for 4299 Yuan ($610).
Moving onto the ordinary MateBook D 14 (or Intel edition), this lineup features either an Intel i5 or i7 10th generation CPU, 8GB or 16GB of RAM and 512GB of SSD internal storage. On the graphics size, all variants sport an Nvidia MX250 GPU. Prices for the Intel versions go from 5199 Yuan ($740) for i5 / 8GB RAM; 5499 Yuan ($780) for i5 / 16GB; and 6499 Yuan ($920) for i7 / 16GB / 512GB.
Finally, as far as the Huawei MateBook D 14 is concerned, the laptop supports 65W fast charging, it’s 15.9mm thick and weighs 1.38Kg.
As we previously mentioned, there’s also the MateBook D 15; basically the same PC with the main difference being the screen size. The display here is 15.6-inch, for a total body thickness of 16.9mm and a weight of 1.62kg.
The Huawei MateBook D 15 series comes with around the same prices as the 14-inch variant, but we get different storage configurations. We indeed have the Ryzen R5 variant with 8GB of RAM and 256GB SSD + 1TB HDD for 3999 Yuan ($570); while the model with 16GB of RAM and 256GB SSD + 1TB HDD sells for 4299 Yuan ($610).
For the Intel variants, we have a starting price of 5299 Yuan ($755) for i5 / 8GB RAM / 256GB + 1TB HDD; 5599 Yuan ($795) for i5 / 16GB / 256GB + 1TB HDD; and 6599 Yuan ($935) for i7 / 16GB / 256GB + 1TB HDD.


Dashboard
Logout
PASSWORD GENERATOR
Generate Password
Click to Generate Password
{{password}}
Generate Password
Save This Password


| Introducton |
I adapted this information from a
web site
and I have made it available locally.
ASCII stands for American Standard Code for Information Interchange. Below is the ASCII character table, including descriptions of the first 32 characters. ASCII was originally designed for use with teletypes, and so the descriptions are somewhat obscure and their use is frequently not as intended. Java actually uses Unicode, which includes ASCII and other characters from languages around the world. |
Dec = Decimal Value Char = Character '5' has the int value 53 if we write '5'-'0' it evaluates to 53-48, or the int 5 if we write char c = 'B'+32; then c stores 'b' Dec Char Dec Char Dec Char Dec Char --------- --------- --------- ---------- 0 NUL (null) 32 SPACE 64 @ 96 ` 1 SOH (start of heading) 33 ! 65 A 97 a 2 STX (start of text) 34 " 66 B 98 b 3 ETX (end of text) 35 # 67 C 99 c 4 EOT (end of transmission) 36 $ 68 D 100 d 5 ENQ (enquiry) 37 % 69 E 101 e 6 ACK (acknowledge) 38 & 70 F 102 f 7 BEL (bell) 39 ' 71 G 103 g 8 BS (backspace) 40 ( 72 H 104 h 9 TAB (horizontal tab) 41 ) 73 I 105 i 10 LF (NL line feed, new line) 42 * 74 J 106 j 11 VT (vertical tab) 43 + 75 K 107 k 12 FF (NP form feed, new page) 44 , 76 L 108 l 13 CR (carriage return) 45 - 77 M 109 m 14 SO (shift out) 46 . 78 N 110 n 15 SI (shift in) 47 / 79 O 111 o 16 DLE (data link escape) 48 0 80 P 112 p 17 DC1 (device control 1) 49 1 81 Q 113 q 18 DC2 (device control 2) 50 2 82 R 114 r 19 DC3 (device control 3) 51 3 83 S 115 s 20 DC4 (device control 4) 52 4 84 T 116 t 21 NAK (negative acknowledge) 53 5 85 U 117 u 22 SYN (synchronous idle) 54 6 86 V 118 v 23 ETB (end of trans. block) 55 7 87 W 119 w 24 CAN (cancel) 56 8 88 X 120 x 25 EM (end of medium) 57 9 89 Y 121 y 26 SUB (substitute) 58 : 90 Z 122 z 27 ESC (escape) 59 ; 91 [ 123 { 28 FS (file separator) 60 < 92 \ 124 | 29 GS (group separator) 61 = 93 ] 125 } 30 RS (record separator) 62 > 94 ^ 126 ~ 31 US (unit separator) 63 ? 95 _ 127 DEL


Democratic senators draft alternative Syria resolution
Opposed to using American military force in Syria, two Democratic senators on Monday released a draft of an alternative Senate resolution endorsing a diplomatic response to Syrian President Bashar Assad's alleged use of chemical weapons.
Sen. Joe Manchin, D-W.V., began circulating the resolution on Saturday and plans to officially unveil it Monday with Sen. Heidi Heitkamp, D-N.D. The resolution says the government of Syria must sign the Chemical Weapons Convention and take concrete steps to comply with it within 45 days, or else "all elements of national power will be considered by the United States Government." It also calls on President Obama to submit to Congress within 45 days a "long term strategy for Syria," while working with the international community to prevent the proliferation and use of Syria's chemical weapons.
The White House, which is asking Congress to authorize the use of military force in response to the alleged use of chemical weapons, has seen the alternative resolution and opposes it, CBS News White House correspondent Major Garrett reports. The Obama administration argues military action should be used to hold the Assad regime accountable now.
In a press conference Friday at the G-20 summit in St. Petersburg, Russia, Mr. Obama told Garrett that he's listening to all proposed responses, including the proposal to give Syria 45 days to join and comply with the Chemical Weapons Convention.
The president said his preference would be to act internationally and that he's "not itching for military action." However, he said, "So far, at least, I have not seen ideas presented that as a practical matter I think would do the job."
Mr. Obama said that the U.S. has already sent a "strong message" to the Assad regime, but the use of chemical weapons in Syria has continued.
"This is not as if we haven't tested the proposition that the guy, or at least generals under his charge, can show restraint when it comes to this stuff," he said. "And they've got one of the largest stockpiles in the world. But I want to emphasize that we continue to consult with our international partners. I'm listening to Congress. I'm not just doing the talking. And if there are good ideas that are worth pursuing then I'm going to be open to it."
Heitkamp on Monday released a statement saying she still has "serious concerns" about the resolution moving its way through the Senate to authorize military action -- even after attending classified hearings with the Senate Foreign Relations Committee where she heard from Secretary of State John Kerry and Director of National Intelligence James Clapper, as well as a White House briefing with Vice President Joe Biden.
"After doing my due diligence, I believe we need an alternative path forward in dealing with the Assad regime," she said. "We must balance the legitimate concerns that Americans have about the use of military force with our strategic interests. At its core, I believe the current Senate resolution falls short because it calls for military action in Syria without carefully looking at diplomatic or alternative solutions."
While the White House currently opposes the alternative resolution, it may gain some traction as international negotiations continue.
Syria's foreign minister on Monday said his country welcomes Russia's proposal to avert U.S. military action by placing its chemical weapons under international control and dismantling them quickly.
Hours earlier, Secretary of State John Kerry said Assad could resolve the crisis by giving up "every single bit" of his arsenal to the international community by the end of the week. Following that statement, Russian Foreign Minister Sergey Lavrov said Moscow would urge Syria to put its chemical weapons under international control and dismantle them. United Nations secretary-general Ban Ki-moon also said he welcomed the proposal, reports CBS News Foreign Affairs Analyst Pamela Falk.
However, State Department spokeswoman Jen Psaki later clarified Kerry's remarks, saying, "Secretary Kerry was making a rhetorical argument about the impossibility and unlikelihood of Asad turning over chemical weapons he has denied he used."
Psaki continued, "If he respected the international norms that have been in place for 100 years he would not have used chemical weapons to kill more than 1,000 innocent men, women and children in the first place. His point was that this brutal dictator with a history of playing fast and loose with the facts can not be trusted to turn over chemical weapons otherwise he would have done so long ago. That's why the world faces this moment."
So far, the White House's push for military action has little support in Congress: According to a CBS News estimate, just about one in 10 members of Congress are currently in favor of military action or leaning towards supporting it.


AngularJS + NodeJS + SailsJS = Awesome
Angular test Page
If you're seeing this page, then angular is working
AngularJS lets you extend HTML vocabulary for your application. The resulting environment is extraordinarily expressive, readable, and quick to develop.
Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.
Sails makes it easy to build custom, enterprise-grade Node.js apps. It is designed to emulate the familiar MVC pattern of frameworks like Ruby on Rails, but with support for the requirements of modern apps: data-driven APIs with a scalable, service-oriented architecture.
Generated by sails-generate-angular-gulp


Abstract base class representing convergence measure.
More...
#include <ConvMeasure.h>
|
| bool | isConverged () |
| |
| bool | isConverged (FPType minTravelTime) |
| |
|
FPType | getPrecision () const |
| |
|
FPType | getGap () const |
| |
|
|
const FPType | precision_ |
| |
|
FPType | gap_ |
| |
Abstract base class representing convergence measure.
| ConvMeasure::ConvMeasure |
( |
FPType |
precision | ) |
|
|
inlineprotected |
- Parameters
-
| precision | desired precision of convergence measure. |
| virtual FPType ConvMeasure::calculateGap |
( |
| ) |
|
|
protectedpure virtual |
| virtual FPType ConvMeasure::calculateGap |
( |
FPType |
minTravelTime | ) |
|
|
inlineprotectedvirtual |
Calls calculateGap(). Might be overwritten by derived classes to calculate convergence measure value without calculating minimum travel time which is possible only for relative gap calculation.
- Returns
- value of the calculated convergence measure.
Reimplemented in RelGap.
| bool ConvMeasure::isConverged |
( |
| ) |
|
|
inline |
This method checks global convergence of the algorithm.
- Returns
- true if convergence criterion is met, false otherwise.
| bool ConvMeasure::isConverged |
( |
FPType |
minTravelTime | ) |
|
|
inline |
Calls convergence measure calculation without explicit calculation of minimum travel time that is an input parameter.
The documentation for this class was generated from the following file:


THANK YOU
For Your Response
Open source applications and websites depend on user feedback for continuous improvement. Your response will help to make Code Your Cloud even better, so we can better serve the coding community.
Click one of the buttons below to navigate away from this page.


The Selectmenu widgets provides a styleable select element replacement. It will act as a proxy back to the original select element, controlling its state for form submission or serialization
The datasource is a native select element. Supports optgroups.


China completes Mars lander test ahead of 2020 mission
HUAILAI, China: China on Thursday (Nov 14) completed a test of its Mars exploration lander ahead of Beijing's first mission to the red planet slated for 2020.
Beijing is pouring billions into its military-run space programme, with hopes of having a crewed space station by 2022.
Thursday's hovering and obstacle-avoidance test, which took place in northern Hebei province, was conducted in a facility that simulated conditions on Mars.
A red platform with steel cables attached mimicked the planet's gravity - about a third that of Earth - as the lander descended from a tall, metal structure.
The test is "an important part" of China's plans to land on Mars, said Zhang Kejian, director of the China National Space Administration (CNSA).
"Currently, all development work is going smoothly," he said in a statement.
China is pushing to catch up with the United States and become a space power, with ambitions of a manned lunar landing.
Earlier this year it made the first ever soft landing on the far side of the moon, deploying a rover on the surface.
Experts said Thursday's successful landing test was key in planning the future mission.
"I'm pretty optimistic about China's 2020 Mars exploration mission," said Jiao Weixin, a professor at the School of Earth and Space Sciences at Peking University.
"Hovering and avoiding obstacles is very key to whether or not the probe can land safely," added Jiao.
If the landing fails, so does the entire expedition, he said.
INTERNATIONAL COOPERATION
China's first Mars mission will focus on "orbiting and landing" on the planet, where a craft will "perform a patrol survey on the surface", said Zhang Rongqiao, the mission's chief designer, at Thursday's test.
"After the probe is launched, it will take seven months to reach Mars," he added.
The final landing process will only last about seven minutes, but is "the most difficult and the most challenging part of the whole mission".
China now spends more on its civil and military space programmes than Russia and Japan, and is second only to the United States.
Although opaque, its 2017 budget was estimated at US$8.4 billion by the Organization for Economic Cooperation and Development.
The CNSA emphasised Beijing's desire to collaborate with other countries and institutions at Thursday's test, which was observed by dozens of diplomats and foreign journalists.
China has plans for future space missions, including "asteroid exploration missions and many more lunar missions", said Zhang, the CNSA director.
"Let us join hands in making an effort to advance space technology," he said.


Question
An array A[1…n] contains all the integers from 0 to n except for one number which is missing. In this problem, we cannot access an entire integer in A with a single operation.
The elements of A are represented in binary, and the only operation we can use to access them is “fetch the jth bit of A[i]”, which takes constant time. Write code to find the missing integer. Can you do it in O(n) time?
Solution
This is a difficult bit operation question.
The main thing to understand is, for a particular bit:
if the bit value of the removed number is 0, then count(0) <= count(1)
if the bit value of the removed number is 1, then count(0) > count(1)
By using this principle, we can easily find the missing value for each bit.
However, we must know when to stop checking. For example:
input: 000, 001, 011
We know that the last bit is 0, second last is 1. We shall stop here and return the result “010”. If we did not stop, the result value would be “110”, which is wrong. How this is handled is by passing only half of the input list each time, and we also add one condition at the beginning:
if (list.size() == 0)
return 0;
By doing this, we always limit the input list to a smaller range, until we finish finding all bits.
Code
hard to write
public static int findMissing(List<BitInteger> list) {
return helper(list, BitInteger.INTEGER_SIZE - 1);
}
private static int helper(List<BitInteger> list, int col) {
if (list.size() == 0)
return 0;
List<BitInteger> zeroList = new ArrayList<BitInteger>();
List<BitInteger> oneList = new ArrayList<BitInteger>();
for (BitInteger bit : list) {
if (bit.fetch(col) == 0) {
zeroList.add(bit);
} else {
oneList.add(bit);
}
}
if (zeroList.size() <= oneList.size()) {
// this means the missing value contains a 0
return helper(zeroList, col - 1) << 1;
} else {
// the missing value contains 1
return helper(oneList, col - 1) << 1 | 1;
}
}


Doctor Zhivago (1965)
Grade: 61
"Doctor Zhivago" is a good, if overlong, film adaptation of the Nobel prize-winning novel by Boris Pasternak. While not as good as "Bridge on the River Kwai" or "Lawrence of Arabia", director David Lean continued his winning streak, as the film was a commercial success and received ten Oscar nominations.
"Doctor Zhivago" has the cinematography of an epic, but the plot of a romance novel. The story takes place during the Russian Revolution. Young, idealistic poet/doctor Yuri (Omar Sharif) marries Tanya (Geraldine Chaplin), but is frequently separated from her due to war. Lara (Julie Christie) is a passionate woman mistreated by her lover, world-weary politician Komarovsky (Rod Steiger).
Lara leaves Komarovsky to marry revolutionary Pasha (Tom Courtenay), who conducts a brutal campaign against White insurgents. The storylines are connected as Yuri and Lara serve together in the war, and have an affair afterwards. Yevgraf (Alec Guinness) is narrator and half-brother of Yuri.
"Doctor Zhivago" goes on and on and on for 197 minutes. This is shorter than "Lawrence of Arabia", but it feels longer. Dramatic touches are sometimes laughable, such as Pasha's entrance after Komarovsky has been shot, the long-expected first embrace between Lara and Yuri, Yuri's bad luck upon seeing Lara for the last time, and Yuri's insolence when his life is on the line (which occurs often).
The theme music, which won an Oscar for Maurice Jarre, is hummable but repetitive. Robert Bolt somehow won Best Adapted Screenplay over "Cat Ballou" and "Ship of Fools". "Doctor Zhivago" deserved its Best Art Direction Oscar, as the sets are very impressive, especially a cottage filled with ice formations. As you would expect from a big-budget Lean epic, the cinematography (Freddy Young) is good.
While "Doctor Zhivago" is a competent film, it has been somewhat over-rated over the years. The characters of Yuri and Lara do not seem real enough to merit involvement. Still, the film does get across some of the horrors of war, and the irony of a 'worker's revolution' becoming just another despotic dictatorship.
<EMAIL_ADDRESS>http://members.tripod.com/~Brian_Koller/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


welcome
We are a team of elite professionals with mature skills and fully
prepared to act flexibly and promptly. We are problem-solvers,
usually the ones people go to when stuck, helpless or just losing
money on bad software.
updates
May 12, 2015
Unit Testing on Top of Entity Framework DbContext
When writing unit tests one of the challenges is to isolate your tests from everything. To isolate them from the code that is not in their target and also from the other tests. As Roy Osherove puts it in his book “The Art of Unit Testing“ . . .
May 5, 2015
We sponsor IT Camp 2015
This month, IT Camp's 5th edition will start in our hometown, Cluj-Napoca. Learning from year to year, IT Camp has grown to be the most important independently organised conference for IT Pros and Developers passionate about Microsoft technologies. We are proud to support it as one of the sponsors.
April 21, 2015
Repository Implementations
In my previous post I have presented a way to separate your data access from the business logic, when a relational database is used. I have shown another implementation of the well-known Repository pattern. Since Martin Fowler described it in his book Patterns of Enterprise Application Architecture it . . .
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida
Sponsoring IT Camp
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse consequat interdum nulla ut tristique. Pellentesque rutrum eros non augue luctus, at gravida lectus fringilla. Pellentesque rutrum eros non augue luctus, at gravida


How to retain cursor position in hidden divs so that when they are re-displayed,
the cursor position or highlighting is retained.
This is regarding `display: none` and that's what I mean below whenever
I say a div is "hidden". I didn't look into what `visibility: hidden` does
in this regard.
Because `display:none` retains info about what it's hiding, you can highlight
some of this text, hide the div, then show it again, and the highlighting
will be preserved. This works automatically without the `focus()` method.
In this example, if the `focus()` method is used in the other div to retain
its cursor position while it's hidden, data won't be retained in this div
since it will lose focus. So to see this one work, comment the `focus()`
calls in the other one.
Similarly, in this editable div, you can place the cursor or caret anywhere
in the text, hide the div, show it again, and the placement of the cursor
will be preserved. Unlike the previous (non-editable) div, this won't retain
its cursor position while hidden unless (1) the `focus()` method is used , or
(2) text is highlighted in the div before hiding. If text is highlighted, the
`focus()` call is not needed here either.
Summary: either an editable or a non-editable div will retain highlighting
while display is set to "none" if nothing steals focus from it while it's
hidden. Ordinary divs don't take focus unless they contain highlighted text,
so they don't retain cursor position information while hidden. But editable
divs can be made to retain cursor position while hidden, without highlighting,
if focus() is used so that the editable div doesn't lose focus while hidden.


Dylan Hartley felt 'fraudulent' being sidelined before retiring this month
Former England captain Dylan Hartley says he felt "fraudulent" being sidelined by a long-term knee injury that eventually led to his retirement.
The ex-Northampton hooker called time on his career this month, having not played since December 2018.
Hartley, 33, says he hoped to return for the World Cup in Japan and got "worn down" by having to keep delaying his comeback from injury.
"I got sick of saying the same old line," said Hartley
"People were asking 'when are you going to play again?' and I was going 'err, about six weeks'. Two weeks later someone asks and I say 'about six weeks'.
"In the end I just got worn down by it and realised I had probably had enough. So I just called it."
Hartley, who won 97 Test caps and played 251 times for Northampton over 14 seasons, injured his knee in a mach against Worcester Warriors on 21 December last year.
"Once that World Cup dream went out the window and I wasn't getting the progress from my knee I wanted, I was thinking 'why do I keep pressing to play a handful of games for Northampton?'" he told the Rugby Union Weekly podcast.
"I couldn't put a return date on it. You start feeling fraudulent.
"I was thinking I needed to play pretty soon and couldn't see myself playing within the next month or so."
Hartley, who skippered England to a Six Nations Grand Slam in 2016 and won the Six Nations again the following year, says the decision to retire was a "weight off the shoulders".
He is currently working with the hookers at Northampton and helping to mentor players, and says he has thought about careers in coaching or the media.
"It's liberating," he added. "I am having a bit of down time. Christmas is something we don't know how to enjoy as players.
"I would like to have some time away from it all and think about what I want to do."


Some countries are not in UN dataset, so we can not analyse them by population. They can be found at the end of the data_engineering.ipynb.
Million of population normalizes the numbers in such way we can compare them among the countries in a reasanoble way. The moving average allow us to see the downs and ups of the curves, that is, when the situation begins to decrease (or get better ) in a country.
It is possible to observe how agressive is the pandemic in Italy, Spain and mainly in Belgium, where the leader denied feaverly to close the country.


The Grapes of Wrath (1940)
Grade: 89
"The Grapes of Wrath" tells the story of the Joads, a displaced Oklahoman sharecropper family, and one of many forced to abandon their lands due to the Dust Bowl and the Great Depression. Based on the Pulitzer Prize winning novel by John Steinbeck, the film succeeds in depicting the poverty, to the extent of starvation, of the homeless Okies. There are other messages as well: the difficulty in maintaining a family in the face of adversity, the low value placed on the lives of migrant farm workers, and the injustices of the capitalist system.
Let me explain that last remark. "The Grapes of Wrath" is a pro-socialist film. Socialism was at its zenith during the Great Depression, when it seemed that capitalism may have failed. Franklin Roosevelt was a socialist President, and the poor saw Big Government as a lifeline from their jobless despair. "The Grapes of Wrath" condemns the faceless banks for foreclosing on the Okies, the agricultural growers for cheating their low-paid workers, and local police forces for their brutality and affiliation with the capitalists. When the Joads finally arrive at a Government-run camp, it is as if they have reached heaven.
Fresh from his success with "Stagecoach", John Ford directed "The Grapes of Wrath", and almost deserved his Best Director Academy Award (I think Hitchcock should have won for "Rebecca"). The black and white cinematography by Gregg Toland is excellent, with extraordinary footage of the deep poverty of the migrant worker camps.
Henry Fonda stars as Tom Joad, a hot-tempered ex-con who returns to his family just in time to join it on a desperate job-hunting expedition to California. Jane Darwell gives an excellent performance as his mother, who tries to hold the dissolving family together as matters go from bad to worse. John Carradine plays a colorful, half-mad preacher.
Fonda was nominated for Best Actor, and Darwell won Best Supporting Actress. "The Grapes of Wrath" was nominated for Best Picture, and Nunnally Johnson was nominated for Best Screenplay. Johnson did a reasonable job in distilling the lengthy novel into a filmable version, changing the ending and jumbling the chronology to soften the novel's pessimistic message.
<EMAIL_ADDRESS>http://members.tripod.com/~Brian_Koller/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


HSS Events
Gupchup (20 points)
No. of Pools: 4
No. of teams per Pool: 2 (3 members each)
(At least 3 Y16 in total)
Rules:
- There will be stipulated number of rounds, details of which will be disclosed on the spot.
- The event will usually consist of one actor and two guessers.
- The actor will act out movies/ places/ books/ personalities/ characters/ idioms/ movie
- Dialogues/ songs the guessers have to guess the items in the minimum amount of time.
- The rounds will be variations of the same principle.
Shabdrang (Word Games) (35 points)
No. of Pools: 4
Rules:
- 1st Round:
- Each pool will be given common word games exercises / puzzles / questions etc. along with the
detailed instructions.
- Specified time will be given to solve the booklet
- Only one submission per pool will be accepted.
- 2nd Round:
- In round 2, each pool must bring 2 teams each consisting of 3 members (at least 3 Y16 in total)
- Each pool will be introduced to a common live activity / competition at the venue itself.
- Point Distribution
- 1st Round - 40%
- 2nd Round - 60%
Kathya (Audio Play) (30 points)
No. of Pools: 4
No. of submissions per Pool: 1
Rules:
- Each pool will be shown five incomplete stories/themes. These incomplete parts will just be the
seemingly dull foundations of an interesting story which can be built upon it.
- The provided parts are merely to portray the central theme of the story around which the whole plot
is to be woven by the participants. The pools will need to submit their audio plays.
- Characters should be greater than or equal to 4 out of which at least [n/2], where [x/2] is the
Greatest Integral Part of x, shall be Y15.
- Time limit is 8-10 minutes, and breaking time constraints lead to penalty of 2% per 30 seconds
exceeded.
- Participants are free to create “play” out of any text, incident, or prose but completely copying from
pre-existing piece will lead to cancellation.
- Themes will be disclosed 7 days before the beginning of the event and allotted by lottery.
- Participants are free to use music and other sounds in their play.
Judging Criteria:
| Structure/Script | 25 |
| Theme | 30 |
| Voice modulation and Narration | 30 |
| Overall Impact | 15 |
Kavyanjali (35 points)
No. of Pools: 4
Appreciation Trophy: Best Poet/ Sarvottam Kavi
Rules:
- Each pool has to write and submit four poems: 2 on provided themes and 2 open theme, out of which
at least 2 must be written by Y16.
- 1st Round:
- All four poems will be judged and scaled cumulative marks of the four submissions will be round 1
score
- Best two poems (one on the provided theme and one open theme) will be told to each pool as
per judges’ decisions.
- 2nd Round:
- In this round, participants have to recite any two poems out of four poems (one on theme and one
open theme) and at least one poem has to be recited by a Y16.
- Time limit per individual: 8 min. (Exceeding the time limit will lead to cutting of power to mike)
- Theme will be disclosed 5 days prior to the event (Each pool will be given several themes to choose
from, via lottery)
- Each pool must stick to its chosen theme. No exchange of themes is allowed
- Judging will be done for both the poems of every pool, sum of the scores of which will finally form
the total obtained by any pool in this competition.
- Each pool must submit both of the poems to be presented in the physical form (Pen drive/Hard
Copy) at least 24 hours before the competition begins.
- Point Distribution
- 1st Round - 30%
(If less than four poems are submitted, pool will go on to lose 7.5% as they will be awarded 0 points for
that poem)
- 2nd Round
- Open theme Poem -30%
- Provided theme Poem -40%
Judging Criteria:
| Poem 1 | काव्यपाठ (10) | काव्य-सौन्दर्य (10) | रचनात्मकता / सृजनशीलता (10) | निर्णायक मंडल द्वारा विशेष अंक (10) | योग (40) |
| Poem 2 | Theme के साथ प्रासंगिकता (10) | काव्य-सौन्दर्य (15) | रचनात्मकता / सृजनशीलता (15) | काव्यपाठ (10) | निर्णायक मंडल द्वारा विशेष अंक (10) | योग (60) |
Nirvaak Case Study (30)
No. of Pools: 4
Rules:
- Each pool will be provided a topic based on lottery, concerning some campus issue, regarding which
campus junta needs to be informed. After getting a topic, they shall go on to collect facts and data
regarding the same (this should not be a piece where an individual would express their view on the
topic).
- Then, a presentation of 8-10 minutes (three members, at least one Y15) should be prepared (MS-PPT/video
presentation/ or as pool sees fit), regarding their findings, opinions and stands of all stake
holders (if and as necessary) and finally, positive inputs and suggestions to improve the situation.
- Presentation will be followed by Q/A round of 7 minutes.
- Points distribution:
- Presentation- 60 %
- Report- 40%
NOTE
Presentation should reflect the work that has gone into investigation, so before presentation
hardcopy and a soft copy of a report has also to be submitted, wherein all data collection has to be
accounted for (survey reports/video showing people expressing themselves etc.). Participants must
come to the competition venue with presentation (video/ppt, not necessary if entirely oral) and
report. Though, report and presentation are judged separately, pools will lose marks if report is not
deemed authentic.


--- title: Overview | Fabricator fabricator: true ---
Bonz.AI's brand promise is to offer a personalized stay like none other, by bringing the ultimate contact-less experience at your fingertips. In order for customers to truly experience Bonz.AI's brand promise, it is key to offer a consistent experience across all touchpoints.
The brand and style guidelines aim to offer a framework for achieving just that.
Bonz.AI's logo is inspired by the cogwheel symbol. It represents technology and innovation.
You can use this style guide by adding the link below to your page.
<link rel="stylesheet" href="assets/toolkit/styles/toolkit.css">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam enim sunt sapiente molestias, sed dicta inventore consectetur beatae asperiores, aliquid laboriosam animi, praesentium repudiandae et, quam saepe sint cupiditate reiciendis.


DO NOT READ THIS FILE ON GITHUB, GUIDES ARE PUBLISHED ON https://guides.rubyonrails.org.
Active Storage Overview
This guide covers how to attach files to your Active Record models.
After reading this guide, you will know:
- How to attach one or many files to a record.
- How to delete an attached file.
- How to link to an attached file.
- How to use variants to transform images.
- How to generate an image representation of a non-image file, such as a PDF or a video.
- How to send file uploads directly from browsers to a storage service, bypassing your application servers.
- How to clean up files stored during testing.
- How to implement support for additional storage services.
What is Active Storage?
Active Storage facilitates uploading files to a cloud storage service like Amazon S3, Google Cloud Storage, or Microsoft Azure Storage and attaching those files to Active Record objects. It comes with a local disk-based service for development and testing and supports mirroring files to subordinate services for backups and migrations.
Using Active Storage, an application can transform image uploads with ImageMagick, generate image representations of non-image uploads like PDFs and videos, and extract metadata from arbitrary files.
Setup
Active Storage uses two tables in your application’s database named
active_storage_blobs
and active_storage_attachments
. After creating a new
application (or upgrading your application to Rails
5.2), run
bin/rails active_storage:install
to generate a migration that creates these
tables. Use bin/rails db:migrate
to run the migration.
WARNING: active_storage_attachments
is a polymorphic join table that stores your model's class name. If your model's class name changes, you will need to run a migration on this table to update the underlying record_type
to your model's new class name.
WARNING: If you are using UUIDs instead of integers as the primary key on your models you will need to change the column type of record_id
for the active_storage_attachments
table in the generated migration accordingly.
Declare Active Storage services in config/storage.yml
. For each service your
application uses, provide a name and the requisite configuration. The example
below declares three services named local
, test
, and amazon
:
local:
service: Disk
root: <%= Rails.root.join("storage") %>
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
amazon:
service: S3
access_key_id: ""
secret_access_key: ""
bucket: ""
region: "" # e.g. 'us-east-1'
Tell Active Storage which service to use by setting
Rails.application.config.active_storage.service
. Because each environment will
likely use a different service, it is recommended to do this on a
per-environment basis. To use the disk service from the previous example in the
development environment, you would add the following to
config/environments/development.rb
:
# Store files locally.
config.active_storage.service = :local
To use the S3 service in production, you add the following to
config/environments/production.rb
:
# Store files on Amazon S3.
config.active_storage.service = :amazon
To use the test service when testing, you add the following to
config/environments/test.rb
:
# Store uploaded files on the local file system in a temporary directory.
config.active_storage.service = :test
Continue reading for more information on the built-in service adapters (e.g.
Disk
and S3
) and the configuration they require.
NOTE: Configuration files that are environment-specific will take precedence:
in production, for example, the config/storage/production.yml
file (if existent)
will take precedence over the config/storage.yml
file.
Disk Service
Declare a Disk service in config/storage.yml
:
local:
service: Disk
root: <%= Rails.root.join("storage") %>
S3 Service (Amazon S3 and S3-compatible APIs)
To connect to Amazon S3, declare an S3 service in config/storage.yml
:
amazon:
service: S3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""
Optionally provide client and upload options:
amazon:
service: S3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""
http_open_timeout: 0
http_read_timeout: 0
retry_limit: 0
upload:
server_side_encryption: "" # 'aws:kms' or 'AES256'
TIP: Set sensible client HTTP timeouts and retry limits for your application. In certain failure scenarios, the default AWS client configuration may cause connections to be held for up to several minutes and lead to request queuing.
Add the aws-sdk-s3
gem to your Gemfile
:
gem "aws-sdk-s3", require: false
NOTE: The core features of Active Storage require the following permissions: s3:ListBucket
, s3:PutObject
, s3:GetObject
, and s3:DeleteObject
. Public access additionally requires s3:PutObjectAcl
. If you have additional upload options configured such as setting ACLs then additional permissions may be required.
NOTE: If you want to use environment variables, standard SDK configuration files, profiles,
IAM instance profiles or task roles, you can omit the access_key_id
, secret_access_key
,
and region
keys in the example above. The S3 Service supports all of the
authentication options described in the AWS SDK documentation.
To connect to an S3-compatible object storage API such as DigitalOcean Spaces, provide the endpoint
:
digitalocean:
service: S3
endpoint: https://nyc3.digitaloceanspaces.com
access_key_id: ...
secret_access_key: ...
# ...and other options
Microsoft Azure Storage Service
Declare an Azure Storage service in config/storage.yml
:
azure:
service: AzureStorage
storage_account_name: ""
storage_access_key: ""
container: ""
Add the azure-storage-blob
gem to your Gemfile
:
gem "azure-storage-blob", require: false
Google Cloud Storage Service
Declare a Google Cloud Storage service in config/storage.yml
:
google:
service: GCS
credentials: <%= Rails.root.join("path/to/keyfile.json") %>
project: ""
bucket: ""
Optionally provide a Hash of credentials instead of a keyfile path:
google:
service: GCS
credentials:
type: "service_account"
project_id: ""
private_key_id: <%= Rails.application.credentials.dig(:gcs, :private_key_id) %>
private_key: <%= Rails.application.credentials.dig(:gcs, :private_key).dump %>
client_email: ""
client_id: ""
auth_uri: "https://accounts.google.com/o/oauth2/auth"
token_uri: "https://accounts.google.com/o/oauth2/token"
auth_provider_x509_cert_url: "https://www.googleapis.com/oauth2/v1/certs"
client_x509_cert_url: ""
project: ""
bucket: ""
Add the google-cloud-storage
gem to your Gemfile
:
gem "google-cloud-storage", "~> 1.11", require: false
Mirror Service
You can keep multiple services in sync by defining a mirror service. A mirror service replicates uploads and deletes across two or more subordinate services.
A mirror service is intended to be used temporarily during a migration between services in production. You can start mirroring to a new service, copy pre-existing files from the old service to the new, then go all-in on the new service.
NOTE: Mirroring is not atomic. It is possible for an upload to succeed on the primary service and fail on any of the subordinate services. Before going all-in on a new service, verify that all files have been copied.
Define each of the services you'd like to mirror as described above. Reference them by name when defining a mirror service:
s3_west_coast:
service: S3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""
s3_east_coast:
service: S3
access_key_id: ""
secret_access_key: ""
region: ""
bucket: ""
production:
service: Mirror
primary: s3_east_coast
mirrors:
- s3_west_coast
Although all secondary services receive uploads, downloads are always handled by the primary service.
Mirror services are compatible with direct uploads. New files are directly uploaded to the primary service. When a directly-uploaded file is attached to a record, a background job is enqueued to copy it to the secondary services.
Public access
By default, Active Storage assumes private access to services. This means generating signed, single-use URLs for blobs. If you'd rather make blobs publicly accessible, specify public: true
in your app's config/storage.yml
:
gcs: &gcs
service: GCS
project: ""
private_gcs:
<<: *gcs
credentials: <%= Rails.root.join("path/to/private_keyfile.json") %>
bucket: ""
public_gcs:
<<: *gcs
credentials: <%= Rails.root.join("path/to/public_keyfile.json") %>
bucket: ""
public: true
Make sure your buckets are properly configured for public access. See docs on how to enable public read permissions for Amazon S3, Google Cloud Storage, and Microsoft Azure storage services. Amazon S3 additionally requires that you have the s3:PutObjectAcl
permission.
When converting an existing application to use public: true
, make sure to update every individual file in the bucket to be publicly-readable before switching over.
Attaching Files to Records
has_one_attached
The has_one_attached
macro sets up a one-to-one mapping between records and
files. Each record can have one file attached to it.
For example, suppose your application has a User
model. If you want each user to
have an avatar, define the User
model like this:
class User < ApplicationRecord
has_one_attached :avatar
end
You can create a user with an avatar:
<%= form.file_field :avatar %>
class SignupController < ApplicationController
def create
user = User.create!(user_params)
session[:user_id] = user.id
redirect_to root_path
end
private
def user_params
params.require(:user).permit(:email_address, :password, :avatar)
end
end
Call avatar.attach
to attach an avatar to an existing user:
user.avatar.attach(params[:avatar])
Call avatar.attached?
to determine whether a particular user has an avatar:
user.avatar.attached?
In some cases you might want to override a default service for a specific attachment.
You can configure specific services per attachment using the service
option:
class User < ApplicationRecord
has_one_attached :avatar, service: :s3
end
has_many_attached
The has_many_attached
macro sets up a one-to-many relationship between records
and files. Each record can have many files attached to it.
For example, suppose your application has a Message
model. If you want each
message to have many images, define the Message
model like this:
class Message < ApplicationRecord
has_many_attached :images
end
You can create a message with images:
class MessagesController < ApplicationController
def create
= Message.create!( )
redirect_to
end
private
def
params.require(: ).permit(:title, :content, images: [])
end
end
Call images.attach
to add new images to an existing message:
@message.images.attach(params[:images])
Call images.attached?
to determine whether a particular message has any images:
@message.images.attached?
Overriding the default service is done the same way as has_one_attached
, by using the service
option:
class Message < ApplicationRecord
has_many_attached :images, service: :s3
end
Attaching File/IO Objects
Sometimes you need to attach a file that doesn’t arrive via an HTTP request. For example, you may want to attach a file you generated on disk or downloaded from a user-submitted URL. You may also want to attach a fixture file in a model test. To do that, provide a Hash containing at least an open IO object and a filename:
@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf')
When possible, provide a content type as well. Active Storage attempts to determine a file’s content type from its data. It falls back to the content type you provide if it can’t do that.
@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf', content_type: 'application/pdf')
You can bypass the content type inference from the data by passing in
identify: false
along with the content_type
.
@message.image.attach(
io: File.open('/path/to/file'),
filename: 'file.pdf',
content_type: 'application/pdf',
identify: false
)
If you don’t provide a content type and Active Storage can’t determine the file’s content type automatically, it defaults to application/octet-stream.
Removing Files
To remove an attachment from a model, call purge
on the
attachment. If your application is set up to use Active Job, removal can be done
in the background instead by calling purge_later
.
Purging deletes the blob and the file from the storage service.
# Synchronously destroy the avatar and actual resource files.
user.avatar.purge
# Destroy the associated models and actual resource files async, via Active Job.
user.avatar.purge_later
Linking to Files
Generate a permanent URL for the blob that points to the application. Upon access, a redirect to the actual service endpoint is returned. This indirection decouples the service URL from the actual one, and allows, for example, mirroring attachments in different services for high-availability. The redirection has an HTTP expiration of 5 minutes.
url_for(user.avatar)
To create a download link, use the rails_blob_{path|url}
helper. Using this
helper allows you to set the disposition.
rails_blob_path(user.avatar, disposition: "attachment")
WARNING: To prevent XSS attacks, ActiveStorage forces the Content-Disposition header to "attachment" for some kind of files. To change this behaviour see the available configuration options in Configuring Rails Applications.
If you need to create a link from outside of controller/view context (Background
jobs, Cronjobs, etc.), you can access the rails_blob_path
like this:
Rails.application.routes.url_helpers.rails_blob_path(user.avatar, only_path: true)
Downloading Files
Sometimes you need to process a blob after it’s uploaded—for example, to convert
it to a different format. Use the attachment's download
method to read a blob’s
binary data into memory:
binary = user.avatar.download
You might want to download a blob to a file on disk so an external program (e.g.
a virus scanner or media transcoder) can operate on it. Use the attachment's
open
method to download a blob to a tempfile on disk:
video.open do |file|
system '/path/to/virus/scanner', file.path
# ...
end
.
It's important to know that the file is not yet available in the after_create
callback but in the after_create_commit
only.
Analyzing Files
Active Storage analyzes files once they've been uploaded by queuing a job in Active Job. Analyzed files will store additional information in the metadata hash, including analyzed: true
. You can check whether a blob has been analyzed by calling analyzed?
on it.
Image analysis provides width
and height
attributes. Video analysis provides these, as well as duration
, angle
, and display_aspect_ratio
.
Analysis requires the mini_magick
gem. Video analysis also requires the FFmpeg library, which you must include separately.
Transforming Images
To enable variants, add the image_processing
gem to your Gemfile
:
gem 'image_processing'
To create a variation of an image, call variant
on the attachment. You can pass any transformation to the method supported by the processor. The default processor for Active Storage is MiniMagick, but you can also use Vips.
When the browser hits the variant URL, Active Storage will lazily transform the original blob into the specified format and redirect to its new service location.
<%= image_tag user.avatar.variant(resize_to_limit: [100, 100]) %>
To switch to the Vips processor, you would add the following to
config/application.rb
:
# Use Vips for processing variants.
config.active_storage.variant_processor = :vips
Previewing Files
Some non-image files can be previewed: that is, they can be presented as images.
For example, a video file can be previewed by extracting its first frame. Out of
the box, Active Storage supports previewing videos and PDF documents. To create
a link to a lazily-generated preview, use the attachment's preview
method:

<% @message.files.each do |file| %>

<%= image_tag file.preview(resize_to_limit: [100, 100]) %>

<% end %>

WARNING: Extracting previews requires third-party applications: FFmpeg v3.4+ for video and muPDF for PDFs, and on macOS also XQuartz and Poppler. These libraries are not provided by Rails. You must install them yourself to use the built-in previewers. Before you install and use third-party software, make sure you understand the licensing implications of doing so.
Direct Uploads
Active Storage, with its included JavaScript library, supports uploading directly from the client to the cloud.
Usage
Include
activestorage.js
in your application's JavaScript bundle.Using the asset pipeline:
//= require activestorage
Using the npm package:
import * as ActiveStorage from "@rails/activestorage" ActiveStorage.start()
Add
direct_upload: true
to your file field:<%= form.file_field :attachments, multiple: true, direct_upload: true %>
Or, if you aren't using a
FormBuilder
, add the data attribute directly:<input type=file data-direct-upload-url="<%= rails_direct_uploads_url %>" />
Configure CORS on third-party storage services to allow direct upload requests.
That's it! Uploads begin upon form submission.
Cross-Origin Resource Sharing (CORS) configuration
To make direct uploads to a third-party service work, you’ll need to configure the service to allow cross-origin requests from your app. Consult the CORS documentation for your service:
Take care to allow:
- All origins from which your app is accessed
- The
PUT
request method - The following headers:
Origin
Content-Type
Content-MD5
Content-Disposition
(except for Azure Storage)x-ms-blob-content-disposition
(for Azure Storage only)x-ms-blob-type
(for Azure Storage only)
No CORS configuration is required for the Disk service since it shares your app’s origin.
Example: S3 CORS configuration
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"PUT"
],
"AllowedOrigins": [
"https://www.example.com"
],
"ExposeHeaders": [
"Origin",
"Content-Type",
"Content-MD5",
"Content-Disposition"
],
"MaxAgeSeconds": 3600
}
]
Example: Google Cloud Storage CORS configuration
[
{
"origin": ["https://www.example.com"],
"method": ["PUT"],
"responseHeader": ["Origin", "Content-Type", "Content-MD5", "Content-Disposition"],
"maxAgeSeconds": 3600
}
]
Example: Azure Storage CORS configuration
<Cors>
<CorsRule>
<AllowedOrigins>https://www.example.com</AllowedOrigins>
<AllowedMethods>PUT</AllowedMethods>
<AllowedHeaders>Origin, Content-Type, Content-MD5, x-ms-blob-content-disposition, x-ms-blob-type</AllowedHeaders>
<MaxAgeInSeconds>3600</MaxAgeInSeconds>
</CorsRule>
<Cors>
Direct upload JavaScript events
| Event name | Event target | Event data (event.detail ) |
Description |
|---|---|---|---|
direct-uploads:start |
<form> |
None | A form containing files for direct upload fields was submitted. |
direct-upload:initialize |
<input> |
{id, file} |
Dispatched for every file after form submission. |
direct-upload:start |
<input> |
{id, file} |
A direct upload is starting. |
direct-upload:before-blob-request |
<input> |
{id, file, xhr} |
Before making a request to your application for direct upload metadata. |
direct-upload:before-storage-request |
<input> |
{id, file, xhr} |
Before making a request to store a file. |
direct-upload:progress |
<input> |
{id, file, progress} |
As requests to store files progress. |
direct-upload:error |
<input> |
{id, file, error} |
An error occurred. An alert will display unless this event is canceled. |
direct-upload:end |
<input> |
{id, file} |
A direct upload has ended. |
direct-uploads:end |
<form> |
None | All direct uploads have ended. |
Example
You can use these events to show the progress of an upload.
To show the uploaded files in a form:
// direct_uploads.js
addEventListener("direct-upload:initialize", event => {
const { target, detail } = event
const { id, file } = detail
target.insertAdjacentHTML("beforebegin", `

`)
target.previousElementSibling.querySelector(`.direct-upload__filename`).textContent = file.name
})
addEventListener("direct-upload:start", event => {
const { id } = event.detail
const element = document.getElementById(`direct-upload-${id}`)
element.classList.remove("direct-upload--pending")
})
addEventListener("direct-upload:progress", event => {
const { id, progress } = event.detail
const progressElement = document.getElementById(`direct-upload-progress-${id}`)
progressElement.style.width = `${progress}%`
})
addEventListener("direct-upload:error", event => {
event.preventDefault()
const { id, error } = event.detail
const element = document.getElementById(`direct-upload-${id}`)
element.classList.add("direct-upload--error")
element.setAttribute("title", error)
})
addEventListener("direct-upload:end", event => {
const { id } = event.detail
const element = document.getElementById(`direct-upload-${id}`)
element.classList.add("direct-upload--complete")
})
Add styles:
/* direct_uploads.css */
.direct-upload {
display: inline-block;
position: relative;
padding: 2px 4px;
margin: 0 3px 3px 0;
border: 1px solid rgba(0, 0, 0, 0.3);
border-radius: 3px;
font-size: 11px;
line-height: 13px;
}
.direct-upload--pending {
opacity: 0.6;
}
.direct-upload__progress {
position: absolute;
top: 0;
left: 0;
bottom: 0;
opacity: 0.2;
background: #0076ff;
transition: width 120ms ease-out, opacity 60ms 60ms ease-in;
transform: translate3d(0, 0, 0);
}
.direct-upload--complete .direct-upload__progress {
opacity: 0.4;
}
.direct-upload--error {
border-color: red;
}
input[type=file][data-direct-upload-url][disabled] {
display: none;
}
Integrating with Libraries or Frameworks
If you want to use the Direct Upload feature from a JavaScript framework, or
you want to integrate custom drag and drop solutions, you can use the
DirectUpload
class for this purpose. Upon receiving a file from your library
of choice, instantiate a DirectUpload and call its create method. Create takes
a callback to invoke when the upload completes.
import { DirectUpload } from "@rails/activestorage"
const input = document.querySelector('input[type=file]')
// Bind to file drop - use the ondrop on a parent element or use a
// library like Dropzone
const onDrop = (event) => {
event.preventDefault()
const files = event.dataTransfer.files;
Array.from(files).forEach(file => uploadFile(file))
}
// Bind to normal file selection
input.addEventListener('change', (event) => {
Array.from(input.files).forEach(file => uploadFile(file))
// you might clear the selected files from the input
input.value = null
})
const uploadFile = (file) => {
// your form needs the file_field direct_upload: true, which
// provides data-direct-upload-url
const url = input.dataset.directUploadUrl
const upload = new DirectUpload(file, url)
upload.create((error, blob) => {
if (error) {
// Handle the error
} else {
// Add an appropriately-named hidden input to the form with a
// value of blob.signed_id so that the blob ids will be
// transmitted in the normal upload flow
const hiddenField = document.createElement('input')
hiddenField.setAttribute("type", "hidden");
hiddenField.setAttribute("value", blob.signed_id);
hiddenField.name = input.name
document.querySelector('form').appendChild(hiddenField)
}
})
}
If you need to track the progress of the file upload, you can pass a third
parameter to the DirectUpload
constructor. During the upload, DirectUpload
will call the object's directUploadWillStoreFileWithXHR
method. You can then
bind your own progress handler on the XHR.
import { DirectUpload } from "@rails/activestorage"
class Uploader {
constructor(file, url) {
this.upload = new DirectUpload(this.file, this.url, this)
}
upload(file) {
this.upload.create((error, blob) => {
if (error) {
// Handle the error
} else {
// Add an appropriately-named hidden input to the form
// with a value of blob.signed_id
}
})
}
directUploadWillStoreFileWithXHR(request) {
request.upload.addEventListener("progress",
event => this.directUploadDidProgress(event))
}
directUploadDidProgress(event) {
// Use event.loaded and event.total to update the progress bar
}
}
Discarding Files Stored During System Tests
System tests clean up test data by rolling back a transaction. Because destroy
is never called on an object, the attached files are never cleaned up. If you
want to clear the files, you can do it in an after_teardown
callback. Doing it
here ensures that all connections created during the test are complete and
you won't receive an error from Active Storage saying it can't find a file.
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
def remove_uploaded_files
FileUtils.rm_rf("#{Rails.root}/storage_test")
end
def after_teardown
super
remove_uploaded_files
end
end
If your system tests verify the deletion of a model with attachments and you're using Active Job, set your test environment to use the inline queue adapter so the purge job is executed immediately rather at an unknown time in the future.
You may also want to use a separate service definition for the test environment so your tests don't delete the files you create during development.
# Use inline job processing to make things happen immediately
config.active_job.queue_adapter = :inline
# Separate file storage in the test environment
config.active_storage.service = :local_test
Discarding Files Stored During Integration Tests
Similarly to System Tests, files uploaded during Integration Tests will not be
automatically cleaned up. If you want to clear the files, you can do it in an
after_teardown
callback. Doing it here ensures that all connections created
during the test are complete and you won't receive an error from Active Storage
saying it can't find a file.
module RemoveUploadedFiles
def after_teardown
super
remove_uploaded_files
end
private
def remove_uploaded_files
FileUtils.rm_rf(Rails.root.join('tmp', 'storage'))
end
end
module ActionDispatch
class IntegrationTest
prepend RemoveUploadedFiles
end
end
Implementing Support for Other Cloud Services
If you need to support a cloud service other than these, you will need to
implement the Service. Each service extends
::ActiveStorage::Service
by implementing the methods necessary to upload and download files to the cloud.


Credit:ESO/UltraVISTA team. Acknowledgement: TERAPIX/CNRS/INSU/CASU Rocket: http://www.psdgraphics.com/psd/rocket-icon-psd/


ADMIN
Input Package Info
Welcome, Admin
Logout
Packages In Store
Package ID
Tracking ID
Name
Address
Time Scanned In
Scanned In By
Stored In
Checkout By
Checkout Time
Text
Text
Text
Text
Text
Text
Text
Text
Text


---
sort_order: 91
tei_id: rdx_b5h9g.p.idp7162288
annotation_count: 0
images:
small-thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcmbp/mini-thumbnail/
json: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcmbp/info/
full: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcmbp/fs/
page: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcmbp/single-page/
thumbnail: https://readux.library.emory.edu/books/emory:b5h9g/pages/emory:pcmbp/thumbnail/
title: Page 91
number: 91
---
{% raw %}JACOB HODGES.{% endraw %}
{% raw %}83{% endraw %}
{% raw %}caine running to the carriage, to bid fare¬{% endraw %}
{% raw %}well to his master and mistress, as he called{% endraw %}
{% raw %}us. We saw him then for the last time.{% endraw %}
{% raw %}In February following, he was taken{% endraw %}
{% raw %}sick and suddenly died. And though no{% endraw %}
{% raw %}earthly relations were near him, many{% endraw %}
{% raw %}felt that they had lost an unwavering,{% endraw %}
{% raw %}Christian friend. The church saw one{% endraw %}
{% raw %}of her best and most useful members{% endraw %}
{% raw %}removed.{% endraw %}
{% raw %}The day he ■« as buried was intensely{% endraw %}
{% raw %}cold and stormy. Some of the most re¬{% endraw %}
{% raw %}spectable gentlemen of the village bore{% endraw %}
{% raw %}him to his grave, while others felt it a{% endraw %}
{% raw %}privilege and honour to attend him to his{% endraw %}
{% raw %}■esting-place among the dead. A friend{% endraw %}
{% raw %}and neighbour placed a silver plate upon{% endraw %}
{% raw %}his coffin, with the inscription,—{% endraw %}
{% raw %}(Jacob Hodges, a respectable co»{% endraw %}
{% raw %}uOTJRED MAN, AGED EIGHTY.){% endraw %}
{% raw %}He rests from his labours, and his works.{% endraw %}
{% raw %}do follow him.{% endraw %}
{% raw %}On the Sabbath following Jacob's de¬{% endraw %}
{% raw %}cease, the Rev. Mr. Thompson, who suc¬{% endraw %}
{% raw %}ceeded me author in the pastoral relation{% endraw %}


Hei
Source code control the way it was meant to be!
git init
git clone <repo_url>
git status
$ git status
On branch master
nothing to commit, working directory clean
$ vim README
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
git add <file_path_or_glob>
$ git add README
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
git commit
git log --oneline --graph --all
$ git log --oneline --graph --all
* 0fb3281 Added a proposal on database schema
* 1e24ffb Added sphinx documentation
* b0f364c Added requirements for third-party dependencies
* d432bb1 Fixed typo on get_childern and build_tree
* 5fff5dc Use serializer to render section list response
* ebeefd9 Authenticate with JSON Web Token
* 5e4cd8e fixed create page radio button
* 8d5961a added radio button for privacy setting in create page
* e4f47ee Added fake fork
* bc1e57a Added funny story
* 69c438c Added some fake books
* ffe08b6 Added text editor
* abcd5db added projectservice
* 12e0a7c Merge branch 'master' of github.com:williampuk/negative-time
|\
| * b44e78f Added home redirect
* | d94d893 changed manage page
|/
* 00a326e Added summary for project
* d6d32d9 Added user reterive view
* ae70965 Fixed not sitting cookies on login
* e05f844 Added list sections API
* be9b39e add manage tab
* 5ca7589 add create tab template
* bcf3392 Restructured folders and files
* e6495f4 discover page with 3x3 grid layout
* 4b0e9c1 Added directive for enter key for login
* 3713294 changed the style and changed the form ajax post
* 57bb48f Added real login views
| * e2ca6fb add create tab template
| * 023f5cc discover page with 3x3 grid layout
| * 29eedeb changed the style and changed the form ajax post
| * 6489da4 changed again params to test login
| * 4dd135c changed params to test login:
| * 3a0bc65 Added real login views
|/
* 237441c Added user sign in
* 3be7fe2 full webapp structure
* 827d034 Added list projects API
* b6500dd Added create project API
* 0865edd Added login api
* 3a294ff Added static dirs
* 21d0eb5 Added static files
* 61c780b Base Django project
* 78a4291 Initial commit
git config --global alias.gr "log --graph --all
--format=format:'%C(bold blue)%h%C(reset) - %C(bold
green)(%ar)%C(reset) %C(white)%s%C(reset) %C(bold white)—
%an%C(reset)%C(bold yellow)%d%C(reset)' --abbrev-commit
--date=relative"
$ git gr
* 0fb3281 - (10 weeks ago) Added a proposal on database schema — Hei (origin/db_schema)
* 1e24ffb - (10 weeks ago) Added sphinx documentation — Hei (HEAD, origin/master, origin/HEAD, master)
* b0f364c - (2 months ago) Added requirements for third-party dependencies — Hei
* d432bb1 - (2 months ago) Fixed typo on get_childern and build_tree — Hei
* 5fff5dc - (2 months ago) Use serializer to render section list response — Hei
* ebeefd9 - (2 months ago) Authenticate with JSON Web Token — Hei
* 5e4cd8e - (3 months ago) fixed create page radio button — William Puk
* 8d5961a - (3 months ago) added radio button for privacy setting in create page — William Puk
* e4f47ee - (3 months ago) Added fake fork — Hei
* bc1e57a - (3 months ago) Added funny story — Hei
* 69c438c - (3 months ago) Added some fake books — Hei
* ffe08b6 - (3 months ago) Added text editor — Hei
* abcd5db - (3 months ago) added projectservice — William Puk
* 12e0a7c - (3 months ago) Merge branch 'master' of github.com:williampuk/negative-time — William Puk
|\
| * b44e78f - (3 months ago) Added home redirect — Hei
* | d94d893 - (3 months ago) changed manage page — William Puk
|/
* 00a326e - (3 months ago) Added summary for project — Hei
* d6d32d9 - (3 months ago) Added user reterive view — Hei
* ae70965 - (3 months ago) Fixed not sitting cookies on login — Hei
* e05f844 - (3 months ago) Added list sections API — Hei
* be9b39e - (3 months ago) add manage tab — David (origin/manage)
* 5ca7589 - (3 months ago) add create tab template — David
* bcf3392 - (3 months ago) Restructured folders and files — William Puk
* e6495f4 - (3 months ago) discover page with 3x3 grid layout — David
* 4b0e9c1 - (3 months ago) Added directive for enter key for login — William Puk
* 3713294 - (3 months ago) changed the style and changed the form ajax post — William Puk
* 57bb48f - (3 months ago) Added real login views — Hei
| * e2ca6fb - (3 months ago) add create tab template — David (origin/create)
| * 023f5cc - (3 months ago) discover page with 3x3 grid layout — David (origin/discover)
| * 29eedeb - (3 months ago) changed the style and changed the form ajax post — William Puk
| * 6489da4 - (3 months ago) changed again params to test login — William Puk
| * 4dd135c - (3 months ago) changed params to test login: — William Puk
| * 3a0bc65 - (3 months ago) Added real login views — Hei
|/
* 237441c - (3 months ago) Added user sign in — William Puk
* 3be7fe2 - (3 months ago) full webapp structure — William Puk
* 827d034 - (3 months ago) Added list projects API — Hei
* b6500dd - (3 months ago) Added create project API — Hei
* 0865edd - (3 months ago) Added login api — Hei
* 3a294ff - (3 months ago) Added static dirs — William Puk
* 21d0eb5 - (3 months ago) Added static files — William Puk
* 61c780b - (3 months ago) Base Django project — Hei
* 78a4291 - (3 months ago) Initial commit — William Puk
$ git branch testing
$ git checkout testing
$ vim test.rb
$ git commit -a -m 'made a change'
$ git checkout master
$ vim test.rb
$ git commit -a -m 'made a change'
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
README | 1 -
1 file changed, 1 deletion(-)
$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
$ git checkout iss53
Switched to branch 'iss53'
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
[iss53 ad82d7a] finished the new footer [issue 53]
1 file changed, 1 insertion(+)
$ git checkout master
$ git merge iss53
Auto-merging README
Merge made by the 'recursive' strategy.
README | 1 +
1 file changed, 1 insertion(+)
$ git branch -d iss53
$ git push origin serverfix
Counting objects: 20, done.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 1.74 KiB, done.
Total 15 (delta 5), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new branch] serverfix -> serverfix
$ git fetch origin
remote: Counting objects: 20, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 15 (delta 5), reused 0 (delta 0)
Unpacking objects: 100% (15/15), done.
From git@github.com:schacon/simplegit
* [new branch] serverfix -> origin/serverfix
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
- [deleted] serverfix
May branch off from: develop
Must merge back into: develop
Branch naming convention: anything except master, develop, release-*, or hotfix-*
May branch off from: develop
Must merge back into: develop and master
Branch naming convention: release-*
May branch off from: master
Must merge back into: develop and master
Branch naming convention: hotfix-*
git commit --amend
$ git checkout feature
$ git rebase master