|
Ext.NET
5.3.0
.NET Component Framework for Enterprise Level Apps
|
Public Member Functions | |
| Builder (TFilterHeader component) | |
| virtual TBuilder | AutoReload (bool autoReload) |
| Defaults to true, reloading the datasource when a filter change happens. More... | |
| virtual TBuilder | UpdateBuffer (int updateBuffer) |
| Number of milisecond to defer store updates since the last filter change. More... | |
| virtual TBuilder | Remote (bool remote) |
| True to use the server side filtering instead of default Ext.data.Store filter functions (local filtering). More... | |
| virtual TBuilder | FilterParam (string filterParam) |
| The parameter name for the filters. More... | |
| virtual TBuilder | CaseSensitive (bool caseSensitive) |
| True to use case sensetive string filtering More... | |
| virtual TBuilder | DecimalSeparator (string decimalSeparator) |
| virtual TBuilder | ClearTime (bool clearTime) |
| virtual TBuilder | DateFormat (string dateFormat) |
| virtual TBuilder | SubmitDateFormat (string submitDateFormat) |
| virtual TBuilder | Value (FilterHeaderValue value) |
| virtual TBuilder | Listeners (Action< FilterHeaderListeners > action) |
| Client-side JavaScript Event Handlers More... | |
| virtual TBuilder | DirectEvents (Action< FilterHeaderDirectEvents > action) |
| Server-side Ajax Event Handlers More... | |
| Builder () | |
| Builder (FilterHeader component) | |
| Builder (FilterHeader.Config config) | |
| Public Member Functions inherited from Ext.Net.Plugin.Builder< TFilterHeader, TBuilder > | |
| Builder (TPlugin component) | |
Static Public Member Functions | |
| static implicit | operator Builder (FilterHeader component) |
| TFilterHeader | : | FilterHeader | |
| TBuilder | : | Builder | |
| TBuilder | : | TFilterHeader | |
| TBuilder | : | TBuilder |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
Defaults to true, reloading the datasource when a filter change happens.
|
inlinevirtual |
True to use case sensetive string filtering
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
|
inlinevirtual |
Server-side Ajax Event Handlers
| action | The action delegate |
|
inlinevirtual |
The parameter name for the filters.
|
inlinevirtual |
Client-side JavaScript Event Handlers
| action | The action delegate |
|
inlinestatic |
|
inlinevirtual |
True to use the server side filtering instead of default Ext.data.Store filter functions (local filtering).
|
inlinevirtual |
|
inlinevirtual |
Number of milisecond to defer store updates since the last filter change.
|
inlinevirtual |


Lee County schools to vote on mental health care in elementary schools
by WFTX Digital TeamFORT MYERS, Fla. -- The Lee County School Board may vote on improving mental health care in schools Monday morning.
\
The proposal they're considering would place mental health navigators in local elementary schools.
The school board says this program is designed to help students receive the care they need as their minds develop.
The board says the navigators are highly trained and specialized to work with students, families and teachers.
The board will vote on the proposal at 11 a.m.


Success Airlines Air Taxi Services
Air Taxi for Routine or Urgent Business
We have regularly-scheduled flights from heliports in all the cities we serve. If you need an air taxi for an important business meeting within 100 miles of the heliport, we can make all flight arrangements for you.
We Offer:
- Affordable same-day charter service for recreation or business meetings.
- Flexible flight schedules. You arrange the drop-off and pick-up times for charter flights.
- Vetted security. Your identity is checked using your special Air Taxi ID. Our biometric scanners will handle your security issues in seconds, not hours, as it would be at a major regional or local airport.
- Flights with meal services and flight attendant service. These services are not available on flights under 60 minutes unless special arrangements are made at least one day in advance.
Private Charters for Your Business Needs
- Business meetings
- Sports events
- Vacation trips
- Private events
- Private parties
- Official corporate trips for groups
Join the Air Taxi Club
- Use Success Airlines Air Taxi to get you to the airport
- You'll arrive at the Air Success heliport
- Use Success Airlines Air Taxi to fly you from the airport
Home


We're looking for local non-profit organizations who need free cloud-based software services developed for them. A software service is one that runs in the cloud and is accessed via a web browser (e.g., from a desktop, laptop, tablet or phone), in the same manner of Google, Facebook, Amazon, etc. It is NOT a mobile App. It is software running on a free server (heroku.com) that you access from your browser.
The software will be developed as class projects by teams of 5-6 students. The total amount of student effort on the project will be about 12-person weeks. Project will start in mid Feb and be completed by the first week of May.
Here are some example projects done by the class in Spring 2016:
The customers were generally happy with their results.
The projects will be selected by the students (i.e., the project team). The actual details of the project will be worked out when you meet with the project team.
We are expecting 25-30 projects depending on the number of registered students.
The non-profit contact(s) would:
Meetings would take place whenever and wherever is convenient for the non-profit contact(s).


MVSEVMSTORE is the personal blog of @eanakashima, a developer, design nerd, conference speaker and very occasional blog post writer.
I bought this domain before CHVRCHES was a thing. It's fine.


Glen has a degree in Chemistry and Microbiology plus a co-op designation from the University of Victoria, Canada. He has experience in labs ranging from culturing human cells for pharmaceuticals development, to parasitology, to analytical chemistry, to industrial biotech, and food microbiology. He codes in Python, and also knows Haskell. You can see some of his projects at the projects page, he also freelances scientific and technical writing. Additionally, he lead a Canadian University Society for Intercollegiate Debate team; coaching and competing in public speaking and critical analysis. Glen is a quick and continual learner with a wide variety of interests, as hobbys he enjoys winter sports - especially skiing, tabletop boardgames, camping, reading, and grooming his facial hair.


const val MAX_HASH_HEX_SIZE: Int
The maximum supported field-size for hash HEX-encoded outputs (e.g. database fields). This value is enough to support hash functions with outputs up to 512 bits (e.g. SHA3-512), in which case 128 HEX characters are required. 130 was selected instead of 128, to allow for 2 extra characters that will be used as hash-scheme identifiers.


Current (in seconds): {{encryptionTimeInterval}}
Set new(in seconds):
Share this chat message over tweeter


¶ SocketManagerCopyright(c) 2017 Stefano Balietti MIT Licensed A register of all open sockets Exposes method to send and broadcast messages to a specific recipient, or groups of recipients. Send: delivers a message to all recipients. Broadcast: delivers a message to all recipients, except the sender. When the method contains the word Own, e.g. send2OwnRoom, the from field of the game message is evaluated to determine the group of recipients. It might be outside of the local channel, and in this case the message is delivered only if the settings allow it. Important: If a message is sent across channels (if the server configuration allows it) the message is then obfuscated by calling GameMsgGenerator.obfuscate from the PlayerServer object of the sending channel. Obfuscatating the message is necessary so that the message session field matches the session id of the clients connected to each channel. Player and Admin server in the same channel share the same session id. Some methods accept a separate FROM parameter, because sometimes the message is obfuscated and sender (for broadcasting or room-detecting) cannot be found in the from field. |
"use strict";
|
|
Global scope |
module.exports = SocketManager;
var ngc = require('nodegame-client');
var PlayerList = ngc.PlayerList;
var NDDB = ngc.NDDB;
var J = ngc.JSUS;
|
¶ SocketManager constructorCreates an instance of SocketManager Params
server
GameServer
A GameServer instance
|
function SocketManager(server) {
|
¶ SocketManager.serverCyclic ref to the GameServer object containing this instance |
this.server = server;
|
¶ SocketManager.socketsList of available sockets |
this.sockets = {};
|
¶ SocketManager.clientsMaps a client ID to a socket obj (e.g. Direct or SIO) See
SocketManager.sockets
|
this.clients = {};
this.sysLogger = server.sysLogger;
this.msgLogger = server.msgLogger;
}
|
¶ SocketManager methods |
|
|
SocketManager.registerSocket Registers a new type of socket Params
name
string
The name of the socket
socket
object
The connection socket
|
SocketManager.prototype.registerSocket = function(socket) {
this.sockets[socket.name] = socket;
};
|
|
SocketManager.registerClient Matches a client to a socket Params
client
{string} The id of the client
socket
{object} The socket through which the client is connected
|
SocketManager.prototype.registerClient = function(client, socket) {
|
|
TODO: Add unregisterClient |
this.clients[client] = socket;
};
|
¶ SocketManager.sendGeneral call to send a game message The method will examin the to field and rely on specific functions. Params
gameMsg
GameMsg
The game message to send
Returns
boolean
FALSE, if an error occurs
See
SocketManager.send2all
See
SocketManager.send2channel
See
SocketManager.send2room
See
SocketManager.send2client
|
SocketManager.prototype.send = function(gameMsg) {
switch(gameMsg.to) {
case 'ALL':
return this.send2all(gameMsg);
case 'CHANNEL':
return this.send2ownChannel(gameMsg);
case 'ROOM':
return this.send2ownRoom(gameMsg);
case 'CHANNEL_X':
this.send2channel(gameMsg, gameMsg._to);
/* falls through */
case 'ROOM_X':
return this.send2room(gameMsg, gameMsg._to);
default:
return this.send2client(gameMsg);
}
};
|
¶ SocketManager.send2allBroadcast a message to all clients in all game rooms in all channels. Params
gameMsg
GameMsg
The game message to send
Returns
boolean
FALSE, if at least one error occurs
|
SocketManager.prototype.send2all = function(gameMsg) {
var channels, channelName, channel, res;
res = true;
channels = this.server.channel.servernode.channels;
for (channelName in channels) {
if (channels.hasOwnProperty(channelName)) {
channel = channels[channelName];
|
|
Obfuscate. |
if (channel.session !== gameMsg.session) {
gameMsg = channel.playerServer.msg.obfuscate(gameMsg);
}
res = res && this.send2channel(gameMsg, channels[channelName]);
}
}
if (!res) {
this.sysLogger.log('SocketManager.send2all: error/s occurred.',
'error');
}
return res;
};
|
¶ SocketManager.send2allPlayersBroadcast a message to all clients in all game rooms in all channels. Params
gameMsg
GameMsg
The game message to send
Returns
boolean
FALSE, if at least one error occurs
|
SocketManager.prototype.send2allPlayers = function(gameMsg) {
var channels, channelName, channel, res;
res = true;
channels = this.server.channel.servernode.channels;
for (channelName in channels) {
if (channels.hasOwnProperty(channelName)) {
channel = channels[channelName];
|
|
Obfuscate. |
if (channel.session !== gameMsg.session) {
gameMsg = channel.playerServer.msg.obfuscate(gameMsg);
}
res = res && this.send2channelPlayers(gameMsg, channel);
}
}
if (!res) {
this.sysLogger.log('SocketManager.send2allPlayers: error/s occurred.',
'error');
}
return res;
};
|
¶ SocketManager.send2ownChannelSends a game message to all clients in the channel of the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2ownChannel = function(gameMsg, from) {
var channel, fromRoom;
from = from || gameMsg.from;
|
|
Case 1. Channel was correctly detected before (msg received from server). |
if ('undefined' !== typeof gameMsg._channelName &&
gameMsg._channelName === this.server.channel.name) {
channel = this.server.channel;
}
|
|
Case 2. Channel was not found before (msg created inside the server). |
else {
fromRoom = this.lookupRoom(from);
if (!fromRoom) {
throw new Error('SocketManager.send2ownChannel: Sender (ID: ' +
from + ') is not in any room.');
}
channel = fromRoom.channel;
}
return this.send2channel(gameMsg, channel);
};
|
¶ SocketManager.send2channelSends a game message to all clients in all game rooms of a given channel Params
gameMsg
GameMsg
The game message to send
channel
ServerChannel
The channel object
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2channel = function(gameMsg, channel) {
var res;
|
|
Obfuscate. |
if (channel.session !== gameMsg.session) {
gameMsg = channel.playerServer.msg.obfuscate(gameMsg);
}
res = send2AllClientsInGameServer(gameMsg, channel.adminServer);
res = res && send2AllClientsInGameServer(gameMsg, channel.playerServer);
return res;
};
|
¶ SocketManager.send2channelPlayersSends a game message to all clients in all game rooms of a given channel Params
gameMsg
GameMsg
The game message to send
channel
ServerChannel
The channel object
Returns
boolean
FALSE is an error occurs
See
SocketManager.send2roomPlayers
|
SocketManager.prototype.send2channelPlayers = function(gameMsg, channel) {
|
|
Obfuscate. |
if (channel.session !== gameMsg.session) {
gameMsg = channel.playerServer.msg.obfuscate(gameMsg);
}
return send2AllClientsInGameServer(gameMsg, channel.playerServer);
};
|
¶ SocketManager.send2ownRoomSends a game message to all clients in the room of the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2ownRoom = function(gameMsg, from) {
var fromRoom;
from = from || gameMsg.from;
|
|
Case 1. Room was correctly detected before (msg received from server). |
if ('undefined' !== typeof gameMsg._roomName) {
fromRoom = this.server.channel.gameRooms[gameMsg._roomName];
}
|
|
Case 2. Room was not found before (msg created inside the server). |
if (!fromRoom) {
fromRoom = this.lookupRoom(from);
}
|
|
Room not found. |
if (!fromRoom) {
this.sysLogger.log('SocketManager.send2ownRoom: Sender (ID: ' +
gameMsg.from + ') is not in any room.');
return false;
}
return this.send2room(gameMsg, fromRoom);
};
|
¶ SocketManager.send2roomSends a game message to all clients in the same room Params
gameMsg
GameMsg
The game message to send
room
GameRoom
The room object
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2room = function(gameMsg, room) {
var res, ids;
|
|
Obfuscate. |
if (room.channel.session !== gameMsg.session) {
gameMsg = room.channel.playerServer.msg.obfuscate(gameMsg);
}
ids = room.clients.id.getAllKeys();
res = this.send2group(gameMsg, ids);
if (!res) {
this.sysLogger.log('SocketManager.send2room: an error occurred ' +
'for room ' + room.name + '.', 'error');
}
return res;
};
|
¶ SocketManager.send2roomAdminsSends a game message to all admins in the same room Params
gameMsg
GameMsg
The game message to send
room
GameRoom
The room object
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2roomAdmins = function(gameMsg, room) {
var res, ids;
|
|
Obfuscate. |
if (room.channel.session !== gameMsg.session) {
gameMsg = room.channel.playerServer.msg.obfuscate(gameMsg);
}
ids = room.clients.admin.fetchValues('id').id;
res = this.send2group(gameMsg, ids);
if (!res) {
this.sysLogger.log('SocketManager.send2roomAdmins: an error has ' +
'occurred for room ' + room.name, 'error');
}
return res;
};
|
¶ SocketManager.send2roomPlayersSends a game message to all players in the same room Params
gameMsg
GameMsg
The game message to send
room
GameRoom
The room object
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.send2roomPlayers = function(gameMsg, room) {
var res, ids;
|
|
Obfuscate. |
if (room.channel.session !== gameMsg.session) {
gameMsg = room.channel.playerServer.msg.obfuscate(gameMsg);
}
ids = room.clients.player.fetchValues('id').id;
res = this.send2group(gameMsg, ids);
if (!res) {
this.sysLogger.log('SocketManager.send2roomPlayers: an error has ' +
'occurred for room ' + room.name, 'error');
}
return res;
};
|
¶ SocketManager.send2groupSends a game message to a group of clients The methods works regardless of the socket or room the clients belong to. Params
gameMsg
GameMsg
The game message to send
group
array
PlayerList
NDDB
The recipients of the message
Returns
boolean
TRUE on success
|
SocketManager.prototype.send2group = function(gameMsg, group) {
var res, i, len;
res = true;
if (group instanceof PlayerList || group instanceof NDDB) {
group = group.fetchValues('id').id;
}
else if (!J.isArray(group)) {
throw new TypeError('SocketManager.send2group: group must be array ' +
'or instance of PlayerList/NDDB.', 'error');
}
i = -1;
len = group.length;
for ( ; ++i < len ; ) {
res = res && this.send2client(gameMsg, group[i]);
}
if (!res) {
this.sysLogger.log('SocketManager.send2group: an error has ' +
'occurred.', 'error');
}
return res;
};
|
¶ SocketManager.send2clientLow level primitive to send a game message Params
gameMsg
GameMsg
The game message to send
to
string
Optional. The recipient of the message.
Returns
boolean
FALSE, if an error occurs
|
SocketManager.prototype.send2client = function(gameMsg, to) {
var originalTo;
var resolvedInfo, socket, receiverSid;
var res, errMsg;
originalTo = gameMsg.to;
gameMsg.to = to || originalTo;
|
|
Looks into the local registry first, and then into the registry of other channels, if the server is allowed to do so. |
resolvedInfo = this.resolveClientAndSocket(gameMsg);
if (!resolvedInfo.success) {
gameMsg.to = originalTo;
this.sysLogger.log('SocketManager.send2client: Msg not sent. ' +
resolvedInfo.errMsg, 'error');
return false;
}
|
|
Obfuscate. |
if (resolvedInfo.channel.session !== gameMsg.session) {
gameMsg = resolvedInfo.channel.playerServer.msg.obfuscate(gameMsg);
}
socket = resolvedInfo.socket;
receiverSid = resolvedInfo.sid;
res = socket.send(gameMsg, receiverSid);
if (!res) {
errMsg = 'SocketManager.send2client: An error occurred while sending ' +
'a message to ' + gameMsg.to + ' (cid: ' + resolvedInfo.cid +
', sid: ' + receiverSid + ')';
this.sysLogger.log(errMsg, 'error');
}
gameMsg.to = originalTo;
return res;
};
|
|
Broadcast methods |
|
¶ SocketManager.broadcastSends a game message to all clients in the same room except the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.broadcast = function(gameMsg, from) {
switch(gameMsg.to) {
case 'ALL':
return this.broadcast2all(gameMsg, from);
case 'CHANNEL':
return this.broadcast2ownChannel(gameMsg, from);
case 'ROOM':
return this.broadcast2ownRoom(gameMsg, from);
case 'CHANNEL_X':
this.broadcast2channel(gameMsg, gameMsg._to, from);
/* falls through */
case 'ROOM_X':
return this.broadcast2room(gameMsg, gameMsg._to, from);
default:
throw new Error('SocketManager.broadcast: unrecognized to: ' +
gameMsg.to);
}
};
|
¶ SocketManager.broadcast2allBroadcast a message to all clients in all game rooms in all channels. Params
gameMsg
GameMsg
The game message to broadcast
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE, if at least one error occurs
|
SocketManager.prototype.broadcast2all = function(gameMsg, from) {
var ownChannelName, channels, channelName, channel, res;
var fromRoom;
from = from || gameMsg.from;
res = true;
channels = this.server.channel.servernode.channels;
|
|
Case 1. Channel was correctly detected before (msg received from server). |
if ('undefined' !== typeof gameMsg._channelName &&
gameMsg._channelName === this.server.channel.name) {
channel = this.server.channel;
}
|
|
Case 2. Channel was not found before (msg created inside the server). |
else {
fromRoom = this.lookupRoom(from);
if (fromRoom) channel = fromRoom.channel;
}
|
|
Sender is not in any channel, send to all. |
if (!channel) {
return this.send2all(gameMsg);
}
ownChannelName = channel.name;
|
|
Broadcast to own channel first. This method will remove the .channelName and .sid properties. |
this.broadcast2channel(gameMsg, channel, from);
|
|
Sends to all other channels then. |
for (channelName in channels) {
if (channelName !== ownChannelName &&
channels.hasOwnProperty(channelName)) {
channel = channels[channelName];
|
|
Obfuscate. |
gameMsg = channel.playerServer.msg.obfuscate(gameMsg);
res = res && this.send2channel(gameMsg, channel);
}
}
if (!res) {
this.sysLogger.log('SocketManager.broadcast2all: error/s occurred.',
'error');
}
return res;
};
|
¶ SocketManager.broadcast2ownChannelBroadcast a game message in the channel of the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.broadcast2ownChannel = function(gameMsg, from) {
var channel;
var fromRoom;
from = from || gameMsg.from;
|
|
Case 1. Channel was correctly detected before (msg received from server). |
if ('undefined' !== typeof gameMsg._channelName &&
gameMsg._channelName === this.server.channel.name) {
channel = this.server.channel;
}
|
|
Case 2. Channel was not found before (msg created inside the server). |
else {
fromRoom = this.lookupRoom(from);
if (!fromRoom) {
this.sysLogger.log('SocketManager.send2ownChannel: Sender (ID: ' +
from + ') is not in any room.');
return false;
}
channel = fromRoom.channel;
}
return this.broadcast2channel(gameMsg, channel, from);
};
|
¶ SocketManager.broadcast2channelSends a game message to all clients in all game rooms of a given channel Params
gameMsg
GameMsg
The game message to send
channel
ServerChannel
The channel object
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.broadcast2channel = function(gameMsg, channel, from) {
var res, resolvedInfo, globalLookUp;
var sid;
from = from || gameMsg.from;
|
|
We need to determine if the sender is in this channel. If so, we use broadcast, if not we use the send method. |
|
|
Case 1. Message was created by the server, and SID must be checked. |
if ('undefined' === typeof gameMsg._sid) {
globalLookUp = false;
resolvedInfo = channel.adminServer.socket.resolveClientAndSocket(
from, globalLookUp);
|
|
Sender is not in the same channel. We can use the send method. |
if (!resolvedInfo.success) {
|
|
Obfuscate. |
if (resolvedInfo.channel.session !== gameMsg.session) {
gameMsg = resolvedInfo.channel
.playerServer.msg.obfuscate(gameMsg);
}
res = send2AllClientsInGameServer(gameMsg, channel.adminServer);
res = res && send2AllClientsInGameServer(gameMsg,
channel.playerServer);
}
else {
gameMsg._sid = resolvedInfo.sid;
}
}
|
|
Case 2. Message was received by server, and SID already detected, or sender was found in this channel. |
if ('undefined' !== typeof gameMsg._sid) {
|
|
Make a copy of sid, because it will be deleted by the socket. |
sid = gameMsg._sid;
res = broadcast2AllClientsInGameServer(gameMsg,
channel.adminServer,
sid);
res = res && broadcast2AllClientsInGameServer(gameMsg,
channel.playerServer,
sid);
}
if (!res) {
this.sysLogger.log(
'SocketManager.broadcast2channel: error/s occurred ' +
'for channel: ' + channel.name + '.', 'error');
}
return res;
};
|
¶ SocketManager.broadcast2ownRoomSends a game message to all clients in the same room except the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
from
string
Optional. The id or alias of the sender. Default:
the value of the field gameMsg.from
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.broadcast2ownRoom = function(gameMsg, from) {
var fromRoom;
from = from || gameMsg.from;
|
|
Case 1. Room was correctly detected before (msg received from server). |
if ('undefined' !== typeof gameMsg._roomName) {
fromRoom = this.server.channel.gameRooms[gameMsg._roomName];
}
|
|
Case 2. Room was not found before (msg created inside the server). |
if (!fromRoom) {
fromRoom = this.lookupRoom(from);
}
|
|
Room not found. |
if (!fromRoom) {
this.sysLogger.log('SocketManager.send2ownRoom: Sender (ID: ' +
gameMsg.from + ') is not in any room.');
return false;
}
return this.broadcast2room(gameMsg, fromRoom, from);
};
|
¶ SocketManager.broadcast2roomSends a game message to all clients in the same room except the sender The sender is taken from the 'from' field of the game message, or it can be specified as a second parameter. Params
gameMsg
GameMsg
The game message to send
room
GameRoom
The room in which to broadcast
resolvedFrom
string
The id of the sender.
Returns
boolean
FALSE is an error occurs
|
SocketManager.prototype.broadcast2room = function(gameMsg, room, resolvedFrom) {
var originalTo, res, toClients;
originalTo = gameMsg.to;
|
|
Find all clients connected to game room. |
toClients = room.clients.id.getAllKeys();
res = this.broadcast2group(gameMsg, toClients, resolvedFrom);
if (!res) {
this.sysLogger.log('SocketManager.broadcast2room: an error has ' +
'occurred for room ' + room.name + '.', 'error');
}
|
|
The original from field of the gameMsg must be re-set to avoid that a wrong reuse of the msg in the callee |
gameMsg.to = originalTo;
return res;
};
|
¶ SocketManager.broadcast2groupBroadcasts a game message to a group of clients The methods works regardless of the socket or room the clients belong to. Params
gameMsg
GameMsg
The game message to send
group
array
PlayerList
NDDB
The recipients of the message
resolvedFrom
string
Optional. The id or alias of the sender.
Default: the value of the field gameMsg.from
Returns
boolean
TRUE on success
|
SocketManager.prototype.broadcast2group = function(
gameMsg, group, resolvedFrom) {
var res, i, len, from;
res = true;
from = resolvedFrom || gameMsg.from;
if (group instanceof PlayerList || group instanceof NDDB) {
group = group.fetchValues('id').id;
}
else if (!J.isArray(group)) {
throw new TypeError('SocketManager.broadcast2group: group must be ' +
'array or instance of PlayerList/NDDB.', 'error');
}
i = -1;
len = group.length;
for ( ; ++i < len ; ) {
|
|
Do not send the msg to sender as well. |
if (group[i] !== from) {
res = res && this.send2client(gameMsg, group[i]);
}
}
if (!res) {
this.sysLogger.log('SocketManager.broadcast2group: an error has ' +
'occurred.', 'error');
}
return res;
};
|
|
Helper methods. |
|
¶ SocketManager.resolveClientAndSocketRetrieves the socket, and sid of the recipient of a GameMsg If server is allowed to do so, and the recipient is not found in the local registry, it will look into the registry of other channels. Params
gameMsg
GameMsg
The game message to analyze
glovalLookUp
boolean
If defined, overwrites settings:
this.server.channel.servernode.channels
Returns
object
An object containing the result of the
resolving process with the following fields:
|
SocketManager.prototype.resolveClientAndSocket = function(
gameMsg, globalLookUp) {
var to, socket;
var resolvedTo, registry;
var receiverObj, receiverSid;
var ownChannel;
var channels, channelName, channel;
globalLookUp = 'undefined' !== typeof globalLookUp ?
globalLookUp : this.server.options.canSendTo.anyChannel;
ownChannel = this.server.channel;
to = gameMsg.to;
|
|
TODO: move somewhere in the wiki Game aliases are global associations with a client id that are valid throughout the whole game, while room-aliases are valid only within a specific room. When a client leaves that room the room alias is deleted. |
|
|
Matches the 'to' (GameMsg.to) field with a client ID. The 'to' field can be already a client ID, or a game-alias or a room-alias. In case of a room-alias, uses 'from' (GameMsg.from) field to locate the room. Can return null if the lookup fails. |
|
|
TODO: As of 4f82fa9 (may 27 2015) lookupClient returns resolvedTo also for disconnected clients. Check if it is a problem. |
registry = ownChannel.registry;
resolvedTo = registry.lookupClient(to,
gameMsg._room ||
registry.getClientRoom(gameMsg.from));
|
|
Get the socket object first from current channel. |
socket = this.clients[resolvedTo] ||
this.server.partner.socketManager.clients[resolvedTo];
if (socket) {
channel = ownChannel;
}
|
|
If server can send to other channels as well, look for recipient information in all channels. |
else if (globalLookUp) {
channels = this.server.channel.servernode.channels;
for (channelName in channels) {
if (channelName !== ownChannel.name &&
channels.hasOwnProperty(channelName)) {
channel = channels[channelName];
registry = channel.registry;
resolvedTo = registry.lookupClient(to,
registry.getClientRoom(to));
socket = channel.playerServer
.socketManager.clients[resolvedTo] ||
channel.adminServer.socketManager.clients[resolvedTo];
if (socket) break;
}
}
}
|
|
If socket object for to field is not found, return an error message. |
if (!socket) {
return {
success: false,
errMsg: 'Could not find socket for recipient: ' + to +
' (last resolved as: ' + resolvedTo + ')'
};
}
receiverObj = registry.getClient(resolvedTo);
if (!receiverObj) {
return {
success: false,
errMsg: 'Could not resolve the client id to a socket id'
};
}
receiverSid = receiverObj.sid;
if (!receiverSid) {
return {
success: false,
errMsg: 'Player object has no socket id.'
};
}
return {
success: true,
sid: receiverSid,
cid: resolvedTo,
socket: socket,
channel: channel
};
};
|
¶ SocketManager.lookupRoomTries to resolve a client id to an existing room Looks in the registry of other channels as well, if the client id is not found in the local registry, and if the server is allowed to do so. Params
clientId
string
The id or alias of a client to resolve
Returns
GameRoom
room The resolved GameRoom object
See
ChannelRegistry.lookupClient
|
SocketManager.prototype.lookupRoom = function(clientId) {
var registry, roomName, room, resolvedId;
var ownChannel, channels, channelName, channel;
|
|
Look first inside own channel. |
ownChannel = this.server.channel;
|
|
Checks if clientId is an alias, and returns the real id. If it is not an alias, it still needs to be found in the registry, otherwise it returns NULL. |
registry = ownChannel.registry;
resolvedId = registry.lookupClient(clientId);
roomName = registry.getClientRoom(resolvedId);
room = ownChannel.gameRooms[roomName];
if (!room &&
|
|
If server can send to other channels as well, look for recipient information in all channels. |
this.server.options.canSendTo.anyChannel) {
channels = ownChannel.servernode.channels;
for (channelName in channels) {
if (channelName !== ownChannel.name &&
channels.hasOwnProperty(channelName)) {
channel = channels[channelName];
registry = channel.registry;
resolvedId = registry.lookupClient(
clientId, registry.getClientRoom(clientId));
roomName = registry.getClientRoom(resolvedId);
room = channel.gameRooms[roomName];
if (room) break;
}
}
}
return room || null;
};
|
¶ Helper functions. |
function send2AllClientsInGameServer(gameMsg, server) {
var i, res, sockets, smoothExec;
smoothExec = true;
sockets = server.socketManager.sockets;
for (i in sockets) {
if (sockets.hasOwnProperty(i)) {
res = sockets[i].send(gameMsg, 'ALL');
if (!res) {
server.sysLogger.log('SocketManager.send2channel: An error ' +
'occurred in channel ' +
server.channel.name + ', ' + server.name +
' server, and socket: ' + i, 'error');
smoothExec = false;
}
}
}
return smoothExec;
}
function broadcast2AllClientsInGameServer(gameMsg, server, sid) {
var i, res, sockets, smoothExec;
smoothExec = true;
sockets = server.socketManager.sockets;
for (i in sockets) {
if (sockets.hasOwnProperty(i)) {
res = sockets[i].send(gameMsg, sid, true);
if (!res) {
server.sysLogger.log('SocketManager.send2channel: An error ' +
'occurred in channel ' +
server.channel.name + ', ' + server.name +
' server, and socket: ' + i, 'error');
smoothExec = false;
}
}
}
return smoothExec;
}
|


Map goes here
Something not working?
Suggestions go here
Total points:
| Prize List |
|---|
Go to our collection booth at the Inner Plaza to collect your free gifts!
Entered Codes: Student Committee
Visual & Performing Arts
Service & Enrichment
Sports & Games
I wonder why too
Good question
There is no such thing as a stupid question
This application is proudly brought to you by:
With the team comprising
- Ho Xu Yang, Damian
- Teoh Xu En
- Tan Wei Seng
- Zhang Chenxin
Built with
- Phonegap
- Jquery
- Firebase
- Bootstrap
- Handlebars
- and
Error 404: Page not found.
Not sure how you did it, but you broke the app.
Here's our logo instead.


transfer::connect - Connection setup
This package provides objects holding enough information to enable them to either actively connect to a counterpart, or to passively wait for a connection from said counterpart. I.e. any object created by this packages is always in one of two complementary modes, called active (the object initiates the connection) and passive (the object receives the connection).
Of the two objects in a connecting pair one has to be configured for active mode, and the other then has to be configured for passive mode. This establishes which of the two partners connects to whom (the active to the other), or, who is waiting on whom (the passive on the other). Note that this is completely independent of the direction of any data transmission using the connection after it has been established. An active object can, after establishing the connection, either transmit or receive data. Equivalently the passive object can do the same after the waiting for its partner has ended.
This command creates a new connection object with an associated Tcl command whose name is objectName. This object command is explained in full detail in the sections Object command and Object methods. The set of supported options is explained in section Options.
The object command will be created under the current namespace if the objectName is not fully qualified, and in the specified namespace otherwise. The fully qualified name of the object command is returned as the result of the command.
All objects created by the ::transfer::connect command have the following general form:
The method method and its arg'uments determine the exact behavior of the command. See section Object methods for the detailed specifications.
This method destroys the object. This is safe to do for an active object when a connection has been started, as the completion callback is synchronous. For a passive object currently waiting for its partner to establish the connection however this is not safe and will cause errors later on, when the connection setup completes and tries to access the now missing data structures of the destroyed object.
This method starts the connection setup per the configuration of the object. When the connection is established the callback command will be invoked with one additional argument, the channel handle of the socket over which data can be transfered.
The detailed behaviour of the method depends on the configured mode.
The connection setup is done synchronously. The object waits until the connection is established. The method returns the empty string as its result.
The connection setup is done asynchronously. The method returns immediately after a listening socket has been set up. The connection will be established in the background. The method returns the port number of the listening socket, for use by the caller. One important use is the transfer of this information to the counterpart so that it knows where it has to connect to.
This is necessary as the object might have been configured for port 0, allowing the operating system to choose the actual port it will listen on.
The listening port is closed immediately when the connection was established by the partner, to keep the time interval small within which a third party can connect to the port too. Even so it is recommended to use additional measures in the protocol outside of the connect and transfer object to ensure that a connection is not used with an unidentified/unauthorized partner One possibility for this is the use of SSL/TLS. See the option -socketcmd and section Secure connections for information on how to do this.
Connection objects support the set of options listed below.
One way to secure connections made by objects of this package is to require the package tls and then configure the option -socketcmd to force the use of command tls::socket to open the socket.
# Load and initialize tls package require tls tls::init -cafile /path/to/ca/cert -keyfile ... # Create a connector with secure socket setup, transfer::connect C -socketcmd tls::socket ... ...
This package uses the TLS package to handle the security for https urls and other socket connections.
Policy decisions like the set of protocols to support and what ciphers to use are not the responsibility of TLS, nor of this package itself however. Such decisions are the responsibility of whichever application is using the package, and are likely influenced by the set of servers the application will talk to as well.
For example, in light of the recent POODLE attack discovered by Google many servers will disable support for the SSLv3 protocol. To handle this change the applications using TLS must be patched, and not this package, nor TLS itself. Such a patch may be as simple as generally activating tls1 support, as shown in the example below.
package require tls tls::init -tls1 1 ;# forcibly activate support for the TLS1 protocol ... your own application code ...
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category transfer of the Tcllib Trackers. Please also report any ideas for enhancements you may have for either package and/or documentation.
When proposing code changes, please provide unified diffs, i.e the output of diff -u.
Note further that attachments are strongly preferred over inlined patches. Attachments can be made by going to the Edit form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.
Transfer module
Copyright © 2006-2009 Andreas Kupries <andreas_kupries@users.sourceforge.net>


I designed a proof-of-concept site that would use the Google Books API to retrieve book titles entered by the user and would allow the user to save the book to their "bookshelf" - a SQL database. The user is able to edit the information for each book and remove the book from their bookshelf.
Bookshelf was built using Javascript/JQuery, SQL, and EJS.


Impressum / Imprint
This is a personal website
The services here are provided by:
Theresa MannschatzLübecker Str. 20
10559 Berlin, Germany
Phone: +49 151 240 45 227
Email<EMAIL_ADDRESS>This is a personal website
The services here are provided by:
Theresa Mannschatz


ORLANDO A film review by Max Hoffmann Copyright 1993 Max Hoffmann
Seen: Sat 5/9/93, SF's Castro Theatre, SF Film Festival Rating: 13 (yes!) (on a scale of 1->10)
A Gift! A transforming Experience! "If there's only one film you see this year...." A must see. Waiting for this one to come on video instead of viewing it in Kine's temple might be justifiable grounds for the death penalty!
Director Sally Potter received the SF's film festival's first bestowing of Satyajit Ray Lifetime achievement award (named after the great Bengali filmmaker). Potter has taken what many thought to be an unfilmable work of Virginia Woolf, and created what is destined to be an enduring classic, illuminated with the radiant presence of Tilda Swinton (EDWARD II, CARVAGGIO) in the lead. The film stretches the envelope that defines our arbitrary definitions of masculinity and femininity. A perfect union of sound and image, the film boasts an amazing soundtrack. Potter has also made an additional gift to the film world with the inclusion of a compelling, though brief, performance by Quentin Crisp; a fitting cap to his wonderfully chequered career.
General distribution in North America coming soon. The film caused a major stir at both the Venice and Toronto film festivals. (Currently showing on screens in the UK.)
In her brief Q/A session after the film and award ceremony (my quotes drawn to best of memory), Potter said she was drawn to this story of eternal youth and immortality "because of the twin plagues of AIDS and nuclear annihilation that we live under. After losing so many friends to AIDS and seeing the staggering loss of their voices, this film had to be made." Potter also affirmed her conviction "to create the same spiritual insights and transformations with cinema that masters like Mozart created with music." Upon viewing this film, you will agree that she has achieved that goal. Before seeing this film, you might be tempted to label Potter as a great "woman" film director. With this work, she has shed the triviality of gender. She is one of the world's greated film directors. Period.
Sally Potter has reaffirmed my hope that we need not always look to the past for enduring cinema. That films as great as the German silents of the 20s, as great as the works of Orson Welles are still being created.
In the rest of the review I quote directly from B. Ruby Rich's program notes:
"...ORLANDO is based upon the Virginia Woolf volume of the same name and tells the picaresque tale of a young man who lives through four centuries in rather unusual circumstances. He progresses at first in keeping with his upper-class origins, taking immortality in stride, until one day he wakes up, magically transformed into a woman. And so it goes: s/he continues on from the Victorian age to the present, exploring along the way questions of courtliness and beastliness, war and peace, politics and property, past and future -- and gender.
"ORLANDO's narrative progression is, if anything, post-modern. Lush operatic music surges on the soundtrack, the camera sweeps us off our feet, wry intertitles march us through history, and the incandescent Tilda Swinton (EDWARD II) marches us through genders in her embodiment of Orlando through the ages. No wonder audiences love it. Potter admits to being influenced by Soviet cinema (ORLANDO's cameraman Alexei Rodionov is Russian) and by Michael Powell (the great British director who championed her cause in the years before his death) but certainly Satyajit Ray could shine in her firmament of influences as well, for he would have recognized the beauty created here and the valor of its execution."
.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


@(department: String, articles : Seq[Article]) @main("department view") {
vor {{article.minutesLeft}} Minuten


This week lecture is to experiment some output device of the microcontroller and pheripheral
I decide to make a confetti cannon (blower) for the marriage of my sister so I use this lecture to make a board to drive an ESC for a brushless, to make the dutched fan.
I design a board using the attiny44 in Eagle, like the hello board but with different pinout to fit the servo standard.
I put in the circuit a connector to the button (I need to pot outside of the board the activation of the motor) I also adapt an ISP connector to fit 2 standard servo plug.
I connect the servo control pin to PA2 and PB2 so I have an AUX servo channel.
After i make a the surface mount PCB and engrave it with flexx laser.
To fit all connection in one layer I need to put a jumper near the micro and the top ISP connector.
It can be seen in the picture below, the purple cable.
I made the programming in Arduino IDE, trying to use servo library.
This library is based on a 16 bit timer that attiny44 have but for some reason it didn't work with this device, so i have to switch to another library, very similar to the servo called softwareservo or servo8bit, that use a 8 bit timer.
Here is the servo.h file.
/*
Servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
Copyright (c) 2009 Michael Margolis. All right reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
/*
A servo is activated by creating an instance of the Servo class passing
the desired pin to the attach() method.
The servos are pulsed in the background using the value most recently
written using the write() method.
Note that analogWrite of PWM on pins associated with the timer are
disabled when the first servo is attached.
Timers are seized as needed in groups of 12 servos - 24 servos use two
timers, 48 servos will use four.
The sequence used to sieze timers is defined in timers.h
The methods are:
Servo - Class for manipulating servo motors connected to Arduino pins.
attach(pin ) - Attaches a servo motor to an i/o pin.
attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds
default min is 544, max is 2400
write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds)
writeMicroseconds() - Sets the servo pulse width in microseconds
read() - Gets the last written servo pulse width as an angle between 0 and 180.
readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release)
attached() - Returns true if there is a servo attached.
detach() - Stops an attached servos from pulsing its i/o pin.
*/
#ifndef Servo_h
#define Servo_h
#include
/*
* Defines for 16 bit timers used with Servo library
*
* If _useTimerX is defined then TimerX is a 16 bit timer on the current board
* timer16_Sequence_t enumerates the sequence that the timers should be allocated
* _Nbr_16timers indicates how many 16 bit timers are available.
*/
// Architecture specific include
#if defined(ARDUINO_ARCH_AVR)
#include "avr/ServoTimers.h"
#elif defined(ARDUINO_ARCH_SAM)
#include "sam/ServoTimers.h"
#else
#error "This library only supports boards with an AVR or SAM processor."
#endif
#define Servo_VERSION 2 // software version of this library
#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo
#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo
#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
#define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds
#define SERVOS_PER_TIMER 12 // the maximum number of servos controlled by one timer
#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
#define INVALID_SERVO 255 // flag indicating an invalid servo index
typedef struct {
uint8_t nbr :6 ; // a pin number from 0 to 63
uint8_t isActive :1 ; // true if this channel is enabled, pin not pulsed if false
} ServoPin_t ;
typedef struct {
ServoPin_t Pin;
volatile unsigned int ticks;
} servo_t;
class Servo
{
public:
Servo();
uint8_t attach(int pin); // attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure
uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes.
void detach();
void write(int value); // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds
void writeMicroseconds(int value); // Write pulse width in microseconds
int read(); // returns current pulse width as an angle between 0 and 180 degrees
int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release)
bool attached(); // return true if this servo is attached, otherwise false
private:
uint8_t servoIndex; // index into the channel data for this servo
int8_t min; // minimum is this value times 4 added to MIN_PULSE_WIDTH
int8_t max; // maximum is this value times 4 added to MAX_PULSE_WIDTH
};
#endif
Here is the softwareservo.h file.
#ifndef SoftwareServo_h
#define SoftwareServo_h
#include "Arduino.h"
#include
class SoftwareServo
{
private:
uint8_t pin;
uint8_t angle; // in degrees
uint16_t pulse0; // pulse width in TCNT0 counts
uint8_t min16; // minimum pulse, 16uS units (default is 34)
uint8_t max16; // maximum pulse, 16uS units, 0-4ms range (default is 150)
class SoftwareServo *next;
static SoftwareServo* first;
public:
SoftwareServo();
uint8_t attach(int); // attach to a pin, sets pinMode, returns 0 on failure, won't
// position the servo until a subsequent write() happens
void detach();
void write(int); // specify the angle in degrees, 0 to 180
uint8_t read();
uint8_t attached();
void setMinimumPulse(uint16_t); // pulse length for 0 degrees in microseconds, 540uS default
void setMaximumPulse(uint16_t); // pulse length for 180 degrees in microseconds, 2400uS default
static void refresh(); // must be called at least every 50ms or so to keep servo alive
// you can call more often, it won't happen more than once every 20ms
};
#endif
I try to investigate the reason the 16 bit timer baser library didn't work but for now i didn't find the solution.
After I compile the sketch with the sofwareservo library I upload it into the attiny44 using the fabISP and Arduino IDE, and test it with a simple 9g servo.
Here is my sketch in arduino used to control the ESC
#include
SoftwareServo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
const int buttonPin = 3; // the number of the pushbutton pin
const int ledPin = 7;
int buttonState = LOW; // variable for reading the pushbutton status
int prevstate= HIGH; //prevoius state of button
int repeat = 0;
int pos = 0;
void refreshservo(){
SoftwareServo::refresh();
delay(45);
}
void arm(){
// arm the speed controller, modify as necessary for your ESC
setSpeed(0);
while(repeat <25){//waiting 1 sec refreshing servo command
repeat++;
refreshservo();
}
repeat=0;
setSpeed(100);
while(repeat <25){//waiting 1 sec refreshing servo command
repeat++;
refreshservo();
}
repeat=0;
setSpeed(0);
while(repeat <25){//waiting 1 sec refreshing servo command
repeat++;
refreshservo();
}
repeat=0;
}
void setSpeed(int speed){
// speed is from 0 to 100 where 0 is off and 100 is maximum speed
//the following maps speed values of 0-100 to angles from 0-180,
// some speed controllers may need different values, see the ESC instructions
int angle = map(speed, 0, 100, 0, 180);
myservo.write(angle);
}
void setup()
{
pinMode (buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
myservo.attach(2); // attaches the servo on pin 9 to the servo object
arm();
//myservo.write(0);
//SoftwareServo::refresh();
}
void loop()
{
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
delay(1); //little debounce
if (buttonState == LOW){
if (prevstate== HIGH){
prevstate=LOW;
//myservo.write(90);
digitalWrite(ledPin, HIGH);
myservo.write(180);
delay(45);
SoftwareServo::refresh();
}
}
}
else{
delay(1);//little debounce
if (buttonState == HIGH){
if (prevstate== LOW){
prevstate= HIGH;
//myservo.write(90);
digitalWrite(ledPin, LOW);
myservo.write(0);
delay(45);
SoftwareServo::refresh();
}
}
}
SoftwareServo::refresh();
}
I use a common 9g servo to test the firmware and all goes fine, so the servo make 0 position, 180 position, at the press of the button.
Video of test
After i try to connect the ESC to the board, and strange things happen.
The ESC goes in programming mode and the motor will not spin.
This is due to the fact the ESC need to be armed ( process who let the speed controller to know that you have the full control of the motor, and you have the radio controller in hands), this arming process in made by sending a full throttle command and a 0 throttle command at certain refresh rate.
the 8 bit library for the servo have a lot of jitter that make this arming process not working properly.
the servo inside electronics in a little bit more permissive and filter this jitter the ESC is really complex to drive so it didn't work.
I try to implement this sketch on an Arduino Uno with the servo standard library and all works great,
I will try to make a SatshaKit and try to implement it in that way.
EXTRAS
For make a good confetti-blower i need to make a ducted fan, so I design an adapter for my motor and blade
I have a 16cm fan blade and i have to reduce the diameter to fir the 9 cm pipe-tube
I use rhino to design this adapter adding the place where to attach the motor to the structure.
I use the embedded calculation of the curves of rhino to make a good Venturi effect.


HOME
ABOUT
PROJECTS
SERVICES
CONTACT
CONTACT
CONTACT INFORMATION
Office: 12th floor, 300 Park Ave, New York, 10022.
Schedule a phone call
Schedule an appointment


--- layout: default title: Home ---
I think many developers believe system/application performance is a dark art. It is not. In my experience, well performing systems come down to this: fewer and faster.
If you are doing something a lot, do it fewer times. If you are doing something that is slow, make it faster. Here is my patented (not really) 3 step process.
The only way you can know if you are doing something fewer or faster than before is if you are measuring. Ensure that you know how many requests (or jobs or messages or whatever) you are receiving and how long it takes to fullfill them.
Note: If you are using Ruby on Rails, you can use my gem nunes. If you do, please let me know what you think with a tweet or email.
Once you have measured, you have three choices:
Note: * denotes preferred option.
Both fewer and faster are relative — less often or time than before, whatever before was. You will never done, but after a round of fewer and faster, you are perhaps done for now.
The key is to set goals between steps 1 and 2. When you hit those goals (and you will, I have faith in you), stop improving, but keep measuring. Whenever the measurement fails to meet your goals, repeat step 2.
I wish I had more steps for you or a fancy algorithm with scientific notation, but I do not, mainly because I have no ability to understand that crap.
Go forth and spread this simple concept throughout the world. Oh, and if you find it helpful, be sure to let me know (tweet or email will do just fine).
Sincerely,
John Nunemaker


Stories from Around the World
by FCIT
“The Dragon and the Prince”
by Traditional
Additional Information
- Year Published: 0
- Language: English
- Country of Origin: Serbia
- Source: Richard Mercer Dorson, ed., Sixty Folk Tales, from Exclusively Slavonic Sources
-
Readability:
- Flesch–Kincaid Level: 6.4
- Word Count: 2,712
- Genre: Fairy Tale/Folk Tale
- ✎ Cite This
Downloads
There was an emperor who had three sons. One day the eldest son went out hunting, and, when he got outside the town, up sprang a hare out of a bush, and he after it, and hither and thither, till the hare fled into a water-mill, and the prince after it. But it was not a hare, but a dragon, and it waited for the prince and devoured him. When several days had elapsed and the prince did not return home, people began to wonder why it was that he was not to be found.
Then the middle son went hunting, and as he issued from the town, a hare sprang out of a bush, and the prince after it, and hither and thither, till the hare fled into the water-mill and the prince after it; but it was not a hare, but a dragon, which waited for and devoured him. When some days had elapsed and the princes did not return, either of them, the whole court was in sorrow.
Then the third son went hunting, to see whether he could not find his brothers. When he issued from the town, again up sprang a hare out of a bush, and the prince after it, and hither and thither, till the hare fled into the water-mill. But the prince did not choose to follow it, but went to find other game, saying to himself: “When I return I shall find you.”
After thus he went for a long time up and down the hill, but found nothing, and then returned to the water-mill; but when he got there, there was only an old woman in the mill. The prince invoked God in addressing her: “God help you, old woman!”
The old woman replied: “God help you, my son!”
Then the prince asked her: “Where, old woman, is my hare?”
She replied: “My son, that was not a hare, but a dragon. It kills and throttles many people.”
Hearing this, the prince was somewhat disturbed, and said to the old woman: “What shall we do now? Doubtless my two brothers also have perished here.”
The old woman answered: “They have indeed; but there’s no help for it.
Then he said to her: “Dear old woman, do you know what? I know that you will be glad to liberate yourself from that pest.”
The old woman interrupted him: “How should I not? It captured me, too, in this way, but now I have no means of escape.”
Then he proceeded: “Listen well to what I am going to say to you. Ask it whither it goes and where its strength is; then kiss all that place where it tells you its strength is, as if from love, till you ascertain it, and afterward tell me when I come.”
Then the prince went off to the palace, and the old woman remained in the water-mill. When the dragon came in, the old woman began to question it: “Where in God’s name have you been? Whither do you go so far? You will never tell me whither you go.”
The dragon replied: “Well, my dear old woman, I do go far.”
Then the old woman began to coax it: “And why do you go so far? Tell me where your strength is.
Thereupon the dragon smiled and said to her: “Yonder is my strength, in that fireplace.”
Then the old woman began to fondle and kiss the fireplace, and the dragon on seeing it burst into a laugh and said to her: “Silly old woman, my strength isn’t there; my strength is in that tree-fungus in front of the house.”
Then the old woman began again to fondle and kiss the tree, and the dragon again laughed, and said to her: “Away, old woman! My strength isn’t there.”
Then the old woman inquired: “Where is it?”
The dragon began to give an account in detail: “My strength is a long way off, and you cannot go thither. Far in another empire under the emperor’s city is a lake, in that lake is a dragon, and in that dragon a boar, and in the boar a pigeon, and in that is my strength.”
The next morning when the dragon went away from the mill, the prince came to the old woman, and the old woman told him all that she had heard from the dragon. Then he left his home, and disguised himself; he put shepherd’s boots to his feet, took a shepherd’s staff in his hand, and went into the world. As he went on thus from village to village, and from town to town, at last he came into another empire and into the imperial city, in a lake under which the dragon was.
On going into the town he began to inquire who wanted a shepherd. The citizens told him that the emperor did. Then he went straight to the emperor. After he announced himself, the emperor admitted him into his presence, and asked him: “Do you wish to keep sheep?”
He replied: “I do, illustrious crown!”
Then the emperor engaged him, and began to inform and instruct him: “There is here a lake, and alongside of the lake very beautiful pasture, and when you call the sheep out, they go thither at once, and spread themselves round the lake; but whatever shepherd goes off there, that shepherd returns back no more. Therefore, my son, I tell you, don’t let the sheep have their own way and go where they will, but keep them where you will.”
The prince thanked the emperor, got himself ready, and called out the sheep, taking with him, more-over, two hounds that could catch a boar in the open country, and a falcon that could capture any bird, and carrying also a pair of bagpipes.
When he called out the sheep he let them go at once to the lake, and when the sheep arrived at the lake, they immediately spread round it, and the prince placed the falcon on a stump, and the hounds and bagpipes under the stump, then tucked up his hose and sleeves, waded into the lake, and began to shout: “Dragon, dragon! Come out to single combat with me to-day that we may measure ourselves together, unless you’re a woman.”[6]
The dragon called out in reply, “I will do so now, prince—now!”
Erelong behold the dragon! It is large, it is terrible, it is disgusting! When the dragon came out, it seized him by the waist, and they wrestled a summer day till afternoon. But when the heat of afternoon came on, the dragon said: “Let me go, prince, that I may moisten my parched head in the lake, and toss you to the sky.”
But the prince replied: “Come, dragon, don’t talk nonsense; if I had the emperor’s daughter to kiss me on the forehead, I would toss you still higher.”
Thereupon, the dragon suddenly let him go, and went off into the lake. On the approach of evening, he washed and got himself up nicely, placed the falcon on his arm, the hounds behind him, and the bagpipes under his arm, then drove the sheep and went into the town playing on the bagpipes. When he arrived at the town, the whole town assembled as to see a wondrous sight because he had come, whereas previously no shepherd had been able to come from the lake. The next day the prince got ready again, and went with his sheep straight to the lake. But the emperor sent two grooms after him to go stealthily and see what he did, and they placed themselves on a high hill whence they could have a good view.
When the shepherd arrived, he put the hounds and bagpipes under the stump and the falcon upon it, then tucked up his hose and sleeves waded into the lake and shouted: “Dragon, dragon! Come out to single combat with me, that we may measure ourselves once more together, unless you are a woman!”
The dragon replied: “I will do so, prince, now, now!”
Erelong, behold the dragon! It was large, it was terrible, it was disgusting! And it seized him by the waist and wrestled with him a summer’s day till afternoon.
But when the afternoon heat came on, the dragon said: “Let me go, prince, that I may moisten my parched head in the lake, and may toss you to the sky.”
The prince replied: “Come, dragon, don’t talk nonsense; if I had the emperor’s daughter to kiss me on the forehead, I would toss you still higher.”
Thereupon the dragon suddenly left hold of him, and went off into the lake. When night approached the prince drove the sheep as before, and went home playing the bagpipes. When he arrived at the town, the whole town was astir and began to wonder because the shepherd came home every evening, which no one had been able to do before. Those two grooms had already arrived at the palace before the prince, and related to the emperor in order everything that they had heard and seen. Now when the emperor saw that the shepherd returned home, he immediately summoned his daughter into his presence and told her all, what it was and how it was.
“But,” said he, “to-morrow you must go with the shepherd to the lake and kiss him on the forehead.”
When she heard this she burst into tears and began to entreat her father. “You have no one but me, and I am your only daughter, and you don’t care about me if I perish.”
Then the emperor began to persuade and encourage her: “Don’t fear, my daughter; you see we have had so many changes of shepherds, and of all that went out to the lake not one has returned; but he had been contending with the dragon for two whole days and it has done him no hurt. I assure you, in God’s name, that he is able to overcome the dragon, only go to-morrow with him to see whether he will free us from this mischief which has destroyed so many people.”
When, on the morrow, the day dawned and the sun came forth, up rose the shepherd, up rose the maiden too, to begin to prepare for going to the lake. The shepherd was cheerful, more cheerful than ever, but the emperor’s daughter was sad and shed tears.
The shepherd comforted her: “Lady sister, I pray you, do not weep, but do what I tell you. When it is time, run up and kiss me, and fear not.”
As he went and drove the sheep, the shepherd was thoroughly cheery, and played a merry tune on his bagpipes; but the damsel did nothing but weep as she went beside him, and he several times left off playing and turned toward her: “Weep not, golden one; fear nought.”
When they arrived at the lake, the sheep immediately spread round it, and the prince placed the falcon on the stump, and the hounds and bagpipes under it, then tucked up his hose and sleeves, waded into the water, and shouted: “Dragon! Dragon! Come out to single combat with me; let us measure ourselves once more, unless you’re a woman!”
The dragon replied: “I will, prince; now, now!”
Erelong, there was the dragon! It was huge, it was terrible, it was disgusting! When it came out, they seized each other by the middle, and wrestled a summer’s day till afternoon.
But when the afternoon heat came on, the dragon said: “Let me go, prince, that I may moisten my parched head in the lake, and toss you to the skies.”
The prince replied: “Come, dragon, don’t talk nonsense; if I had the emperor’s daughter to kiss me on the forehead, I would toss you much higher.”
When he said this, the emperor’s daughter ran up and kissed him on the face, on the eye, and on the forehead. Then he swung the dragon, and tossed it high into the air, and when it fell to the ground it burst into pieces. But as it burst into pieces, out of it sprang a wild boar, and started to run away. But the prince shouted to his shepherd dogs: “Hold it! Don’t let it go!” and the dogs sprang up and after it, caught it, and soon tore it to pieces. But out of the boar flew a pigeon, and the prince loosed the falcon, and the falcon caught the pigeon and brought it into the prince’s hands. The prince said to it: “Tell me now, where are my brothers?”
The pigeon replied: “I will; only do me no harm. Immediately behind your father’s town is a water-mill, and in the water-mill are three wands that have sprouted up. Cut these three wands up from below, and strike with them upon their root; an iron door will immediately open into a large vault. In that vault are many people, old and young, rich and poor, small and great, wives and maidens, so that you could settle a populous empire; there, too, are your brothers.” When the pigeon had told him all this, the prince immediately wrung its neck.
The emperor had gone out in person, and posted himself on the hill from which the grooms had viewed the shepherd, and he, too, was a spectator of all that had taken place. After the shepherd had thus obtained the dragon’s head, twilight began to approach. He washed himself nicely, took the falcon on his shoulder, the hounds behind him, and the bagpipes under his arm, played as he went, drove the sheep, and proceeded to the emperor’s palace, with the damsel at his side still in terror.
When they came to the town, all the town assembled as to see a wonder. The emperor, who had seen all his heroism from the hill, called him into his presence, and gave him his daughter, went immediately to church, had them married, and held a wedding festival for a week. After this the prince told him who and whence he was, and the emperor and the whole town rejoiced still more.
Then, as the prince was urgent to go to his own home, the emperor gave him a large escort, and equipped him for the journey. When they were in the neighbourhood of the water-mill, the prince halted his attendants, went inside, cut up the three wands, and struck the root with them, and the iron door opened at once. In the vault was a vast multitude of people. The prince ordered them to come out one by one, and go whither each would, and stood himself at the door.
They came out thus one after another, and lo! there were his brothers also, whom he embraced and kissed. When the whole multitude had come out, they thanked him for releasing and delivering them, and went each to his own home. But he went to his father’s house with his brothers and bride, and there lived and reigned to the end of his days.
FOOTNOTES:
[Footnote 6: This is intended as an insult. “Azhdaja,” a dragon, is feminine in Servian.]


That's the percentage of counties in Nebraska that have seen an increase in the number of uninsured persons since 2007. Blaine County, in central Nebraska, saw the largest increase, with a 115 percent increase. Gosper County saw a nearly 40 percent decrease in uninsured persons during that time. As part of the Affordable Care Act, or "Obamacare," states have the opportunity to increase medicaid eligibility to 133 percent of the poverty level, according to the White House. So far, Nebraska has not been one of those states.
State Sen. Jeremy Nordquist, of Omaha, is among the senators who are not giving up the Medicaid expansion fight yet. He said there was a bipartisan majority who supported the issue on a White House blog. "It's often overlooked that Nebraska has a high number of uninsured in rural counties. Without expansion, rural hospitals will face growing financial challenges, which will undoubtedly lead to a reduction in the services they provide and - we are hearing - a real risk of these critical hospital closing their doors," he said in the blog.
This chart shows the five largest increases and five leargest decreases in the number of uninsured in Nebraska. Blaine had the largest increase - 115 percent - followed by Keya Paha county at about 50 percent, then Garden, Hayes and Wheeler counties.
Gosper county saw the larget decrease in its percentage of uninsured people, decreasing by about 40 percent. Cedar, Boone, Pierce and Seward counties represent the remaining counties with the most significant decreases in uninsured persons.
Of Nebraska's 93 counties, 30 saw poverty rates that decreased or did not change since 2007. The remaining two-thirds of Nebraska counties saw an increase in their poverty rate. Thomas County saw the largest increase in its poverty rate: 36 percent. The number of uninsured persons in that county also increased by 25 percent.
In almost 70 percent of the counties that saw an increase in their poverty rate, their rate of uninsured went down. For example, Cass County saw a 20 percent increase in its poverty rate and a 25 percent decrease in the number of their uninsured.


19. Time
The time(3m) module provides functions for querying and manipluating time values.
19.1. Time functions
The time_current_millis function
Synopsis
#include <mba/time.h>
uint64_t time_current_millis(void);
Description
The time_current_millis function returns the current time in milliseconds since Jan 1, 1970 as a 64 bit integer. It works equally well on UNIX and Windows.
Copyright 2003 Michael B. Allen <mba2000 ioplex.com>


strain transmission HIV invader virus superinfection prevalence HIV- advantage resident population rate individuals infection time effect high-prevalence strains contact low acute initial sexual simulation data default comer (Fig. high scenario epidemics growth network subtype compared spread probability strain. epidemic relative simulations {border-style degree competition distribution expansion introduced px;} transmissibility #ffffff;} individual inhibition new risk second years []. dynamics multiple setting stage strain, transmissions acute-stage based extinction global percent subtypes mechanisms steady-state Infect different disease human infected interference level lines median number results runs scenarios set uninfected Dis: highly lower model scenario, strong type AIDS Fig Table cases founder higher increased low-prevalence peak peaks replacement superinfecting susceptible turnover AIDS: allowed annual contacts diversity links populations row) steady values [,] additional age baseline characterized did distinct early effects greater host immunodeficiency impact implemented infecting introduction levels local nodes observed original pandemic parameters plateau potential preferred promiscuity rates slow study Africa Fig. able adaptation advantage, cases. empirical epidemics, factors indicates infections infectiousness infectivity likely occurred population. px; scenario. setting, specific subsequent tested transmitted viral {font-family "first (purple ./--- Click LINK Parameters Week [], allowing analysis attained contribution couples death depict depletion differences dots) equal established exponents fast female females file. followed font-size heterosexual indicate infection. line) little mechanism possible proportion selection simulations. using virus. window (PDF) (at (green Biol: Central Finally, However, Simulation Virol: according acts advantage. allow average chronic contrast, course double; estimated evolution frequency green group immunity independent individual. low- male males maximum one-time overall phase plotted promiscuous reached reduced repeated scale selected settings single started strains, strains. successful superinfection. test used (and (as (bottom (top ./S-()- Africa. Human Retrovirology: VM. [,]. attain border-color border-width calculated case cohort considerable consistent date degree) dynamic end epidemic. expense extinct faster fixed gray however, including individuals. involved length major modelling pandemic. parameterized partially partners power-law prevalence, prevalence. progression rate, recent replaced respectively. scenario; serodiscordant sexually solid; state substantially suggest symbols threshold transmissible unhindered variants variation {font-style {font-weight (.–.) (dashed (invader) (non-FSW) (preferred (see -fold Africa, African B-C CI: Comput Data FSW HLA Heterosexual Hum Lancet Nature: Res Retroviruses: Statistical S–. Transmission Uganda adapted and/or available bold century co-existence competitive complex connected contacts. courier; depleted determined distributions drawn drug e.g., effects. efficient em; epidemics. events explain extend extinct). fitness fitted formation framework future half-links hypothesized immune individuals, infection, inhibited kept lineages lines). locally long majority needed occur particularly patients pt;} purple quantifiers randomly rapid rare reach red regions relevant respectively). responses result scenarios, sex simple simulated size sliding smoothed stable step strength superinfected superinfection, took transmission, types virus, weaker year zero


v1_intro.Rmd
The sfo package provides a monthly statistics of San Francisco International (SFO) airport air traffic between July 2005 and December 2020. That includes the following two datasets:
sfo_passengers
- air traffic passengers statisticssfo_stats
- air traffic landing statisticsThe sfo_passengers
dataset focusing on monthly air passengers statistics, and it contains the following fields:
activity_period
- Activity year and month in YYYYMM formatoperating_airline
-Airline name for the operator of aircraftoperating_airline_iata_code
-The International Air Transport Association (IATA) two-letter designation for the Operating Airlinepublished_airline
-Airline name that issues the ticket and books revenue for passenger activitypublished_airline_iata_code
-The International Air Transport Association (IATA) two-letter designation for the Published Airlinegeo_summary
-Designates whether the passenger activity in relation to SFO arrived from or departed to a location within the United States (“domestic”), or outside the United States (“international”) without stopsgeo_region
-Provides a more detailed breakdown of the GEO Summary field to designate the region in the world where activity in relation to SFO arrived from or departed to without stopsactivity_type_code
-A description of the physical action a passenger took in relation to a flight, which includes boarding a flight (“enplanements”), getting off a flight (“deplanements”) and transiting to another location (“intransit”)price_category_code
-A categorization of whether a Published Airline is a low-cost carrier or not a low-cost carrier}terminal
-The airport terminal designations at SFO where passenger activity took placeboarding_area
-The airport boarding area designations at SFO where passenger activity took placepassenger_count
-The number of monthly passengers associated with the above attribute fieldsData source: San Francisco data portal (DataSF) API
library(sfo) data("sfo_passengers") str(sfo_passengers) #> 'data.frame': 22869 obs. of 12 variables: #> $ activity_period : int<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12 ... #> $ operating_airline : chr "United Airlines" "United Airlines" "United Airlines" "United Airlines" ... #> $ operating_airline_iata_code: chr "UA" "UA" "UA" "UA" ... #> $ published_airline : chr "United Airlines" "United Airlines" "United Airlines" "United Airlines" ... #> $ published_airline_iata_code: chr "UA" "UA" "UA" "UA" ... #> $ geo_summary : chr "Domestic" "Domestic" "International" "International" ... #> $ geo_region : chr "US" "US" "Asia" "Asia" ... #> $ activity_type_code : chr "Enplaned" "Thru / Transit" "Deplaned" "Enplaned" ... #> $ price_category_code : chr "Other" "Other" "Other" "Other" ... #> $ terminal : chr "Terminal 3" "Terminal 3" "International" "International" ... #> $ boarding_area : chr "F" "F" "G" "G" ... #> $ passenger_count : int 117260 61 12763 16050 2733 2878 3913 3587 11735 585 ... head(sfo_passengers) #> activity_period operating_airline operating_airline_iata_code #> 1 202012 United Airlines UA #> 2 202012 United Airlines UA #> 3 202012 United Airlines UA #> 4 202012 United Airlines UA #> 5 202012 United Airlines UA #> 6 202012 United Airlines UA #> published_airline published_airline_iata_code geo_summary #> 1 United Airlines UA Domestic #> 2 United Airlines UA Domestic #> 3 United Airlines UA International #> 4 United Airlines UA International #> 5 United Airlines UA International #> 6 United Airlines UA International #> geo_region activity_type_code price_category_code terminal #> 1 US Enplaned Other Terminal 3 #> 2 US Thru / Transit Other Terminal 3 #> 3 Asia Deplaned Other International #> 4 Asia Enplaned Other International #> 5 Australia / Oceania Deplaned Other International #> 6 Australia / Oceania Enplaned Other International #> boarding_area passenger_count #> 1 F 117260 #> 2 F 61 #> 3 G 12763 #> 4 G 16050 #> 5 G 2733 #> 6 G 2878
The sfo_stats
dataset focusing on monthly landing statistics, and it contains the following fields:
activity_period
- Activity year and month in YYYYMM formatoperating_airline
-Airline name for the operator of aircraftoperating_airline_iata_code
-The International Air Transport Association (IATA) two-letter designation for the Operating Airlinepublished_airline
-Airline name that issues the ticket and books revenue for passenger activitypublished_airline_iata_code
-The International Air Transport Association (IATA) two-letter designation for the Published Airlinegeo_summary
-Designates whether the passenger activity in relation to SFO arrived from or departed to a location within the United States (“domestic”), or outside the United States (“international”) without stopsgeo_region
-Provides a more detailed breakdown of the GEO Summary field to designate the region in the world where activity in relation to SFO arrived from or departed to without stopslanding_aircraft_type
- A designation for three types of aircraft that landed at SFO, which includes passenger aircraft, cargo only aircraft (“freighters”) or combination aircraft (“combi”)aircraft_body_type
- A designation that is independent from Landing Aircraft Type, which determines whether commercial aircraft landed at SFO is a wide body jet, narrow body jet, regional jet or a propeller operated aircraftaircraft_manufacturer
- Manufacturer name for the aircraft that landed at SFOaircraft_model
- Model designation of aircraft by the manufactureraircraft_version
- Variations of the Aircraft Model, also known as the “dash number”, designated by the manufacturer to segregate unique versions of the same modellanding_count
- The number of aircraft landings associated with General and Landings Statistics attribute fieldstotal_landed_weight
- The aircraft landed weight (in pounds) associated with General and Landings Statistics attribute fieldsData source: San Francisco data portal (DataSF) API
library(sfo) data("sfo_stats") str(sfo_stats) #> 'data.frame': 25765 obs. of 14 variables: #> $ activity_period : int<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12<PHONE_NUMBER>12 ... #> $ operating_airline : chr "United Airlines" "United Airlines" "United Airlines" "United Airlines" ... #> $ operating_airline_iata_code: chr "UA" "UA" "UA" "UA" ... #> $ published_airline : chr "United Airlines" "United Airlines" "United Airlines" "United Airlines" ... #> $ published_airline_iata_code: chr "UA" "UA" "UA" "UA" ... #> $ geo_summary : chr "Domestic" "Domestic" "Domestic" "International" ... #> $ geo_region : chr "US" "US" "US" "Asia" ... #> $ landing_aircraft_type : chr "Passenger" "Passenger" "Passenger" "Passenger" ... #> $ aircraft_body_type : chr "Narrow Body" "Wide Body" "Wide Body" "Wide Body" ... #> $ aircraft_manufacturer : chr "Boeing" "Boeing" "Boeing" "Boeing" ... #> $ aircraft_model : chr "B753" "B763" "B772" "B772" ... #> $ aircraft_version : chr "-" "-" "-" "-" ... #> $ landing_count : int 78 19 96 1 8 35 44 43 33 1 ... #> $ total_landed_weight : int 17472000 6080000 43500000<PHONE_NUMBER>000 19390000 24376000 16340000 12540000 380000 ... head(sfo_stats) #> activity_period operating_airline operating_airline_iata_code #> 1 202012 United Airlines UA #> 2 202012 United Airlines UA #> 3 202012 United Airlines UA #> 4 202012 United Airlines UA #> 5 202012 United Airlines UA #> 6 202012 United Airlines UA #> published_airline published_airline_iata_code geo_summary geo_region #> 1 United Airlines UA Domestic US #> 2 United Airlines UA Domestic US #> 3 United Airlines UA Domestic US #> 4 United Airlines UA International Asia #> 5 United Airlines UA International US #> 6 United Airlines UA Domestic US #> landing_aircraft_type aircraft_body_type aircraft_manufacturer aircraft_model #> 1 Passenger Narrow Body Boeing B753 #> 2 Passenger Wide Body Boeing B763 #> 3 Passenger Wide Body Boeing B772 #> 4 Passenger Wide Body Boeing B772 #> 5 Passenger Wide Body Boeing B772 #> 6 Passenger Wide Body Boeing B773 #> aircraft_version landing_count total_landed_weight #> 1 - 78 17472000 #> 2 - 19 6080000 #> 3 - 96 43500000 #> 4 - 1 460000 #> 5 - 8 3680000 #> 6 - 35 19390000


UIViewController
public extension UIViewController
-
Previous view controller in navigation stack
Declaration
Swift
var previous: UIViewController? { get }
-
Goes down presentation chain and returns root view controller that presents whole chain.
Declaration
Swift
var rootPresentingViewController: UIViewController? { get }
-
Try to get window that owns this view controller.
Declaration
Swift
var window: UIWindow? { get }
-
Returns true if controller curently is pushing, presenting, poping or dismissing.
Declaration
Swift
var isBeingTransitioned: Bool { get }
-
Returns true if controller curently is pushing or presenting.
Declaration
Swift
var isBeingAdded: Bool { get }
-
Returns true if controller curently is poping or dismissing.
Declaration
Swift
var isBeingRemoved: Bool { get }
-
Presents view controller animated
Declaration
Swift
func present(_ vc: UIViewController)
-
Remove view controller animated action. Removes using pop if it was pushed or using dismiss if it was presented.
Declaration
Swift
@IBAction func remove(sender: Any)
-
Removes view controller using pop if it was pushed or using dismiss if it was presented. Removes also overlaying controllers if needed.
Declaration
Swift
func remove(animated: Bool, completion: (() -> Swift.Void)? = nil)
-
Removes all presented view controllers and navigates to the root.
Declaration
Swift
func removeToRoot(animated: Bool, completion: (() -> Swift.Void)? = nil)
-
Returns navigation controller with self as root.
Declaration
Swift
var wrappedIntoNavigation: UINavigationController { get }
-
End editing in viewController’s view
Declaration
Swift
@IBAction func endEditing(_ sender: Any)
-
Returns popover controller with self as root.
Declaration
Swift
func wrappedIntoPopover() -> UIPopoverController
-
If it’s an iPad wraps VC into popover, tries to automatically detect presentation place and then presents.
Declaration
Swift
func presentInPopoverIfNeeded(_ vc: UIViewController, animated: Bool = true)


Language: C++
Description: A music library application. Reads input from a text file, organizes the contents by song title or artist name. Allows user input of song information, and outputs the updated contents to original text file. Project was created to demonstrate use of dynamic arrays and linked lists
Language: C++
Description: An application which reads input from any text file and outputs the alphabetic occurance count. Project was designed to demonstrate the use of functions, such as "is-alpha" as well as the use of nested for loops.
Language: C++
Description: An application which demonstrates the use of nested for loops and pointers to pointers in creating dynamic arrays.
Language: HTML/CSS/JavaScript
Description: A webpage created to demonstrate the use of CSS, media-queries, and bootstrap elements.
Language: HTML/CSS/JavaScript
Description: Lorem ipsum dolor sit amet, consectetur adipisicing 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. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Language: HTML/CSS/JavaScript
Description: Lorem ipsum dolor sit amet, consectetur adipisicing 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. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.


Taxi leaves Northern Ireland to pick up a regular - 1,714 miles away in Benidorm
Phil Hamilton has set off for Spain after learning that Jim Moore, 58, had suffered a serious head injury while on holiday from Newtownabbey, County Antrim
by Jilly Beattie, https://www.mirror.co.uk/authors/jilly-beattie/A taxi driver from Northern Ireland has set off on a 1,700 mile journey to pick up a regular customer - who was injured in Benidorm.
Phil Hamilton is on his way to the Spanish town after his pal Jim Moore suffered a head injury while on holiday last week.
Jim, 58, was declared missing for 72 hours after going on a punters' club break, Belfast Live reports.
Friends set up a search party and social media campaign to try to track him down, and Jim was eventually found in a hospital being treated for a serious head injury following a fall.
Now Phil, from 365 Taxis out of Newtownabbey, County Antrim, has agreed to turn off his meter in order to get Jim back to Northern Ireland.
And a number of friends and the taxi firm have clubbed together to cover the costs of the journey which is expected to take days.
Driver/manager Phil said: "It's just the right thing to do. Jim is out of danger but he has been advised by the medical team not to fly for a few months, so this is the best way to get him home.
"He has spent time in a Spanish hospital on his own separated from friends and family and now we'll get him in the car and we can have a good chat on the way back. I'll be driving myself but the family are keeping me company.
"It's about 1,700 miles to Benidorm so we've left Newtownabbey and are getting the ferry to Scotland and then we'll drive on down to Benidorm.
"I might just leave the sign on for a laugh for Jim to see, but the meter is off.
"It was such a relief to hear that Jim had been found after he'd been missing, and even better news that he's out of danger now.
"Jim is a regular customer of 365 taxis, and when we heard he was unable to travel by air we decided we'd send a taxi out to Spain to bring him back to Newtownabbey to reunite him with his family and friends.
"I can't wait until the next fare I get asks me, 'What's the longest taxi journey you have done?', to see their face when I say it was a waiting return from Newtownabbey to Benidorm and back.”
A spokesperson for 365 Taxis said: "He can't fly for a few months and he just wants to get home to his family.
"So we are sending a taxi. It's fair to say here at 365 Taxis we really are more than just a taxi company. Phil should arrive in Benidorm on Saturday or Sunday to pick up his passenger and we wish them all well."


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 8
A sumptious feast of lobster grilled with cheese and hollandaise sauce.
For the lobster gratin, crack the lobsters open and carefully pick out all the meat. Slice into bite-sized morsels and set aside. Break up the shells with a rolling pin or mallet, place in the saucepan with half of the cream, add the brandy and wine and season will with salt and pepper. Simmer covered for 20 minutes, then strain though a fine sieve. Discard the shells, and whisk the cheese into the sauce.
For the sabayon, put the butter into a small saucepan and bring slowly to a simmer. Skim the froth off the surface, then remove form the heat and leave to settle. Carefully pour the liquid butter into a bowl, taking care not to include any of the milky sediment.
Combine 4 tablespoons water with the vinegar and pepper in a small, thick-based saucepan. Boil over medium heat until reduced in volume by a third, leave to cool. Add the egg yolks and set over low heat, whisking continuously and ensuring that the whisk comes into contact with the entire bottom surface of the pan. The mixture should emulsify and become creamy in 8–10 minutes. Remove from the heat and slowly pour in the clarified butter, whisking vigorously. Check the seasoning, then strain though a fine sieve.
For the watercress and spinach, heat a medium sauté pan and add the butter. Once melted add the watercress and spinach and cook until wilted down.
To finish the lobster, heat a grill to high. Whip the remaining cream to soft peaks. Fold in the lobster sauce and sabayon. Do not over-mix or you will lose its lightness. Warm the lobster meat in a steamer or warm oven. Place in an ovenproof dish, cover with the sauce and immediately place under the grill. The sabayon and cheese will make the sauce glaze to a golden caramel colour.
Serve with the watercress and spinach alongside.