Firebase / Google Cloud Project Setup Steps
- Note
- Be logged in with the target Google Apps user which should own the Google Apps /Firebase resources, and logged out of all other Google users. A Chrome incognito window works well for this if the target Google user is not your normal login account.
- Add a new Firebase project, use a convenient name (e.g.
makerlabs-acm-example
) and UNcheck all "Analytics" checkboxes:
https://console.firebase.google.com/
- Under "Customise data sharing for your new project", do not check any checkboxes.
- Upgrade the Firebase project from the "Spark plan" to the "Blaze plan" (Pay as you go). This requires a credit card attached to the Google Cloud Project, but the free limits are generous and should never be exceeded.
- Click the "Spark plan" button to the right of the project name on the main page.
- This process will attach the Firebase project with a Google Cloud project.
- Navigate to "Project settings" by clicking the gear icon next to "Project Overview". Select the "Service Accounts" tab and click "Generate
new private key" for
Firebase Admin SDK
usage.
- Accept the security notice, and save the JSON file in a secure location.
- Navigate to "Users and permissions" settings by clicking the gear icon next to "Project Overview". Additional users can be added to the Firebase project here.
- From the "Users and permissions" page, click the "Advanced permissions
settings" link at the bottom right. This will open the project in the Google Cloud Platform Console.
AWS Project Setup Steps
- Note
- Be logged in with the target Amazon user which should own the AWS resources, and logged out of all other Amazon users. An incognito window works well for this if the target Google user is not your normal login account.
Google APIs Enable Steps
Google OAuth Client Creation Steps
Developer / Workstation Setup Steps
- Note
- Make sure you have followed the steps in the README.md, at the minimum installing
brew
, yarn
, and running make deps
.
- Obtain a refresh token (for the user whose Google Drive credentials will be used by the firmware)
- Run the local script: >
./bin/oauth_server.sh
- When prompted, provide the
OAuth Client ID
and OAuth Client Secret
from the credentials created above.
- A browser window will popup, and the correct Google user should be selected here, logging in/out as necessary.
- Grant 'Sheets' / 'Drive' permission to the OAuth app when requested.
- Ignore the
404 Not Found
message, and return to the terminal where the oauth_server.sh
script is running.
- Copy the selected line (must contain a valid
token=
near the end of the line) into a new terminal window, and run it. (note: if multiple lines are printed, only the first line with a token should be used)
- The output from running the above command is the
OAuth Refresh Token
.
Google Drive "Maker Profile Photos" Folder Creation Steps
- Create or re-use a Google Drive folder within the organization's Drive to hold the uploaded Maker Profile Photo files (e.g A new folder named "Maker Profile Photos")
- Click the 'Sharing settings' link and make sure the permissions are set appropriately (e.g. Organization-only viewing)
Google Apps Script Steps
- Create a Google Apps Script project
From inside the Google Drive Spreadsheet, under Tools -> Script Editor
- Select and existing project, or create a new one
- Ensure the Google Apps Script project has a title set, and has been saved
Configuration Steps
Obtain the following pieces of information:
- From the MakerLabs wifi network:
Wifi SSID
(2.4GHz-only)
Wifi Password
- From the OAuth client ID credentials:
https://console.developers.google.com/apis/credentials
- From the Google Drive Spreadsheet:
Spreadsheet ID
Permissions column name
- From the Google Apps Script project:
Script ID
(from File -> Project Properties -> Script ID
)
- From the Google Drive "Profile Photos" folder:
- Folder
id
of "Profile Photos" folder
Configure the firmware with the information above:
The following settings are modified in the text GUI available via running yarn firmware menuconfig
- Update the Wifi info where it is used:
MakerLabs ACM Configuration -> Wifi SSID
MakerLabs ACM Configuration -> Wifi Password
- Update the Google Sheets info where it is used:
MakerLabs ACM Configuration -> Permission Column Label
MakerLabs ACM Configuration -> Google Apps Spreadsheet ID
- Update the Google OAuth client info where it is used:
MakerLabs ACM Configuration -> OAuth Client ID
MakerLabs ACM Configuration -> OAuth Client Secret
MakerLabs ACM Configuration -> OAuth Refresh Token


Cross-Site Scripting (commonly abbreviated as XSS) is a security issue that arises when an attacker can cause client-side script (such as JavaScript) of his or her choosing to execute within another user's browser in the context of a given web-site or web-application. This may allow the attacker to steal that user's session cookies for the web-application in question, or otherwise manipulate that user's session context.
XSS vulnerabilities most often arise if a web-application renders data that originated from an untrusted source (such as a query parameter) in a HTML document without carefully validating or escaping that data.
The following online resources provide further information on XSS vulnerabilities and how to avoid them:


Ship Anything, Anywhere, Easily!
Information and rules about Dealers and Sgippers individuals and register option
Information and rules for Brokers and register option
Information and rules for Carriers and register option
Information and rules for Individuals and register option
Car shipping
Boat shipping
Cargo shipping
Trailer shipping
Jet Ski shipping
ATV shipping
Motorcycle shipping
Other shipping


Introduction
jQuery Plugin Initialization
var options = [
{selector: '.class', offset: 200, callback: 'globalFunction()' },
{selector: '.other-class', offset: 200, callback: 'globalFunction()' },
];
Materialize.scrollFire(options);
jQuery Plugin Options
| Option Name | Description |
|---|---|
| Selector | The selector for the element that is being tracked. |
| Offset | If this is 0, the callback will be fired when the selector element is at the very bottom of the user's window. |
| Callback | This string is the function call that you want to make when the user scrolls to the threshold. It will only be called once. |
ScrollFire Demo
Scroll through slowly to get sense of what ScrollFire can do for you. This is the ScrollFire code that we have used on this page.
var options = [
{selector: '#staggered-test', offset: 50, callback: 'Materialize.toast("This is our ScrollFire Demo!", 1500 )' },
{selector: '#staggered-test', offset: 205, callback: 'Materialize.toast("Please continue scrolling!", 1500 )' },
{selector: '#staggered-test', offset: 400, callback: 'Materialize.showStaggeredList("#staggered-test")' },
{selector: '#image-test', offset: 500, callback: 'Materialize.fadeInImage("#image-test")' }
]; Materialize.scrollFire(options);


I am a second-year student of Makerere university pursuing a bachelor’s degree in information systems and technology.
I am a second-year student of Makerere university pursuing a bachelor’s degree in information systems and technology.
I am a second-year student of Makerere university pursuing a bachelor’s degree in information systems and technology.
I am a second-year student of Makerere university pursuing a bachelor’s degree in information systems and technology.
Please be part of our amazing partners around the globe Today
It's always a privilege to support this ministry and may God bless whatsoever you are doing. Keep empowering and supporting these kids. Me and my family pray for you and i urge everyone to do so. Amen
It's always a privilege to support this ministry and may God bless whatsoever you are doing. Keep empowering and supporting these kids. Me and my family pray for you and i urge everyone to do so. Amen
It's always a privilege to support this ministry and may God bless whatsoever you are doing. Keep empowering and supporting these kids. Me and my family pray for you and i urge everyone to do so. Amen


Media Player Example
Media Player demonstrates a simple multimedia player that can play audio and or video files using various codecs.
Running the Example
To run the example from Qt Creator, open the Welcome mode and select the example from Examples. For more information, visit Building and Running an Example.
The example uses a QMediaPlayer object passed into a QVideoWidget to control the video output. To give the application playlist capability we also use a QPlayList object.
To activate the various functions such as play and stop on the dialog, the button clicked events emit the play() and stop() signals, which are connected to the play() and stop() slots of QMediaPlayer.
connect(controls, SIGNAL(play()), player, SLOT(play())); connect(controls, SIGNAL(pause()), player, SLOT(pause())); connect(controls, SIGNAL(stop()), player, SLOT(stop()));
We can get the volume (and set our user interface representation)
controls->setVolume(player->volume());
and we can make widget 'volume' changes change the volume
connect(controls, SIGNAL(changeVolume(int)), player, SLOT(setVolume(int)));
The example also allows us to change various video properties by means of the QVideoWidget object. We can go to Full Screen mode with a single button click, and back again. Or if we press the "Color Options" dialog button we can have access to more subtle influences. The dialog has a set of sliders so that we can change the brightness, contrast, hue and saturation of the video being watched. The connect() statements are in pairs so that changes to either the user interface widget (the relevant slider) or the QVideoWidget object will update the other object.
connect(brightnessSlider, SIGNAL(sliderMoved(int)), videoWidget, SLOT(setBrightness(int))); connect(videoWidget, SIGNAL(brightnessChanged(int)), brightnessSlider, SLOT(setValue(int))); connect(contrastSlider, SIGNAL(sliderMoved(int)), videoWidget, SLOT(setContrast(int))); connect(videoWidget, SIGNAL(contrastChanged(int)), contrastSlider, SLOT(setValue(int))); connect(hueSlider, SIGNAL(sliderMoved(int)), videoWidget, SLOT(setHue(int))); connect(videoWidget, SIGNAL(hueChanged(int)), hueSlider, SLOT(setValue(int))); connect(saturationSlider, SIGNAL(sliderMoved(int)), videoWidget, SLOT(setSaturation(int))); connect(videoWidget, SIGNAL(saturationChanged(int)), saturationSlider, SLOT(setValue(int)));
Files:
- multimediawidgets/player/histogramwidget.cpp
- multimediawidgets/player/histogramwidget.h
- multimediawidgets/player/player.cpp
- multimediawidgets/player/player.h
- multimediawidgets/player/playercontrols.cpp
- multimediawidgets/player/playercontrols.h
- multimediawidgets/player/playlistmodel.cpp
- multimediawidgets/player/playlistmodel.h
- multimediawidgets/player/videowidget.cpp
- multimediawidgets/player/videowidget.h
- multimediawidgets/player/main.cpp
- multimediawidgets/player/player.pro


---
layout: post
title: How to Install dig for Windows
date: '2009-02-26T13:29:00.000-07:00'
author: Jay Swan
tags:
modified_time: '2009-02-26T13:30:34.579-07:00'
blogger_id: tag:blogger.com,1999:blog-5029689981158113588.post-6397869003871286289
blogger_orig_url: http://unroutable.blogspot.com/2009/02/how-to-install-dig-for-windows.html
---
dig is the standard tool for advanced DNS queries. A Windows version is available as part of the BIND port. To install it on Windows:
3) Open the archive with WinZip
4) Extract dig.exe and *.dll to c:\windows\system32
5) If you want the documentation page, extract dig.html to somewhere that you can find it.
Now you will be able to use dig from your command prompt in Windows. It is faster and more sophisticated than nslookup.
Get the quick help options with "dig -h".


Milagros Rodriguez was heading to Shoprite on Bruckner Boulevard in the Bronx
Rodriguez says the driver was not on his phone and was not distracted, because just before he hit her, they made eye contact.
"I saw the car coming, and he saw me. We both looked, but then the next thing I knew, he came too close to me and he knocked me over," she said.
A week later, her left leg, struck by the minivan is still bruised and sore. She says at one point, the driver briefly opened his door - he knew he hit her.
"In the moment I was dazed because I couldn't believe I was on the ground. When I looked up he was looking at me. He was looking at me from his car. And I thought he was gonna get out to at least say 'can I help you up?' or something," Rodriguez added.
The Bronx woman says he didn't say a word before taking off.
There was a passenger sitting next to him.
She describes the driver as young Hispanic man, clean shaven. All she could make out was the letter G on his New York license plate.
She tried to get up but several witnesses wouldn't let her - they called 911.
Rodriguez says if the driver had just gotten out of his minivan, and helped her up, she would've just gone about her day and would have continued to buy groceries and walk home.
Rodriguez said it never occurred to her to get the police involved.


Every day, Lagosians are exposed to different forms of pollution. When you go to work, church, mall, even where you live is polluted one way or another. Gidi Sensors is a map showing the level of pollution at select locations in Lagos.
Use your location


DIAGNOSIS A - Can put a description here about this radio item.
DIAGNOSIS B - Can put a description here about this radio item.
DIAGNOSIS C - Can put a description here about this radio item.
Brief history of the present issue(s), consult question. ***
Veteran has expressed interest and/or willingness to participate in proposed treatment. ***
Yes No
Select one:
New patient to RMR VAMC
Returning patient to RMR VAMC
Referral Type:
Department of Defense
Acute Rehabilitation
Sustaining Care
Subacute Rehabilitation
Wound Management
Interdisciplinary Team Evaluation
Other
Acknowledge: Patient must have imaging studies (MRI preferable) available in Impax.
Veteran has ongoing respiratory needs:
Goal for discharge destination:
Home
Group Residence
Independent Living Community
Assisted Living Community
Skilled Nursing Facility
Contract Nursing Home
Return to Referring VA/Spoke site
Medical Foster Home
Other


A triangle is a polygon with three edges and three vertices. It is one of the basic shapes in geometry.
(three sides and three angles) and the three angles always add to 180° the figure above shows an example
of a triangle with sides lebled with green marks and the angles in pink semi-circles that joins two vertices.
find out the type of triangle yo have encountered
my project determines if the values input by the user are of shape tringle
and the which type of triangle they form.
Types of triangles
isosceles
- For an isosceles triangle, two sides are exactly equal.
Also, has two angles of the same measure, namely the angles opposite
to the two sides of the same length. he equal sides are called legs and
the third side is called the base.
equilateral
-or an equilateral triangle, all sides must be equal.
It's also a regular polygon with all angles measuring 60°.
scalene
For a scalene triangle, none of the sides is equal. However, the sum of
any two sides of the triangle must be greater than the third side.
Equivalently, it has all angles of different measure.


Module binaryheap
Binary heap implementation
The 'plain binary heap' is managed by positions.
Which are hard to get once an element is inserted. It can be anywhere in the list because it is re-sorted upon insertion/deletion of items.
Array with values is stored in field values
:
peek = heap.values[1]
A 'unique binary heap' is where the payload is unique and the payload itself also stored (as key) in the heap with the position as value, as in;
heap.reverse[payload] = [pos]
Due to this setup the reverse search, based on payload, is now a much faster operation because instead of traversing the list/heap, you can do;
pos = heap.reverse[payload]
This means that deleting elements from a 'unique binary heap' is faster than from a plain heap.
All management functions in the 'unique binary heap' take payload
instead of pos
as argument.
Note that the value of the payload must be unique!
Fields of heap object: * values - array of values * payloads - array of payloads (unique binary heap only) * reverse - map from payloads to indices (unique binary heap only)
Functions
| binaryHeap (swap, erase, lt) | Creates a new binary heap. |
| heap:insert (value) | Inserts an element in the heap. |
| heap:peek () | Returns the element at the top of the heap, without removing it. |
| heap:pop () | Removes the top of the heap and returns it. |
| heap:remove (pos) | Removes an element from the heap. |
| heap:update (pos, newValue) | Updates the value of an element in the heap. |
| maxHeap (gt) | Creates a new max-heap, where the largest value is at the top. |
| maxUnique (gt) | Creates a new max-heap with unique payloads. |
| minHeap (lt) | Creates a new min-heap, where the smallest value is at the top. |
| minUnique (lt) | Creates a new min-heap with unique payloads. |
| unique:insert (value, payload) | Inserts an element in the heap. |
| unique:peek () | Returns the element at the top of the heap, without removing it. |
| unique:pop () | Removes the top of the heap and returns it. |
| unique:remove (payload) | Removes an element from the heap. |
| unique:update (payload, newValue) | Updates the value of an element in the heap. |
| unique:valueByPayload () | Returns the value associated with the payload |
Functions
- binaryHeap (swap, erase, lt)
-
Creates a new binary heap.
This is the core of all heaps, the others
are built upon these sorting functions.
(for a min-heap)
that implement the sorting algorithm and two fields;
heap.values
andheap.payloads
being lists, holding the values and payloads respectively.Parameters:
- swap
(function)
swap(heap, idx1, idx2)
swaps values atidx1
andidx2
in the heapsheap.values
andheap.payloads
lists (see return value below). - erase
(function)
swap(heap, position)
raw removal - lt
(function) in
lt(a, b)
returnstrue
whena < b
Returns:
-
table with two methods;
heap:bubbleUp(pos)
andheap:sinkDown(pos)
- swap
(function)
- heap:insert (value)
-
Inserts an element in the heap.
Parameters:
- value the value used for sorting this element
- heap:peek ()
-
Returns the element at the top of the heap, without removing it.
Returns:
-
value at the top, or
nil
if there is none - heap:pop ()
-
Removes the top of the heap and returns it.
When used with timers, pop will return the payload that is due.
Note: this function returns
payload
as the first result to prevent extra locals when retrieving thepayload
.Returns:
-
value at the top, or
nil
if there is none - heap:remove (pos)
-
Removes an element from the heap.
Parameters:
- pos the position to remove
Returns:
-
value or nil + error if an illegal
pos
value was provided - heap:update (pos, newValue)
-
Updates the value of an element in the heap.
Parameters:
- pos the position which value to update
- newValue the new value to use for this payload
- maxHeap (gt)
-
Creates a new max-heap, where the largest value is at the top.
Parameters:
- gt (optional) comparison function (greater-than), see binaryHeap.
Returns:
-
the new heap
- maxUnique (gt)
-
Creates a new max-heap with unique payloads.
A max-heap is where the largest value is at the top.
NOTE: All management functions in the 'unique binary heap' take
payload
instead ofpos
as argument.Parameters:
- gt (optional) comparison function (greater-than), see binaryHeap.
Returns:
-
the new heap
- minHeap (lt)
-
Creates a new min-heap, where the smallest value is at the top.
Parameters:
- lt (optional) comparison function (less-than), see binaryHeap.
Returns:
-
the new heap
- minUnique (lt)
-
Creates a new min-heap with unique payloads.
A min-heap is where the smallest value is at the top.
NOTE: All management functions in the 'unique binary heap' take
payload
instead ofpos
as argument.Parameters:
- lt (optional) comparison function (less-than), see binaryHeap.
Returns:
-
the new heap
- unique:insert (value, payload)
-
Inserts an element in the heap.
Parameters:
- value the value used for sorting this element
- payload the payload attached to this element
- unique:peek ()
-
Returns the element at the top of the heap, without removing it.
When used with timers, peek will tell when the next timer is due.
Returns:
-
value, payload at the top, or
nil
if there is noneUsage:
-- simple timer based heap example while true do sleep(heap:peek() - gettime()) -- assume LuaSocket gettime function coroutine.resume((heap:pop())) -- assumes payload to be a coroutine, -- double parens to drop extra return value end
- unique:pop ()
-
Removes the top of the heap and returns it.
When used with timers, pop will return the payload that is due.
Note: this function returns
payload
as the first result to prevent extra locals when retrieving thepayload
.Returns:
-
value, payload at the top, or
nil
if there is none - unique:remove (payload)
-
Removes an element from the heap.
Parameters:
- payload the payload to remove
Returns:
-
value, payload or nil + error if an illegal
pos
value was provided - unique:update (payload, newValue)
-
Updates the value of an element in the heap.
Parameters:
- payload the payoad whose value to update
- newValue the new value to use for this payload
- unique:valueByPayload ()
-
Returns the value associated with the payload
Returns:
-
value or nil if not such payload exists