This dream was neat
I want to save it
Use your fingers, or your mic
I have a Dream
and I want to share it
Real time dream feed from everyone arround you
Wtf does this dream mean
I want to know
Dream analysis
And also ...
- Lullaby / Alarm
- Sleep cycle analysis
- Detailed profile
- Tips to help you sleep better ...
- ... and wake up easily
How we'll do it ?
Simple, clean and intuitive web based interface
TL;DR
save, share, learn, enjoy
"Nothing happens unless first a dream."
Carl Sandburg
THE END.
or the beginning of something big, who knows


Contents
22. Client-server
|
How to program a text adventure in C
by Ruud Helderman
<EMAIL_ADDRESS>Licensed under
MIT License
22. Client-server
It would be perfectly retro
to have a single person type in every command for every player.
What we made in the previous chapter, might already be enough to run your own
play-by-mail game.
But in the 21st century,
‘multi-player’ has become synonymous with
online gaming.
So let’s see if we can make that happen!
To make our game multi-user, we will turn it into a
TCP
server.
Each user will connect to the server with a standard
Telnet
client.
Sounds old-school? It is.
But it’s probably closest to how the early MUDs were made.
And it’s fun to write your own server almost from scratch.
So basically,
our program lilcave should be running continuously on a computer.
The computer should always be online; it should never be turned off.
In the early days of the internet,
that typically meant the program would be running on a university
mini
or
mainframe,
under the supervision of the super user
(or more likely, covertly scheduled by a smart student).
With today’s hardware, any
PC
will do fine running such a game.
But since it is an online game, there are a few things to keep in mind.
- Assuming your machine has a
firewall,
you will need to add a rule allowing inbound traffic to your program,
protocol TCP, port 18811
(or whatever number is being specified in server.c; see below).
With the built-in firewall of
MS Windows,
that’s easy enough: the firewall will automatically
propose the necessary adjustment as soon as you first launch your program.
- Assuming your home network is separated from the internet by a
router,
you will need to configure
port forwarding
on the router.
- You may want to keep the game running day and night.
That warrants an energy-efficient machine, for example a
Raspberry Pi.
- Rather than running your own
home server,
you might consider having your game
hosted
by a third party at a monthly fee.
A
text-based
game typically has small demands, so you could probably settle
for a minimal amount of memory, disk space and bandwidth.
But do make sure the package comes with a C compiler,
as you will need to build your game from source on the hosted server.
Implementing a TCP server in C is pretty straightforward.
It involves writing quite a bit of
boilerplate code
around
Berkeley sockets,
the de facto standard for a
client-server
application.
Fortunately, code samples can be found anywhere on the internet; even in
the Wikipedia article about select.
| server.h |
- extern void server(void (*action)(char *, int));
|
| server.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #include "break.h"
- #include "object.h"
- #include "print.h"
- #include "outbuf.h"
- #include "telnet.h"
- #include "client.h"
- #include "tcp.h"
- #define PORT 18811
- void server(void (*action)(char *, int))
- {
- CLIENT *client;
- int i;
- struct sockaddr_in address;
- int listener = tcpListen(&address, PORT);
- if (listener == -1) return;
- for (clientInit(), breakInit(); breakTest(); )
- {
- fd_set fds;
- int fd = listener;
- FD_ZERO(&fds);
- FD_SET(listener, &fds);
- for (i = 0; (client = clientGet(i)) != NULL; i++)
- {
- if (client->fd != -1) FD_SET(client->fd, &fds);
- if (client->fd > fd) fd = client->fd;
- }
- if (tcpSelect(fd + 1, &fds) == -1) break;
- if (FD_ISSET(listener, &fds))
- {
- fd = tcpAccept(&address, listener);
- if (fd == -1) break;
- printConsole("Socket %d connected.\n", fd);
- outbufClear();
- telnetConfigure();
- outbufFormat("Welcome to Little Cave Adventure.\n");
- client = clientGetFree();
- if (client != NULL)
- {
- client->fd = fd;
- client->obj = nobody;
- telnetInit(&client->inbuf);
- telnetAppendPrompt(&client->inbuf);
- outbufFlush(fd);
- }
- else
- {
- outbufFormat("All sockets occupied, please try again later.\n");
- outbufFlush(fd);
- tcpDisconnect(fd);
- }
- }
- for (i = 0; breakTest() && (client = clientGet(i)) != NULL; i++)
- {
- if (FD_ISSET(client->fd, &fds))
- {
- static char buffer[1024];
- int len = read(client->fd, buffer, sizeof buffer);
- if (len > 0)
- {
- player = client->obj;
- printSetCurrent(client->fd);
- telnetParse(&client->inbuf, client->fd, action, buffer, len);
- if (player != client->obj)
- {
- printConsole("Socket %d is %s.\n", fd, player->description);
- client->obj = player;
- }
- }
- else if (len == 0)
- {
- tcpDisconnect(client->fd);
- client->fd = -1;
- }
- }
- }
- }
- printConsole("Interrupted by signal %d.\n", breakSignalNumber());
- for (i = 0; (client = clientGet(i)) != NULL; i++)
- {
- tcpDisconnect(client->fd);
- }
- tcpClose(listener, PORT);
- }
|
Explanation:
- Line 13:
I just randomly picked a port number
that was not already in use by any popular online game.
Users need this number, as well as your server’s
(external) IP address, to connect to your game.
- Line 15:
function server has a function pointer action as its parameter.
Through this parameter,
we will inject the game engine we have created in the previous chapters.
- Line 19-21:
we start by setting up a listening
socket.
- Line 23-84:
this is the main loop of the game server.
We could stay here forever,
but sooner or later we will be forced to leave by a signal, or by an error.
- Line 25-33:
we build up a collection of clients that are currently connected.
- Line 34:
here, the process waits until some activity is detected from any of the clients.
If an error occurs, we will leave the loop. This will end the game.
- Line 36:
activity on the listening socket means a new client is connecting to the server.
- Line 38-58:
the new client is welcomed.
- Line 60:
looping through all the clients that are currently connected.
- Line 62:
any activity from this client?
- Line 65:
calling
read
to receive data from the client’s
socket.
Here we pull in everything typed in by a user.
- Line 68:
in the previous chapter,
we changed player from a fixed object into a variable.
Here, we use this to switch to the correct
player character.
- Line 70:
this is the heart of the server.
It processes the client’s input (buffer)
by letting our game engine (parameter action) execute each command,
sending responses back to client sockets.
- Line 71-75:
when a client first connects, they will be nobody (see line 48).
Once the game engine has established who you are,
it will be persisted here.
- Line 77-81:
in this context, no data means the client is disconnecting,
i.e. the user has closed the Telnet client.
- Line 86-90:
when leaving the main loop, close all remaining sockets.
For readability, I implemented a number of functions in a separate module.
| tcp.h |
- extern int tcpListen(struct sockaddr_in *addr, uint16_t port);
- extern void tcpClose(int fd, uint16_t port);
- extern int tcpSelect(int nfds, fd_set *readfds);
- extern int tcpAccept(struct sockaddr_in *addr, int listener);
- extern void tcpDisconnect(int fd);
- extern void tcpSend(int fd, const char *data, int len);
|
| tcp.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include <unistd.h>
- #include <errno.h>
- #include <netinet/in.h>
- #include "object.h"
- #include "print.h"
- static int assert(const char *name, int retval)
- {
- if (retval == -1) perror(name);
- return retval;
- }
- static struct sockaddr *setPort(struct sockaddr_in *addr, uint16_t port)
- {
- addr->sin_family = AF_INET;
- addr->sin_addr.s_addr = INADDR_ANY;
- addr->sin_port = htons(port);
- return (struct sockaddr *)addr;
- }
- int tcpListen(struct sockaddr_in *addr, uint16_t port)
- {
- int fd = assert("socket", socket(AF_INET, SOCK_STREAM, 0));
- if (fd != -1)
- {
- int opt = 1;
- if (-1 != assert("setsockopt", setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,
- (char *)&opt, sizeof opt)) &&
- -1 != assert("bind", bind(fd, setPort(addr, port), sizeof *addr)) &&
- -1 != assert("listen", listen(fd, 3)))
- {
- printConsole("Listening to port %u.\n", (unsigned int)port);
- }
- else
- {
- close(fd);
- fd = -1;
- }
- }
- return fd;
- }
- void tcpClose(int fd, uint16_t port)
- {
- close(fd);
- printConsole("No longer listening to port %u.\n", (unsigned int)port);
- }
- int tcpSelect(int nfds, fd_set *readfds)
- {
- return assert("select", select(nfds, readfds, NULL, NULL, NULL));
- }
- int tcpAccept(struct sockaddr_in *addr, int listener)
- {
- socklen_t len = sizeof *addr;
- return assert("accept", accept(listener, (struct sockaddr *)addr, &len));
- }
- void tcpDisconnect(int fd)
- {
- if (fd != -1)
- {
- close(fd);
- printConsole("Socket %d disconnected.\n", fd);
- }
- }
- void tcpSend(int fd, const char *data, int len)
- {
- int written;
- while (len > 0 && ((written = write(fd, data, len)) >= 0 || errno == EINTR))
- {
- if (written > 0) data += written, len -= written;
- }
- }
|
Explanation:
- Line 9-13:
a little helper function to print an error message to
stderr
in case a
system call
fails.
- Line 25:
calling system call socket.
- Line 31:
calling system call bind.
- Line 32:
calling system call listen.
- Line 53:
calling system call
select.
- Line 59:
calling system call accept.
- Lines 42, 53, 59:
tcpListen, tcpSelect and tcpAccept
follow the convention of returning -1 in case of an error.
- Line 71-78:
function tcpSend will be used later in this chapter
to send output to client sockets.
The following module provides access to an array of
structs
holding information about the clients that have connected to the game.
For each client, there is a file descriptor (the
socket),
an object (the
player character)
and an input buffer (see telnet.h below).
| client.h |
- typedef struct
- {
- int fd;
- OBJECT *obj;
- INBUF inbuf;
- }
- CLIENT;
- extern void clientInit(void);
- extern CLIENT *clientGet(int i);
- extern CLIENT *clientGetFree(void);
|
| client.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "object.h"
- #include "telnet.h"
- #include "client.h"
- #define MAX_CLIENTS 30
- static CLIENT clients[MAX_CLIENTS];
- void clientInit(void)
- {
- int i;
- for (i = 0; i < MAX_CLIENTS; i++) clients[i].fd = -1;
- }
- CLIENT *clientGet(int i)
- {
- return i < MAX_CLIENTS ? clients + i : NULL;
- }
- CLIENT *clientGetFree(void)
- {
- CLIENT *client;
- int i;
- for (i = 0; (client = clientGet(i)) != NULL && client->fd != -1; i++);
- return client;
- }
|
Explanation:
- Line 11-15:
initially, all ‘slots’ in the array will be empty.
- Line 17-20:
function clientGet is used to find existing clients.
- Line 22-28:
function clientGetFree is used to find a free slot.
If all slots are taken, then it will return NULL.
The following module handles the peculiarities of the
Telnet
protocol.
It also takes care of buffering client input
(i.e. everything typed in by the users),
and it prevents server output
(which could be pushed at any time by activity from other users)
getting mixed up with
echo
on the same text line in the client’s Telnet window.
| telnet.h |
- typedef struct
- {
- bool iac;
- int negotiate;
- unsigned index;
- char data[100];
- }
- INBUF;
- extern void telnetInit(INBUF *inbuf);
- extern void telnetConfigure(void);
- extern void telnetInsertSpaces(INBUF *inbuf);
- extern void telnetDeleteSpaces(INBUF *inbuf);
- extern void telnetAppendPrompt(INBUF *inbuf);
- extern void telnetDeletePrompt(INBUF *inbuf);
- extern void telnetParse(INBUF *inbuf, int fd, void (*action)(char *, int),
- const char *data, int length);
|
| telnet.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include "outbuf.h"
- #include "telnet.h"
- static const char prompt[] = "--> ";
- void telnetInit(INBUF *inbuf)
- {
- inbuf->iac = false;
- inbuf->negotiate = 0;
- inbuf->index = 0;
- }
- void telnetConfigure(void)
- {
- static const char config[] = {
- '\xFF', '\xFD', 34, '\xFF', '\xFA', 34, 1, 0, '\xFF', '\xF0',
- '\xFF', '\xFB', 1
- };
- outbufBytes(config, sizeof config);
- }
- void telnetInsertSpaces(INBUF *inbuf)
- {
- outbufInsertString(0, "\r\r");
- outbufInsertSpaces(1, inbuf->data, inbuf->index);
- outbufInsertSpaces(1, prompt, sizeof prompt - 1);
- }
- void telnetDeleteSpaces(INBUF *inbuf)
- {
- outbufMove(inbuf->index + sizeof prompt + 1, 0);
- }
- void telnetAppendPrompt(INBUF *inbuf)
- {
- outbufBytes(prompt, sizeof prompt - 1);
- outbufBytes(inbuf->data, inbuf->index);
- }
- void telnetDeletePrompt(INBUF *inbuf)
- {
- outbufRewind(inbuf->index + sizeof prompt - 1);
- }
- void telnetParse(INBUF *inbuf, int fd, void (*action)(char *, int),
- const char *data, int length)
- {
- int i;
- outbufClear();
- for (i = 0; i < length; i++)
- {
- int c = data[i];
- if (c == '\xFF' || inbuf->iac)
- {
- if (c == '\xF0' || inbuf->negotiate != '\xFA') inbuf->negotiate = c;
- inbuf->iac = !inbuf->iac;
- }
- else if (inbuf->negotiate >= '\xFA' && inbuf->negotiate <= '\xFE')
- {
- if (inbuf->negotiate != '\xFA') inbuf->negotiate = 0;
- }
- else if (c == '\r')
- {
- outbufFormat("\n");
- outbufFlush(fd);
- inbuf->data[inbuf->index] = '\0';
- (*action)(inbuf->data, sizeof inbuf->data);
- inbuf->index = 0;
- outbufClear();
- outbufBytes(prompt, sizeof prompt - 1);
- }
- else if (c == '\b' || c == '\x7F')
- {
- if (inbuf->index > 0)
- {
- outbufByte('\b');
- outbufAsSpace(inbuf->data[--inbuf->index]);
- outbufByte('\b');
- }
- }
- else if (c >= ' ' && c < '\x7F')
- {
- if (inbuf->index < sizeof inbuf->data - 1)
- {
- outbufByte(c);
- inbuf->data[inbuf->index++] = c;
- }
- }
- }
- outbufFlush(fd);
- }
|
Explanation:
- Line 15-22:
Telnet commands that will be sent from server to client
as soon as a connection has been made.
- Line 18:
DO LINEMODE.
Server is telling client that linemode must not be used.
That way, the Telnet client knows it must send every character to the server
the moment the character is typed in,
rather than save up everything until the user presses
enter.
- Line 19:
WILL ECHO.
Server is telling client that server will
echo
every character sent by client (i.e. typed in by user).
That way, the Telnet client knows it must not do a local echo.
- Line 24-29:
function telnetInsertSpaces outputs a sequence of
whitespace
characters to erase the current line of text from the Telnet window.
The first character is always a
carriage return,
causing the subsequent spaces to overwrite the current prompt
as well as any characters typed in by the user.
The final character being output is also a carriage return,
so that any subsequent text output by the server will be displayed
on the same line of the Telnet window, starting from the left border.
This is used by print.c (see below)
to re-arrange lines of text on the Telnet window.
Note: I could output Telnet’s ‘Erase Line’ command
instead, but I am not sure this is implemented by every Telnet client.
- Line 31-34:
function telnetDeleteSpaces reverts the effect of
telnetInsertSpaces.
- Line 36-40:
function telnetAppendPrompt
outputs not only the prompt,
but also any characters typed in by the user following the prompt.
This is useful as both may have been wiped from the Telnet window
by function telnetInsertSpaces.
- Line 42-45:
function telnetDeletePrompt reverts the effect of
telnetAppendPrompt.
- Line 47-93:
function telnetParse
processes the user input read from the socket.
- Line 55-63:
Telnet commands in user input are ignored,
but as these commands span multiple characters,
we need some logic to skip them.
The INBUF structure has two fields to keep track of this:
iac is set after reading 0xFF
to indicate the next character must be ‘interpreted as command’,
and negotiate is used to detect and skip subnegotiations.
- Line 64-73:
when the user presses enter, we let the game engine (parameter action)
execute a single command (the client’s input buffer)
and send responses back to the relevant client sockets.
After that, the input buffer is cleared and a new prompt is sent to the client.
- Line 74-82:
pressing
backspace
or
delete
will cause the last character to be removed from the input buffer
and erased from the screen (by overwriting it with a
whitespace
character).
Note: I could output Telnet’s ‘Erase Character’ command
instead, but I am not sure this is implemented by every Telnet client.
- Line 83-90:
printable ASCII characters are stored in the client’s input buffer.
Characters will be discarded if necessary to prevent buffer overflow.
Non-ASCII characters (other than the Telnet commands) are discarded as well;
I have not implemented
Unicode
support yet.
Output produced by the game, should be written to sockets rather than
standard output.
This is less straightforward than it seems.
When two or more players are in the same room,
then the actions of one player should be reported to all.
So output may need to go to more than one client.
| print.h |
- extern void printSetCurrent(int fd);
- extern void printConsole(const char *format, ...);
- extern void printPrivate(const char *format, ...);
- extern void printSee(const char *format, ...);
- extern void printAny(OBJECT *obj1, OBJECT *obj2, const char *sense,
- const char *format, ...);
|
| print.c |
- #include <stdarg.h>
- #include <stdbool.h>
- #include <stdio.h>
- #include <unistd.h>
- #include "object.h"
- #include "outbuf.h"
- #include "telnet.h"
- #include "client.h"
- #define VA(print) va_list ap; va_start(ap, format); print; va_end(ap)
- static int currentSocket = STDOUT_FILENO;
- static bool filter(OBJECT *obj, OBJECT *obj1, OBJECT *obj2)
- {
- return obj2 == NULL ? obj == obj1 : obj != obj1 && obj != obj2;
- }
- static void printDemux(OBJECT *obj1, OBJECT *obj2)
- {
- if (currentSocket == STDOUT_FILENO || player == nobody)
- {
- if (filter(player, obj1, obj2)) outbufFlush(currentSocket);
- }
- else
- {
- CLIENT *client;
- int i;
- for (i = 0; (client = clientGet(i)) != NULL; i++)
- {
- if (client->fd != -1 && client->obj->location == player->location &&
- filter(client->obj, obj1, obj2))
- {
- if (client->fd == currentSocket)
- {
- outbufFlush(client->fd);
- }
- else
- {
- telnetInsertSpaces(&client->inbuf);
- telnetAppendPrompt(&client->inbuf);
- outbufFlush(client->fd);
- telnetDeletePrompt(&client->inbuf);
- telnetDeleteSpaces(&client->inbuf);
- }
- }
- }
- }
- }
- static void printObserve(OBJECT *obj1, OBJECT *obj2, const char *sense,
- const char *format, va_list ap)
- {
- outbufClear();
- outbufFormatVar(format, ap);
- if (obj1 != obj2)
- {
- printDemux(obj1, NULL);
- }
- if (sense != NULL)
- {
- outbufInsertString(3, obj1->description);
- outbufInsertString(3, sense);
- printDemux(obj2, obj1);
- }
- }
- static void printFd(int fd, const char *format, va_list ap)
- {
- outbufClear();
- outbufFormatVar(format, ap);
- outbufFlush(fd);
- }
- void printSetCurrent(int fd)
- {
- currentSocket = fd;
- }
- void printConsole(const char *format, ...)
- {
- VA(printFd(STDOUT_FILENO, format, ap));
- }
- void printPrivate(const char *format, ...)
- {
- VA(printFd(currentSocket, format, ap));
- }
- void printSee(const char *format, ...)
- {
- VA(printObserve(player, NULL, " see ", format, ap));
- }
- void printAny(OBJECT *obj1, OBJECT *obj2, const char *sense,
- const char *format, ...)
- {
- VA(printObserve(obj1, obj2, sense, format, ap));
- }
|
Explanation:
- Line 10:
a little helper
macro
for injecting
boilerplate code
in
variadic functions.
- Line 12:
the game starts in single-user mode, with all output going to
stdout.
Once our TCP server is running, this variable will be continuously overwritten
with the file descriptor of the socket owned by the client being serviced.
Our code is single-threaded, so we can get away with using a static variable.
- Line 19-49:
function printDemux acts like a
demultiplexer.
Output that has been produced by the game
and buffered by outbuf.c (see below),
is being sent to one or more clients
by repeatedly calling outbufFlush, each time with a different socket.
- Line 40-44:
functions from telnet.c are used
to keep input and output apart on the same Telnet window.
This is not necessary for the client who initiated the output;
that user has just finished entering a command,
and a new input prompt has not been displayed yet,
so it is safe to directly send the output (line 36).
- Line 62-63:
this changes simple sentences from second person to third person perspective.
For example, “You go north”
will be changed to “You see Jack go north.”
The former sentence will be sent to the player who entered the command
(“go north”),
the latter to other players present in the same location.
The game engine is never sending output
directly to any sockets or other file handles.
Instead, everything is sent to an output buffer.
This makes it possible to manipulate the text
before sending it off to the various sockets,
as seen in telnet.c and print.c (above).
| outbuf.h |
- extern void outbufClear(void);
- extern void outbufRewind(int len);
- extern void outbufByte(char c);
- extern void outbufBytes(const char *data, int length);
- extern void outbufAsSpace(char c);
- extern void outbufFormatVar(const char *format, va_list ap);
- extern void outbufFormat(const char *format, ...);
- extern bool outbufStartsWith(const char *prefix, int len);
- extern bool outbufMove(int from, int to);
- extern void outbufInsertString(int pos, const char *string);
- extern void outbufInsertSpaces(int pos, const char *data, int len);
- extern void outbufFlush(int fd);
|
| outbuf.c |
- #include <ctype.h>
- #include <stdarg.h>
- #include <stdbool.h>
- #include <stdio.h>
- #include <string.h>
- #include <netinet/in.h>
- #include "tcp.h"
- #define MAX_LEN 4095
- static int outbufLen;
- static char outbufData[MAX_LEN + 1];
- static int asSpace(int c)
- {
- return isspace(c) ? c : ' ';
- }
- void outbufClear(void)
- {
- outbufLen = 0;
- }
- void outbufRewind(int len)
- {
- outbufLen -= len;
- }
- void outbufByte(char c)
- {
- if (outbufLen < MAX_LEN) outbufData[outbufLen++] = c;
- }
- void outbufBytes(const char *data, int length)
- {
- for (; length > 0; length--) outbufByte(*data++);
- }
- void outbufAsSpace(char c)
- {
- outbufByte(asSpace(c));
- }
- void outbufFormatVar(const char *format, va_list ap)
- {
- char *ptr = outbufData + outbufLen;
- outbufLen += vsnprintf(ptr, sizeof outbufData - outbufLen, format, ap);
- if (outbufLen > MAX_LEN) outbufLen = MAX_LEN;
- while (outbufLen < MAX_LEN && (ptr = strchr(ptr, '\n')) != NULL)
- {
- memmove(ptr + 1, ptr, outbufData + ++outbufLen - ptr);
- *ptr = '\r';
- ptr += 2;
- }
- }
- void outbufFormat(const char *format, ...)
- {
- va_list ap;
- va_start(ap, format);
- outbufFormatVar(format, ap);
- va_end(ap);
- }
- bool outbufStartsWith(const char *prefix, int len)
- {
- return outbufLen >= len && strncmp(outbufData, prefix, len) == 0;
- }
- bool outbufMove(int from, int to)
- {
- outbufLen += to - from;
- if (outbufLen > MAX_LEN) outbufLen = MAX_LEN;
- if (to < outbufLen)
- {
- memmove(outbufData + to, outbufData + from, outbufLen - to);
- }
- return to <= outbufLen;
- }
- void outbufInsertString(int pos, const char *string)
- {
- int len = strlen(string);
- if (outbufMove(pos, pos + len)) strncpy(outbufData + pos, string, len);
- }
- void outbufInsertSpaces(int pos, const char *data, int len)
- {
- if (outbufMove(pos, pos + len))
- {
- int i;
- for (i = 0; i < len; i++) outbufData[pos + i] = asSpace(data[i]);
- }
- }
- void outbufFlush(int fd)
- {
- tcpSend(fd, outbufData, outbufLen);
- }
|
Explanation:
- Line 14-17:
function asSpace translates a character to a
whitespace
character that can be used to overwrite (erase) the character.
Most ASCII characters can be overwritten with
space,
but a
tab
should be overwritten with another tab, to match its size on screen.
- Line 98:
this is where the contents of the output buffer
are actually sent off to a socket or to
stdout.
The following module allows for
a graceful exit from the server’s main loop
in case the process is forced to stop by an outside signal.
| break.h |
- extern void breakInit(void);
- extern bool breakTest(void);
- extern int breakSignalNumber(void);
|
| break.c |
- #include <stdbool.h>
- #include <string.h>
- #include <signal.h>
- static volatile sig_atomic_t done = 0;
- static void handler(int signum)
- {
- done = signum;
- }
- void breakInit(void)
- {
- struct sigaction action;
- memset(&action, 0, sizeof(action));
- action.sa_handler = handler;
- sigaction(SIGINT, &action, NULL);
- sigaction(SIGTERM, &action, NULL);
- }
- bool breakTest(void)
- {
- return done == 0;
- }
- int breakSignalNumber(void)
- {
- return done;
- }
|
Explanation:
- Line 7-10:
function handler is automatically called when the program receives
one of the signals specified in function breakInit.
- Line 17-18:
SIGINT and
SIGTERM
are caught to allow the server to stop by the normal flow of the program.
- Line 21-24:
the program must regularly call function breakTest.
As long as the function returns true, it is safe to continue.
As soon as the function returns false,
the program should finish its current activity and exit as soon as possible.
So we now have a new multi-user game loop (the TCP server),
but that does not mean we will discard the original single-user game loop.
We still need this loop to resume a saved game, as discussed in chapter 16.
After the log file of an earlier game session has been processed,
it is even possible to enter additional commands manually,
but in most cases, you will want to exit this loop right away
by entering ‘quit’ or pressing
EOF.
The program will then continue to start up its TCP server.
| main.c |
- #include <stdbool.h>
- #include <stdio.h>
- #include <string.h>
- #include "object.h"
- #include "print.h"
- #include "expand.h"
- #include "parsexec.h"
- #include "turn.h"
- #include "server.h"
- static char input[100] = "look around";
- static bool getFromFP(FILE *fp)
- {
- bool ok = fgets(input, sizeof input, fp) != NULL;
- if (ok) input[strcspn(input, "\n")] = '\0';
- return ok;
- }
- static bool getInput(const char *filename)
- {
- static FILE *fp = NULL;
- bool ok;
- if (fp == NULL)
- {
- if (filename != NULL) fp = fopen(filename, "rt");
- if (fp == NULL) fp = stdin;
- }
- else if (fp == stdin && filename != NULL)
- {
- FILE *out = fopen(filename, "at");
- if (out != NULL)
- {
- fprintf(out, "%s\n", input);
- fclose(out);
- }
- }
- printConsole("\n--> ");
- ok = getFromFP(fp);
- if (fp != stdin)
- {
- if (ok)
- {
- printConsole("%s\n", input);
- }
- else
- {
- fclose(fp);
- ok = getFromFP(fp = stdin);
- }
- }
- return ok;
- }
- static bool processInput(char *ptr, int size)
- {
- return turn(parseAndExecute(expand(ptr, size)));
- }
- static void processInputAndLog(char *ptr, int size)
- {
- static FILE *fp = NULL;
- if (size > 0)
- {
- if (fp != NULL && player != nobody)
- {
- static OBJECT *lastPlayer = NULL;
- if (player != lastPlayer)
- {
- fprintf(fp, "play %s\n", (lastPlayer = player)->description);
- }
- fprintf(fp, "%s\n", ptr);
- fflush(fp);
- }
- processInput(ptr, size);
- }
- else
- {
- if (fp != NULL) fclose(fp);
- fp = ptr == NULL ? NULL : fopen(ptr, "at");
- }
- }
- int main(int argc, char *argv[])
- {
- (void)argc;
- printConsole("Welcome to Little Cave Adventure.\n");
- printConsole("You are in single-user mode; enter 'quit' for multi-user.\n");
- player = nobody;
- while (processInput(input, sizeof input) && getInput(argv[1]));
- printConsole("\nGoing into multi-user mode; press ^C to stop.\n");
- processInputAndLog(argv[1], 0);
- server(processInputAndLog);
- processInputAndLog(NULL, 0);
- printConsole("\nBye!\n");
- return 0;
- }
|
Explanation:
- Line 60-82:
function processInputAndLog
is a wrapper around processInput
that logs every command of every player while in multi-user mode.
In single-user mode,
it is more convenient to do the logging in function getInput,
as we need to make the switch there
between reading from and writing to the log (line 48-49).
- Line 90:
the initial single-user game loop.
- Line 93:
this is the multi-user game loop.
It will continue running until the program receives a signal
from the administrator or from the
OS
(see break.c above).
By today’s standards,
our program can hardly be called a mature game server.
It has several flaws:
- No
authentication.
This could be fixed by demanding a password to be included
in command play.
- Vulnerable to
eavesdropping:
everything is transmitted unencrypted, including passwords!
This could be fixed with
tcpcrypt
or with a secure tunnel (through
SSH or
VPN).
- Vulnerable to
man-in-the-middle attacks.
Again, a user’s password could be intercepted.
To mitigate that, you’d need a
digital certificate.
- Does not
scale
well. First of all,
select
suffers from the
C10k problem
and should be replaced by
poll,
epoll or
kqueue.
Secondly, it is not straightforward to scale out to multiple
nodes.
A solution might be to partition the game into multiple ‘worlds.’
It would make more sense to turn the whole game into a web application.
For that, it’s probably best to port the program to
a different programming language, for example JavaScript.
We will give that a shot in chapter 25.
Next chapter: 23. Database


Performance Verification¶
-
class
design.performance.
Performance
(*args, **kwargs)[source]¶ This class calculates the end performance of the UAV created in the KBE GUI. This verifies that the UAV will fulfill the mission requirements.
Parameters: - motor_in (Motor) – The instantated motor (typically passed from myUAV)
- propeller (Propeller) – The instantated propeller (typically passed from myUAV)
- wing_in (Wing) – The instantated wing passed (typically passed from myUAV)
- weight_mtow (float) – Final Maximum Take-Off Weight in SI kilogram [kg]
- parasitic_drag (float) – Computed Parasitic Drag Coefficient
- oswald_factor – Oswald Span Efficiency Factor
- cg_valid (bool) – Switch case used to judge if the performance prediction is valid
- stall_buffer (float) – Safety Factor to create a buffer between Endurance/Cruise velocity and the Stall Speed
-
battery_in
¶ Instantiated Battery Object
-
cg_valid
¶ Switch Case to determine if the C.G. has converged prior to running the Performance Estimation
-
cruise_velocity
[source]¶ Computes the optimum cruise velocity utilizing the maximum tangent between velocity axis and the power required curves. If this value is too close to the stall speed (which is determined by the input ‘stall_buffer’, then the non-optimum but safe value is returned instead.
Returns: Optimum cruise velocity in SI meter per second [m/s] Return type: float
-
dynamic_pressures
[source]¶ Creates a range of dynamic pressurs corresponding to the range of flight speeds from
speed_range
Returns: Range of Dynamic Pressures in SI Pascal [Pa] Return type: numpy array
-
endurance_velocity
[source]¶ Computes the optimum endurance velocity utilizing the maximum positive difference between the power available and required curves. If this value is too close to the stall speed (which is determined by the input ‘stall_buffer’, then the non-optimum but safe value is returned instead.
Returns: Optimum endurance velocity in SI meter per second [m/s] Return type: float
-
eta_curve_bounds
[source]¶ Defines the bounds of the propeller curve to not address values that are not covered by the propeller data index 0 refers to the minimum velocity and index 1 refers to the maximum velocity
Return type: list
-
maximum_velocity
[source]¶ Computes the maximum flight velocity utilizing the burst-power curve of the motor.
Returns: Maximum velocity in SI meter per second [m/s] Return type: float
-
motor_in
¶ Instantiated Motor Object
-
oswald_factor
¶ Oswald Span Efficiency Factor
-
parasitic_drag
¶ The Parasitic Drag Coefficient (C_D_0)
-
power_available
[source]¶ Grabs the available shaft power of the engine from the provided motor. Index 0 refers to continuous power and Index 1 refers to the burst power of the engine
Return type: list
-
power_spline
[source]¶ Creates a linear-spline of the power required curve to be able to call any velocity value.
Return type: interp1d
-
prop_speed_range
[source]¶ Defines the True Airspeed (TAS) range used for the analysis through use of the minimum and maximum values available in propeller data so as to not force data extrapolation.
Returns: Range of True Airspeeds (TAS) in SI meter per second [m/s] Return type: numpy array
-
propeller_eta_curve
[source]¶ Fetches the propeller efficiency curve as a function of airspeed from the provided propeller
Return type: interpld
-
propeller_in
¶ Instantiated Propeller Object
-
speed_range
[source]¶ An auxillary range to the
prop_speed_range
to be able to better display the induced drag curveReturns: Range of True Airspeeds (TAS) in SI meter per second [m/s] Return type: numpy array
-
stall_buffer
¶ Safety Factor to create a buffer between flight speed and stall speed
-
stall_speed
[source]¶ Computes the new stall speed caused by change in MTOW in Class II (bottoms-up) as compared to the initial estimate from Class I
Returns: Stall Speed in SI meter per second [m/s] Return type: float
-
weight_mtow
¶ The Maximum Take-Off Weight from bottoms-up Class II in SI kilogram [kg]
-
wing_in
¶ Instantiated Wing Object


Dear Good Friend, REQUEST FOR URGENT ASSISTANCE. This business proposal to you is strictly confidential, with due respect. Sorry at this perceived confusion or stress you may have receiving this letter from me, Since we have not known ourselves or met previously. Despite that, I am constrained to write you this letter because of the urgency it requires.As amatter of fact, I got your contact through the internet and decided to write you immediately believing you will be of a great assistance to my kids and me. My decision to consult you for a partnership business of mutual benefit is indeed personal.Iam not in doubt that you can be trusted in financial related matters of this magnitude. I am Mrs.cecilia aku, the widow of the former nigeria youth and sports minister late mark Ishaya Aku who died in a plane crash on the 4th of april,2002 My kids and I are trapped in an obnoxious custom And traditional rites of my late husband's family. We have suffered maltreatment and untold hardship in the hands of my late husbands family, simple because Iam not from the same tribe with my late husband.His brothers have taken all that I suffered with my husband to acquire including treasure, houses and his bank accounts closed by them. I wanted to escape to the United States of America [USA} with my children on exile, but again they conspired and stole my international passport and other traveling document to further frustrate me. Thank God, a week ago, I received Key Text Code (KTC} from an offshore payment center[OPC]in overseas via our family lawyer that my late husband deposited the sum of U.S $15.7 Million[Fifteen Million Seven Hundred Thousand United States Dollars] in cash with this company,hence my late husband's brothers would not allow me to have any telephone contact with anybody. It has therefore, become very necessary and urgent to contact someone, a foreigner like you who can travel to the offshore payment center on our behalf to help me receive/secure these funds and to help invest it on our behalf as well, while we find a way of getting out to meet with you in your country. These funds are kept on a CODE with the Security Company to avoid detection, seizure or diversion. I have had several discussions with with our family lawyer who has express willingness to help me with the necessary documents for the claim of the funds from the security company should I get an honest,competent and capable foreigner who will not cheat my kids and me or even sit on the funds after claiming it, to stand on our behalf to claim the funds. This is why I have contacted you to help save my children and I from this obnoxious tax levelled on us by my late husbund's brothers by claiming these funds and investing it on our behalf. But, you would need to give me sufficient assurance that if you help me, you would not divert the funds. My children and I have resolved to give you 20% of the total sum. This is all my children and I have got to live on. Please, I have reposed my confidence and trust in you and hope you will not disappoint me. I will forward you the contact of our family lawyer for you to get in touch with him immediately hence he will be the one to deal with you on the transaction to avoid suspicion from my late husband's brothers. I look forward to your urgent response. THANKS AND God bless. Mrs.cecilia aku


I follow this instructions , and still not working
Post edited 1 x times, last by
Brady_The
Brady_The
xNano wrote:
I follow this instructions , and still not working
Are you using
https://battlelog.battlefield.com/bf3/
or
http://battlelog.battlefield.com/bf3/
?
Topicstarter
xNano
Yes, I'm using this ,
http://battlelog.battlefield.com/bf3/fr/
.
What is strange it's that on my old computer the BBLog worked
lamun417
everytime i d/l it says incorrect command line
BrainFooLong
Administrator
Well, please tell me that....
1. Which Browser, maybe try with the opposite browser to figure out if it's a browser problem.
2. For Chrome, Press F12, For Firefox, SHIFT + F2.
3. Goto Console Tab. If you see errors, post it here.


@cipig , This shouldn't be happening and I can't reproduce this: I've changed the port in the BEER's wallet configuration file and got the error as a result from that
01 20:37:14, utxo:1019] uri = "<IP_ADDRESS>:28923"
01 20:37:15, common:660] RPC error response: lp_coins:854] lp_coins:833] rpc_clients:165] common:460] common:557] an error occurred trying to connect: No connection could be made because the target machine actively refused it. (os error 10061)
`ca36bb6` Use the wallet rpcport - ArtemGr
`32b91ca` Temporarily log the wallet URI - ArtemGr
`5bc63ed` Prepend the Hyper error with the URI - ArtemGr
`a7ad38d` Merge branch 'mm2-rpcport' into mm2 - ArtemGr
`c7463b5` adds the coin-emission doc - gcharang
`2fea5bf` minor edits to the coin-emission doc - gcharang
`c25dae6` minor edits to the coin-emission doc - gcharang
`7f13710` minor edits to the coin-emission doc - gcharang
`1eb9c83` minor edits to the coin-emission doc - gcharang
I am a fan of not having build-mac.sh at all and making build.sh smarter, but that is a different issue.
build-mac.sh should support the same options, like --disable-tests, as build.sh, if it exists.


Cell data type
| Name | Position | DOB | Salary |
|---|---|---|---|
| Thor Walton | Regional Director | 2017/04/01 | $98,540 |
| Travis Clarke | Software Engineer | 4/11/1975 | $275,000 |
| Suki Burks | Office Manager | 12/10/2012 | $67,670 |
| $441,210 |
| Name | Position | DOB | Salary |
|---|---|---|---|
| Thor Walton | Regional Director | 2017/04/01 | $98,540 |
| Travis Clarke | Software Engineer | 4/11/1975 | $275,000 |
| Suki Burks | Office Manager | 12/10/2012 | $67,670 |
| $441,210 |


You can edit this home page using our free, drag and drop Page Builder, or simply disable it to fall back to a standard blog. It's a powerful page building experience.
Start Editing
Loads of Icons
This widget uses FontAwesome - giving you hundreds of icons. Or you could disable the icon and use your own image image. Great for testimonials.
Example Button
Saves You Time
Building your pages using a drag and drop page builder is a great experience that will save you time. Time is valuable. Don't waste it.


Application Containers
Lab 10: Diagnosing and Correcting Problems, and Restarting Sync
Overview
In Lab10 we explore the restartability of the patching process. To demonstrate this, we do the following:
- Deliberately make a manual change to NYC that will conflict with applying patch 301.
- Attempt to sync NYC to apply the patch – anticipating a failure.
- Query relevant DBA views to identify the problem.
- Resolve the problem and re-start the sync, which should now succeed.
Execution
- Open a terminal window
- Change directory to /u01/HOL/app_containers/
- source the environment. At command prompt execute source cdb1.env
- sqlplus /nolog
- At the SQL prompt execute<EMAIL_ADDRESS>Review of Application Container Lab10:
In this lab, we diagnosed a problem in applying a patch, resolved it, and successfully restarted the patch application process. The detailed steps were:
- Deliberately make a manual change to NYC that will conflict with applying patch 301.
- Attempt to sync NYC to apply the patch – anticipating a failure.
- Query relevant DBA views to identify the problem.
- Resolve the problem and re-start the sync, which now succeeded.
Detailed Steps
Phase 1. Manual change in NYC.
Here, we have deliberately added an index in NYC that we know will clash with patch 301. In the next step we're going to apply that patch, to observe the conflict.
Phase 2. Sync Application PDB for franchise / tenant NYC to apply patch.
The patch application failed, with error message
ORA-00955:
name is already used by an existing object
In the previous lab we learned about some of the DBA views that are relevant to Application Container. Let's use that knowledge to pinpoint the specific problem encountered here.
Phase 3. Diagnose the problem.
So the failure was in step 2 – adding the index. As expected, this failed, because the index already exists in this PDB. We have to fix this problem before we can proceed.
Phase 4. Fix the problem and restart the patch application.
The appropriate fix in this case is to drop the locally-created index. We'll do that, and then attempt to re-apply the patch. This time, the patch applied successfully. Recall again, however, the sequence of operations in Patch 301.
1. Add column wm_Orders.Financial_Quarter_Code.
2. Create index wm_Orders_M1 on wm_Orders.
3. Add rows to wm_List_of_Values.
4. Update orders to specify the appropriate financial quarter.
It's important to note that it was the second step that failed. The first had already succeeded. All we did was to restart the patch application. However, the previous failed partial patch application was recorded with enough information to know at which point to resume. This is why the second attempt to apply the patch succeeded (and did not fail at step 1 because the column created in that step already exists).
Click Here to Go to Lab 11


{% extends 'base.html' %}
{% load static %}
{% block header %}
Protecting your private information is our priority. This Statement of Privacy applies to www.cinemaple.com and cinemaple.com and governs data collection and usage. For the purposes of this Privacy Policy, unless otherwise noted, all references to cinemaple.com include www.cinemaple.com and Cinemaple. The Cinemaple website is a web application facilitating the hosting of private movie night events. By using the Cinemaple website, you consent to the data practices described in this statement.
In order to better provide you with products and services offered on our Site, Cinemaple may collect personally identifiable information, such as your:
We do not collect any personal information about you unless you voluntarily provide it to us. However, you may be required to provide certain personal information to us when you elect to use certain products or services available on the Site. These may include: (a) registering for an account on our Site; (b) entering a sweepstakes or contest sponsored by us or one of our partners; (c) signing up for special offers from selected third parties; (d) sending us an email message; (e) submitting your credit card or other payment information when ordering and purchasing products and services on our Site. To wit, we will use your information for, but not limited to, communicating with you in relation to services and/or products you have requested from us. We also may gather additional personal or non-personal information in the future.
Cinemaple collects and uses your personal information to operate its website(s) and deliver the services you have requested.
Cinemaple may also use your personally identifiable information to inform you of other products or services available from Cinemaple and its affiliates.
Cinemaple does not sell, rent or lease its customer lists to third parties.
Cinemaple may share data with trusted partners to help perform statistical analysis, send you email or postal mail, provide customer support, or arrange for deliveries. All such third parties are prohibited from using your personal information except to provide these services to Cinemaple, and they are required to maintain the confidentiality of your information.
Cinemaple may disclose your personal information, without notice, if required to do so by law or in the good faith belief that such action is necessary to: (a) conform to the edicts of the law or comply with legal process served on Cinemaple or the site; (b) protect and defend the rights or property of Cinemaple; and/or (c) act under exigent circumstances to protect the personal safety of users of Cinemaple, or the public.
Cinemaple may keep track of the websites and pages our users visit within Cinemaple, in order to determine what Cinemaple services are the most popular. This data is used to deliver customized content and advertising within Cinemaple to customers whose behavior indicates that they are interested in a particular subject area.
Information about your computer hardware and software may be automatically collected by Cinemaple. This information can include: your IP address, browser type, domain names, access times and referring website addresses. This information is used for the operation of the service, to maintain quality of the service, and to provide general statistics regarding use of the Cinemaple website.
The Cinemaple website may use "cookies" to help you personalize your online experience. A cookie is a text file that is placed on your hard disk by a web page server. Cookies cannot be used to run programs or deliver viruses to your computer. Cookies are uniquely assigned to you, and can only be read by a web server in the domain that issued the cookie to you.
One of the primary purposes of cookies is to provide a convenience feature to save you time. The purpose of a cookie is to tell the Web server that you have returned to a specific page. For example, if you personalize Cinemaple pages, or register with Cinemaple site or services, a cookie helps Cinemaple to recall your specific information on subsequent visits. This simplifies the process of recording your personal information, such as billing addresses, shipping addresses, and so on. When you return to the same Cinemaple website, the information you previously provided can be retrieved, so you can easily use the Cinemaple features that you customized.
You have the ability to accept or decline cookies. Most Web browsers automatically accept cookies, but you can usually modify your browser setting to decline cookies if you prefer. If you choose to decline cookies, you may not be able to fully experience the interactive features of the Cinemaple services or websites you visit.
This website contains links to other sites. Please be aware that we are not responsible for the content or privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of any other site that collects personally identifiable information.
Cinemaple secures your personal information from unauthorized access, use, or disclosure. Cinemaple uses the following methods for this purpose:
When personal information (such as a credit card number) is transmitted to other websites, it is protected through the use of encryption, such as the Secure Sockets Layer (SSL) protocol.
We strive to take appropriate security measures to protect against unauthorized access to or alteration of your personal information. Unfortunately, no data transmission over the Internet or any wireless network can be guaranteed to be 100% secure. As a result, while we strive to protect your personal information, you acknowledge that: (a) there are security and privacy limitations inherent to the Internet which are beyond our control; and (b) security, integrity, and privacy of any and all information and data exchanged between you and us through this Site cannot be guaranteed.
Cinemaple does not knowingly collect personally identifiable information from children under the age of thirteen. If you are under the age of thirteen, you must ask your parent or guardian for permission to use this website.
From time to time, Cinemaple may contact you via email for the purpose of providing announcements, promotional offers, alerts, confirmations, surveys, and/or other general communication. In order to improve our Services, we may receive a notification when you open an email from Cinemaple or click on a link therein.
If you would like to stop receiving marketing or promotional communications via email from Cinemaple, you may opt out of such communications by clicking on the UNSUBSCRIBE button.
We may store your data on servers provided by third party hosting vendors with whom we have contracted.
Cinemaple reserves the right to change this Privacy Policy from time to time. We will notify you about significant changes in the way we treat personal information by sending a notice to the primary email address specified in your account, by placing a prominent notice on our site, and/or by updating any privacy information on this page. Your continued use of the Site and/or Services available through this Site after such modifications will constitute your: (a) acknowledgment of the modified Privacy Policy; and (b) agreement to abide and be bound by that Policy.
Cinemaple welcomes your questions or comments regarding this Statement of Privacy. If you believe that Cinemaple has not adhered to this Statement, please contact Cinemaple at:
cinemaple.com
57 Maple Avenue
Cambridge, Massachusetts 02139
Email Address:
<EMAIL_ADDRESS>Effective as of November 03, 2019


SCENARIO.GET macro
Returns the specified information about the scenarios defined on your worksheet.
Syntax
SCENARIO.GET(type_num, scen_name)
Type_num is a number from 1 to 8 specifying the type of information you want.
Type_num
|
Information returned
|
1
|
A horizontal array of all scenario names in the form of text
|
2
|
A reference to the set of changing cells of scen_name (specified in the Changing Cells box of the Scenario Manager dialog box). If scen_name is omitted, the first scenario is used.
|
3
|
A reference to the result cells (specified in the Result Cells box in the Scenario Summary dialog box)
|
4
|
An array of scenario values for the scenario scen_name . Each scenario is in a separate row. If scen_name is omitted, the first scenario is used.
|
5
|
Comment, as text, for the scenario
|
6
|
Returns TRUE if the specified scenario is locked to prevent changes; FALSE, if unlocked. Scen_name is required.
|
7
|
Returns TRUE if the specified scenario is hidden; FALSE, if visible to the user. Scen_name is required.
|
8
|
Returns the user name of the person who last modified the scenario by either adding or editing a scenario. Scen_name is required.
|
Scen_name is the name of the scenario that you want information about. Ignored if type_num equals 1 or 3.
Remarks
In the returned array of scenario values, the number of rows is the number of scenarios, and the number of columns is the number of changing cells.
Return to index


Welcome to Coast City Sports Centre
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi dignissim auctor arcu. Suspendisse ornare sit amet quam eget dictum. Maecenas lacus urna, rutrum vitae feugiat ut, convallis sed justo. Morbi aliquet laoreet ipsum, at volutpat odio molestie eget. Nam id hendrerit nibh
Forecast
here goes the weather forecast
| Type | Book Days | Price |
| Gold | Monday to Sunday | From [base price] |
| Silver | Monday to Friday | From [base price] |
| Bronze | Saturday to Sunday | From [base price] |
Gym
Information about Gym
Racket Courts
Information about Racket Courts
Squash
Information about Squash Facilities
Swimming Pool
Information of Swimming Pool


Choose Field
Day
Week
Month
Year
Boiler Fires
Choose Field
Day
Week
Month
Year
Carbon Footprint
Choose Field
Day
Week
Month
Year


I'm a Colorado native who grew up in the Denver metro area. I enjoy cycling, archery and figuring out ways to get things done. As a technical person I have a need to understand how things work and how they intereact with each other. As a creative person I enjoy creating something new from bits and pieces of other things.  I have a diverse background and skill set that allows me to understand what your requirments are and what needs to be done to satisfy your needs and wants.
I began my career working on residential construction sites for my step father. At the time it was a dream job taking something from an idea to an actual home for a family. In the process I learned how buildings go together, how critical scheduling is and how to manage customer expectations.
With interest rates at an all time high and difficulty in finding good work in construction, I had an opportunity to wait tables, bartend and manage a restuarant. Although I often argue that restaurants are actually manufacturing facilities, it taught me how raw materials can be assembled to create a finished product. In fact, I often think of my current industry, building insulation, as being analgous to a Mexican food restuarant; the same ingredients can be arranged in different ways and proportions to make a new product. This can also be applied to web development. With access to different types of content and web development tools, a wide varienty of messages can be created.
As fun and interesting as food service was, it was really just something to pay the bills while I was getting my engineering degree. Food service is a young person's business and it takes its toll on the body and the mind after awhile. Don't get me wrong, it was fun while it lasted, but it wasn't a destination for me. After I graduated, I started working for an insulation manufacturer. It's a good job and the company has treated me well. No regrets with this move. I have been able to use technical things like math, science and some programming which has been interesting. The people skills I learned in food service certainly came in handy. This job also gave me insight into the business side of things. In that way, restaurants have more in common with the manufacture of insulation than one would think.
As good as things are, I began to realize that I needed an outlet, and a potential career, for my creative side. As I work with our marketing team I realize that there are better ways to present technical information. Additionally, there is a big demand for web development skills and content creation. It never ceases to amaze me about what can be done with a little bit of content and some software. The possibles are as numerous as your ideas.


I am a full-stack web developer, who believes that web technology can help improve our lives, by providing us greater efficiency and productivity, so that we can spend more time and effort on what is truly meaningful to us. I believe in giving users of my web applications a pleasant user experience, and is always looking to combine technological requirements with usability. With the rapid growth of new technologies, I am also constantly looking out for opportunities to gain new skills.
Name: Esther Low
Location: Singapore
Spoken Language: English, Mandarin and Cantonese
Written Language: English, Chinese
Email<EMAIL_ADDRESS>2 year full-time graduate studies in information security, modules include information systems security, computer forensics, information system auditing, data analytics and modeling, networking and web and cloud security.
This is a three months intensive training in web development. I learnt to develop full-stack web applications using node.js, ruby on rails, both sql and non-sql databases, and many other frameworks, such as vue.js. Besides gaining technological knowledge, through the course, I have also learnt how as a web developer, to keep abreast of current technologies through self-learning.
1 year full-time course in relevant pedagogies for teaching the Chinese language and literature, as well as general curriculum design and planning, and educational psychology.
Majored in the study of Chinese Language and Literature, my favourite subjects were in Chinese etymology and lexicology, as well as comparative literature and literary history of Singapore and Malaysia. My dissertation topic is “A study on the development of Chinese Literature in Singapore after the 1980s”.
Responsible for front-end development and maintenance of the company’s official website and all the product demos as requested by the CEO. Developed the company’s official website using Drupal 8, a content management system written in PHP. Developed the user interface for a demo application for potential clients, using web data visualization techniques and VueJs. Developed a user interface for a speech-to-text demo application in Java for presentation to client.
Turned visuals into interactive web reports using JavaScript (AngularJs) and HTML. Developed full-stack web applications using PSQL, Node.js and front-end frameworks such as Vue.js. Maintained and debugged data tools and web applications. Designed and developed a full-stack web application primarily used as a data collection tool, including database design (PostgreSQL), backend APIs for CRUD interactions with the front-end, front-end interface for external users, administrative interface featuring a communications (email) tool.
Plan and execute face to face lessons, as well as online-learning classes. Liaise with parents and address parents’ concerns regarding the conduct and learning of students. Plan and execute assessments of students’ learning. As form teacher of the class, guide and counsel students as and when needed. Organize school events as and when needed.
Update database with public information sources for data on persons and entities added to national watch-lists, particularly having to translate sources from Chinese websites into English.
Manages the daily operation of the library, supervises support staff and student librarians, including writing and reviewing policies of the library, acquiring English and Chinese resources in the area of religious studies and social sciences, and cataloguing English and Chinese books using the Library of Congress Classification system and AACR2.


--- layout: service title: Priority B.1 Results permalink: priority/b/1/results/ ---
View of the current priority list for the relevant item(s)
3 Search results for T/N {{site.data.prio-list.title}}
| Order Number | Type | Priority | Status | Allocated |
|---|---|---|---|---|
| {{order.id}} | {{order.type}} | {{order.timestamp}} | {{order.status}} | {{order.allocated}} |


H
2
..OH!
H
2
.. OH!
Here is a cool application to help you track your daily water intake.
Hi {{getEmpName() | uppercase}}
You Have Consumed {{consumptionAmount}} ml Water Today!
{{resultMessage}}
Something went wrong...
Hi {{getEmpName() | uppercase}}
You Have Consumed {{consumptionAmount}} ml Water Today!
{{resultMessage}}


WITNESS LIST Education Committee March 14, 2001 - 9:00A SB 30 FOR: Borden, Sandi Executive Director (TEPSA), Austin, TX Karkosh, Robin Kindergarten Teacher (Self), Austin, TX Kelly, Jack (TSTA), Austin, TX Registering, but not testifying: For: Carpenter, Bill Asst. Supt. of Gov. Relations (Texas School Alliance), Houston, TX Hollingsworth, Lonnie Attorney (TCTA), Austin, TX Pena, Martin Executive Director (South Texas Association of Schools), Laredo, TX Ramon, Lisandro Supt. (Lyford C.I.S.D. and South Texas Association of Schools), Lyford, TX Smith, Lauren (ATPE), Austin, TX Against: Gerstenschlager, Merry Lynn Legislative Liaison (Texas Eagle Forum), Dallas, TX SB 81 Registering, but not testifying: For: Ramon, Lisandro Superintendent (Lyford CISD and Texas Association of Schools), Lyford, TX Smith, Lauren (ATPE), Austin, TX SB 108 FOR: Beatty, Jr., George President, Chamber of Commerce (Greater Houston Partnership), Houston, TX Bock, Bennie Businessman (Self), Seguin, TX Bruno, Tina (Texans for a Traditional School Year), San Antonio, TX Conlon, Paul Teacher (Weslaco Federation of Teachers), Weslaco, TX Glithero, Susan Insurance Agent (Parents and School Board), Columbus, TX Hanson, Gene Teacher (Migrant Students Rio Grande Valley), Laredo, TX AGAINST: McInnis, John (TASB/TASA), Grand Prairie, TX ON: Lara, Rene Legislative Liaison (Texas Federation of Teachers), Austin, TX Schlomach, Bryan Policy Analyst (Comptroller's Office), Austin, TX Smith, Lauren (ATPE), Austin, TX Registering, but not testifying: For: Barros, Marco Executive Director, Non-Profit Org. (Self), San Antonio, TX Howell, Deen Student (Self), Seguin, TX Howell, Dick (Son), Seguin, TX Joslove, Scott President and CEO (Texas Hotel and Motel Assn.), Austin, TX Kelly, Jack (TSTA), Austin, TX Serff, Paul Assciation Manager (Texas Travel Industry Association), Austin, TX Against: Carpenter, Bill Asst. Supt. for Gov. Relations (Texas School Alliance), Houston, TX Crawford, Pamela Executive Director (TCASE), Austin, TX McAfee, Archie Executive Director (Texas Association of Secondary School Principals), Austin, TX Rogers, Don Executive Director (Texas Association of Community Schools), Austin, TX On: Jackson, Diane Public School Educator (Spring Branch I.S.D.), Houston, TX SB 213 FOR: Brewer, Shellie Kindergarten Teacher (Self), Eastland, TX Kelly, Jack (TSTA), Austin, TX Registering, but not testifying: For: Hollingsworth, Lonnie Attorney (TCTA), Austin, TX Smith, Lauren (ATPE), Austin, TX Against: Gerstenschlager, Merry Lynn Legislative Liaison (Texas Eagle Forum), Dallas, TX SB 216 Registering, but not testifying: On: Easley, Mike Executive Director (Center for Rural Health), Austin, TX Tessen, Sam Executive Director (Telecommunications Infrastructure Fund), Austin, TX SB 230 FOR: Lynch, Phil (First American Pension Services), Arlington, TX ON: Santiago, Gwen Executive Director (Texas Association of School Business Officials), Austin, TX SB 526 FOR: Alexander, Vicki Kindergarten Teacher (Sealy I.S.D.), Sealy, TX Brewer, Shellie Kindergarten Teacher (Self), Eastland, TX Groves, Blythe Executive Assistant (Self), Austin, TX AGAINST: Binovi, Jeanne Teacher (Self), San Antonio, TX Registering, but not testifying: For: Dusek, Jackie Kindergarten Teacher (Selman Elementary, Sealy I.S.D.), Sealy, TX Gerstenschlager, Merry Lynn Legislative Liaison (Texas Eagle Forum), Dallas, TX Hyman, Kimberley Kindergarten Teacher (Self), Austin, TX Jackson, Diane Public School Administrator (Spring Branch I.S.D.), Spring Branch, TX Kelly, Jack (TSTA), Austin, TX Poehl, Amy Kindergarten Teacher (Self), Austin, TX White, Ann Kindergarten Teacher (Selman Elementary, Sealy I.S.D.), Sealy, TX Providing written testimony: For: Smith, Lauren (ATPE), Austin, TX SB 562 FOR: Hollingsworth, Lonnie Attorney (TCTA), Austin, TX Registering, but not testifying: For: Kelly, Jack (TSTA), Austin, TX Lara, Rene Legislative Liaison (Texas Federation of Teachers), Austin, TX Smith, Lauren (ATPE), Austin, TX On: Currah, Tom Policy Analyst (Comptroller's Office), Austin, TX Santiago, Gwen Executive Director (Texas Association of School Business Officials), Austin, TX Schlomach, Byron Policy Analyst (Comptroller's Office), Austin, TX SB 575 FOR: McDonald, Carol Association Executive (Independent Colleges and Universities, Inc.), Austin, TX Registering, but not testifying: For: Beckenhauer, Charles Attorney (Baylor University), Waco, TX On: Briseno, Elias (Texas Department of Health), Austin, TX Kotrla, Claren Manager (Texas Department of Health), Austin, TX SB 576 FOR: Kirk, Ron Mayor (City of Dallas), Dallas, TX Rozier, Richard Mayor of DeSoto (City of DeSoto), DeSoto, TX Wenrich, J. William Chancellor (Dallas County Community College District), Dallas, TX ON: Black, Albert President (Greater Dallas Chamber) Hurley, Alfred Chancellor (University of North Texas System), Denton, TX Registering, but not testifying: For: Brasher, Hollis Civil Engineer (Dallas Independent School District), Dallas, TX Eugene, Darrick Manager (AT&T), Austin, TX Halstead, Donna President (Dallas Citizens Council), Dallas, TX Hudgins, David Fire Chief (City of Waxahachie), Waxahachie, TX Jackson, Lee Dallas County Judge (Self), Dallas, TX Johnson, Connie Consultant (Progressive Insurance), Austin, TX Morris, Carolyn School Board Member (Community of Lancaster), Lancaster, TX Rawlinson, Terry Software Trainer (University of North Texas System Center), Mesquite, TX Sokoll, Bob City Manager (City of Waxahachie), Waxahachie, TX Sorrel, Michael Attorney (Dallas 2012), Dallas, TX Suhm, Vic Consultant (North Texas System), Dallas, TX Wright, Carole Management Assistant (University of North Texas System Center), DeSoto, TX On: Hinojosa Jr., Raul Student Services Manager (University of North Texas System), Dallas, TX Strange, Gayle Construction (University of North Texas), Denton, TX SB 596 Registering, but not testifying: For: Carpenter, Bill Asst. Supt. for Gov. Relations (Texas School Alliance), Houston, TX Eckhart, Harley Associate Executive Director (TEPSA), Austin, TX Hollingsworth, Lonnie Attorney (TCTA), Austin, TX Ramos, Joe (TASB), Austin, TX Smith, Lauren (ATPE), Austin, TX On: Cox, Cathryn Policy Analyst (Texas State Comptroller), Austin, TX Currah, Tom Policy Analyst (Comptroller), Austin, TX SB 704 ON: Anderson, David Lawyer (Texas Education Agency), Austin, TX King, Mattie (Self), Lancaster, TX Morris, Carolyn School Board Member (Community of Lancaster), Lancaster, TX Ramos, Joe (TASB), Austin, TX Registering, but not testifying: For: Lara, Rene Legislative Liaison (Texas Federation of Teachers), Austin, TX Tounget, Craig Director of Gov. Relations (Texas PTA), Austin, TX Against: Pena, Martin Executive Director (South Texas Association of Schools), Laguna Vista, TX Ramon, Lisandro Supt. (Lyford I.S.D.and South Texas Association of Schools), Lyford, TX SB 940 ON: Morris, Carolyn School Board Member Lancaster (Community), Lancaster, TX Wildenthal, Kern President (UT Southwestern), Dallas, TX Registering, but not testifying: On: Guckian, Dr. James VIce Chancellor of Health Affairs (University of Texas System), Austin, TX Michael, Lloyd Professor (Baylor College of Medicine), Houston, TX Thompson, Bill Professor (Baylor College of Medicine), Houston, TX Providing written testimony: For: Petronio, Denise Director of Medical Education Policy (Texas Medical Association), Austin, TX SB 989 Registering, but not testifying: On: Hines, Dr. Charles President and CEO (Prairie View A&M), Prairie View, TX SJR 1 FOR: Karkosh, Robin Kindergarten Teacher (Self), Austin, TX Registering, but not testifying: For: Hollingsworth, Lonnie Attorney (TCTA), Austin, TX Kelly, Jack (TSTA), Austin, TX Smith, Lauren (ATPE), Austin, TX Woodford, Suzy Executive Director (Common Cause Texas), Austin, TX Zucker, Dr. Charles Executive Director (Texas Faculty Association), Austin, TX Providing written testimony: Against: Orr, Dawson Superintendent, Pampa I.S.D. (Texas Association of School Administrators), Austin, TX


Physics Data Scientist - Foothill Ranch, CA
TAE Technologies, Inc, formerly known as Tri Alpha Energy, has a national lab sized research program in high beta magnetically confined fusion plasmas, based around the advanced, beam driven, Field Reversed Configuration. It has built and is operating the new C-2W experiment, aka Norman, which is one of the largest fusion plasma experiments in the United States. The goals of C-2W are to push high beta fusion plasmas into new parameter regimes and to guide the design of future fusion power plants. With its vast diagnostic suite, C-2W is an ideal and fertile testing ground for new plasma theory and simulation.The Data Science organization at TAE is looking for a talented individual to help us tackle some of the world’s biggest challenges.
Essential duties and responsibilities include, but are not limited to:
- Help plan, develop, deploy, and maintain the entire Data Science pipeline at TAE: from acquisition and storage to processing and visualization.
- Aid in our efforts to distil raw data into knowledge by iterating with scientific staff and domain experts to convert prototype algorithms into robust scientific data processing routines.
- Responsible for all stages of the software product life cycle – planning, analyzing, coding, debugging, testing, deployment, and maintenance.
- Can easily, effectively, and successfully work on multiple tasks both independently and collaboratively within a group.
Required Education:
Required Education: M.S. in plasma physics or related field
Preferred Education: Ph.D. in plasma physics or related field
Required Experience:
- 3+ years developing in python
- Experience using common python data analysis and visualization packages such as NumPy, SciPy, Pandas, and Matplotlib.
- Able to work in a diverse R&D environment and communicate effectively and professionally with co-workers at all levels
- Passion for data integrity as this is central to what we do as a group.
Preferred Experience:
- Familiarity with one or more Machine Learning libraries like Scikit-Learn, TensorFlow, and/or Keras
- Exposure in applying Bayesian statistical inference tools to experimental data
- Familiarity and comfort using the command line


| fkGraphics reference pages |
NEWPOLARPLOT h=NEWPOLARPLOT h=NEWPOLARPLOT(hsave)
NEWPOLARPLOT prepares figure, axes for graphics according to NextPlot.
h=NEWPOLARPLOT returns the handle of the prepared axes.
h=NEWPOLARPLOT(hsave) prepares and returns an axes, but does not delete any objects whose handles appear in hsave. If hsave is specified, the figure and axes containing hsave are prepared instead of the current axes of the current figure. If hsave is empty, newpolarplot behaves as if it were called without any inputs.
| pointplot | Toolbox page | plotcircle |


Adapt your personal Data according to your current State.
Data has been saved
{{travel.destination}} ({{travel.arrival | date: 'dd-MM-yyyy'}} to {{travel.departure | date: 'dd-MM-yyyy'}})


The content goes here. Inline code markup here.
code markup
Python code snippets
Command line code snippets
Text
ref_name Label


Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
HIGH COURT OF ORISSA: CUTTACK. W.P.(C) Nos. 10057 & 22133 of 2010 In the matter of application under Article 226 and 227 of the Constitution of India. ---------
Pravas Chandra Mohanty (in W.P.(C) No.10057 of 2010) Nitai Chandra Patnaik (in W.P.(C) No.22133 of 2010) ...... Petitioners.
- Versus-
ING Vysya Bank Limited and Others (in both the cases) ... Opposite Parties Counsel for Petitioners : M/s. K. C. Kanungo, HVBRK Dora; M/s.
Bimbisar Dash, Chhabilendu Mohanta & A.
Nayak (in W.P.(C) No.10057 of 2010).
M/s. Sudarshan Nanda, S. P. Panda, S.
Pattnaik, R. R. Swain (in W.P.(C) No.22133 of 2010).
Counsel for Opp.Parties : M/s. M. Balkrishna Rao and R. K. Pattnaik (in both the cases) PRESENT:
THE HONOURABLE SHRI JUSTICE SUJIT NARAYAN PRASAD
-------------------------------------------------------------------------------------
Date of hearing and judgment: 08.08.2018
------------------------------------------------------------------------------------- S. N. Prasad, J. Since the issue pertains in both the writ petitions are similar in nature, both the writ petitions are heard together and are being disposed of by this common order.
2. W.P.(C) No.10057 of 2010 has been filed challenging the memorandum of charge dtd.12.3.2008, Enquiry Report dtd.3.11.2008, punishment order dtd.30.12.2008, appellate order dtd.17.06.2009 and the 2 order passed on 26.2.2010 whereby and where under the petitioner has been inflicted with the punishment of compulsory retirement which has been confirmed by the higher authorities.
W.P.(C) No.22133 of 2010 has been filed challenging the show- cause notice under Annexure-1, order dtd.1.3.2010 under Annexure-2, appellate order dtd.28.6.2010 under Annexure-5 and the revisional order dtd.27.8.2010 under Annexure-7 whereby and where under the petitioner has been terminated from service which has been confirmed by the higher authorities.
3. The petitioners who were working in the ING Vysya Bank Ltd., Bhubaneswar assailed the charge-sheet, enquiry report and the order of punishment inter alia on the ground of violation of principle of natural justice, thereby invoked the jurisdiction of this court conferred under Article 226 of the constitution of India.
4. The opposite party - Bank has appeared and raised serious objection regarding maintainability of writ petitions by putting reliance upon the judgment rendered by Hon‟ble Apex court in the case of Federal Bank Ltd. Vrs. Sagar Thomas and Others, reported in AIR 2003 Supreme Court 4325.
5. This court, while hearing the matter on 16.5.2018, has passed an order providing an opportunity to the learned counsel for the petitioners to argue on maintainability of the writ petitions, pursuant to the same, learned counsel for the petitioners has argued out the case by submitting that the writ petitions are maintainable since there is violation of principle of natural justice and the ratio laid down in the case of Federal Bank Ltd. (supra) is not 3 applicable in the facts and circumstances of their cases since according to them, the aforesaid judgment has been rendered in the context of provision of Article 12 of the Constitution of India but here the question of maintainability is to be tested on the basis of the principles as to whether the opposite party - Bank is coming under the fold of other public authorities or not.
According to them, the bank is coming under the fold of other public authority and since the Constitution mandates that before taking any action which is having its civil consequence, the principle of natural justice is to be followed and since in these writ petitions the principle of natural justice has not been followed, as such the writ petitions are maintainable.
6. This Court, after hearing learned counsel for the parties, thinks it proper to first decide the issue of maintainability since this fact has been taken by way of preliminary objection by the opposite party by putting reliance upon the judgment rendered by Hon‟ble Apex Court in the case of Federal Bank Ltd. (supra) This court, prior to going into the factual aspect involved in the Federal Bank Ltd., has also thinks it proper to discus about the scope of Article 226 of the Constitution of India, vis-à-vis definition of „State‟ within the meaning of Article 12 of the constitution of India and other public authorities as stipulated under the provision of Article 226 of the constitution of India.
7. This Court has examined the judgment rendered by the constitution Bench of the Hon‟ble Supreme Court rendered in the case of Ajay Hasia vrs. Khalid Mujib Sehravardi reported in 1981 (1) SCC 722, wherein this tests were culled out from its earlier judgment in the case of Ramana 4 Dayaram Shetty vrs. International Airport Authority of India, (1979) 3 SCC 489, in the case of Ajay Hasia (supra) at para-9 it has been held as follows:-
"(1) One thing is clear that if the entire share capital of the corporation is held by the Government, it would go a long way towards indicating that the corporation is an instrumentality or agency of the Government.
(2) Where the financial assistance of the State is so much as to meet almost entire expenditure of the corporation, it would afford some indication of the corporation being impregnated with governmental character.
(3) It may also be a relevant factor ...whether the corporation enjoys monopoly status which is State conferred or State protected.
(4)Existence of deep and pervasive State control may afford an indication that the Corporation is a State agency or instrumentality.
(5) If the functions of the corporation are of public importance and closely related to governmental function, it would be a relevant factor in classifying the corporation as an instrumentality or agency of the Government.
(6) Specifically, if a department of the Government is transferred to a corporation, it would be a strong factor supportive of this inference of the corporation being an instrumentality or agency of the Government."
In the judgment rendered in the case of Pradeep Kumar Biswas vrs. Indian Institute of Chemical Biology, (2002) 5 SCC 111, wherein at para-40, it has been laid down that the picture that ultimately emerges is that the tests formulated in Ajaya Hasia (supra) are not rigid set of principles so that if a body falls within any one of them it must, ex hypothesis, be considered to be a State within the meaning of Article 12. The question in each case would be - whether in the light of the cumulative facts as established, the body is financially, functionally and administratively dominated by or under the control of the Government. Such control must be particular to the body in question and must be pervasive. If this is found, then the body is a State within the meaning of Article 12, on the other hand, when the control is merely regulatory whether under statute or otherwise, it would not serve to make the body a State.
5
In the case of Zee Telefilms Ltd. vrs. Union of India,(2005) 4 SCC 649, the Hon‟ble Supreme Court while dealing with the issue as to whether the Board of Control for Cricket in India (BCCI) is "State" within the meaning of Article 12 of the Constitution. After detailed discussion on the functioning of BCCI, the Constitution Bench of Hon‟ble Apex Court concluded that it was not a "State" under Article 12 and made following observations at para-30;
"30. However, it is true that the Union of India has been exercising certain control over the activities of the Board in regard to organizing cricket matches and travel of the Indian team abroad as also granting of permission to allow the foreign teams to come to India. But this control over the activities of the Board cannot be construed as an administrative control. At best this is purely regulatory in nature and the same according to this Court in Pradeep Kumar Biswas (supra) case is not a factor indicating a pervasive State control of the Board."
8. It is evident from the aforesaid judgments as referred hereinabove that if the authority/body can be treated as "State" within the meaning of Article 12 of the Constitution of India, indubitably a writ petition under Article 226 would be maintainable against such an authority/body for enforcement of fundamental and other rights. Article 12 appears at Part III of the Constitution or it pertains to fundamental rights. Therefore, the definition contained in Article 12 is for the purpose of application of the provisions contained in Part-III. Article 226 of the Constitution of India, which deals with powers of the High Courts to issue certain writs, inter alia, stipulates that every High Court has the power to issue directions, orders or writs to any person or authority, including, in appropriate cases, any Government, for the enforcement of any of the rights conferred by Part III and for any other purpose.
Provision of Article 12 of the Constitution, as per the definition contained therein, the "State" includes the Government and Parliament of 6 India and the Government and legislature of each State as well as "all local or other authorities within the territory of India or under the control of the Government of India". The word "other authority" in Article 226 of the Constitution of India needs to be appreciated by this Court and the tests/principles which are to be applied for ascertaining as to whether a particular body can be treated as "other authority" or not is to be assessed, if an authority violates the fundamental right or other legal rights of any person or citizen, which has already been dealt with in the judgment referred hereinabove.
9. There is no confusion about the settled position of law that if such an authority violates the fundamental right or other legal rights of any person or citizen, as the case may be, a writ petition can be filed under Article 226 of the Constitution of India invoking extraordinary jurisdiction of the High Court seeking appropriate direction, order or writ. However, under Article 226 of the Constitution of India, the power of the High Court is not limited to the Government or authority which qualifies to be a "State" under Article 12. Power is extended to issue directions, orders or writs "to any person or authority".
The expression "any person or authority" is to be taken in the wider meaning as has been held in the case of Anadi Mukta Sadguru Shree Muktajee Vandas Swami Suvarna Jayanti Mahotsav Smarak Trust vrs. V.R. Rudani, (1989) 2 SCC 691, wherein dispute arose between the Trust which was managing and running science college and teachers of the said college. It pertained to payment of certain employment related benefits like basic pay etc. The matter was referred for its decision before the Chancellor of Gujarat University, who passed an order which has been accepted by the 7 University as well as the State Government and a direction was issued to all affiliated colleges to pay their teachers in terms of the said award. However, the aforesaid Trust running the science college did not implement the award. Teachers filed the writ petition seeking mandamus and direction to the Trust to pay them their dues of salary, allowances, provident fund and gratuity in accordance therewith. It is in this context an issue arose as to whether the writ petition under Article 226 of the Constitution was maintainable against the said Trust which is admittedly not a statutory body or „authority‟ under Article 12 of the Constitution as it was a private Trust running an educational institution. The High Court held that the writ petition was maintainable and the said view was upheld by this Court in the aforesaid judgment.
In the aforesaid judgment, observation made by the Hon‟ble Supreme Court in the aforesaid judgment as contained in Paras 15 to 20, are relevant for the present, as such the same are being reproduced herein below:-
"15. If the rights are purely of a private character no mandamus can issue. If the management of the college is purely a private body with no public duty mandamus will not lie. These are two exceptions to mandamus. But once these are absent and when the party has no other equally convenient remedy, mandamus cannot be denied. It has to be appreciated that the appellant Trust was managing the affiliated college to which public money is paid as government aid. Public money paid as government aid plays a major role in the control, maintenance and working of educational institutions, The aided institutions like government institutions discharge public function by way of imparting education to students. They are subject to the rules and regulations of the affiliating University. Their activities are closely supervised by the University authorities. Employment in such institutions, therefore, is not devoid of any public character. So are the service conditions of the academic staff are, therefore, not purely of a private character. It has super-added protection by University decisions creating a legal right- duty existence of this relationship, mandamus cannot be refused to the aggrieved party.
17. There, however, the prerogative writ of mandamus is confined only to public authorities to compel performance of public duty. The „public authority‟ for them means everybody which is created by statute-and whose powers and duties are defined by statute. So government departments, local authorities, police authorities, and statutory 8 undertakings and corporations, are all „public authorities‟. But there is no such limitation for our High Courts to issue the writ „in the nature of mandamus‟. Article 226 confers wide powers on the High Court to issue writs in the nature of prerogative writs. This a striking departure from the English law. Under Article 226, writs can be issued to „any person or authority‟. It can be issued „for the enforcement of any of the fundamental rights and for any other purpose.‟
20. The term „authority‟ used in Article 226, in the context, must receive a liberal meaning like the term in Article 12. Article 12 is relevant only for the purpose of enforcement of fundamental rights under Article 32. Article 226 confers power on the High Courts to issue writs for enforcement of the fundamental rights as well as non-fundamental rights. The words „any person or authority‟ used in Article 226 are therefore, not to be confined only to statutory authorities and instrumentalities of the State. They may cover any other persons or body performing public duty. The form of the body concerned is not very much relevant. What is relevant is the nature of the duty imposed on the body. The duty must be judged in the light of positive obligation owed by the persons or authority to the affected party. No matter by what means the duty is imposed. If a positive obligation exists mandamus cannot be denied."
It is evident from the aforesaid judgment that Hon‟ble Supreme Court has spelled out two exceptions to the writ of mandamus; (i) if the rights are purely of a private character, no mandamus can issue; and (ii) if the management of the college is purely a private body "with no public duty", mandamus will not lie. The Hon‟ble Supreme Court in the aforesaid case has clarified that since the Trust in the said case was an aiding institution, and due to that reason, it discharges public function, like government institution, by way of imparting education to students, more particularly when rules and regulations of the affiliating university are applicable to such an institution, being an aided institution. In such a situation, it has been held therein that the service conditions of academic staff were not purely of a private character as the staff had super-aided protection by university‟s decision creating a legal right and duty relationship between the staff and the management.
10. In the judgment referred in the case of K. Krishnamacharyuly vrs. Sri Venkateswara Hindu College of Engineering, (1997) 3 SCC 571, wherein at para-4, it has been held by the Hon‟ble Supreme Court that when 9 there is an interest created by the Government in an institution to impart education, which is a fundamental right of the citizens, the teachers who impart the education get an element of public interest in performance of their duties. In such a situation, remedy provided under Article 226 would be available to the teachers. The aforesaid two cases pertain to educational institutions and the function of imparting education.
In the case of Binny Ltd. vrs. V. Sadasivan, (2005) 6 SCC 657, the Hon‟ble Supreme Court has clarified that though writ can be issued against any private body or person, the scope of mandamus is limited to enforcement of public duty. It is the nature of duty performed by such person/body which is the determinative factor as the Court is to enforce the said duty and the identity of authority against whom the right is sought is not relevant. Such duty can either be statutory or even otherwise, but, there has to be public law element in the action of that body.
In the case of K. K. Saksena vrs. International Commission on Irrigation & Drainage, (2015) 4 SCC 670, the International Commission on Irrigation & Drainage (in short ICID) since was not funded by the Government nor was discharging any public duties any function under any statute, as such the Hon‟ble Supreme Court has scrutinized the only question therein as to whether it is discharging public duty or positive application of public nature and the Hon‟ble Supreme Court agreeing and biased that it has not discharged public duty which is not amenable under Article 226 of the Constitution of India.
11. It is, thus, evident that the element of public duty is to be seen vis-à-vis if the rights are purely of a private character as has been held in the case of Anadi Mukta Sadguru (supra) by the Hon‟ble Supreme Court, hence 10 this Court in order to examine this aspect of the matter as to whether the right which is being claimed by the petitioners is purely of a private character or not?
If the answer will be that it is entirely private, mandamus will not be issued, but certainly if there will be public element, the petitioners are entitled for issuance of writ of mandamus upon the opposite parties for redressal of their grievance.
The judgment rendered by the Hon‟ble Apex Court in the case of Federal Bank Ltd. (supra) is also need to be discussed herein since the same has been relied upon by the Opposite Party - Bank. The factual aspect in that case is that the Federal Bank being a private company carrying on banking business as a schedule bank, can it be termed as an institution or company carrying on any statutory or public duty.
The Hon‟ble Apex Court, by dealing with the constitution of the Federal Bank and its control by the Reserve Bank of India, has been pleased to hold by taking aid of the judgments rendered in the case Sukhdev Singh Vrs. Bhagatram Sardar Singh Raghuvanshi reported in (1975) 1 SCC 421, Ramana Dayaram Shetty Vrs. International Airport Authority of India reported in (1979) 3 SCC 489, Ajay Hasia, Vrs. Khalid Mujib Sehravardi reported in AIR 1981 SC 487, has been pleased to hold at paragraph 17 as follows:-
"17. From the decisions referred to above, the position that emerges is that a writ petition under Article 226 of the Constitution of India may be maintainable against (i) the State Government; (ii) Authority; (iii) a statutory body; (iv) an instrumentality or agency of the State; (v) a company which is financed and owned by the state; (vi) a private body run substantially on State funding; (vii) a private body discharging public duty or positive obligation of public nature (viii) a person or a body under liability to discharge any function under any Statute, to compel it to perform such a statutory function."11
In paragraph 26 it has been held therein as follows:-
"26. Such private companies would normally not be amenable to the writ jurisdiction under Article 226 of the Constitution. But in certain circumstances a writ may issue to such private bodies or persons as there may be statutes which need to be complied with by all concerned including the private companies. For example, there are certain legislations like the Industrial Disputes Act, the Minimum Wages Act, the Factories Act or for maintaining proper environment say Air (Prevention and Control of Pollution) Act, 1981 or Water (Prevention and Control of Pollution) Act, 1974 etc. or statutes of the like nature which fasten certain duties and responsibilities statutorily upon such private bodies which they are bound to comply with. If they violate such a statutory provision a writ would certainly be issued for compliance of those provisions. For instance, if a private employer dispense with the service of its employee in violation of the provisions contained under the Industrial Disputes Act, in innumerable cases the High Court interfered and have issued the writ to the private bodies and the companies in that regard. But the difficulty in issuing a writ may arise where there may not be any non-compliance of violation of any statutory provision by the private body. In that event a writ may not be issued at all. Other remedies, as may be available, may have to be resorted to."
Thus it is evident that the Hon‟ble Apex Court in the aforesaid judgment, has been pleased to laid down that the private companies like the Federal bank, would normally not be amenable to the writ jurisdiction under Article 226 of the constitution of India, but in certain circumstances a writ may issue to such private bodies or persons as there may be statutes which need to be complied with by all concerned including the private companies, for example, there are certain legislations like the Industrial Disputes Act, the Minimum Wages Act, the Factories Act or for maintaining proper environment say Air (Prevention and Control of Pollution) Act, 1981 or Water (Prevention and Control of Pollution) Act, 1974 etc. or statutes of the like nature which fasten certain duties and responsibilities statutorily upon such private bodies which they are bound to comply with. If they violate such a statutory provision a writ would certainly be issued for compliance of those provisions. For instance, if a private employer dispense with the service of its employee in violation of the provisions contained under the Industrial Disputes Act, in innumerable cases the High Court interfered and have issued the writ to the 12 private bodies and the companies in that regard, but the difficulty in issuing a writ may arise where there may not be any non- compliance of violation of any statutory provision by the private body. In that event a writ may not be issued at all. Other remedies, as may be available, may have to be resorted to.
12. Learned counsel for the petitioner has given much emphasis upon the observation made at paragraph 26 of the judgment as quoted above and submitted that since there is violation of principle of natural justice it is in violation to the mandate of the constitution, hence there is a statutory violation, as such writ will be maintainable before this court.
13. This court, after going through the judgment rendered by Hon‟ble Supreme Court as has been discussed in the preceding paragraphs, has come to finding on the basis of the judgment rendered in the case of Anadi Mukta Sadguru's case (supra) that if the dispute is entirely private, mandamus will not be issued but certainly if there will be a public element the petitioners are entitled to issuance of writ of mandamus upon the opposite parities for redressal of their grievance.
This court has also gone across the judgment rendered in the case of State Of Himachal Pradesh vs H.P. State Recognised And Aided School Managing Committee, reported in 1995 4 SCC 507 wherein also the writ petition has been held to be maintainable against private educational institution if the public law element is involved.
Likewise in the judgment rendered in the case of K.
Krishnamacharyulu Vrs. Sri Venkateswara Hindu College of Engineering, reported in (1997) 3 SCC 571 the writ petition under Article 226 of the 13 Constitution of India has been held to be maintainable if public law element is involved.
In the judgment rendered in the case of Satimbala Sharma and Others Vrs. St. Paul's Senior Secondary School and Others, reported in (2011) 13 SCC 760 Hon‟ble Apex Court, at paragraph 23 held that the writ petition has been held to be not maintainable if public law element is not involved and if the grievance related to the salary and allowances of the employees which is exclusively the matter of contract between the teacher and the school and not within the domain of public law, for ready reference the same is being referred herein below:-
"23. We also do not think that the Court could issua a mandamus to a private unaided school to pay the salary and allowances equal to the salary and allowances payable to teachers of government schools or government-aided schools. This is because the salary and allowances of teachers of a private unaided school is a matter of contract between the school and the teacher and is not within the domain of public law."
In the judgment rendered in the case of Ramesh Ahluwalia Vrs.
State of Punjab and Others, reported in (2012) 12 SCC 331, the writ petition has been held to be maintainable against the private schools if performing public functions.
14. This court, therefore has examined the factual aspect in the light of the ratio laid down by the Hon‟ble Apex Court in those cases to examine as to whether the dispute raised in these writ petitions is private or there is any public element.
It is evident from the pleading made in the writ petition as also in the prayer that the petitioners have come forward in these writ petitions by assailing the orders of compulsory retirement which admittedly cannot be said to be having any public element, rather it is entirely private, hence in view of 14 the aforesaid proposition of law as discussed above, writ will held not to be maintainable.
The writ will also not lie in view of the judgment rendered by Hon‟ble Apex Court in the case of Federal Bank (supra) even on the basis of the observation made at paragraph 26 of the aforesaid judgment for the reason that there it has been held that the writ can lie in case of non- compliance or violation of any statutory provision by the private body but it is not the case of the petitioners that there is violation of any statutory rule as provided under any statutory provision, rather their cases are that there is violation of principle of natural justice while from the pleading made in the writ petitions, specifically from the enquiry report, it is evident that not only the petitioners have given their defence reply but also cross-examined witnesses, hence it is not understandable to the court as to how the finding of the enquiry officer or the order of punishment is without following the principle of natural justice.
It is also evident from the order of compulsory retirement that even 2nd show cause notice was given to the petitioner and after taking into consideration the response to the finding of the enquiry report submitted by the petitioners, the order of punishment has been passed, therefore it is not a case of violation of principle of natural justice, rather the petitioners want to assail the aforesaid orders on its merit.
15. This court, after going through the factual aspect involved in the case of Federal Bank, specifically the constitution of the Federal Bank, the parties have not disputed that the opposite party - Bank herein also is the creation in the same nature as that of the Federal Bank Ltd., i.e. it is also a schedule bank, controlled and governed by the RBI regulation, hence 15 according to my considered view there is no difference in the constitution of the opposite party bank vis-à-vis the Federal Bank and also there is no violation of any statutory provision, as such the case of the petitioners cannot said to be governed in view of the exception stipulated at paragraph 26 in the judgment rendered in the case of Federal Bank Ltd.
16. This court, after taking into consideration the factual aspect vis- à-vis the ratio laid down by Hon‟ble Apex Court as discussed above, is of the view that since the dispute raised by the petitioners is totally private in nature and even though the opposite party - bank is a public authority, writ will not lie since there is absence of any public element and further in view of the ratio laid down by Hon‟ble Apex Court in the case of Federal Bank Ltd.
Accordingly writ petition is held to be not maintainable under the provision of Article 226 of the constitution of India for the reasons aforesaid.
In the result the writ petitions stand dismissed, however, reserving liberty to the petitioners to search out their forum to ventilate their grievance.
Accordingly the writ petitions stand disposed of.
...................
S.N.Prasad, J.
Orissa High Court, Cuttack, Dated the 8th August, 2018 / Manas.