Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Contrary to popular belief, Lorem Ipsum is not simply random text.
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here'


From the makers of the 2012 Game of the Year: The Walking Dead, comes a gritty, violent and mature thriller based on the award-winning Fables comic books (DC Comics/Vertigo).


WEEK 19 WEDNESDAY
Year 1 (Year 2)
FIRST READING Deuteronomy 34:1-12
A reading from the Book of Deuteronomy
In those days: Moses went up from the plains of
The word of the Lord.
RESPONSORIAL PSALM Psalm 66:1-3a.5 and 8.16-17 (R. see 20a, 9a)
R. Blest be God, who gave life to my soul.
Cry out with joy to God, all the earth; O sing
to the glory of his name. O render him glorious
praise. Say to God: 'How awesome your deeds!'
R. Blest be God, who gave life to my soul.
Come and see the works of God: awesome his deeds among the children of
men. O peoples, bless our God; let the voice of his
praise resound.
R. Blest be God, who gave life to my soul.
Come and hear, all who fear God; I will tell
what he did for my soul. To him I cried aloud, with exaltation ready on my
tongue.
R. Blest be God, who gave life to my soul.
FIRST READING Ezekiel 9:1-7; 10:18-22
A reading from the Book of the Prophet Ezekiel
Then he cried in my ears with a loud voice, saying,
"Draw near, you executioners of the city, each
with his destroying weapon in his hand." And lo, six men came from the
direction of the upper gate, which faces north, every man with his weapon for
slaughter in his hand, and with them was a man clothed in linen, with a writing
case at his side. And they went in and stood beside the bronze altar. Now the
glory of the God of Israel had gone up from the cherubim on which
it rested to the threshold of the house; and he called to the man clothed in
linen, who had the writing case at his side. And the LORD said to him, "Go
through the city, through
The word of the Lord.
RESPONSORIAL PSALM Psalm 113:1b-2.3-4.5-6 (R. 4b)
R. The glory of the Lord is above the heavens.
Praise, O servants of the LORD, praise
the name of the LORD! May the name of the LORD be blest both now and for
evermore!
R. The glory of the Lord is above the heavens.
From the rising of the sun to its setting, praise be the name of the LORD! High above all nations is the LORD,
above the heavens his glory.
R. The glory of the Lord is above the heavens.

R. The glory of the Lord is above the heavens.
R. Alleluia. God was in Christ reconciling the world to himself, and entrusting to us the message of reconciliation. R. Alleluia.
GOSPEL Matthew 18:15-20
A reading from the holy Gospel according to Matthew
Jesus said to his disciples, "If your brother sins against you, go and tell him his fault, between you and him alone.  But if he does not listen, take one or two others along with you, that every word may be confirmed by the evidence of two or three witnesses. If he refuses to listen to them, tell it to the church; and if he refuses to listen even to the church, let him be to you as a Gentile and a tax collector.  Again I say to you, if two of you agree on earth about anything they ask, it will be done for them by my Father in heaven. For where two or three are gathered in my name, there am I in the midst of them."
The Gospel of the Lord.


I first learnt of MIT App Inventor when I was a visiting student at MIT in 2014. I have been using MIT App Inventor ever since: to prototype android apps for my research, and as the introductory mobile app development platform in the Android Programming class I teach at WVU.
Last summer I was lucky to be part of Google Summer of Code 2016, where I successfully completed the Raspberry Pi integration on the MIT App Inventor platform. I would like to contribute again this summer and extend the IoT capabilities using the Android Things SDK.
I have been teaching at the WVU LaunchLab as a codelab instructor for the past 2.5 years. I teach students who do not have prior mobile coding knowledge or even any programming experience to develop their own mobile apps. In my classroom sessions, I have successfully utilized MIT App Inventor to teach the fundamentals before delving into the Android Platform internals.
Here are some of the lesson plans I have used, some of which modified from the official MIT App Inventor tutorials: lesson 1, lesson 2, lesson 3, lesson 4, and lesson 5.
I am interested in the Internet of Things project listed on the appinventor-sources wiki. Specifically, I would like to incorporate the Android Things SDK to MIT App Inventor Platform. Android Things was unveiled fairly recently (Developer Preview 1 in December 2016, and Developer Preview 2 in February 2017). Thus, application development utilizing Android Things has just begun by experienced developers, but using the the SDK is not yet simple enough for a typical MIT App Inventor user such as a high school student.
Therefore, the goal of this Summer of Code 2017 project is to investigate ways to integrate the Google Things API features into MIT App Inventor, and contribute an MIT App Inventor extension component supporting Android Things to build IoT Android apps to the vast number of people worldwide.
I completed my bachelors in Aerospace Engineering, my Masters in Mechanical Engineering, and I am currently pursuing a second Masters in Applied Mathematics at the West Virginia University. Coming from a multi disciplinary background, IoT is a special interest of mine. I have done several IoT hobbyist projects for fun and as part of the android programming classes I teach at WVU. In addition, I have been using App Inventor in my introductory app development classes at WVU codelab. As part of my graduate studies, I have conducted lot of research on autonomous vehicles, which has even led to several journal publications as listed in my resume.
More importantly, as was mentioned before, I contributed the Raspberry Pi Integration for MIT App Inventor last summer. The experience from working on that project has situated me to be the best candidate to work on the Android Things integration on MIT App Inventor. Through this Google Summer of Code project, I hope to contribute good quality code to the MIT App Inventor project, and also hope this project will result in a research worthy outcome that will lead to a publication.
Since there are many famously known starter kits (Adafruit Project Kit, Sparkfun Project Kit) as featured in the official Google Android Things developer kits site, a direct integration of the Android Things will open the door for large number of school students, novel experimentalists, enthusiasts, and hobbyists to be able to do IoT projects along with App Inventor. Android Things also support different boards including Raspberry Pi, Intel Edison, Intel Joule, and NXP Pico via a common interface. Thus, the integration will supersede the capabilities offered by previous Arduino and Raspberry Pi integrations on MIT App Inventor.
As was mentioned before, the Android Things API is relatively new compared to other APIs. The Developer Preview 2 was only released in February 2017 for developers and early adopters to use for development and compatibility testing on supported hardware platforms. If MIT App Inventor becomes one of the early adopters and supporting platforms for the Android Things, it will hopefully lead to many interesting easily programmable DIY projects that are integrated with mobile phones.
Android Things is part of the Android SDK, thus licensed under Apache 2. Therefore it will be compatible with the App Inventor license. This will enable the App Inventor user community to develop Android based IoT applications without any licensing implications, as was the case with integrating with Raspberry Pi, since the Raspberry Pi integration software relied on a GPL licensed Pi4J library.
Internet of Things (IoT) is a fast growing field of where sensors are monitoring appliances, actuators, and machines, as well as controlling them remotely, over the Internet. It has helped to create pervasive smart things that integrate computation into everyday environments and link them through Web and Cloud applications. This evolution is impacting our lifestyle and thus quickly and easily creating applications to leverage full potential is of paramount importance. This project is an effort to realize that goal, by integrating the Android Things SDK on the MIT App Inventor platform.
I am proposing to develop an MIT App Inventor Extension that integrates Android Things. This project will be different from the last Summer of Code project I did on integrating Raspberry Pi on the App Inventor, because the Android Things API will allow a generic interface to several different types of IoT platforms, including Arduino, Raspberry Pi, NXP Pico, Intel Edison and Joule.
Android Things extends the core Android framework with additional APIs that allow apps to integrate with new types of hardware not found on mobile devices. Apps for embedded devices bring developers closer to hardware peripherals and drivers than phones and tablets. However, support for designing apps that extend the capabilities of IoT is not yet fully supported in MIT App Inventor in a device agnostic manner (the only available integrations being the Arduino and the Raspberry Pi integration I did last summer). This project will aim to bridge that gap by integrating the the Android Things API to MIT App Inventor.
The specific goals of this project is as follows:
Based on the above criteria, the necessary properties and methods will be added to the MIT AI Things Extension Component.
Since IoT applications space is very broad, I would like to develop several sample applications using the newly created Things Extension component. I have identified two different applications that I can develop. I am hoping to take an iterative approach to refine the component as new requirements get elicited when these sample apps are created.
The following diagram shows the rough time-line I have allocated to various aspects of the project. This is by no means the final time allocation, and with the guidance of the mentors I hope to update this.
The Javascript project that I am the most proud of is FlightR. I completed this project as part of a hackathon, and won the Most Technically Interesting Project Award at the Big Travel Data Hackathon 2013, organized by Hack Reduce. The project uses Javascript and the d3.js library to visualize actual flight ticket prices and the search results for tickets in a given time period. It is designed to be user friendly and interactive! The tool provides a windowing method to correlate the date of the flight to the price and the time of the day it was taken. (source code)
I was an intern android developer for MyLingoApp, a mobile app that lets movie goers enjoy their theater experience in their language of choice. As part of this internship, I got the opportunity to work on Android Material Design, downloading large file sizes, and Android NDK for audio syncing. Furthermore, I have also developed, though not yet fully completed, an android app for making Selfie Rap Videos (source code).
Last summer I was able to comfortably navigate the App Inventor code base, and understand the different pieces to successfully complete the Raspberry Pi integration (many thanks to my mentor William Byrne for his help during that ramp up phase!). I am much more comfortable with App Inventor now, and I believe I should be able to start working on my project from day one.
I have created two samples apps to test the Raspberry Pi Components that I contributed to MIT App Inventor last summer. The first app is a Remote Controlled Home Appliance such as a light that can be remotely controlled with an MIT App Inventor app. The second app is Sensor Controlled Appliance, that will turn on or off based on a certain sensor input. Please see the comprehensive documentation for more details.
An app that puts the phone to silent mode as soon as the user toggles a switch, or enters a classroom as specified by a certain geo fence. For any message that is received during the period, and automatic message as customized by the user will be sent.
This app helps drivers remember where they parked in a busy parking lot. Simply press remember location, and upon return to the parking lot, the app will display the parked location on a map.
A simple app to record "cheering chants" during big game day using text to speech, and play back to create nice sound effects when the played back in large groups.
A simple game.
According to this issue, "[the useFront] property relied on an undocumented feature of the android camera system". This feature has been removed from nearly all androids, including older ones including 2.3 devices. There exists no intent to specify which camera to use, and the user should decide what camera to use. Furthermore, according to this comment, App Inventor has always used an intent to launch the external camera app, and that intent does not have any way of specifying, and it definitely cannot query device state. Therefore, this property was removed from the AI design and block interfaces.
Properties To Be Added: frontCamera, backCamera, (and externalCamera if connected).
Methods To Be Added: IsSelected, TakePicture (already there)
Due to the limitations across different APIs and devices in how selecting the camera upon intent passing, we might have to rewrite the existing Camera component. The source code for this component is available at: appinventor/components/src/com/google/appinventor/components/runtime/Camera.java.
According to the Camera API documentation, we can utilize the open(int id) method of the Camera class, where id refers to the camera the user has specified in the property list.
The SimpleFunction TakePicture() in the existing Camera AI component should be modified such that it would call camera = Camera.open(findFrontFacingCamera()) if the frontCamera property is set, where the findFrontFacingCamera is implemented as follows. Then we can call the Android API's camera.takePicture() method instead of launching the camera app via the intent.
Note: This is by no means the complete code, and I probably have overlooked some important things, but I sure hope this is in the right direction to achieve what is requested in the challenge.
private int findFrontFacingCamera() { int cameraId = -1; // Search for the front facing camera int numberOfCameras = Camera.getNumberOfCameras(); for (int i = 0; i < numberOfCameras; i++) { CameraInfo info = new CameraInfo(); Camera.getCameraInfo(i, info); if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { cameraId = i; break; } } return cameraId; }


Follow the instructions in Making Games with HappyFunTimes and when cloning a game choose either
Unitychararacterexample A Unity3D example that spawns characters written in UnityScript.
Unitysimple A Unity3D example that just positions a sphere for each player written in C#.
Unity2dplatformer A Unity3D example that shows a 2d platformer written in C#
Unity-multi-game--example A Unity3D example that shows a 2d platformer written in C# that can span multiple computers (Advanced!)
These steps have already been done in the samples but assuming you were starting from scratch these are the steps you'd have taken. Reading this will hopefully help you understand the code.
The easist way to start is to make a prefab that contains the GameObject that you
want to spawn everytime a player connects to the game. In that GameObject add a
new script. Let's say it's MyPlayer.cs
or MyPlayer.js
In that script make a function called InitializeNetPlayer
. This function will be
called when the prefab is spawned everytime a new player connects.
C# minimal code
using UnityEngine;
using HappyFunTimes;
using System;
class MyPlayer : MonoBehaviour
{
private NetPlayer m_netPlayer;
void InitializeNetPlayer(SpawnInfo spawnInfo) {
m_netPlayer = spawnInfo.netPlayer;
m_netPlayer.OnDisconnect += Remove;
}
// delete this gameobject if the player disconnects
private void Remove(object sender, EventArgs e) {
Destroy(gameObject);
}
...
}
UnityScript minimal code
private var _netPlayer : HappyFunTimes.NetPlayer;
function InitializeNetPlayer(spawnInfo : HappyFunTimes.SpawnInfo) {
_netPlayer = spawnInfo.netPlayer;
_netPlayer.OnDisconnect += Remove;
}
// delete this gameobject if the player disconnects
function Remove() {
Destroy(gameObject);
}
Now make a new GameObject and add a Script Component, HappyFunTimes->PlayerSpawner.
In the properties for the PlayerSpawner set the prefab to spawn for player
to the
prefab you just created. Leave gameId
blank!
If happyfuntimes is running, and you followed all the other instructions about editing
package.json
and running hft add
etc, then if you run the game you should see the
message
If you open a browser window and go to http://localhost:18679
you should see your
prefab get spawned. Open more browser windows/tabs you'll see more get spawned. Close them
and they'll disappear. NOTE: Since we didn't set a positon they'll all be in the exact
same spot.
To get input from phones you need to program both the phone AND Unity. The phones must currently be programmed in JavaScript since the entire point is that there's nothing to install on the phone. Maybe with Unity5 we'll be able to make controllers in Unity as well but for now you've got to code them.
The way HappyFunTimes work is you write JavaScript on the phone to get input and send messages. For example here is some code in JavaScript to send a message
client.sendCmd('move', {
x: position.x / target.clientWidth,
y: position.y / target.clientHeight,
});
As you can see the command is called move
. You make up that name. You decide
what data to send. In this case we're sending x
and y
and they are both
numbers, in case floating point numbers. in Unity we need to create
structs/classes that match, associate them with a command name, and register
a function to be called when the message arrives
C#
[CmdName("move")]
private class MessageMove : MessageCmdData {
public float x = 0;
public float y = 0;
};
void InitializeNetPlayer(SpawnInfo spawnInfo) {
m_netPlayer = spawnInfo.netPlayer;
...
m_netPlayer.RegisterCmdHandler<MessageMove>(OnMove);
}
private void OnMove(MessageMove data) {
// Do something with data.x and data.y
...
}
UnityScript
@HappyFunTimes.CmdName("setColor")
class MessageMove extends HappyFunTimes.MessageCmdData {
var x : float;
var y : float;
};
function InitializeNetPlayer(spawnInfo : HappyFunTimes.SpawnInfo) {
_netPlayer = spawnInfo.netPlayer;
...
_netPlayer.RegisterCmdHandler(OnMove);
}
function OnMove(data : MessageMove) {
// Do something with data.x and data.y
...
}
Hopefully that's clear.
To send a message to the phone define a class/struct and then call NetPlayer.SendCmd
C#
[CmdName("scored")]
private class MessageScored : MessageCmdData {
public MessageScored(int _points) {
points = _points;
}
public int points;
}
... in some function ...
m_netPlayer.SendCmd(new MessageScored(250));
UnityScript
@HappyFunTimes.CmdName("scored")
class MessageScored extends HappyFunTimes.MessageCmdData {
var points : int;
};
... in some function ...
var data = new MessageScored();
data.points = 250
_netPlayer.SendCmd(data);
Then back in controller.js
you can listen for that command with
g_client.addEventListener('scored', handleScore);
function handleScore(data) {
// do something with data.points
}
Once your game is ready to be published follow these steps
First make sure your game works outside if the unity editor so.
Inside the Unity editor pick "File->Build Settings..."
Click "Add Current" to add the current scene to "Scenes in Build".
Click "Player Settings" at the bottom of the "Build Settings"
Make sure the following are set
Save the Scene and Exit Unity
from the game folder run hft export
cd myAwesomeGame
hft export
Now run happyfuntimes with --app-mode
or
in the browser go to http://localhost:18679/games.html
and click on your game. It should launch and
run as a stand alone app.
from the game folder type
hft publish
It will export again (just in case you forgot) and then upload it all to a github release and finally notify superhappyfuntimes.net to take a look.
Note: The first time you publish a PERMANENT association
is made for the game's gameId from the package.json
to the
github repo being used in the game's folder. After that you
can publish newer versions of the game but they must be from
the same repo.


In POSIX sh, redirecting from/to globs is undefined.
(or "In dash, ... is not supported." when using dash
)
#!/bin/sh
date > /tmp/log*.txt
To redirect from/to the only match of a glob, expand the glob first:
#!/bin/sh
set -- /tmp/log*.txt
# PS: This is a good place to verify that there was exactly one match
date > "$1"
Alternatively, use a loop to redirect from/to all if that was the intention.
Shells differ in whether (and how) they do pathname expansion on names in redirections. Avoid the issue by expanding the glob yourself.
If you only intend to target shells that supports this feature, you can change the shebang to a shell that guarantees support, or [[ignore]] this warning.
You can use # shellcheck disable=SC3000-SC4000
to ignore all such compatibility
warnings.


Migrate Configuration to New Server
The typical tasks when Rapid SCADA migration to another server is needed:
- The software deployment on a production server when the configuration has been done using a developer workstation.
- Server replacement.
Configuration migration sequence:
- Ensure that connections between the server and the devices are properly configured: the required serial ports exist, industrial controllers available via the network, etc.
- Install Rapid SCADA on the new server, but do not start Server and Communicator services.
- Stop Server and Communicator services on the obsolete server. Set Manual startup type of these services.
- Copy the content of the directories listed below from the obsolete server to the new server (default directories are shown):
C:\SCADA\BaseDAT
C:\SCADA\BaseSDF
C:\SCADA\Interface
C:\SCADA\ScadaComm\Config
C:\SCADA\ScadaServer\Config
C:\SCADA\ScadaWeb\config
- Copy the data archive located in the following directories from the obsolete server to the new server:
C:\SCADA\ArchiveDAT
C:\SCADA\ArchiveDATCopy
- Start Server and Communicator services on the new server.
- Check logs.


{% extends 'layout.html' %} {% block title %}Get some motivation!{% endblock %} {% block extra_head %} {% endblock %} {% block content %}
Tweet
Create your own motivational (or demotivational) image and share it with your friends. It's free!


The fashion industry needs to fundamentally change in order to mitigate the environmental impact of fast fashion, experts have said.
Clothes rental, better recycling processes, pollution control technology and the innovative use of offcuts are among measures that could help, they said.
The researchers produced a report – pubished in the journal Nature Reviews Earth & Environment – into the environmental cost of the industry, and how it needs to change to deal with some of the many associated problems. While the figures are debated, the Intergovernmental Panel on Climate Change (IPCC) has calculated the fashion industry produces 10% of global carbon dioxide emissions every year, while it is estimated to use around 1.5 trillion litres of water annually. Meanwhile concerns have been rising about pollution, from chemical waste to microplastics.
Among the developments deemed to be exacerbating the problems, is fast fashion – cheap clothes bought and cast aside in rapid succession as trends change – such as the £1 bikini sold by Missguided last year.
“It is really a global problem,” said Dr Patsy Perry, a co-author of the research from Manchester University. Perry and an international group of colleagues point out that the global nature of the fashion industry means clothes may have travelled around the world several times during manufacture, while it is estimated that if 3% of garment transportation shifted from ship to air cargo – a burgeoning trend in the industry – it could result in over 100% more carbon emissions than if all garment transportation was by ship.
The team also points to the industry’s water consumption, carbon dioxide emissions, textile waste, and use of chemicals – substances they say not only pose environmental risks, but health risks for those involved in the industry. “In one example, a single European textile-finishing company uses over 466g of chemicals per kilogram of textile,” they write.
And while many garments are designed in the US or EU, they are often produced in developing countries. The team says that not only increases fabric waste through poor communication of requirements, but regulations around pollution are often less strict in the countries of manufacture. “The waste water is going out into freshwater streams and polluting the rivers that people are fishing from [and] living from,” said Perry.
The report stresses limited natural resources mean the fashion industry must change, and sets out a number of ways it could become greener, including embracing renewable energy and developing new methods for recycling, as well as reducing the use of polyester – a non-biodegradable fibre, produced from petrochemicals, that dominates the fashion industry.
They also argue the industry should focus on producing better quality, long-lived items, while innovations like clothes rental and new approaches to resale should be scaled up.
Libby Peake of the Green Alliance said the UK had a particular problem when it came to fast fashion.“We buy more clothing per head than any other country in Europe, including nearly twice as much as Italians, who are better known for their fashion sense,” she said.
As well as emphasising the need for improved quality and clothing rental schemes, she said, the report highlighted the importance of buying clothing second hand. Industry-led initiatives to reduce environmental costs had been ineffective while consumption continued to rise.
“Slow fashion is the only sustainable future for the industry and the planet,” she said.
Carry Somers, the co-founder of the campaign Fashion Revolution, also stressed the use of chemicals in the fashion industry, as flagged by the new report, is of particular concern, especially in clothes made outside the EU where it is difficult to know what substances have been used.
Prof Steve Evans, an expert in industrial sustainability at Cambridge University, also welcomed the report. But he said it was unclear what proportion of the industry’s environmental impact was down to fast fashion per se. A key challenge for the “closed loop” industry was that different sectors, from production to retailing and recycling, must begin to work together.
But Evans said a future where the rate of fibre production and disposal was lowered need not mean a dearth of new outfits, if garments were rented or re-sold. “It might be fast fashion from the perspective of the fashionista,” he said, “but it is slow from the perspective of the planet.”


The FORD Method
Wed, 25 Jan 2017 @ General Notes
Original video by improvement pill on how to keep the conversation flowing. Basically, these are the topics during the conversation. These topics can go deep and can create “emotional touch” between you and the other person.
This is part of my note collection and commentary.
F. Family.
Start with your own family. Once you open up, redirect the family related question to the other person. This way he/she wont feel reluctant to talk
Example : I live in a big family.  How about you? How many siblings do you have?
O. Occupation.
Can use the technique of opening up first and then ask related question. Comment on his/her answer and then ask question. Do not ask question upon question with no commentaries in between questions. You will sound like a police !
R. Recreation.
Try to connect with him/her with his/her hobbies. For example – How I wish I can take photos like you did !! Teach me your secret!
D. Dreams.
Don’t go directly to dream questions. Use previous 3 topics to lead to dream questions.
I notice that there are some common techniques when talking about these topics :
-
Open up first and then ask related questions
-
Comment on their answers before asking next questions.
-
Make “positive assumption” statement about the person to get the conversation flowing.


Informal cross-border trade is a major feature of African economies: it creates jobs, contributes to food and energy security, and alleviates poverty. However many traders are unaware of their rights, required customs procedures and documentation, making them vulnerable to corruption and harassment.
Our mission is to empower cross-border traders to exercise their rights as citizens of the EAC – able to trade legally, safely and profitably across borders.
Sauti provides mobile-based tools and platforms for simplifying access to information on trading procedures, market information, and voicing incidents of corruption and harassment.


{% import "header.html" as header %} {% import "cards.html" as cards %} {% import "clipboard_tray.html" as clipboard_tray %}
{{warning}}
You got {{results|length}} items.


Subhabrata Dutta, Sarah Masud, Soumen Chakrabarti and Tanmoy Chakraborty. Deep Exogenous
and Endogenous Influence Combination for Social Chatter Intensity Prediction, ACM SIGKDD, 2020.
(A Core A* conference). PAPERCODE
Tanvir Ahmad, Rafeeq Ahmad, Sarah Masud, Farheen Nilofer. Framework to Extract Context Vectors from Unstructured Data using Big Data Analytics, 9th IC3, 2016. PAPERCODE


--- layout: post status: publish published: true title: Why you need elastic applications author: display_name: neil login: neil email<EMAIL_ADDRESS>url: '' author_login: neil author_email<EMAIL_ADDRESS>wordpress_id: 143 wordpress_url: https://www.millardtechnicalservices.co.uk/?p=143 date: '2016-10-12 22:35:58 +0000' date_gmt: '2016-10-12 21:35:58 +0000' categories: - Infrastructure tags: [] comments: [] ---
Ahead of Tuesday's £150M+ Lottery draw, an email was sent to thousands of users of the UK National Lottery website.
"This is a service message to let you know that we expect to see high volumes of visitors to The National Lottery website and app in the hours leading up to the close of ticket sales for the EuroMillions draw, at 7.30pm, on Tuesday 11th October.
If you plan to buy a ticket for any of our games this week and you need to add funds to your account to play, we would recommend that you do this as early as possible in order to avoid disappointment. "
We suspect that something in the infrastructure doesn't scale automatically. No doubt the web or front end servers scale, however they are expecting a performance bottle neck somewhere. This is where performance testing of the whole infrastructure is important, to identify and work on those bottle necks. Once identified, automation of the service can be planned and provided. Often it is the database layer, but these too can be scaled with read replicas or sharded, allowing for greater number of active connections.
For more information or a quick chat, contact us.


×
Cowboy Bebop (カウボーイビバップ Kaubōi Bibappu) is a 1998 anime television series animated by Sunrise featuring a production team led by director Shinichirō Watanabe, screenwriter Keiko Nobumoto, character designer Toshihiro Kawamoto, mechanical designer Kimitoshi Yamane, and composer Yoko Kanno. The twenty-six episodes ("sessions") of the series are set in the year 2071, and follow the lives of a bounty hunter crew traveling on their spaceship called Bebop. Cowboy Bebop explores philosophical concepts including existentialism, existential ennui, and loneliness.
-——wikipedia
See you, space cowboy...Someday, somewhere...


ǝ
home
|
about
|
writings
|
projects
sometimes i write things. sorry it just kinda happens.
if it
makes sense
isn't
complete
nonsense, i might publish it to here.
woops
loading...


| The film documents, in an often dramatic and humorous fashion, Gray's investigations into alternative medicine for an eye condition (Macular pucker) he had developed. | |
| Genres: | Comedy, Drama |
| Director: | Steven Soderbergh |
| Writer: | Spalding Gray, Renée Shafransky |
Cast: | Himself - Spalding Gray Himself - Mike McLaughlin Herself - Melissa Robertson Himself - Alvin Henry Herself - Alyne Hargroder Himself - Buddy Carr Herself - Gerry Urso Himself - Chris Simms Himself - Tommy Staub Himself - Kirk A. Patrick Jr. |


7.4. Druid Connector
Overview
The Druid Connector allows access to Druid data from Presto. This document describes how to setup the Druid Connector to run SQL queries against Druid.
Note
It is highly recommended to use Druid 0.17.0 or later.
Configuration
To configure the Druid connector, create a catalog properties file
etc/catalog/druid.properties
with the following contents,
replacing the properties as appropriate:
connector.name=druid
druid.coordinator-url=hostname:port
druid.broker-url=hostname:port
druid.schema-name=schema
druid.compute-pushdown-enabled=true
Configuration Properties
The following configuration properties are available:
| Property Name | Description |
|---|---|
druid.coordinator-url |
Druid coordinator url. |
druid.broker-url |
Druid broker url. |
druid.schema-name |
Druid schema name. |
druid.compute-pushdown-enabled |
Whether to pushdown all query processing to Druid. |
druid.coordinator-url
Druid coordinator url, e.g. localhost:8081.
druid.broker-url
Druid broker url, e.g. localhost:8082.
druid.schema-name
Druid schema name.
This property is optional; the default is druid
.
druid.compute-pushdown-enabled
Whether to pushdown all query processing to Druid.
the default is false
.
Data Types
The data type mappings are as follows:
| Druid | Presto |
|---|---|
VARCHAR |
VARCHAR |
BIGINT |
BIGINT |
DOUBLE |
DOUBLE |
FLOAT |
REAL |
TIMESTAMP |
TIMESTAMP |
| (others) | (unsupported) |


Pages
import_contacts
Dashboard
import_contacts
Blog
import_contacts
First Interaction
import_contacts
Member
Campus
import_contacts
Gallery
import_contacts
Activity
import_contacts
Events
Tools
import_contacts
Contacts
contact_phone
Newsletters
contact_phone
Notifications
Supports
import_contacts
Faq's
contact_phone
Docs
contact_phone
Help


07: Looking upwards in the Unix filesystem
Frequently, you will find that you want to look 'upwards' one level in the directory hierarchy. Two dots ..
are used in Unix to refer to the parent directory of wherever you are. Every directory has a parent except the root level of the computer. Let's use ls
to list the contents of the directory above our home directory:
learner@:~$ ls ..
What if you wanted to look at files up two levels in the file system in one go? It's very simple, just use two sets of the ..
operator, separated by a forward slash:
ls ../..
These examples use the ls
command. Try using ..
to move around with the cd
command.


To create, modify or drop a database object like a table or view you use the
execute()
method. This method is similar to the method executeQuery()
, but
it doesn't return a result. Example 5.4, “Dropping a Table in JDBC
illustrates the usage.
Example 5.4. Dropping a Table in JDBC
This example will drop a table.
Statement st = conn.createStatement();
st.execute("DROP TABLE mytable");
st.close();


| as.data.frame-method | Seqinfo objects |
| available.species | Return a data.frame that lists the known taxonomy IDs and their corresponding organisms. |
| bsgenomeName | GenomeDescription objects |
| bsgenomeName-method | GenomeDescription objects |
| checkCompatibleSeqinfo | Seqinfo objects |
| class:GenomeDescription | GenomeDescription objects |
| class:Seqinfo | Seqinfo objects |
| coerce-method | Seqinfo objects |
| commonName | GenomeDescription objects |
| commonName-method | GenomeDescription objects |
| dropSeqlevels | Convenience wrappers to the seqlevels() getter and setter |
| extractSeqlevels | Conveniently rename the seqlevels of an object according to a given style |
| extractSeqlevelsByGroup | Conveniently rename the seqlevels of an object according to a given style |
| fetchExtendedChromInfoFromUCSC | Fetching chromosomes info for some of the UCSC genomes |
| genome | Accessing/modifying sequence information |
| genome-method | Seqinfo objects |
| genome-method | Accessing/modifying sequence information |
| genome<- | Accessing/modifying sequence information |
| genome<--method | Seqinfo objects |
| genome<--method | Accessing/modifying sequence information |
| genomeBuilds | Mapping between UCSC and Ensembl Genome Builds |
| GenomeDescription | GenomeDescription objects |
| GenomeDescription-class | GenomeDescription objects |
| genomeStyles | Conveniently rename the seqlevels of an object according to a given style |
| intersect-method | Seqinfo objects |
| isCircular | Accessing/modifying sequence information |
| isCircular-method | Seqinfo objects |
| isCircular-method | Accessing/modifying sequence information |
| isCircular<- | Accessing/modifying sequence information |
| isCircular<--method | Seqinfo objects |
| isCircular<--method | Accessing/modifying sequence information |
| keepSeqlevels | Convenience wrappers to the seqlevels() getter and setter |
| keepStandardChromosomes | Convenience wrappers to the seqlevels() getter and setter |
| length-method | Seqinfo objects |
| listOrganisms | Mapping between UCSC and Ensembl Genome Builds |
| loadTaxonomyDb | Return a data.frame that lists the known taxonomy IDs and their corresponding organisms. |
| mapGenomeBuilds | Mapping between UCSC and Ensembl Genome Builds |
| mapSeqlevels | Conveniently rename the seqlevels of an object according to a given style |
| merge-method | Seqinfo objects |
| names-method | Seqinfo objects |
| names<--method | Seqinfo objects |
| orderSeqlevels | Assign sequence IDs to sequence names |
| organism | GenomeDescription objects |
| organism-method | GenomeDescription objects |
| provider | GenomeDescription objects |
| provider-method | GenomeDescription objects |
| providerVersion | GenomeDescription objects |
| providerVersion-method | GenomeDescription objects |
| rankSeqlevels | Assign sequence IDs to sequence names |
| releaseDate | GenomeDescription objects |
| releaseDate-method | GenomeDescription objects |
| releaseName | GenomeDescription objects |
| releaseName-method | GenomeDescription objects |
| renameSeqlevels | Convenience wrappers to the seqlevels() getter and setter |
| restoreSeqlevels | Convenience wrappers to the seqlevels() getter and setter |
| Seqinfo | Seqinfo objects |
| seqinfo | Accessing/modifying sequence information |
| Seqinfo-class | Seqinfo objects |
| seqinfo-method | GenomeDescription objects |
| seqinfo<- | Accessing/modifying sequence information |
| seqlengths | Accessing/modifying sequence information |
| seqlengths-method | Seqinfo objects |
| seqlengths-method | Accessing/modifying sequence information |
| seqlengths<- | Accessing/modifying sequence information |
| seqlengths<--method | Seqinfo objects |
| seqlengths<--method | Accessing/modifying sequence information |
| seqlevels | Accessing/modifying sequence information |
| seqlevels-method | Seqinfo objects |
| seqlevels-method | Accessing/modifying sequence information |
| seqlevels-wrappers | Convenience wrappers to the seqlevels() getter and setter |
| seqlevels0 | Accessing/modifying sequence information |
| seqlevels<- | Accessing/modifying sequence information |
| seqlevels<--method | Seqinfo objects |
| seqlevels<--method | Accessing/modifying sequence information |
| seqlevelsInGroup | Conveniently rename the seqlevels of an object according to a given style |
| seqlevelsInUse | Accessing/modifying sequence information |
| seqlevelsInUse-method | Accessing/modifying sequence information |
| seqlevelsStyle | Conveniently rename the seqlevels of an object according to a given style |
| seqlevelsStyle-method | Conveniently rename the seqlevels of an object according to a given style |
| seqlevelsStyle<- | Conveniently rename the seqlevels of an object according to a given style |
| seqlevelsStyle<--method | Conveniently rename the seqlevels of an object according to a given style |
| seqnames | Accessing/modifying sequence information |
| seqnames-method | GenomeDescription objects |
| seqnames-method | Seqinfo objects |
| seqnames<- | Accessing/modifying sequence information |
| seqnames<--method | Seqinfo objects |
| show-method | GenomeDescription objects |
| show-method | Seqinfo objects |
| sortSeqlevels | Accessing/modifying sequence information |
| sortSeqlevels-method | Accessing/modifying sequence information |
| species | GenomeDescription objects |
| species-method | GenomeDescription objects |
| standardChromosomes | Convenience wrappers to the seqlevels() getter and setter |
| summary-method | Seqinfo objects |
| summary.Seqinfo | Seqinfo objects |
| [-method | Seqinfo objects |


Altruism is the belief in or practice of disinterested and selfless concern for the well-being of others. Many people are ready and willing to lend a hand but simply don't know their neighbor is in need of help.
Sign up to start helping
Connect to your neighbors to start sharing knowledge or some good old fashion physical labor. Sign up as someone willing to help or someone needing a hand
Need help? Sign up to find a helping hand.


Jackson Sierra is a software engineer and thought partner interested in tackling civic and socioeconomic problems through the use of technology.
His studies in economics in the heart of Silicon Valley saw him pursue a career in the technology industry at a startup where he did strategy and data analysis.
His time there ultimately showed him the incredible impact one can have building technology that enables the masses. As such, he was driven to learn computer programming to accomplish that goal.


Data is a singular noun
When you read in the middle of a sentence ‘…the data are analysed by…’, you stumble: your subconscious grammatical consistency checks raise an alarm! – you have misparsed them (yes, like that). You automatically go back to the beginning for another go, more carefully this time, but realise, too late, that you are simply reading the work of an author in his weddings-and-funerals suit, writing as he would never speak.
This article is a great example of how we ought to think about grammatical issues.
People often say that such-and-such is the “correct” way to use a word, because of some historical baggage or technical analysis of the structure of language, without realizing that that’s not how people talk.
Others recognize that this is silly, and declare that grammatical discussions are pointless. There’s probably more gained than lost by making such a declaration, but nevertheless, it is not optimal, as it throws the baby out with bathwater that is easily drained.
There is much to be gained by making our writing clear. Whether it’s an essay or a tweet or an invitation to a party, the goal is usually to communicate some idea. Claiming the linguistic high-ground of “correctness”, while referring to a set of rules that do not describe the current language, is akin to wearing a funny costume. This has a place in satire, but in most contexts, it is distracting and condescending to write in this way.
Linguistic descriptivism is not “anything goes”. We humans have a set of grammatical parsing rules already in our brains, and we use them constantly. “Anything goes” isn’t descriptive!
The goal of any grammatical rule should be to help us write with a minimum of distracting complexity, so that our message is more easily understood by our actual readers. Rules that are implied only by the history or structure of words, but which are not actually used in practice, have no place in our language.
People do not take you more seriously if you wear a top hat, monocle, and tuxedo. If you’re not “proper english gentry guy”, don’t do it; and if you are, don’t be surprised that your persona gets in the way of your message.


Class: Aws::RDS::OptionGroup
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
|
|
|
Instance Chain:
|
|
| Inherits: |
Aws::Resources::Resource
|
| Defined in: | (unknown) |
Class Attribute Summary
::Aws::Resources::Resource - Inherited
Class Method Summary
- .new(name, options = {}) constructor
::Aws::Resources::Resource - Inherited
| .add_data_attribute | Registers a data attribute. |
| .add_identifier, .data_attributes, .identifiers, .new |
::Aws::Resources::OperationMethods - Extended
Instance Attribute Summary
-
#allows_vpc_and_non_vpc_instance_memberships ⇒ Boolean
readonly
Indicates whether this option group can be applied to both VPC and non-VPC instances.
-
#engine_name ⇒ String
readonly
Indicates the name of the engine that this option group can be applied to.
. -
#major_engine_version ⇒ String
readonly
Indicates the major engine version associated with this option group.
. - #name ⇒ String readonly
-
#option_group_arn ⇒ String
readonly
The Amazon Resource Name (ARN) for the option group.
. -
#option_group_description ⇒ String
readonly
Provides a description of the option group.
. -
#option_group_name ⇒ String
readonly
Specifies the name of the option group.
. -
#options ⇒ Array<Types::Option>
readonly
Indicates what options are available in the option group.
. -
#vpc_id ⇒ String
readonly
If AllowsVpcAndNonVpcInstanceMemberships is
false
, this field is blank.
::Aws::Resources::Resource - Inherited
| #client | Marked private to prevent double documentation. |
| #data_loaded?, | |
| #identifiers | Marked private to prevent double documentation. |
Instance Method Summary
- #copy(options = {}) ⇒ OptionGroup
- #create(options = {}) ⇒ OptionGroup
-
#delete ⇒ Struct
Deletes an existing option group.
. - #modify(options = {}) ⇒ OptionGroup
::Aws::Resources::Resource - Inherited
| #data, | |
| #load | Loads data for this resource. |
| #reload | Alias for Aws::Resources::Resource#load. |
| #wait_until | Waiter polls an API operation until a resource enters a desired state. |
Constructor Details
.new(name, options = {})
.new(options = {})
Instance Attribute Details
#allows_vpc_and_non_vpc_instance_memberships ⇒ Boolean
(readonly)
Indicates whether this option group can be applied to both VPC and non-VPC instances. The value true
indicates the option group can be applied to both VPC and non-VPC instances.
#engine_name ⇒ String
(readonly)
Indicates the name of the engine that this option group can be applied to.
#major_engine_version ⇒ String
(readonly)
Indicates the major engine version associated with this option group.
#name ⇒ String
(readonly)
#option_group_arn ⇒ String
(readonly)
The Amazon Resource Name (ARN) for the option group.
#option_group_description ⇒ String
(readonly)
Provides a description of the option group.
#option_group_name ⇒ String
(readonly)
Specifies the name of the option group.
#options ⇒ Array
<Types::Option> (readonly)
Indicates what options are available in the option group.
#vpc_id ⇒ String
(readonly)
If AllowsVpcAndNonVpcInstanceMemberships is false
, this field is blank. If AllowsVpcAndNonVpcInstanceMemberships is true
and this field is blank, then this option group can be applied to both VPC and non-VPC instances. If this field contains a value, then this option group can only be applied to instances that are in the VPC indicated by this field.
Instance Method Details
#copy(options = {}) ⇒ OptionGroup
#create(options = {}) ⇒ OptionGroup
#delete ⇒ Struct
Deletes an existing option group.


Lil' Tammy's Pizza
Use our new and improved website to create a pizza!
Choose your size
Small (8")
Medium (10")
Large (12")
Extra-large (14")
Choose your sauce
Lil' Tammy's Classic Marinara
Barbecue Sauce
Olive Oil
Pesto
White Garlic Sauce
Choose your toppings
Pepperoni
Italian Sausage
Chicken
Artichokes
Green Peppers
Onions
Mushrooms
Fresh Basil
Spinach
Fresh Tomatoes
Garlic
Fresh Mozzarella
Create Pizza!
Make Another Pie!


The History of Internet
Homepage
About This Site
The Invention of the Internet
Browser Wars
Internet Search War
Dot-Com Bubble
People
Team Page
The Internet Era
Please click on slides for more information
Previous
Next
Lets walk towards to the journey of Internet!


Spark Mail 2.5.0 Brings a Redesign With Dark Mode, Avatars, and More
by Andrew OrrReaddle’s Spark Mail 2.5.0 has been redesigned to give you features like Dark Mode, multi-window support on iPadOS, and more. Release notes include: Slick new design, stylish Dark Mode, Inbox with Avatars, customize email actions, multiple windows support on iPad, sync contacts between all your devices, and various bug issues and small improvements.
We are building the future of email. Modern design, fast, intuitive, collaborative, seeing what’s important, automation and truly personal experience that you love – this is what Spark stands for.
App Store: Free
Check It Out: Spark Mail 2.5.0 Brings a Redesign With Dark Mode, Avatars, and More


issuer stored ξ υ as the user's identity. issuer*
BCSM*
The blockchain returns the user's identity
Execute
ζ1 =
Given the issuer the credential ζ1.
issuer*
BCSM*
The blockchain returns the user's credential
Execute
ξ υ =
© Copyright 2019 Rujia. All Rights Reserved


What Type of Events Can I Attend?
Sports Events for all the Sports Fans! Do you like playing football, volleyball, basketball, netball or any other sport that finishes with ..ball? Then this is the place to find everything you need to know about the most recent tournaments, competitions, fun and social events related to sports. Come and play Sports with us!
Culture Events are the the ones where you see diversity come together to bring out the best in everyone. You will get to meet loads of new friends and get a bit more in depth understanding of other peoples' culture whilst having fun at their social events, usually with the added benefit of free pizza and desserts! Come and enhance your Culture with us!
There are many Other Events which may help you either find your passion or enjoy yourself and have fun. Do you like photography, music, etc? Then you are the right place, you will be able to view and look for events that float your boat in various areas and topics.. Find Other events with us!
Become an Event Organiser!
Do you believe you have what it takes to organise the best events of the year? No more hesitation then, become an event organiser and show us how it's done! You will be able to create and manage your own events just a few clicks away.  Register with us and Become and Event Organiser!


{{ for section (sortBy index) /processed/sections }}
{{ eval section.name }}
{{ end }}
{{ include /processed/components/_spacer.html }}


The h5bp build script now has three versions, the main one being the ant-build-script. This project is the node version, and it uses Grunt as a build tool.

This node/grunt-based build script tries to be as close as possible to the ant-build-script, a really great project you should check out.
It is still in early stage of development, but it'll get better and better, based on your feedbacks.
Fancy one line install:
# see the gist: https://gist.github.com/2359881
$ curl https://raw.github.com/gist/2359881/install.sh | sh
Slightly less fancier
$ npm install https://github.com/h5bp/node-build-script/tarball/master -g
$ h5bp help
$ h5bp init
In order to successfully use this you will need:
You should be able to use it on:
There is two main way to install, using a "global" or a "local" install.
When installed globally: Provides a custom global binary named h5bp
(or html5-boilerplate
) which is a wrapper on top of grunt, plus the extra
specific task and helpers.
When installed locally: ability to load in your project and grunt setup a
set of tasks that get referenced in your gruntfile (grunt.js
) when run via grunt
.
node-build-script is not on npm (yet), but you can install it (and/or add it to your project dependencies) using a tarball url, very much like if it was published on npm.
npm install https://github.com/h5bp/node-build-script/tarball/master -g
This installs the plugin globally, which contains its own internal grunt and
provides an h5bp
binary.
Proxies don't like redirections, if you get problem with this command, try this instead:
npm install http://.github.com/h5bp/node-build-script/tarball/master -g
This works for system where grunt have been already installed globally with
npm install grunt -g.
Add the node-build-script as a project dependency. In your projet's root,
next to the grunt.js
and package.json
file, run npm install
http://github.com/h5bp/node-build-script/tarball/master -S
Add grunt.loadNpmTasks('node-build-script')
into the projetc's grunt.js
gruntfile.
Run grunt --help
and all of the node-build-script's tasks and helpers
should be available in addition to those already provided by grunt.
The -S
flag (or --save
) will make npm add the dependency in the
dependencies
property of your package.json. This is optional but ensures you
never forget to update your package.json file accordingly.
Note: Once on npm, it'll be easier. The npm install -S
step will add the
following to your package.json file.
"dependencies": {
"node-build-script": "0.1.0"
}
Change 0.1.0
to the tarball url: http://nodeload.github.com/h5bp/node-build-script/tarball/master
Clone or download this repo. Then, cd
into it and run the npm
install
command.
# will most likely change to map the new location / repo / branch
git clone git://github.com/h5bp/node-build-script.git
# install the dependencies
# locally to play with it from the repo
npm install
# or globally, to install the h5bp binary
npm install -g
For development, the npm link
command might be handy (posix only, instead of
npm install -g
).
You may want to uninstall the globally installed package by running the following command:
npm uninstall node-build-script -g
So sad to see you go ☹
If it was installed locally, next to your gruntfile, simply drop the
node_modules/node-build-script
folder.
node-build-script is a tool that optimizes your code for production use on the web, relying on grunt build tool.
It is packaged as a grunt plugin, it defines an h5bp
binary which wraps grunt
plus few additional tasks and helpers.
But nothing is forcing you to install this package globally, you can
decide to pull in the set of tasks and helper in your grunt setup,
instead of relying on the global h5bp
binary.
node-build-script is not available on npm yet, but you can install it via npm very much the same way.
Installing the package is as simple as running the following command:
npm install https://github.com/h5bp/node-build-script/tarball/master
You can find more detailed documentation in the installation section.
This assumes the package was installed globally. It it was installed
locally, simply replace h5bp
by grunt
in the following commands
Running h5bp --help
should output the following to the console
grunt: a task-based command line build tool for JavaScript projects. (v0.3.7)
Usage
h5bp [options] [task [task ...]]
Options
--help, -h Display this help text.
--base Specify an alternate base path. By default, all file paths are
relative to the "grunt.js" gruntfile. (grunt.file.setBase) *
--no-color Disable colored output.
--config Specify an alternate "grunt.js" gruntfile.
--debug, -d Enable debugging mode for tasks that support it. For detailed
error stack traces, specify --debug 9.
--force, -f A way to force your way past warnings. Want a suggestion? Don't
use this option, fix your code.
--tasks Additional directory paths to scan for task and "extra" files.
(grunt.loadTasks) *
--npm Npm-installed grunt plugins to scan for task and "extra" files.
(grunt.loadNpmTasks) *
--no-write Disable writing files (dry run).
--verbose, -v Verbose mode. A lot more information output.
--version Print the grunt version.
Options marked with * have methods exposed via the grunt API and should instead
be specified inside the "grunt.js" gruntfile wherever possible.
Available tasks
concat Concatenate files. *
init Generate project scaffolding from a predefined template.
lint Validate files with JSHint. *
min Minify files with UglifyJS. *
qunit Run QUnit unit tests in a headless PhantomJS instance. *
server Start a static web server.
test Run unit tests with nodeunit. *
watch Run predefined tasks whenever watched files change.
default Alias for "intro clean mkdirs concat css min rev usemin
manifest" tasks.
reload Alias for "default connect watch:reload" tasks.
css Concats, replaces @imports and minifies the CSS files *
intro Kindly inform the developer about the impending magic
mkdirs Prepares the build dirs *
clean Wipe the previous build dirs
manifest Generates manifest files automatically from static assets
reference. *
rev Automate the hash renames of assets filename *
serve Spawns up a local http server on both staging / output
directory
usemin Replaces references to non-minified scripts / stylesheets *
Tasks run in the order specified. Arguments may be passed to tasks that accept
them by using semicolons, like "lint:files". Tasks marked with * are "multi
tasks" and will iterate over all sub-targets if no argument is specified.
The list of available tasks may change based on tasks directories or grunt
plugins specified in the "grunt.js" gruntfile or via command-line options.
For more information, see https://github.com/cowboy/grunt
You may opt to go for the local install, and manually load the tasks and helpers the node-build-script provides.
Assuming you have no gruntfile yet for your project, run the following grunt init command:
grunt init:gruntfile
Grunt will ask you for few different things, simply follow the instructions.
This will create a new grunt.js
file relative to your current working
directory.
The generated gruntfile should look like this (depending on the answers to the few questions, check out related grunt documentation)
/*global module:false*/
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: '<json:package.json>',
meta: {
banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %>\n' +
'<%= pkg.homepage ? "* " + pkg.homepage + "\n" : "" %>' +
'* Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
' Licensed <%= _.pluck(pkg.licenses, "type").join(", ") %> */'
},
lint: {
files: ['grunt.js', 'lib/**/*.js', 'test/**/*.js']
},
qunit: {
files: ['test/**/*.html']
},
concat: {
dist: {
src: ['<banner>', '<file_strip_banner:lib/<%= pkg.name %>.js>'],
dest: 'dist/<%= pkg.name %>.js'
}
},
min: {
dist: {
src: ['<banner>', '<config:concat.dist.dest>'],
dest: 'dist/<%= pkg.name %>.min.js'
}
},
watch: {
files: '<config:lint.files>',
tasks: 'lint qunit'
},
jshint: {
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
boss: true,
eqnull: true,
browser: true
},
globals: {
jQuery: true
}
},
uglify: {}
});
// Default task.
grunt.registerTask('default', 'lint qunit concat min');
};
To load the node-build-script and helpers, you'll need to use
grunt.loadNpmTasks('node-build-script')
next to
grunt.registerTask('default', 'lint qunit concat min');
Then, from your projet's root, running grunt --help
should output the
following:
...
Available tasks
concat Concatenate files. *
init Generate project scaffolding from a predefined template.
lint Validate files with JSHint. *
min Minify files with UglifyJS. *
qunit Run QUnit unit tests in a headless PhantomJS instance. *
server Start a static web server.
test Run unit tests with nodeunit. *
watch Run predefined tasks whenever watched files change.
default Alias for "lint qunit concat min" tasks.
emit A basic task that emits events over socket.io
connect Spawns up a local http server with socket.io enabled
css Concats, replaces @imports and minifies the CSS files *
intro Kindly inform the developer about the impending magic
mkdirs Prepares the build dirs *
clean Wipe the previous build dirs
manifest Generates manifest files automatically from static assets
reference. *
rev Automate the hash renames of assets filename *
serve Spawns up a local http server on both staging / output
directory
usemin Replaces references to non-minified scripts / stylesheets *
...
For what it's worth, here's the basic current configuration for the build script, which is located in repo's root.
You may edit this configuration by creating a grunt.js file in the current working directory and tweak any configuration values below. The binary will lookup for this file, and fallback accordingly to the default one if it wasn't able to find one.
To learn more about each configuration property (which are generally mapping a task name, in the case of multi-tasks type of task), refer to the according task documentation.
// This is the main html5-boilerplate build configuration file.
//
// Builds depends on two specific directory created during the process
// `intermediate/` and `publish/`, the first is used as a staging area, the
// second is the final result of the build that was run.
//
// These two values may be changed to something else with the `staging` and
// `output` config property below, and by changing any task config to match the new value.
//
module.exports = function(grunt) {
// Grunt utilities
var config = grunt.config,
utils = grunt.utils;
// the staging directory used during the process
var staging ='intermediate/';
// final build output
var output = 'publish/';
// extend the grunt.utils object with h5bp's utilities, wrapping require
// calls to utility libs (rimraf, ncp, mkdirp) as lazy-loaded getters.
h5bp.utils.extend(utils);
//
// Grunt configuration
//
config.init({
// the staging directory used during the process
staging: staging,
// final build output
output: output,
// environement and common configuration values
// for futher usage in tasks that needs them.
env: {
platform: process.platform,
win32: process.platform === 'win32'
},
// filter any files matching one of the below pattern during mkdirs task
exclude: 'build/** node_modules/** grunt.js package.json *.md'.split(' '),
mkdirs: {
staging: '<config:exclude>',
output: '<config:exclude>'
},
usemin: {
files: ['**/*.html']
},
manifest: '<config:usemin>',
watch: {
files: ['js/**/*.js', 'css/**', '*.html'],
tasks: 'default',
reload: {
files: '<config:watch.files>',
tasks: 'default emit'
}
},
css: {
'css/style.css': ['css/style.css']
},
// are resolved below the output directory
rev: {
js: 'js/**/*.js',
css: 'css/**/*.css',
img: 'img/**'
},
serve: {
staging: { port: 3000 },
output: { port: 3001 }
},
connect: {
staging: {
hostname: 'localhost',
port: 3000,
logs: 'dev',
dirs: true
},
output: {
hostname: 'localhost',
port: 3001,
logs: 'default',
dirs: true
}
},
dom: {
files : ['*.html'],
options: {
//
// cwd - base directory to work from.
// out - optimized assets get resolved to this path.
//
},
'script[data-build]' : h5bp.plugins.script,
'link' : h5bp.plugins.link,
'img' : h5bp.plugins.img,
'script, link, img' : h5bp.plugins.rev
},
lint: {
files: ['js/*.js'],
build: ['grunt.js', 'tasks/*.js']
}
});
//
// Concat configuration - prepending output / staging values to task's target
//
// files are concat'd into `staging/subprop.js`
// (eg. intermediate/js/scripts.js)
//
// This is necessary config for the built-in min / concat task to operate
// on staging or output directory, without the need to prepend their values
// directly in the task target or data (as they may be tweaked to some other values)
//
// Will probably flesh out a custom concat / min task, using grunt's helper to
// handle these values prepends.
//
var concat = config('concat') || {};
concat[staging + 'js/scripts.js'] = ['js/plugins.js', 'js/script.js'];
concat[staging + 'css/style.css'] = ['css/*.css'];
config('concat', concat);
//
// Min configuration - same goes the minify task
// (eg. publish/js/scripts.js)
//
var min = config('min') || {};
min[output + 'js/scripts.js'] = [staging + 'js/plugins.js', staging + 'js/script.js'];
config('min', min);
// Run the following tasks...
grunt.registerTask('default', 'intro clean mkdirs concat css min rev usemin manifest');
grunt.registerTask('reload', 'default connect watch:reload');
// dom based tasks - not loaded for windows platform
config('env.win32') || grunt.loadTasks('./tasks/dom');
// regular tasks
grunt.loadTasks('./tasks/support');
};
You'll find below a basic description and documentation for each task the grunt h5bp plugin provides. For each of these, we'll detail the task's configuration and how to change this.
In addition to those tasks, which are the backbone of the build script, there are a few additionnal tasks to help you in the process:
*.html
response.connect watch:reload
.The clean task will remove and delete any previous build dirs (which
are mapping staging
and output
config value).
staging: 'intermediate/',
// final build output
output: 'publish/',
rimraf
is the helper wrapper for
rimraf package. The given
cb
callback if passed in will make the call asynchronous, otherwise
rimraf.sync
is used.
task.helper('rimraf', dir, cb);
Read the grunt documentation on concat built-in task
Concat is a built-in grunt task and allows you to easily concatenate a list of files.
concat: {
'intermediate/js/scripts.js': [ 'js/plugins.js', 'js/script.js' ],
'intermediate/css/style.css': [ 'css/*.css' ]
},
The mechanism is fairly simple:
Each "fileset" is then concat into one file, the destination one.
If order is important, you might need to be a little more explicit here
and specify each script to be included (as glob patterns won't ensure
this). Actually, you can see this in action here with the
intermediate/js/scripts.js
file.
This is a really basic concat configuration, there's much more built-in in the grunt concat task, like banner comments, multiple build targets, and dynamic filenames. You're encouraged to edit this basic concat configuration to match your very own setup.
The connect is a special little utility task working in tandem with the watch one.
It's a slight variation of the serve command, but includes / injects some socket.io magic to be able to reload any opened webpage in your browsers.
Basically, the idea is that anytime you change a watched files (js/css/templates, etc.), a new build is triggered and an event is emitted back to any connected clients to reload pages automatically.
connect: {
intermediate: {
port: 3000,
logs: 'dev',
dirs: true
},
publish: {
port: 3001,
logs: 'default',
dirs: true
}
}
todo
The css tasks will handle stylesheets optimizations. These optimizations include:
@import
statements inlining (borrowed to r.js)Here's the basic configuration:
css: {
'publish/css/style.css': [ 'css/style.css' ]
},
Just as the concat / min task, the config subprop is used as the destination files, any expanded files in the config subprob value will be optimized and concat'd into the destination file.
The css
task works pretty much the same as grunt's min task. The task
target is the destination, data is an array of glob patterns. These
files are concataned and run through requirejs
optimizer to handle
@import inlines in CSS files.
mincss
basic utility to concat CSS files and run them through
cleanCSS, might opt to use
[https://github.com/jzaefferer/grunt-css] plugin. Takes an array of
files to concat and minified. The minificaton only happens if the
options.nocompress
value is not set to true
(default is false
)
var css = task.helper('mincss', files, options));
rjs:optimize:css
is an helper using rjs to optimize a single file,
mainly to properly import multi-level of @import statements, which can be
tricky with all the url rewrites.
file - Path to the css file to optimize options - (optional) rjs configuration cb - callback function to call on completion
task.helper('rjs:optimize:css', cssIn, this.async());
Read the grunt documentation on min built-in task
Min is another built-in grunt task that allows you to easily compress JavaScript files through UglifyJS.
min: {
'publish/js/scripts.js': [ 'intermediate/js/scripts.js' ]
},
This is a really basic minify configuration, there's much more built-in in the grunt min task, like banner comments, specifying uglifyjs options, and minifying while concatenating files. You're encouraged to edit this basic minify configuration to match your very own setup.
The mkdirs task is working in tandem with the clean one, and creates the necessary build dirs.
// the staging directory used during the process
staging: 'intermediate/',
// final build output
output: 'publish/',
// filter any files matching one of the below pattern during mkdirs task
exclude: 'build/** node_modules/** grunt.js package.json *.md'.split(' '),
mkdirs: {
staging: '<config:exclude>',
output: '<config:exclude>'
},
Just as the clean task, config subprop are used to create the
directories. A basic mapping is done in configuration to get back the
directory values, (eg. config(task.target) --> config('staging')
).
Values for each is an array of files to filter, eg. they'll not be copied over during the process. These are minimatch patterns.
mkdir
helper is a basic wrapper for
node-mkdirp. Takes a
directory
path to create, process is async if a valid callback
is passed in, otherwise mkdirp.sync(dir)
is used.
task.helper('mkdir', dir, cb);
copy
helper uses ncp
and minimatch to copy
the files under the current directory to the specified dir
,
optionnaly ignoring files specified by the options.ignore
property.
options.ignore
can be a String of space delimited glob patterns,
an Array of glob patterns, or a filter function.
This helper is asynchronous only. Paths are always relative to current working directory.
task.helper('copy', source, dest, opts, function(e) {
if(e) log.error(e.stack || e.message);
else log.ok();
cb(!e);
});
ignore
propertyThe rev task is a really simple one. Its role is to read the content of a given file, generate a hash and prepend that hash to the original filename.
rev: {
js: ['publish/js/*.js'],
css: ['publish/css/*.css'],
img: ['publish/img/*']
},
From this configuration example, the rev task will iterate through each expanded files for js / css / img subtasks and generate a hash from their content and rename each file accordingly.
A scripts.js
file will be renamed into something like
12345678.scripts.js
. The hash will change only when the content
changes.
hash
helper takes care of files revving, by renaming any files in the
given files
pattern(s), with passed in options
.
task.helper('hash', files, options);
md5
helper is a basic wrapper around crypto.createHash, with given
algorithm
and encoding
. Both are optional and defaults to md5
and
hex
values.
task.helper('md5', file, algorithm, encoding);
server
is a utility task to start a local http server on top of
generated build dirs, possibly intermediate/ and publish/ on different
ports.
It overrides the build-in grunt helper following the foundation as described in grunt's documentation
serve: {
staging: { port: 3000, base: 'intermediate/' },
output: { port: 3001, base: 'publish/' }
},
If --reload
cli option is used when grunt serve
is run, a socket.io
server instance is created while a client-side sciprt is injected
dynamically on response (eg. it won't edit the generated file)
server
creates and returns a basic application server, a configuration
object may be passed where:
task.helper('serve', config);
This helper is used by the serve
and serve.io
helpers below.
serve.io
creates and returns a webserver and setup a socket.io instance and
the "inject" middleware. /socket.io/socket.io.js
and /reload.js
are
then available.
task.helper('serve.io', config);
serve
same as serve.io, without the socket.io connection and inject
middleware.
task.helper('serve.io', config);
inject.io
is a grunt helper returning a valid connect / express middleware.
It's job is to setup a middleware right before the usual static one, and to
bypass the response of .html
file to render them with additional scripts.
var app = connect()
.use(task.helper('inject.io', config))
.use(connect.static);
app.listen(3000);
Replaces references ton non-optimized scripts / stylesheets into a set of html files (or any template / views).
Usemin task is probably the trickiest one. It'll replace references to non minified scripts / stylesheets to their optimized / versioned equivalent.
usemin: {
files: ['publish/*.html']
}
In this configuration, it'll handle the replacement for any html files located under the publish directory.
Right now the replacement is based on the filename parsed from content
and the files present in according directory (eg. looking up matching
revved filename into output/
dir to figure out the hash generated).
If you'd like a little bit more flexibility, you can use "directives", some special kind of html comments surrounding the part of html we want to replace (original idea from @necolas in: #831)
There is no need for JSDOM for this, this is plain regexp (JSDOM required for data-build attributes).
Ex:
<!-- build:css css/site.css -->
<link rel="stylesheet" href="css/style.css">
<!-- endbuild -->
Results in:
<link rel="stylesheet" href="css/site.css">
A directive is composed of the following part:
<!-- build:<target> <output> -->
... block ...
<!-- endbuild -->
<target>
A known target is required (css
or js
). It'll namely allow you
to replace the html "block" with appropriate tag (eg. a <link>
for
stylesheets, a <script>
for js files, the task won't guess this from markup
for you)
<output>
Path to the optimized asset. The html "block" is replaced with
according tag (depending on <target>
) while replacing the src or href
attribute with the <output>
value.
... block ...
Anything inside the <!-- build.. -->
and <!-- endbuild -->
is replaced
depending on <target>
and <output>
values.
The resulting html is then passed through the global replace, looking up
matching revved filename in the output directory (defaults to publish/
),
replacing references to their hash-prepended version.
This "directives" system will provide you a nice level of flexibility, and the ability to be very descriptive on what gets replaced and by what.
The dom
task is a special task using jsdom
to do some nasty thing to
a bunch of html files. The idea is to rely on a set of selectors and
plugins.
These plugins are special jQuery plugins that can use the node api to do their task.
The following plugins are implemented
Each plugin is able to modify the DOM tree to replace references to optimized files.
Using the h5bp
executable:
h5bp dom
Minimal, most of the configuration is derived from html markup, by using
special semantics on data-*
attributes, probably always namespaced to
data-build-*
.
var h5bp = require('node-build-script');
module.exports = function(grunt) {
grunt.initConfig({
...,
dom: {
files: ['*.html', 'views/**/*.html'],
'script[data-build]' : h5bp.plugins.script,
'link' : h5bp.plugins.link,
'img' : h5bp.plugins.img,
'script, link, img' : h5bp.plugins.rev
},
...
});
};
selectors / plugins are run sequentially, and the DOM tree is modified all allong the way to the last selector / plugin couple. Read that the selectors result depends on the modified DOM tree from previous processors.
One can use a totally different set of selectors, with custom plugin, ex.
script
, link
and img
.js-plugin
script[src*="jquery"]
or script[src*=backbone]
script[data-main]
--> triggers a r.js buildPlugins are valid commonjs package and should expose a single function, a jQuery like plugin that will be run with the associated set of DOM elements for a given selector.
Plugins needs to export a few things:
$.fn
Here's the link
plugin:
var plugin = module.exports;
// give it a name
plugin.name = 'link';
// give it some defaults
plugin.defaults = {
dir: process.cwd(),
output: 'css/style.min.css'
};
// and the main plugin handler, mixed in jsdom's jquery as $.fn.pluginame
plugin.handler = function link($, options, cb) {
options = options || {};
// size of the passed in collection,
// used to emit `success` on last iteration.
var ln = this.length;
// don't act on zero-element
if(!ln) {
cb();
return this;
}
// default configuration here..
options.whatev = options.whatev || 'whatev';
// will hold the concatenated script,
// in the order they appear in the collection
var files = [];
return this.each(function(i, target) {
var el = $(this); // === $(target)
var src = el.attr('href'),
last = ln === (i + 1),
file = path.resolve(options.dir, src);
if(!path.existsSync(file)) return cb(new Error('no ' + src));
files = files.concat(fs.readFileSync(file, 'utf8'));
// remove dom element from dom tree, when not on last loop
if(!last) return el.remove();
var output = el.data('build') || options.output;
// update dom tree accordingly
el.attr('href', output);
// finally, write to destination output
log.writeln((' › writing to output ' + output).bold);
task.helper('mkdir', path.dirname(path.resolve(output)));
fs.writeFile(output, task.helper('mincss', files), cb);
});
};
One could think do to some crazy stuff on their html files, and use a jQuery like api mixed here and there with the node api to handle all sort of things with a bunch of custom plugins, on an arbitrary set of selectors.
This plugin runs, in the default setup, with the following configuration:
dom: {
files : ['*.html'],
options : {
dir: process.cwd(),
output: 'css/style.min.css'
},
'script[data-build]' : h5bp.plugins.link
},
It uses r.js to optimize a single css
file, and properly handle the @import
statements you might have.
Default optimization options for rjs are as follows:
optimizeCss='standard.keepLines'
The output is based on data-build
from the <link>
tag, or defaults
to css/style.min.css
.
data-build
.This plugin runs, in the default setup, with the following configuration:
dom: {
files : ['*.html'],
options : {
dir: process.cwd(),
output: 'js/bundle.min.js'
},
'script[data-build]' : h5bp.plugins.script
},
Does the following:
options.output
or
to the data-build
attribute of last script tag.src=path/to/output
data-build
.A significant amount of efforts have been put into setting up a basic test suite to ensure everything is working properly.
As of now, the default
and usemin
task are tested.
default
is the global task that runs the following tasks:
grunt.registerTask('default', 'intro clean mkdirs concat css min rev usemin manifest');
Assertions on default
task output are a good sanity check. Each tasks is then
tested individually (now the case of usemin
)
This page will give a walkthrough on how to setup basic tests, how to run them and how to write new ones.
Tests are done on top of
h5bp/html5-boilerplate repository.
The original repository is setup as a submodule at the test/h5bp
location.
Running npm test
will trigger the pretest
npm script, and then execute the
test/index.js
file:
"pretest": "git submodule update --init"
Testing a build script is somewhat tricky. Tests here aren't really unit tests, they simply run a given grunt command, and run few basic assertions on the script output.
No test framework are used during the process, they require nothing but node.js. It'll hopefully make them easier to understand for anyone that is familiar with node and not a given chosen test framework.
Each assertion file is using a grunt helper to spawn a new process, executing a grunt command, to finally run a few assertions on top of the output directory.
* test/
* fixtures
* default/
* expected.html
* grunt.js
* usemin.expected.html
* usemin.html
* ...
* usemin/
* expected.html
* grunt.js
* index.html
* h5bp/
* css/
* js/
* index.html
* 404.html
* ...
* helpers/
* index.js
* tasks/
* usemin/
* index.js
.test
) and have grunt operate on
top of that. This may include custom gruntfile and specific html files, testing
out the whole script or a specific feature. This directory usually include
subdirectories named after the task they meant to be used with.git submodule update
--init
will make sure everything is here. Relatedly, this command is run
automatically before npm test
.test/fixtures
, this directory usually include
subdirectories named after the task that is tested. Test files in this directory
are meant to test specific task / feature of the build script. They may be run directly using
node test/tasks/usemin
(or any other implemented test).Checkout the tests that have been setup, they usually are a good place to look at.
Tests are usually done like so:
var fs = require('fs'),
h5bp = require('../'),
assert = require('assert'),
runner = require('./helpers'),
EventEmitter = require('events').EventEmitter;
//
// Setup the event emitter, an end event will be emitted on grunt completion.
//
// Depending on grunt's exit code, test fail or pass. Then, further assertions
// may perform few additional checks.
//
var test = new EventEmitter;
//
// Running tasks serially, tests pass or fail depending on grunt's exit code.
//
//
// `runner.setup` is mandatory, and deal with directory copy from `test/h5bp` to `.test`.
//
// The tests and build process happens in this `.test` directory.
//
runner.setup(function(err) {
//
// optional fixtures copy test. Copy may copy a single or a set of files.
//
// Second argument is the destination, which may be a file (when copying a single file)
// or a directory (`.test`).
//
runner.copy('test/fixtures/default/usemin.html', '.test/usemin.html', function(err) {
if(err) throw err;
// run the default task
runner('.test', test)('default');
});
});
// global check on index.html
test.on('end', function(err) {
if(err) throw err;
var result = fs.readFileSync('.test/index.html', 'utf8'),
expected = fs.readFileSync('test/fixtures/default/expected.html', 'utf8');
assert.equal(expected.trim(), result.trim());
});
//
// check the usemin version, eg. one using
//
// <!-- build:js path/to/script.js -->
//
// kind of surrouding html comment.
//
test.on('end', function(err) {
if(err) throw err;
var result = fs.readFileSync('.test/usemin.html', 'utf8'),
expected = fs.readFileSync('test/fixtures/default/usemin.expected.html', 'utf8');
assert.equal(expected.trim(), result.trim());
});
This documentation is based on the layout of the Backbone.js documentation, which is released under the MIT license.


Test Steps:
Click "Get Default Size" button to get default window size.
Expected Output:
Default window size is got and size is (300, 400).
Get Default Size
Default window size is (
,
)


Features
- configurable to rank different types of words different (uppercase, long words, etc.)
- rate based on amount (%) of vowels and consonants in a string
- directly get keywords from String objects
- blacklist words via a plain text file, String or an Array of words
- optionally, configure a whitelist and only words from that list will get ranked
- use word stemming (requires the fast-stemmer gem, doesn't work on JRuby platforms!)
- merge together Keywords from multiple sources
- contains a CLI tool that operates on STDIN/OUT and is configurable via parameters
Examples
text = Highscore::Content.new "foo bar"
text.configure do
set :multiplier, 2
set :upper_case, 3
set :long_words, 2
set :long_words_threshold, 15
set :vowels, 1 # => default: 0 = not considered
set :consonants, 5 # => default: 0 = not considered
set :ignore_case, true # => default: false
set :word_pattern, /[\w]+[^\s0-9]/ # => default: /\w+/
set :stemming, true # => default: false
end
# get only the top 50 keywords
text.keywords.top(50).each do |keyword|
keyword.text # => keyword text
keyword.weight # => rank weight (float)
end
# you could just use a string
keywords = "Foo bar baz".keywords(blacklist) do
set :multiplier, 10
end
The result is either a Highscore::Keywords object or an Array (depending on whether it's sorted or not) that you
can iterate over. Each object in there is a Highscore::Keyword that has methods text
and weight
.
keywords = "Foo bar is not bar baz".keywords(Highscore::Blacklist.load(['baz']))
keywords.rank.each do |k|
puts "#{k.text} #{k.weight}"
end
# prints:
# Foo 3.0
# bar 2.0
# not 1.0
Have a look at bin/highscore, you can run highscore on your CLI and feed it with text on STDIN.
Using a custom blacklist to ignore keywords
# setting single words
blacklist = Highscore::Blacklist.new
blacklist << 'foo'
# load a string/array
blacklist = Highscore::Blacklist.load "a string"
blacklist = Highscore::Blacklist.load %w{an array}
# loading from a file (separated by whitespace)
blacklist = Highscore::Blacklist.load_file "blacklist.txt"
# loading the default blacklist (falls back automatically if not explicit given)
blacklist = Highscore::Blacklist.load_default_file
# inject the blacklist into the content class
content = Highscore::Content.new "a string", blacklist
Using a whitelist instead of ranking all words
# construct and inject it just like a blacklist
whitelist = Highscore::Whitelist.load %w{these are valid keywords}
content = Highscore::Content.new "invalid words", whitelist
Install
[sudo] gem install highscore
To use word stemming, you need to have the fast-stemmer gem installed:
[sudo] gem install fast-stemmer
Author
Original author: Dominik Liebler<EMAIL_ADDRESS>License
(The MIT License)
Copyright (c) 2012 Dominik Liebler
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Chinese convicted after his dogs’ attacked his house help
A Chinese businessman whose four ferocious dogs attacked his house help at Tema has been fined GH96 cedis by an Accra Circuit Court.
Lizhuang Zhang will in default serve a year’s imprisonment.
Zhang is also to pay GH 5,000 Cedis as compensation to mitigate the cost of the medical expenses of the victim, Shaniel Owusu.
Zhang charged for allowing ferocious dogs to be at large, pleaded guilty at the last sitting and sentence was deferred to Tuesday.
His mother in law, Xing Sullian who asked the victim to open the gate for Zhang's wife and the driver was also charged with causing harm. Sullian was however absent in court.
Zhang who is said to be outside the country when the incident happened has paid some medical bills of the victim.
Ms Owusu, the victim initial medical report from the Ridge Hospital showed that she had multiple sutured scars on the left elbow, thigh, buttocks, shoulder, abdomen and chest.
She is currently receiving further treatment at the 37 Military Hospital.
Chief Inspector Agatha Asantewaa, who led the prosecution, narrated that Zhang and Sullian are both Chinese nationals residing in the same house at Tema Community 12.

She said on October 28, last year, at about 20:00 hours, the complainant and the victim in the matter was in their room when they heard Zhang' wife and the driver coming home.
She said on reaching the house, Sullian asked the victim to go and open the gate for Zhang's wife and the driver.
The prosecution said as soon as the victim opened the gate, the four dogs attacked her and they bit her several times resulting in various degrees of injuries all over her body.
The Prosecution said the victim was rushed to Narh Bita Hospital at Community Four where she was admitted.
On November 17, last year, the house help who was not being fairly treated left the house to her family house at Amasaman.
The prosecution said on November 23, last year, the complainant reported the matter to the Police at Community 11 and a medical report form was issued to her. The victim then sought medical attention at the Ridge Hospital.
According to prosecution, Zhang was not in the country when the incident happened hence he could not assist in investigations.
She said on December 17, last year the Domestic Violence and Victim's Support Unit at the Criminal Investigation Department arrested the two accused persons following a petition.
The prosecution said the victim is still receiving treatment at the 37 Military Hospital.


Robotic Arts Intro Fall 2018 (IA277.01)
- Instructor: Lucas Haroldsen<EMAIL_ADDRESS>- Class Site: yasunaga.work/raif18
- syllabus: syllabus.pdf
- Resources: links.html
11/9: Motors -- movement
What we will cover today
- Introduction to motors and different kinds of motors
- Homopolar motors
- Charactoristics of motors
- Voltage
- Current draw
- RPM
- Using benchtop powersupply
- testing your motor
- Motor attatchments
- DC motor -- Darlington Transistor with Arduino
- DC motor -- H bridge motor driver with Arduino
- Stepper Motors
Kinetics resources
Here are some basic mechanisms that can be used to convert rotational movements to lenior and extended movements.
-
Here are some useful articles and tools
- Online gear generator (you can hand cut from prints)
- Article on Basic Mechanics
- Mechanism examples
Another Housefly - Arthur Ganson
Katie Wynne
Tonight's Code
Project 2
It's time to start thinking about another project. Project 2 is due the end of the semester witch is December 7th. You have 5 weeks to complete the project.
Here is the schedule for Project 2:
- 11/16 idea drawing and precedents due
- 11/30 working prototype due (part of final grade)
- 12/14 Project due / presentation
- 12/19 Documentation due
Keep it
- simple
- experimental
- economical
- realized
Contents
Ryota Kuwakubo
circus by Yuko Mori
Eyes by Lucas Zanotto
Soft Manipulator from Sonic RobotsSandbox by Rafael Lozano-Hemmer
HOMEWORK
Idea drawing and precedents for Project 2
For next week be ready to discuss;
- ideas and drawings of your project
- Precedents and inspirations
- potential chalenges of your project
Presedents and inspiration does not have to be art works. It can be simply things and phenomena around you that interests you. Be specific!


Vishaal.C
The name's Vishaal Chandrasekaran I am the tireless seeker of Knowlege and occassional purveyor of wisdom and also coincidentally a Software Engineer, I am a young dynamic person who is passionate to work for the growth.
My Skills
C Programming
C++
Python
My SQL
Web Design
Photoshop
My Reputation
M.KUMARASAMY COLLEGE OF ENGINEERING2015-2019
7.2 Cgpa
VIVEKANANDHA HIGHER SECONDARY SCHOOL 2014-2015.
77% of marks
VELAN VIKHASS MATRICULATION SCHOOL 2012-2013.
81.4% of marks
My Works
PROJECT DONE IN THE SECOND SEMESTER
MALWARE
TYPE OF PROJECT: STUDY EXPEIMENT
DISCRIPTION:
The main motto for taking the study experiment as an project is to create a awarness among the people and telling them the cons of the malware and how is being affected and how is affect the system.
PROJECT DONE IN THE FIFTH SEMESTER
AUTOMATIC FIRE ALARM SYSTEM USING GSM
TYPE OF PROJECT: IOT BASED
ROLE ON PROJECT: TEAM LEAD AND PROGRAMMER
DISCRIPTION:
The main motto for this project idea is to save lives from the immediate fire and to help the fire office peoples to know were the fire occures the whole process is fully based on the sensors it is used to measure the temperatue and sends to device for further calcualtion the GSM is used to call or send a message to the feeded number.
PROJECT DONE IN THE FIFTH SEMESTER
BANKING APPLICATION USING PYTHON
TYPE OF PROJECT: APPLICATION
ROLE ON PROJECT: TEAM LEAD AND PROGRAMMER
DISCRIPTION:
This project is fully based on the requirement of the customer and the project fullfills customers need of an banking application and also helps in the creation and deletion of account an i have also use data base for storing the information and the password strength cheak is used for the password heath.
Activities
INTERNSHIP COURSE
Python based Web Development
Jan 2017 - Mar 2017
Undergone Internship training in the field of Python based Web Development published by ZODHYA, Coimbatore
CO-CURRICULAR ACTIVITIES
WORKSHOPS
• A Python workshop at NIT Trichy ,conducted by Vortex
Feb 3rd 2017
• Attended an IOT workshop at VIT Chennai
Feb 8th-9th 2017
• Completed a personal skill develepement training conducted by sparkle
Jan 18th -19th 2018
EXTRA CURICULAR ACTIVITIES
• An active member in in the CSI(Computer Socity of India)
• Very much intersted in painting
• Acted as the class representative in my college days
• Conducted and coordinated technical and non techincal workshops and symposium
Contact Me
Phone: +91<PHONE_NUMBER>
Email:contactvishaalc@gmail.com


Your web browser must have JavaScript enabled in order for this application to display correctly.
You may need to serve this page over a secure connection (https) to run JsQRScanner correctly.
JsQRScanner example
Point the webcam to a QR code.
{{fullname}}
{{ email }}
Profession:
{{ profession }}
Date of birth:
{{ date_of_birth }}
Next of Kin name:
{{ next_of_kin_name }}


You have the HTML markup language for content and structure.
Then the CSS, the style sheet language, for presentation. What font does the headline use, what's the background color of the page, what is the width of the div that the paragraphs are in.
JavaScript is the programming language for your behavior and interactivity.
What happens when you move the mouse over a menu, what happens when you type the wrong value in a form field, how long does a photo slideshow take to move from one image to the next, that is JavaScript.
Control flow is the order that the program would be executed
Loops are powerful constructs that you can use to reiterate a series of JavaScript statements over and over again. JavaScript supports a number of loops you can choose from, including the for loop and for-in loops, the while loop, and the do-while loop.
A real-life example would be if I want to buy a new shirt:
The first thing I would do is to try the shirt on: shirt(try it on)
. Then if (you like it?) {Buy it!}
. Else if (do not like it?) {try another one!}.
else {walk off the shop};.
Arrays and Objects literals are both data holders.
To access the array: arrayName[i]
How to access the object: anObject.anotherObject
A function is a named group of JavaScript statements that you can declare once, near the top of your script, and call over and over again. Adding a reusable function to your script instead of adding several slightly different versions of the same code, cuts down on the amount of typing that you need to do, as well as the number of potential bugs in your script.


Shortcodes
Why shortcodes? While markdown is sufficient to produce simple pages, it’s insufficient where complex page structures are needed. Thusly, whenever we need special styling, shortcodes compliment the shortcomings of markdown.
This way, you can side step complex html and css boilerplate in your content files.
Sometimes, the shortcode will wrap content, sometimes it won’t. When content is wrapped, a closing shortcode tag is needed. Please see the link I provided above and the markdown files for examples. You’ll get the gist pretty quickly.
I’ve setup the following shortcodes:
Block
Takes positional modifiers
Example
|
|
Column
It takes positional parameters
Example
|
|
Video
This allows you to embed a youtube video in you content. You would achieve that using a positional parameter (needs no name )parameter, like so:
Example:
|
|
Button
This adds a styled link (styled like a button). It takes two no-optional parameters:
| PARAMETER | PURPOSE | OPTIONAL |
|---|---|---|
| label | button text | no |
| url | button link | no |
Example
{{< button url="/" label="doe nu mee" >}}
Picture
You want to use darkmode images when darkmode is enabled on a device and a regular image on lightmode? It takes 3 positional parameter
Store these images in the static/images
directory.
|
|
Gallery
Include inline galleries within your articles. These galleries can contain N
number of images. It takes 2 positional parameters.
The 1st parameter is required. It’s a comma-separated list (,
) of your images’ paths.
The 2nd parameter is optional. It’s a double-collon-separated list (::
) of your images’ alt/description/captions text. It’s always a good SEO practice to include alt text for your images.
|
|


OFAC Sanctions
OFAC Press Releases
About
Feedback
404: Page Not Found
Submit Feedback
Return to SDN Search


I am Abdalrhman Albdahat a Civil Engineer graduated form Yarmouk University
at summer 2019 and I am member at Jordanian Engineers Association (JEA),
Now I am here to learning a
new skills and become more familiar with coding.
so I worked as:
- structural engineer from september 2019 to may 2020.
- Site engineer in solar energy field from june 2020 to september 2020
- Student at (ASAC) to be software developer december 2020 - now
My favorite car model:
- bugatti chiron
- mclaren 720s
- lamborghini aventador
- Porsche 911 Turbo S
- mercedes s class
- cadillac escalade
- camaro ss
- ford mustang
- ford f150 raptor
- toyota tundra


@* * This template is called from the `index` template. This template * handles the rendering of the page header and body tags. It takes * two arguments, a `String` for the title of the page and an `Html` * object to insert into the body of the page. *@ @(cityList: List[Cities], cityId: Integer, shopList: List[Shop],cityString: String)