Saturday, 29 September 2018
socket.io
reference:
https://www.youtube.com/watch?v=FvArk8-qgCk&list=PL4cUxeGkcC9i4V-_ZVwLmOusj8YAUhj_9&index=5
https://www.youtube.com/watch?v=tHbCkikFfDE&t=1909s
https://codeburst.io/isomorphic-web-app-react-js-express-socket-io-e2f03a469cd3
https://blog.cloudboost.io/creating-a-chat-web-app-using-express-js-react-js-socket-io-1b01100a8ea5
broadcast to single client
https://socket.io/docs/rooms-and-namespaces/
https://stackoverflow.com/questions/11484418/socket-io-broadcast-to-certain-users
Deploying Node.js and Socket.io App to Heroku
http://robdodson.me/deploying-your-first-node-dot-js-and-socket-dot-io-app-to-heroku/
https://devcenter.heroku.com/articles/node-websockets
Connecting to a specific Server Ip with Socket.io
https://stackoverflow.com/questions/22915149/connecting-to-a-specific-server-ip-with-socket-io
Get static IP address for Heroku app
https://serverfault.com/questions/871875/get-static-ip-address-for-heroku-app/871878
https://devcenter.heroku.com/articles/fixie
WebSockets vs REST
https://www.pubnub.com/blog/2015-01-05-websockets-vs-rest-api-understanding-the-difference/
start server and client simultaneously from 1 command window
https://stackoverflow.com/questions/30950032/how-can-i-run-multiple-npm-scripts-in-parallel
Use a package called concurrently.
npm i concurrently --save-dev
Then setup your
npm run dev
task as so:"dev": "concurrently --kill-others \"npm run start-watch\" \"npm run wp-server\""
react social media login
project link: https://chuanshuoge1-socialmedialogin.herokuapp.com/
import './App.css';
import Facebook from './components/facebook';
import Google from './components/google';
class App extends Component {
render() {
return (
<div>
<Facebook/><br/>
<Google/><br/>
To log out, clear webbroweser saved website data
</div>
);
}
}
export default App;
facebook & google login button
logged in, got access token
to log out, clear website data
add google+ api -> add authorized origins
facebook developer -> add domain
package.json
{
"name": "react-facebook-login",
"version": "0.1.0",
"private": true,
"dependencies": {
"react": "^16.5.2",
"react-dom": "^16.5.2",
"react-facebook-login": "^4.1.0",
"react-google-login": "^3.2.1",
"react-scripts": "1.1.5"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
-----------------------------------------------
app.js
import React, { Component } from 'react';import './App.css';
import Facebook from './components/facebook';
import Google from './components/google';
class App extends Component {
render() {
return (
<div>
<Facebook/><br/>
<Google/><br/>
To log out, clear webbroweser saved website data
</div>
);
}
}
export default App;
---------------------------------------------
google.js
import React, {Component} from 'react'
import { GoogleLogin} from 'react-google-login';
export default class Google extends Component{
state={
isLoggedIn: false,
userID:'',
name:'',
email:'',
picture:'',
accessToken:''
}
handle_loginSuccess = (res) =>{
this.setState({
isLoggedIn:true,
userID: res.profileObj.googleId,
name: res.profileObj.name,
email:res.profileObj.email,
picture:res.profileObj.imageUrl,
accessToken: res.accessToken
})
}
handle_loginFail=(res)=>{
console.log(res);
}
render(){
let googleContent;
if(!this.state.isLoggedIn){
googleContent=(<GoogleLogin
clientId="777285939272-s9bsmvkvve3jidsho0qspb928r6avdq5.apps.googleusercontent.com"
buttonText="Login with Google"
onSuccess={this.handle_loginSuccess}
onFailure={this.handle_loginFail}
/>)}else{
googleContent=(<div>
<div style={{
width:'400px',
margin:'auto',
background:'#f4f4f4',
overflow: 'scroll'
}}>
<img src={this.state.picture} alt={this.state.name}/>
<h2>Welcome {this.state.name}</h2>
<p>Email: {this.state.email}</p>
Access Token: {this.state.accessToken}
</div>
</div>);
}
return(
<div>{googleContent}</div>
)
}
}
---------------------------------------
facebook.js
import React, {Component} from 'react'
import FacebookLogin from 'react-facebook-login';
export default class Facebook extends Component{
state={
isLoggedIn: false,
userID:'',
name:'',
email:'',
picture:'',
accessToken:''
}
componentClicked=()=>console.log('clicked');
responseFacebook=res=>{
this.setState({
isLoggedIn:true,
userID: res.userID,
name: res.name,
email:res.email,
picture:res.picture.data.url,
accessToken:res.accessToken
})
}
render(){
let fbContent;
if(this.state.isLoggedIn){
fbContent= (
<div style={{
width:'400px',
margin:'auto',
background:'#f4f4f4',
overflow: 'scroll'
}}>
<img src={this.state.picture} alt={this.state.name}/>
<h2>Welcome {this.state.name}</h2>
<p>Email: {this.state.email}</p>
Access Token: {this.state.accessToken}
</div>
);
}else{
fbContent=(<FacebookLogin
appId="290235811581073"
autoLoad={false}
fields="name,email,picture"
onClick={this.componentClicked}
callback={this.responseFacebook} />)
}
return(
<div>
{fbContent}
</div>
)
}
}
----------------------------------------------
.env
HTTPS=true
------------------------------------------------
reference:
Friday, 28 September 2018
Thursday, 27 September 2018
react google login
google apis -> create project -> add google + service
fill home page url -> get clientId
reference:
https://developers.google.com/identity/protocols/OAuth2
https://www.npmjs.com/package/react-google-login
https://github.com/anthonyjgrove/react-google-login/issues/130
https://stackoverflow.com/questions/12909332/how-to-logout-of-an-application-where-i-used-oauth2-to-login-with-google
https://www.stevesouders.com/blog/2012/09/10/clearing-browser-data/
Tuesday, 25 September 2018
aluminium and plastic material
Plastic melting point (Celsius)
ABS 105
HDPE 120
Noryl 100
PC 147
PEI 219
PMMA 160
POM 175
PTFE(TEFLON) 326
PVC 100
UHMW 130
ULTEM 217
Ultem
Ultem is a family of PEI products manufactured by SABIC as a result of acquiring the General Electric Plastics Division in 2007, developed by Joseph G. Wirth in the early 1980s. Ultem resins are used in medical and chemical instrumentation due to their heat resistance, solvent resistance and flame resistance. Ultem 1000 (standard, unfilled polyetherimide) has a high dielectric strength, inherent flame resistance, and extremely low smoke generation. Ultem has high mechanical properties and performs in continuous use to 340 °F (170 °C) and is easily machined and fabricated with excellent strength and rigidity.[4] Ultem 1000 has typical thermal conductivity of 0.22 W/m·K (but some sources give 0.122 W/m·K). It has "Questionable usage on alkaline solutions."[5]
Aluminum tensile yield strength (MPa)
2024 (324)5052 (193)
6061 (276)
6063 (160)
react facebook login
facebook developer get app id
reference:
https://www.youtube.com/watch?v=ea9KyE78qKI
https://developers.facebook.com/apps
https://github.com/keppelen/react-facebook-login/issues/54
Saturday, 22 September 2018
PayPal SDK + node express + heroku
project link: https://chuanshuoge2-paypal-node.herokuapp.com/
--app.js
--package.json
--views
--index.ejs
--public
--sale.png
--.gitignore
------------------------------------------
"name": "paypal",
"version": "1.0.0",
"description": "paypal app",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"ejs": "^2.6.1",
"express": "^4.16.3",
"paypal-rest-sdk": "^1.8.1"
}
}
reference:
https://www.youtube.com/watch?v=7k03jobKGXM
https://developer.paypal.com/docs/api/quickstart/#how-to-use-this-guide
https://developer.paypal.com/developer/accounts/
https://www.sandbox.paypal.com
https://stackoverflow.com/questions/21520244/how-to-simply-send-a-request-parameter-with-jquery-form-submit
https://stackoverflow.com/questions/18679690/heroku-nodejs-app-with-r10-h10-and-h20-errors
https://stackoverflow.com/questions/20705602/how-can-i-check-in-which-url-my-node-js-server-is-running
get testing buyer and store account from paypal developer, by logging in real paypal account
in app&credentials get store client ID and secret, paste in app.js
store web page, buyer purchase 555.55
redirect buyer to login page, enter buyer sandbox paypal, continue
buyer's password can be changed in https://developer.paypal.com/developer/accounts/, account detail
transaction success , receipt sent
transaction cancelled
buyers account, 555.55 is charged
store account, 555.55 in
--package.json
--views
--index.ejs
--public
--sale.png
--.gitignore
------------------------------------------
package.json
{"name": "paypal",
"version": "1.0.0",
"description": "paypal app",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"ejs": "^2.6.1",
"express": "^4.16.3",
"paypal-rest-sdk": "^1.8.1"
}
}
----------------------------------------
app.js
const express = require('express');
const paypal = require('paypal-rest-sdk');
const path = require('path');
const bodyParser = require('body-parser');
const exphbs = require('ejs');
paypal.configure({
'mode': 'sandbox',
'client_id': 'Aa0fwwAFGqliwRTrBgHaEPZ2Ry3lqcynylfgNU0KuHO4W6vDJ-_hiF44-k4_6FTlT9iLBkuDqJ8Gse4P',
'client_secret': 'EEYSP5SgoxnZ5rlZag4gleJP4FuITpp5wGfv0GotpcPWkgaM9pXPfzIWiNhguIAaKTEwwPNx4-U_1bDF'
})
const app = express();
app.set('view engine', 'ejs');
//Body parser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//Set static Folder
app.use(express.static(path.join(__dirname, './public')));
app.get('/', (req, res) => res.render('index'));
app.post('/pay', (req, res) => {
// Build PayPal payment request
const payReq = JSON.stringify({
intent: 'sale',
payer: {
payment_method: 'paypal'
},
redirect_urls: {
return_url: req.headers.origin + '/success',
cancel_url: req.headers.origin + '/cancel'
},
transactions: [{
amount: {
total: req.body.price.toString(),
currency: 'CAD'
},
description: 'one time charge'
}]
});
console.log('payment ' + req.body.price.toString()+' request created')
//create payment
paypal.payment.create(payReq, function (error, payment) {
let links = {};
if (error) {
console.error(JSON.stringify(error));
res.send(JSON.stringify(error));
} else {
//sample approval_url href:
//'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-6BG01810KP0350828',
payment.links.forEach(function (linkObj) {
links[linkObj.rel] = {
href: linkObj.href,
method: linkObj.method
};
})
console.log('payment approval url: ' + links['approval_url'].href);
if (links.hasOwnProperty('approval_url')) {
// Redirect the customer to links['approval_url'].href
res.redirect(links['approval_url'].href);
} else {
console.error('no redirect URI present');
res.send('no redirect URI present');
}
}
});
});
app.get('/success', (req, res) => {
const paymentId = req.query.paymentId;
const payerId = { payer_id: req.query.PayerID };
//execute payment
paypal.payment.execute(paymentId, payerId, function (error, payment) {
if (error) {
console.error(JSON.stringify(error));
} else {
if (payment.state == 'approved') {
console.log('payment completed successfully');
console.log(payment);
res.send('payment success <br/>' + JSON.stringify(payment).split(',').join('<br/>'));
} else {
console.log('payment not successful');
}
}
});
});
app.get('/cancel', (req, res) => res.send('cancelled'));
//server entry port for heroku and localhost
const port = process.env.PORT || 3000;
app.listen(port, () => console.log('server started'));
-----------------------------------------------
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width-device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous"/>
<title>stripe transactions</title>
</head>
<body>
<div class="row">
<div class="col-md-12 text-center">
<img src="/sale.png" alt="sale" class="img-fluid" /><br/><br/>
<form action="/pay" method="post">
Price: $<input type="number" id="price" placeholder='123.45' step=".01"
onchange='priceChange()'/><br /><br />
<input type="hidden" id="priceSent" name="price" value="123.45" />
<button type="submit" class="btn-primary btn-block">Purchase</button><br />
</form>
</div>
</div>
<script>
function priceChange() {
document.getElementById("priceSent").value = document.getElementById("price").value;
}
</script>
</body>
</html>
----------------------------------
https://www.youtube.com/watch?v=7k03jobKGXM
https://developer.paypal.com/docs/api/quickstart/#how-to-use-this-guide
https://developer.paypal.com/developer/accounts/
https://www.sandbox.paypal.com
https://stackoverflow.com/questions/21520244/how-to-simply-send-a-request-parameter-with-jquery-form-submit
https://stackoverflow.com/questions/18679690/heroku-nodejs-app-with-r10-h10-and-h20-errors
https://stackoverflow.com/questions/20705602/how-can-i-check-in-which-url-my-node-js-server-is-running
Friday, 21 September 2018
agile BI
Create in MS word: 3-5 pages
reference:
https://project-management.com/10-key-principles-of-agile-software-development/
https://linchpinseo.com/the-agile-method/
- describe how and Agile project methodology can be applied to business intelligence projects
- provide 3 resons this could be a useful approach?
- provide 2 challenges with this approach?
- define a product backlog.
Agile method
helps BI realize value fast, adapt to ever changing business requirement, and
increases the customer satisfaction rate. Agile emphasize on interactive
communication between customers, business analyst, developers, and other
project members during all phases of project.
During project
initialization phase, meeting with customers and understanding their requirement
and expectation is essential for defining the project. Having a clear picture
of deliverables will facilitate cost and profit analysis, risk and feasibility assessment.
Client
information is also critical for setting up bidding strategies. For one-time
customer, strategies tend to maximize short term gain, whereas
for customer with future opportunities, strategies pivot to develop long term
relationship. Companies can submit competitive bid to increase the chance of
winning contract. Securing contracts will potentially change the course of the
company and contribute to the companies’ future growth and success.
During
project analysis and development phase, it is important to keep clients
updated. Frequent meetings with client to inform them with project progress
will keep business on track. If the milestones have been reached smoothly,
clients can check and give feedback. If unexpected delay happens, explaining
the adverse situation and cause to client will help work out a new schedule
with client.
Client may
also come up with new requirement as the projects runs. A new agreement may be
reached on both sides. Designs can be revised to accommodate the new criteria. Lots
of large projects can be broken down to smaller projects and is completed by
finishing smaller projects in sequence. Agile is suitable for these type of
projects.
Agile promotes
shorter development cycles and faster delivery. Smaller project with scope
scaled down is easier to manage, which accelerate processes of submitting temporary
design, receiving feedback, and revision. Constant flow of information between
development team and clients help all sides maintain on same pace. Therefore
waste on unnecessary design and extra work is reduced and development
efficiency is increased. Changes can be adapted in timely manner to better fit
clients’ need.
At project
deploy and operation phase, there might be minor system failure, bugs need to
be fixed. Customer experience with the system may also show where the
improvement could be made.
Agile will
help business meet challenges from different industries. By updating and maintaining
system regularly, and live testing the system on the market, systems have fewer
flaws and become more user-friendly and competitive. Customers can also be
trained to master system features, operations so that they better take
advantage the system.
Implement
agile mouthed can be challenging if clients have conflicted requirements for
projects. When communication with different personal from clients, the objectives
may vary and priorities deviate. This will confuse the development team, and
may lead development in opposite directions.
Agile could
also be challenging if development team is used to traditional systems.
Switching from working with a well scheduled plan, design, and implementation process
to an ever changing, customer oriented approach may be difficult to adapt.
Product
backlog is an ordered list, with desired functionalities in product. It is
usually short and can be completed in one development cycle.
reference:
https://project-management.com/10-key-principles-of-agile-software-development/
https://linchpinseo.com/the-agile-method/
Wednesday, 19 September 2018
Monday, 17 September 2018
Stripe api + node express + heroku credit card transaction
project link: https://chuanshuoge2-stripe-node.herokuapp.com/
left sales form, right response from Stripe account
set price, click purchase, form open enter test visa #
transaction, card, customer info processed by Stripe account
set #, click history, top few transactions are displayed
app is published to heroku, Stripe account keys are stored privately in config
In Stripe account, all transactions are logged
look into transaction detail
project folder
--config
--keys.js
--keys_dev.js
--keys_prod.js
--public
--img
--marketplace.png
--sale.png
--views
--layouts
--main.handlebars
--index.handlebars
--.gitignore
--app.js
--package.json
----------------------------------------------
package.json
{
"name": "node-stripe",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.3",
"express": "^4.16.3",
"express-handlebars": "^3.0.0",
"stripe": "^6.10.0"
}
}
app.js
const express = require('express');const keys = require('./config/keys')
const stripe = require('stripe')(keys.stripeSecretKey);
const bodyParser = require('body-parser');
const exphbs = require('express-handlebars');
const path = require('path');
const app = express();
//Handlebars Middleware
app.engine('handlebars', exphbs({ defaultLayout: 'main' }));
app.set('view engine', 'handlebars');
//Body parser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//Set static Folder
app.use(express.static(path.join(__dirname, './public')));
//Index Route
app.get('/', (req, res) => {
res.render('index', { stripePublishableKey: keys.stripePublishableKey });
})
//Charge Route
app.post('/charge', (req, res) => {
console.log(req.body);
//create/update customer
stripe.customers.create({
email: req.body.token.email,
source: req.body.token.id
})
//create charge
.then(customer => stripe.charges.create(
{
amount: req.body.price*100,
description: 'one step charge',
currency: 'cad',
customer: customer.id,
metadata: { order_id: req.body.orderId },
}
))
.then(charge => res.send('Transaction successful'))
.catch(err => res.send(err.message))
});
//transaction history route
app.post('/history', (req, res) => {
console.log(req.body);
stripe.balance.listTransactions({ limit: req.body.num }, function (err, transactions) {
// asynchronously called
if (!err) {
console.log(transactions);
res.send(transactions.data);
} else {
console.log('error');
}
});
});
const port = process.env.PORT || 5000;
app.listen(port, () => {
console.log('server started on port ', port);
});
----------------------------------
index.handlebars
<section><div class="row">
<div class="col-md-6 text-center">
<img src="/img/sale.png" alt="sale" class="img-fluid" />
<form>
Price: $<input type="number" id="price" placeholder="123.45"
onchange=priceChange()><br /><br />
<script src="https://checkout.stripe.com/checkout.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<button id="customButton" class="btn-primary btn-block">Purchase</button><br />
Show # of transactions: <input type="number" id="transactionNum" placeholder="3"
onchange=transactionNumChange()><br /><br />
<button id="historyButton" class="btn-success btn-block">Transaction Histories</button><br />
<script>
var handler = StripeCheckout.configure({
key: '{{stripePublishableKey}}',
image: '/img/marketplace.png',
locale: 'auto',
token: function (token) {
//when form is submitted, form will wait for token to be generated before close
document.getElementById('transactionId').innerHTML = token.id.slice(4);
document.getElementById('transactionTime').innerHTML = new Date(token.created * 1000).toUTCString();
document.getElementById('cardId').innerHTML = token.card.id.slice(5);
document.getElementById('clientIP').innerHTML = token.client_ip;
//generate order ID
orderId = parseInt(Math.random() * 10000);
//send to server
axios.post('/charge', { token: token, price: price, orderId: orderId })
.then(function (response) {
document.getElementById('serverRes').innerHTML = 'Purchase request sent. ' + response.data;
console.log(response);
})
.catch(function (error) {
document.getElementById('serverRes').innerHTML = error.statusText;
console.log(error);
});
}
});
//purchase button click event
document.getElementById('customButton').addEventListener('click', async function (e) {
// Open Checkout with further options:
await handler.open({
name: 'Purchase',
description: 'Credit card',
currency: 'cad',
amount: price * 100,
});
e.preventDefault();
});
//history button click event
document.getElementById('historyButton').addEventListener('click', function (e) {
//send to server
axios.post('/history', { num: transactionNum })
.then( function (response) {
var serverText = document.getElementById('serverRes');
serverText.innerHTML = '<br/>';
for (var i = 0; i < response.data.length; i++) {
var time = new Date(response.data[i].created * 1000).toUTCString();
serverText.innerHTML = serverText.innerHTML
+ 'ID: '+ response.data[i].id + '<br/>'
+ 'Time: ' + time + '<br/>'
+ 'Amount: ' + response.data[i].amount/100 + '<br/>'
+ 'Fee: ' + response.data[i].fee / 100 + '<br/>'
+ 'Net: ' + response.data[i].net / 100 + '<br/><br/>'
}
console.log(response);
})
.catch(function (error) {
document.getElementById('serverRes').innerHTML = error.statusText;
console.log(error);
});
e.preventDefault();
});
// Close Checkout on page navigation:
window.addEventListener('popstate', function () {
handler.close();
});
</script>
</form>
</div>
<div class="col-md-6">
use card # 4242 4242 4242 4242 M/Y 12/34 CYC 111 to test<br />
<span class="text-warning">server response:</span> <span id="serverRes"></span><br />
<span class="text-info">transactionId:</span> <span id="transactionId"></span><br />
<span class="text-info">transactionTime:</span> <span id="transactionTime"></span><br />
<span class="text-info">cardId:</span> <span id="cardId"></span><br />
<span class="text-info">clientIP:</span> <span id="clientIP"></span><br />
</div>
</div>
</section>
<script>
var price = 123.45;
var orderId = 1234;
var transactionNum = 3;
function priceChange() {
price = parseFloat(document.getElementById("price").value).toFixed(2);
}
function transactionNumChange() {
transactionNum = parseInt(document.getElementById("transactionNum").value)
}
</script>
--------------------------------------
main.handlebars
<!DOCTYPE html><html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width-device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous">
<title>stripe transactions</title>
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
<div class="container">
<a href="/" class="navbar-brand">
<h3 class="d-inline align-middle">Stripe</h3>
</a>
</div>
</nav>
<div class="container">
{{{body}}}
</div>
</body>
</html>
----------------------------------------------
keys.js
if (process.env.NODE_ENV === 'production') {
module.exports = require('./keys_prod');
} else {
module.exports = require('./keys_dev');
}
keys_prod.js
module.exports = {
stripePublishableKey: process.env.STRIPE_PUBLISHABLE_KEY,
stripeSecretKey: process.env.STRIPE_SECRET_KEY
}
------------------------------------
.gitignore
node_modules
key_dev.js
reference:
http://chuanshuoge2.blogspot.com/2018/09/stripe-api.html
Saturday, 15 September 2018
stripe API reference
reference:
https://www.youtube.com/watch?v=QT3_zT97_1g
https://www.youtube.com/watch?v=u2kbKh98MF0
https://stripe.com/docs/checkout
https://www.npmjs.com/package/stripe
https://stripe.com/docs/recipes/elements-react
https://stripe.com/docs/api#capture_charge
https://teamtreehouse.com/community/appuseexpressstatic-dirname-public-the-same-syntax-as-in-videobut-this-is-wrong-answer-for-this-question
https://kapeli.com/cheat_sheets/Axios.docset/Contents/Resources/Documents/index
https://stackoverflow.com/questions/5722919/jquery-convert-number-to-date
https://stackoverflow.com/questions/10744305/how-to-create-gitignore-file
https://stackoverflow.com/questions/5129598/how-to-link-a-folder-with-an-existing-heroku-app
Thursday, 13 September 2018
memo to your organization
write a memo of intent in support of introducing a business intelligence initiative into your organization.
the memo should address:
You may use a real or fictitious company - please state assumptions as needed.
BI Benefits Agricultural Industry
reference:
https://go.christiansteven.com/bi-blog/how-to-rock-the-agricultural-industry-with-business-intelligence
http://analytics-magazine.org/agriculture-analytics-google-farm/
http://www.codec.ie/company/news-and-events/business-intelligence-agriculture/
https://farmgrants.ca/?gclid=CjwKCAjwuO3cBRAyEiwAzOxKsm2xrABVpiIFq4f1eulX1sZCV4882QykMfGxLD5MBNHtJgRSSZmNuhoChX4QAvD_BwE
https://www.geospatialworld.net/article/remote-sensing-techniques-for-agriculture-suvey/
https://www.theta.co.nz/solutions/analytics/business-intelligence-and-data-warehouse-methodologies/
the memo should address:
- how BI could augment the strategic objectives of the organization
- what opportunities BI will provide
- What challenges BI will face in being adopted (and how you plan to overcome them)
- what methodologies will you use to manage the introduction of BI into the organization (project methodology, etc)
- an other support or information you think would help your BI initiative become adopted.
You may use a real or fictitious company - please state assumptions as needed.
BI Benefits Agricultural Industry
People works in agricultural industry are looking for ways to
make more profit. BI will empower them to reach this goal. BI helps enhance crop
yield, increase agricultural efficiencies, and optimize produce market value. BI
also helps lower financial cost, reduce natural and artificial risks, and decrease wastes.
BI takes advantage of historic data and modern technologies. Which creates relative accurate models of the crop yield from analysis on environment. Data from sensors in the farmland provide real time information of the
crop growth, allowing farmers to activate equipment at precise agricultural stage. Predictive analysis based
on real time market and historical price help farmers bring product
on market when values are high.
BI gathers resources from government; private sectors… Which
offer farmers funding and financing
aid for purchasing and leasing,
technology and equipment upgrade… Weather forecast and news alert farmers with
adverse weather condition, update farmers with changing trade patterns. Farms
can take precaution, plan ahead, and move away from risk.
BI facilities comprehensive planning, strategic decision
making to minimize waste of time and money, and maximize agricultural process
efficiency and return. BI creates opportunities for companies gaining
competitiveness, expanding future growth possibilities.
Agile approach is good for implementing BI solutions. The
objective is to speed up the data delivery to users, prioritize design to meet
requirement, adding value to business with strategies.
The biggest challenge for BI is data acquisition. Accurate,
real time, and historic data is required for analysis. Technology plays a key role
in tackling this problem. Sensors in the field transmit real time data to
control centers. Remote sensing techniques such as drone survey, satellite photo
send images to geographic information system, historic stats are open on
internet to view.
reference:
https://go.christiansteven.com/bi-blog/how-to-rock-the-agricultural-industry-with-business-intelligence
http://analytics-magazine.org/agriculture-analytics-google-farm/
http://www.codec.ie/company/news-and-events/business-intelligence-agriculture/
https://farmgrants.ca/?gclid=CjwKCAjwuO3cBRAyEiwAzOxKsm2xrABVpiIFq4f1eulX1sZCV4882QykMfGxLD5MBNHtJgRSSZmNuhoChX4QAvD_BwE
https://www.geospatialworld.net/article/remote-sensing-techniques-for-agriculture-suvey/
https://www.theta.co.nz/solutions/analytics/business-intelligence-and-data-warehouse-methodologies/
Monday, 10 September 2018
Saturday, 8 September 2018
Thursday, 6 September 2018
business analytics for BI resource
administrator
P@ssw0rd
https://eacademy.ict.sait.ca/
khanacademy.org
https://mva.microsoft.com/
datafluency: empowering your organization with effective data communication
https://max.book118.com/html/2018/0128/150891265.shtm
http://www.juiceanalytics.com
https://data.calgary.ca
https://open.canada.ca/data/en/dataset?organization=statcan
what does business analysis mean to you?
business analysis works with database, create models for business operations, generate reports for analyzing project profitability, feasibility... to help cooperation understand business requirements and making strategic decisions.
why is business analysis important with in a project?
business analysis plays important role in term of defining business requirements, understanding organization capabilities, managing schedules, cost and resources for projects, provide solutions and changes, and optimize sales and business outcome.
list the to 5+ challenges faced by a BA?
tight budget for huge project.
picky client who is never happy no matter how many changes have been made.
lack of project information. (schedules, budgets, process documentation...)
conflicting opinions for project design and approach.
changing project requirement during project
what is the BA's role in a project?
clarifying and outlining project requirement, identify business needs.
strategic planning project approaches,.
data analysis, research, design, and modify process, systems for project,
provide solutions for challenges.
3D printed house
房子可以打印了!
售价8000万的别墅3D打印只要100多万
一套房子1天时间就能完成
让炒房者无路可走!
某综艺节目前段时间
邀请了4位设计师
有一位设计师
用3D打印技术造房子的理念
令大家大开眼界
他就是“3D打印建筑第一人”马义和
马义和在节目中介绍
光是研发这台
立体打印机就用了16年时间
但打印机研发出来后
它就能取代人力,自行工作
把机器放在那,只要用几个小时或几天
就能打造出你想要的房子类型
就好比给蛋糕裱花一样
一层层往上叠就好了
只不过做蛋糕用的是奶油
3D打印房子用的是
建筑专用的油墨
一层层叠加
形成一块树米高的建筑构件
然后再用钢筋水泥
进行二次“打印”灌注,连成一体
建造一层约200平方米的房子
打印材料一天,
再5个工人花三天就可以完成
苏州工业园区有一栋
面积达1100平方米的别墅
创造了全球首个带内装
外装一体化3D打印的纪录
房子的墙体看上去跟用水泥建造出来的一样,呈现出年轮蛋糕般的螺纹结构,用手指敲敲墙体,听到空空的声音。虽然手感粗糙,但每层之间密不透风,看上去浑然一体。
还有全球首栋3D高层居住楼
盈创全球最高3D打印建筑--“6层楼居住房”
还有这么整整两栋中式庭院,也是打印出来的!
里里外外,不单是房子
内部的一些简单家具
如浴缸、台面等都能打印
房子要打地基吗?
设计师答:
一两层的房子是可以不打地基的
如果100层这样的高楼
只要打30或50米的桩就行了
这个房子没有钢筋
能抗多少级地震?
设计师答:
3D打印出来的房子
强度比钢筋还多20多倍呢
完全可以放心抗震
成本多少钱呢?
听到答案的我惊呆了
一套1100㎡的别墅
3D打印的造价只要100多万
想想在一线城市,这价格简直太诱惑
而且它还非常环保!
所用的油墨原料都是从
建筑和工业垃圾里回收来的
要是房子住久了腻了
就用专门的机器把它“吃掉”
然后再用“吃进去”的材料
打印一套新的出来
循环利用材料不浪费~
不止这套苏州庭院
马义和的团队已经打印出了不少房子
比如全球首个3D打印办公室落户迪拜
一张图纸、一个按钮
加上现场组装时间
这座“未来办公室”的整个工程
仅耗时19天
世界首个3D打印别墅
凤凰卫视办公大楼
西安3D打印别墅
3个小时完成了别墅的搭建
只要摆上家具就能拎包入住
能够抗9级地震
看着很不错的样子
想要吗?
不过……你得现有块地!
Subscribe to:
Posts (Atom)