PTPSecureClient can be used to connect to PTPSecureServer and execute some commands, in particular, it can be used to download and upload remote files.
CCore-PTPSecureClient.exe <config.dll>
To run the PTPSecureClient you must specify a configuration file as the argument. This file uses DDL to describe various client parameters. Here is an example:
PTPSecureConfig config = { .server_key = { Key#SHA512 , { 000h, 019h, 09Bh, 0FAh, 013h, 064h, 0D0h, 0F4h, 061h, 01Eh, 055h, 050h, 057h, 052h, 0FBh, 00Ch, 04Ah, 0A0h, 04Ah, 0F2h, 083h, 037h, 06Eh, 001h, 050h, 013h, 06Dh, 0B1h, 004h, 0A7h, 082h, 010h } }, .name = 'Sergey', .key = { Key#SHA512 , { 032h, 0E3h, 095h, 080h, 0D7h, 029h, 06Ch, 0F5h, 00Fh, 027h } } };
A configuration file must define a constant of the type PTPSecureConfig with the name config. This type is defined as the following:
struct Key { const uint8 SHA1 = 0 ; const uint8 SHA224 = 1 ; const uint8 SHA256 = 2 ; const uint8 SHA384 = 3 ; const uint8 SHA512 = 4 ; uint8 hash_id; uint8[] key; }; struct PTPSecureConfig { uint16 server_pke_port = 52102 ; uint16 server_psec_port = 52103 ; uint16 pke_port = 52100 ; uint16 psec_port = 52101 ; uint16 keyset_len = 10 ; uint32 ttl = 3600 ; uint32 utl = 100000000 ; ip server_ip = <IP_ADDRESS> ; Key server_key; text name; Key key; };
server_pke_port is the server UDP port for the PKE communication.
server_psec_port is the server UDP port for the PSec communication.
pke_port is the client UDP port for the PKE communication.
psec_port is the client UDP port for the PSec communication.
keyset_len is the number of keys in the session keyset.
ttl is the lifetime limit for the session key.
utl is the traffic limit for the session key.
ip is the IP address of the server.
server_key is the server primary key.
name is the client name in the server client database.
key is the client primary key.
A primary key is described by the structure Key with two fields:
hash_id determines the hash algorithm. One of the predefined constants can be used: SHA1, SHA224, SHA256, SHA384, SHA512.
key is a byte sequence key.
Once client is started, it tries to establish a connection to the server. If it is done it opens a console prompt to enter commands.
--- Copyright (c) 2015 Sergey Strukov. All rights reserved. --- Server PKE port = 52102 Server PSec port = 52103 PKE port = 52100 PSec port = 52101 Keyset len = 10 TTL = 3600 sec UTL = 100000000 bytes Server IP = <IP_ADDRESS> Client name = Sergey /> dir ----- . .. home ----- /> pwd / /> cd ~ ~> dir ----- . .. temp ----- ~> cd temp ~/temp> dir ----- . .. ----- ~/temp> mkfile temp.txt ~/temp> dir ----- . .. ----- temp.txt ~/temp>
The following commands are accepted:
pwd prints the current directory on the server file tree. This directory is also printed in the prompt string.
dir [<path>] shows the content of the given directory or the current directory if the path is not specified.
cd <path> changes the current directory.
mkdir <path> makes the new directory.
rmdir [-r] <path> removes the existing directory. If the option -r is specified the directory is removed with all its content.
mkfile <path> makes the empty file.
del <path> deletes the existing file.
type <path> types the file content.
add <path> <line> adds the given line to the file.
put <local file> <path> uploads the file to the server. The local file is searched with respect to the working directory of the client.
get <local file> <path> downloads the file from the server. The local file is searched with respect to the working directory of the client.
fileinfo <path> prints the file type and the last modification file time.
help prints the list of commands.


Atlas credits
Donations would mostly be used for funding card art; as such, one's better donating directly to an artist


Reports: Jose Mourinho favourite to take over at Tottenham Hotspur after Mauricio Pochettino’s sacking
Tottenham Hotspur have sacked manager Mauricio Pochettino after a horrible start to the season which has seen them slide down to the 14th spot in the Premier League table. The North London side are now actively looking for an able replacement for the Argentine, who was considered one of the best managers in the league.
If reports from journalist Fabrizio Romano are to be believed, Jose Mourinho is the favourite to take over the vacant managerial position at Spurs. The Portuguese has been away from the Premier League for less than a year after Manchester United sacked him in December last year.
Whether or not Mourinho is appointed at the helm of affairs at Spurs remains to be seen. The report claims that club chairman Daniel Levy is expected to make a decision on the same soon.


By clicking the Add to Slack” button you are agreeing to our Privacy Policy and Legal Terms
DBot was designed for enabling easy access to advanced security information for security professionals using Slack and for securing Slack content for anybody using Slack.
Whether you are in the middle of a forensic investigation or simply trying to understand whether you have encountered a security issue, DBot saves time and effort by delivering threat feed reputation for IP, URL and Files from multiple sources right within Slack. Simply upload a suspicious file into one of your Slack channels, type a URL or IP address or even copy an MD5 hash into Slack and threat information will be readily available to you in a matter of seconds. Oh yes, and you can also share this information with your colleagues in Slack while you’re at it!
DBot protects Slack users by monitoring communications in the background and warning them about malicious and harmful content in real time. DBot warnings are non-intrusive and are delivered within the Slack interface.
DBot analyses all communications for security risks on elements including File, URL and IP address.
Get file reputation with MD5 or scan the entire file that is shared.
URL & IP security analysis using multiple sources to protect users.
All integrated in Slack, no external interface to get security feeds.
Customize and choose the channels and private groups for monitoring. Enable private keys for threat feeds.
Nothing to Install, Nothing to Pay and One-click Activation.
Detailed security data for Security Analyst and summary for everyone.
Designed for Security Analysts, DBot delivers deep analysis for URL, File and IP by correlating multiple sources.
DBot uses multiple security threat feeds and malware analysis engines to review all the communication for security. File, IP and URL entities are extracted and analyzed in real time for protecting users.


{% extends 'maps/base.html' %} {% block background-color %} teal {% endblock %} {% block content %}
You've successfully completed the test.


Created by Sphoorti Joglekar / @SphoortiJ
Sphoorti Joglekar, OPW intern with oVirt and Open Source enthusiast.
coders * testers * designers * technical writers * community managers * translaters * artists hardware hackers * scientists * journalists teachers * students * professionals * hobbyists political activists * data scientists * librarians * humanitarian aid workers * sysadmins * kids * health providers * environmentalists * users
and more!
And most importantly to LEARN, SHARE and have FUN.
OpenHatch Open Source Comes to Campus
Ada Initiative
Linux foundation's The Eudyptula Challenge
I worked on moVirt, an android application to connect and monitor oVirt's datacenttre.
These slides are at : Gnunify-Slides Feel free to ping @SphoortiJ on Twitter or drop a mail to sphoorti.joglekar@gmail.com


What happened to Bootlegger?
Our Story is the evolution of the Bootlegger media research platform. Bootlegger projects still exist within Our Story, and benefit from its new features.
Our Story is the evolution of the Bootlegger media research platform. Bootlegger projects still exist within Our Story, and benefit from its new features.


{% extends "base.html" %} {% block content %}
Here you can adjust the security settings for this application.
*Note CVE-2017-11427 applies to the particular library used for this application (the onelogin python library). Other CVEs exist for this vulnerability.
**Note CVE-2017-11427 has not been patched yet in the library in the application. The text box above does nothing currently.
{% endblock %}


Naga Chaitanya’s FIRST Look From Sekhar Kammula’s Rom-Com Is Out
Apart from the first look, the actor also had an important announcement to make.
by Koimoi.com TeamFans of Tollywood heartthrob Naga Chaitanya can’t keep calm, as their favourite star has his birthday tomorrow. It was yesterday evening when the young actor took on Twitter to share his first look from Sekhar Kammula’s next which has been tentatively titled #NC19.
Apart from the first look, the actor also had an important announcement to make, as he tweeted that the first glimpse from #NC19 will be unveiled tomorrow i.e on occasion of his birthday.
Chaitanya’s tweet read: Experience the world of #NC19 on 23rd Nov at 10:30 am
Talking about Naga Chaitanya’s first look, the actor can be seen with all smiles donned in a sports jacket and grey pants.
#NC19 has Maari 2 actress Sai Pallavi in lead opposite Naga Chaitanya.
The romantic comedy went on floors in the month of September in Hyderabad.
#NC19‘s director Sekhar Kammula who is well for his directional work for films like Happy Days, Leader among others has returned to film direction after a long gap of two years.
Talking about Naga Chaitanya, the actor has K.S Ravindra’s comedy-drama Venky Mama set for release. The film also stars Chaitanya’s uncle and Tollywood superstar Venkatesh in lead.
Venky Mama has actresses Raashi Khanna and Paayal Rajput as the film’s leading ladies.
The music for the film has been composed by S.Thaman.
Venky Mama will hit big screens on 13th December on occasion of Venkatesh’s Birthday.


Home
Products
Services
Service 1
Service 1 A
Service 1 B
Service 2
About
Gallery
Contact
Domestic packages
Unlimited Color Variants
Parallax Background
Clean Modern Code


It was three years ago this summer that I got the call, bought the Yuengling, smoked the cigarettes, and began life as an independent consultant. It’s been (almost) three years of ups and downs, and, eventually, among the most rewarding experiences of my life. Day by day, I wrote my own job description, found my own clients, set my own schedule, and set my own agenda.
Starting tomorrow, it’s time for a new chapter in my working life: I’ll be joining Toura Mobile full-time as their lead JavaScript developer, continuing my work with them on creating a PhoneGap- and Dojo-based platform for the rapid creation of content-rich mobile applications.
I’ve been working with Toura for about six months now, starting shortly after I met Matt Rogish, their director of development, at a JavaScript event in New York. They brought me on as a consultant to review their existing application, and the eventual decision was to rewrite it from the ground up, using the lessons learned and knowledge gained from the first version to inform the second. It was a risky decision, but it’s paid off: earlier this year, Toura started shipping apps built with the rewritten system, and the care we took to create modular, loosely coupled components from the get-go has paid off immensely, meeting current needs while making it easier to develop new features. With the rewrite behind us, these days we’re using the solid foundation we built to allow users of the platform to create ever more customized experiences in their applications.
If you know me at all, you know that I’ve been pretty die-hard about being an independent consultant, so you might think this was a difficult decision. Oddly, it wasn’t — I’ve enjoyed these last several months immensely, the team I work with is fantastic, and I’ve never felt more proud of work I’ve done. Whenever I found myself wondering whether Toura might eventually tire of paying my consulting rates, I’d get downright mopey. Over the course of three years, I’ve worked hard for all of my clients, but this is the first time I’ve felt so invested in a project’s success or failure, like there was a real and direct correlation between my efforts and the outcome. It’s a heady feeling, and I hope and expect it to continue for a while.
By the way, I’ll be talking about the rewrite at both TXJS and GothamJS in the next few weeks.
Also: we’re hiring :)


Yvonne Okoro releases stunning photo to celebrate 35th birthday
by Nana YawGhanaian actress, Yvonne Okoro is 35 years today and to mark the day, she has released a stunning photo to show to the world, she’s still young and beautiful at that age.
In a post on Instagram, the beautiful actress noted she’s old but she’s always identified as an 18-year-old.
“I identify as 18 but my Mama and birth certificate says i am 35years old TODAY..🥳🥳🥳🍾🎂..(haters)..happy Birthday to me i guess,” she captioned alongside the beautiful released photo.


Kafka & Visual Studio Code & OSS... Distributed Consensus & Things to Learn
A Few Streams to Learn From: Apacha Kafka!
Here I am in the middle of Qcon SF, about to enjoy the “Demystifying Stream Processing with Apache Kafka“ talk with Neha Narkhede @nehanarkhede. The background on this talk is rooted in Neha being a co-founder of Confluent.io, with co-founder Jay Kreps of Karka co-creation fame. Neha is providing a fundamental talk on the insight and usage of streams across distributed systems.
#Qcon "Demystifying Stream Processing w/ Apache Kafka" w/ @nehanarkhede pic.twitter.com/zgR2H87xVn
— Λdrøn (@Adron) November 18, 2015
Docker Tips n' Tricks - Gettging Rabbit MQ Running
There are a few clean ways to get started running RabbitMQ with Docker. The easiest is of course just to grab the Kitematic UI and pull the repo and start it. However, here are the actual commands to get the Rabbit MQ started from the command line.
docker run -d -p 5672:5672 -p 15672:15672 dockerfile/rabbitmq
If you want persistent shared directories, then make sure to run the command like this.
docker run -d -p 5672:5672 -p 15672:15672 -v <log-dir>:/data/log -v <data-dir>:/data/mnesia dockerfile/rabbitmq
Now that the instance is up and running, you can get to work playing around and using RabbitMQ on your new docker container.
Docker Tips n' Tricks - Delete All The Images & Containers
Two simple commands that’ll wipe your installation clean of images and containers.
Deletes all containers
docker rm $(docker ps -a -q)
Deletes all images
docker rmi $(docker images -q)
After 816 Days I'm Taking a Job!
The new mission, or as some may call it, a job! The context for those that might not be familiar with my adventures is that I’ve been working independently as a consultant, contractor, community builder, beer drinker, hacker, teacher, trainer, mentor, curriculum builder, and training content creator. The last time I held something that resembled a job was 560 business days ago, or more specifically 816 days ago. Honestly, I’m not even sure that it could be considered a job, it was a strange gig to say the least. Recently after this long break I’m taking up a new job position with some interesting objectives and priorities.
DevDay 2015, Inspiration, and a quick look back...
So far this year, which is obviously nowhere near finished yet, I have had some amazing experiences. From .NET Fringe, Polyglot 2015, Progressive .NET Tutorials 2015, to Dev Day 2015 and more. I decided to add a little bit more of a personal note in this blog entry because of inspiration I just got from Michał Śliwoń (@mihcall) on his Dev Day 2015 Aftermath write up.
Just as Michał writes,
“Inspiration is like a spark. It can be one brilliant presentation at the conference, one sentence at some session, one hallway conversation with another attendee and I’m excited, coming back with a head full of new ideas. Every conference has this little spark”
and I completely agree. At .NET Fringe I got back into a few things on the .NET CLR stack, namely F# and a little toying around with Akka .NET and micro-services using those technologies. I also had a hand in organizing and the origins of the conference, which I wrote about. At Polyglot 2015 my desire increased to become more familiar with and comfortable with functional programming languages. At the Progressive .NET Tutorials I was again inspired to dive deeper into functional languages and take a look more closely at everything from Weave and other container and virtualization based systems.
Devday 2015 Wrap Up
I was going to write something, but these tweets really summarize and show the fun had at Dev Day really well. Cheers!
Start using document database today with #jsonb type in #PostgreSQL https://t.co/82KXAjIVka by @robconery at #ABBDevDay
— Kamil Lelonek (@KamilLelonek) September 18, 2015
A Small Rant About Being IDE-Dependent
{Sort of a Rant}
I recently saw this tweet.
You can't create a project in visual studio code? This seems like an odd decision
— gregyoung (@gregyoung) September 15, 2015
I responded with this tweet.
@gregyoung yeah, projects being a tightly coupled dependency to the IDE needs to be ripped from the minds. #yeoman
— Λdrøn @ ¯_(ツ)_/¯ (@Adron) September 15, 2015
Now I need to describe some context around this response real quick. Here are the key points behind this tweet from my context in the software development industry.
Don't Learn to Code, That's Just Nonsense... Learn Instead!
I keep reading post after post after post. “Learn to code”, “Everybody Should Learn to Code”, “In the Future Everyone Will Need to Know How to Code, Learn Now!”, and so many more. I’m going to point out a few very important tips to life. These tips are especially important when it comes to programming, or NOT programming.
__4 "CD Is Working, Let's Get a Site Live with Loopback!"
Since it has been more than a few weeks let’s do a quick recap of the previous posts in this series.
Introducing the Thrashing Code Team and Projects - Know who’s working on what and what the projects are.
Getting Started, Kanban & First Steps for a Sharing App - Getting the kanban put together and the team involved.
Starting a Basic Loopback API & Continuous Integration - Getting the skeleton of the API application setup and the continuous integration services running.
Going the Full Mile, Continuous Delivery - Here the team got the full continuous delivery process setup for ongoing development efforts.
In this article of the series I work with some of my cohort to get initial parts of the application deployed to production. For the first part of this, let’s get some of the work that Norda has done into the project and get it running on the client side.


White to play 63
pips White=109 Black=147
(CorrectAnswer= 0/0, ErrorScore= 0)
1. 13/10* 10/4 eq: +0.799 68.45% (G:17.98% B:0.65%) 31.55% (G: 3.45% B:0.06%) 2. 13/4 eq: +0.778 (-0.021) 70.27% (G:10.80% B:0.37%) 29.73% (G: 3.04% B:0.05%) 3. 13/7 6/3 eq: +0.716 (-0.084) 68.92% (G:11.88% B:0.43%) 31.08% (G: 4.61% B:0.08%) 4. 13/7 4/1 eq: +0.365 (-0.434) 60.44% (G:10.62% B:0.24%) 39.56% (G: 7.25% B:0.24%) 5. 13/7 9/6 eq: +0.352 (-0.447) 59.55% (G:11.08% B:0.35%) 40.45% (G: 6.59% B:0.19%)


Open navigation menu
Close navigation menu
Go to the Comcast Business Homepage
Hi,
usergg
one
Edit
Sign Out
submit
MY ACCOUNT
MY ACCOUNT
Manage Account
Bills
Users
Account Details
My Service Tools
Manage
Business Voice Edge
BVE
SUPPORT
SHOP SERVICES
APP MARKETPLACE
Search
submit
Loading...


Not able to figure out where your money is going !! We have got a solution for you. This app helps you keep track of your expenses.Yes.right! Add your expenses accordingly, view them, manage hem and keep a track of where your money goes.You can even keep track of your income,deposits and savings.Manage your money here.
GOALS
MISSION: Our mission is to make you aware about where your money goes and reduce it.Know your expenditures and your savings and accordingly make plans.


Ocean [ac14], ocean, in Crystal Sea
Last updated Turn #146
Ocean [ac14], ocean, in Crystal Sea
------------------------------------------------------------------------
5: Sea Lion [hq7s], ship, 2 hulls, 1 rowing port, 6 sails, arrived from
5: Ocean [ac13], owner:
5: Toulouse [h1q], Pen, with eight sailors
6: Sea Lion [hq7s], ship, 2 hulls, 1 rowing port, 6 sails, departed for
6: Ocean [ac15].
14: It has begun to rain.
Routes leaving Ocean:
North, to Ocean [ab14], 6 days
East, to Ocean [ac15], 6 days
South, to Ocean [ad14], 6 days
West, to Ocean [ac13], 6 days
It is raining.


Mayambela: We need to fully support the new coach
Cape Town - Cape Town midfielder Mark Mayambela admits it was not easy for the players to see Benni McCarthy leave the club, but they have to be fully behind the new coach.
McCarthy was sacked as head coach late on Sunday and the Citizens have moved quickly to replace the former Bafana striker.
Dutch coach Jan Olde Riekerink, who had spells at big clubs in Europe such as Ajax Amsterdam, Galatasaray and Heerenveen was announced as the new mentor of the Cape club on Thursday.
Myamabela, who signed for City this season only after McCarthy pressured chairman John Comitis to strike a deal, says the club is more important than one individual.
"Well like in any other team it's not easy you see. Coach Benni was here for three seasons," Mayambela told KickOff.
"So, the players were used to him, used to his way of playing, his way of doing things. It's never easy to lose a coach.
"But then what's important for us now is to support the team, and to support the decision that the team made. To support the coaches that will be here.
"We also need to support fully the new coach. Because at the end of the day the team is more important than any player or any person.
"What is important is the team and making sure that the team progresses and does better."
Cape Town started life after McCarthy with a 5-3 victory over Polokwane City on Wednesday for just their second win of the league season.
- TeamTalk Media


Resources loading and initializations routine.
 More...
|
| |
| static void | loadSettings (Game &game) |
| | Load settings. More...
|
| |
| static void | saveSettings (Settings &settings) |
| | Save settings. More...
|
| |
| static void | loadAssets (Game &game) |
| | Load all game assets. More...
|
| |
| template<typename dataType > |
| static void | loadAssetsFromJson (Settings &settings, const std::string &dataName, nlohmann::json &paths, std::map< std::string, dataType > &data) |
| | Load assets from a json array. More...
|
| |
Resources loading and initializations routine.
Definition at line 16 of file Loader.hpp.
◆ loadAssets()
| void TouhouFanGame::Loader::loadAssets |
( |
Game & |
game | ) |
|
|
static |
Load all game assets.
- Parameters
-
| game | Game state and resources. |
Definition at line 86 of file Loader.cpp.
88 std::ifstream stream{
"assets/list.json"};
95 game.resources.random.seed(time(
nullptr));
99 throw CorruptedAssetsListException(
"Cannot open assets list from assets/list.json");
107 if (data[
"icon"].is_null())
109 else if (!game.resources.icon.loadFromFile(
"assets/" +
static_cast<std::string
>(data[
"icon"])))
110 logger.
error(
"Cannot load file assets/" +
static_cast<std::string
>(data[
"icon"]));
112 game.resources.screen->setIcon(
113 game.resources.icon.getSize().x,
114 game.resources.icon.getSize().y,
115 game.resources.icon.getPixelsPtr()
119 loadAssetsFromJson(game.state.settings,
"Musics", data[
"musics"], game.resources.musics);
122 loadAssetsFromJson(game.state.settings,
"Sound effects", data[
"sfx"], game.resources.soundBuffers);
125 loadAssetsFromJson(game.state.settings,
"Sprites", data[
"sprites"], game.resources.textures);
129 }
catch (nlohmann::detail::parse_error &e) {
130 throw CorruptedAssetsListException(
"The JSON file has an invalid format: " + std::string(e.what()));
131 }
catch (nlohmann::detail::type_error &e) {
132 throw CorruptedAssetsListException(
"The JSON values are invalid: " + std::string(e.what()));
◆ loadAssetsFromJson()
template<typename dataType >
| static void TouhouFanGame::Loader::loadAssetsFromJson |
( |
Settings & |
settings, |
|
|
const std::string & |
dataName, |
|
|
nlohmann::json & |
paths, |
|
|
std::map< std::string, dataType > & |
data |
|
) |
| |
|
inlinestatic |
Load assets from a json array.
- Parameters
-
| settings | The settings to pass to the loader. |
| dataName | The name of the data that are currently loaded. |
| paths | Array of json paths. |
| data | Map of buffers to load the files in. |
Definition at line 59 of file Loader.hpp.
62 logger.
warn(
"No " + dataName +
" is marked for loading");
64 logger.
debug(
"Loading " + std::to_string(paths.size()) +
" " + dataName);
65 for (
auto &value : paths.items()) {
66 logger.
debug(
"Loading value " + value.value().dump() +
" at key " + value.key());
69 logger.
warn(
"A sound is already loaded with key " + value.key());
70 }
catch (std::out_of_range &) {}
72 if (!
loadFile(settings, data[value.key()], value.value()))
73 logger.
error(
"Cannot load element " + value.value().dump());
◆ loadFile() [1/3]
| bool TouhouFanGame::Loader::loadFile |
( |
Settings & |
, |
|
|
sf::SoundBuffer & |
buffer, |
|
|
nlohmann::json & |
path |
|
) |
| |
|
static |
Load a sound effect file.
- Parameters
-
| buffer | Buffer to load the file in. |
| path | Path to the file. |
- Returns
- Whether the file could be loaded or not.
Definition at line 14 of file Loader.cpp.
16 return buffer.loadFromFile(
"assets/" +
static_cast<std::string
>(path));
◆ loadFile() [2/3]
| bool TouhouFanGame::Loader::loadFile |
( |
Settings & |
, |
|
|
sf::Texture & |
texture, |
|
|
nlohmann::json & |
path |
|
) |
| |
|
static |
Load a texture file.
- Parameters
-
| texture | Buffer to load the file in. |
| path | Path to the file. |
- Returns
- Whether the file could be loaded or not.
Definition at line 35 of file Loader.cpp.
37 return texture.loadFromFile(
"assets/" +
static_cast<std::string
>(path));
◆ loadFile() [3/3]
| bool TouhouFanGame::Loader::loadFile |
( |
Settings & |
settings, |
|
|
std::pair< sf::Music, std::string > & |
music, |
|
|
nlohmann::json & |
obj |
|
) |
| |
|
static |
Load a music file.
- Parameters
-
| settings | The settings of the game. |
| music | Buffer to load the file in. |
| obj | Object containing the path to the file and the loop points. |
- Returns
- Whether the file could be loaded or not.
Definition at line 19 of file Loader.cpp.
21 bool result = music.first.openFromFile(
"assets/" +
static_cast<std::string
>(obj[
"path"]));
23 music.second = obj[
"description"].is_null() ?
"" : obj[
"description"];
24 music.first.setLoop(
true);
25 if (!obj[
"loop_points"].is_null())
26 music.first.setLoopPoints(sf::Music::TimeSpan{
27 sf::milliseconds(obj[
"loop_points"][
"offset"]),
28 sf::milliseconds(obj[
"loop_points"][
"length"])
31 music.first.setVolume(settings.musicVolume);
◆ loadItems()
Load items.
- Parameters
-
| game | Game state and resources. |
Definition at line 69 of file Loader.cpp.
71 std::ifstream stream{
"assets/items.json"};
75 throw CorruptedAssetsListException(
"Cannot open assets list from assets/items.json");
80 throw CorruptedAssetsListException(
"Items list must be an array");
82 for (
unsigned i = 0; i < objs.size(); i++)
◆ loadSettings()
| void TouhouFanGame::Loader::loadSettings |
( |
Game & |
game | ) |
|
|
static |
Load settings.
- Parameters
-
| game | Game state and resources. |
Definition at line 51 of file Loader.cpp.
53 std::ifstream stream(
"saves/settings.sav");
56 game.state.settings.input.reset(
new Inputs::SFMLKeyboard(&*game.resources.screen));
58 logger.
error(
"Cannot open file save/settings.sav " + std::string(strerror(errno)));
59 game.state.settings.musicVolume = 100;
60 game.state.settings.sfxVolume = 100;
62 game.state.settings.input->unserialize(stream);
63 stream >> game.state.settings.musicVolume >> game.state.settings.sfxVolume;
65 game.resources.setMusicVolume(game.state.settings.musicVolume);
66 game.resources.setSoundVolume(game.state.settings.sfxVolume);
◆ saveSettings()
Save settings.
- Parameters
-
Definition at line 40 of file Loader.cpp.
44 std::ofstream stream(
"saves/settings.sav");
46 settings.
input->serialize(stream);
The documentation for this class was generated from the following files:
static void loadAssetsFromJson(Settings &settings, const std::string &dataName, nlohmann::json &paths, std::map< std::string, dataType > &data)
Load assets from a json array.


| 1 |
Appropriate labels are found on all hazardous chemical containers? |
|
|
|
|
| 2 |
Containers are in good condition (e.g., labels intact, metal cans free of rust) and closed when not in use? |
|
|
|
|
| 3 |
Containers properly segregated by hazard class (e.g., flammables away from oxidizers, acids separate from bases, incompatible acids separated)? |
|
|
|
|
| 4 |
Storage of chemicals above eye level is avoided? |
|
|
|
|
| 5 |
Flammable liquids stored in OSHA/NFPA approved cabinets and safety containers? |
|
|
|
|
| 6 |
Flammables liquids requiring refrigeration stored in either explosion proof or flammable resistant refrigerators and freezers (i.e., no regular refrigerators)? |
|
|
|
|
| 7 |
Ignition sources avoided when using/storing flammables? |
|
|
|
|
| 8 |
Corrosives stored in acid cabinets or other appropriate cabinets? |
|
|
|
|
| 9 |
Peroxide formers properly labeled and inventory tracked? |
|
|
|
|
| 10 |
Large containers (4L+) stored near the floor? |
|
|
|
|
| 11 |
Bottle carriers or carts utilized when transporting hazardous chemicals between work areas? |
|
|
|
|
| 12 |
Proper signs delineate designated areas where high hazard chemicals are used? |
|
|
|
|
| 13 |
Designated chemical work areas/bench tops cleaned and decontaminated? |
|
|
|
|


This is a paragraph.
This selector selects all elements with a title attribute value equal to 'Tomorrow', or starting with 'Tomorrow' followed by a hyphen.


PieDock
1.6.3
Main Page
Classes
Files
Class List
Class Hierarchy
Class Members
Class Hierarchy
Go to the textual class hierarchy
Generated on Fri Feb 28 2014 19:48:23 for PieDock by
<IP_ADDRESS>


 If we're missing jobs from a site you use or if you just want to say hi, we'd love to hear from you. {{ block.super }} {% endblock %} {% block 'content' %} {% crispy form %} {% endblock %}
If we're missing jobs from a site you use or if you just want to say hi, we'd love to hear from you.


FedData version 3.0 is about to be released to CRAN. There are several breaking changes in the FedData API from version 2.x. Please see NEWS.md for a list of changes.
FedData
is an R package implementing functions to automate downloading geospatial data available from several federated data sources.
Currently, the package enables extraction from seven datasets:
This package is designed with the large-scale geographic information system (GIS) use-case in mind: cases where the use of dynamic web-services is impractical due to the scale (spatial and/or temporal) of analysis. It functions primarily as a means of downloading tiled or otherwise spatially-defined datasets; additionally, it can preprocess those datasets by extracting data within an area of interest (AoI), defined spatially. It relies heavily on the sp, raster, and rgdal packages.
This package has been built and tested on a source (Homebrew) install of R on macOS 11.4 (Big Sur), and has been successfully run on Ubuntu 14.04.5 LTS (Trusty), Ubuntu 16.04.1 LTS (Xenial) and binary installs of R on Mac OS 11.4 and Windows 10.
FedData
install.packages("FedData")
install.packages("devtools")
devtools::install_github("ropensci/FedData")
First, in terminal:
sudo add-apt-repository ppa:ubuntugis/ppa -y
sudo apt-get update -q
sudo apt-get install libssl-dev libcurl4-openssl-dev netcdf-bin libnetcdf-dev gdal-bin libgdal-dev
Then, in R:
update.packages("survival")
install.packages("devtools")
devtools::install_github("ropensci/FedData")
This demonstration script is available as an R Markdown document in the GitHub repository: https://github.com/ropensci/FedData.
# Get the NED (USA ONLY)
# Returns a raster
NED <- get_ned(
template = FedData::meve,
label = "meve"
)
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
#> prefer_proj): Discarded ellps WGS 84 in Proj4 definition: +proj=merc +a=6378137
#> +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null
#> +wktext +no_defs +type=crs
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
#> prefer_proj): Discarded datum World Geodetic System 1984 in Proj4 definition
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj
#> = prefer_proj): Discarded datum Unknown based on WGS84 ellipsoid in Proj4
#> definition
# Plot with raster::plot
raster::plot(NED)
# Get the DAYMET (North America only)
# Returns a raster
DAYMET <- get_daymet(
template = FedData::meve,
label = "meve",
elements = c("prcp", "tmax"),
years = 1980:1985
)
# Plot with raster::plot
raster::plot(DAYMET$tmax$X1985.10.23)
# Get the daily GHCN data (GLOBAL)
# Returns a list: the first element is the spatial locations of stations,
# and the second is a list of the stations and their daily data
GHCN.prcp <- get_ghcn_daily(
template = FedData::meve,
label = "meve",
elements = c("prcp")
)
#> Warning in if (!is.null(template) & !(class(template) %in%
#> c("SpatialPolygonsDataFrame", : the condition has length > 1 and only the first
#> element will be used
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
#> prefer_proj): Discarded ellps WGS 84 in Proj4 definition: +proj=merc +a=6378137
#> +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null
#> +wktext +no_defs +type=crs
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj =
#> prefer_proj): Discarded datum World Geodetic System 1984 in Proj4 definition
#> Warning: `select_()` was deprecated in dplyr 0.7.0.
#> Please use `select()` instead.
#> Warning: `filter_()` was deprecated in dplyr 0.7.0.
#> Please use `filter()` instead.
#> See vignette('programming') for more help
#> Warning: `funs_()` was deprecated in dplyr 0.7.0.
#> Please use `funs()` instead.
#> See vignette('programming') for more help
#> Warning: `funs()` was deprecated in dplyr 0.8.0.
#> Please use a list of either functions or lambdas:
#>
#> # Simple named list:
#> list(mean = mean, median = median)
#>
#> # Auto named with `tibble::lst()`:
#> tibble::lst(mean, median)
#>
#> # Using lambdas
#> list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
# Plot the NED again
raster::plot(NED)
# Plot the spatial locations
sp::plot(GHCN.prcp$spatial,
pch = 1,
add = TRUE
)
legend("bottomleft",
pch = 1,
legend = "GHCN Precipitation Records"
)
# Elements for which you require the same data
# (i.e., minimum and maximum temperature for the same days)
# can be standardized using standardize==T
GHCN.temp <- get_ghcn_daily(
template = FedData::meve,
label = "meve",
elements = c("tmin", "tmax"),
years = 1980:1985,
standardize = TRUE
)
#> Warning: `arrange_()` was deprecated in dplyr 0.7.0.
#> Please use `arrange()` instead.
#> See vignette('programming') for more help
# Plot the NED again
raster::plot(NED)
# Plot the spatial locations
sp::plot(GHCN.temp$spatial,
add = TRUE,
pch = 1
)
legend("bottomleft",
pch = 1,
legend = "GHCN Temperature Records"
)
# Get the NRCS SSURGO data (USA ONLY)
SSURGO.MEVE <- get_ssurgo(
template = FedData::meve,
label = "meve"
)
# Plot the NED again
raster::plot(NED)
# Plot the SSURGO mapunit polygons
plot(SSURGO.MEVE$spatial$geom,
lwd = 0.1,
add = TRUE
)
# Or, download by Soil Survey Area names
SSURGO.areas <- get_ssurgo(
template = c("CO670", "CO075"),
label = "CO_TEST"
)
# Let's just look at spatial data for CO675
SSURGO.areas.CO675 <-
SSURGO.areas$spatial %>%
dplyr::filter(AREASYMBOL == "CO075")
# And get the NED data under them for pretty plotting
NED.CO675 <- get_ned(
template = SSURGO.areas.CO675,
label = "SSURGO_CO675"
)
#> Warning in showSRID(uprojargs, format = "PROJ", multiline = "NO", prefer_proj
#> = prefer_proj): Discarded datum Unknown based on WGS84 ellipsoid in Proj4
#> definition
# Plot the SSURGO mapunit polygons, but only for CO675
raster::plot(NED.CO675)
plot(SSURGO.areas.CO675$geom,
lwd = 0.1,
add = TRUE
)
# Get the ITRDB records
# Buffer MEVE, because there aren't any chronologies in the Park
ITRDB <- get_itrdb(
template = FedData::meve %>%
sf::st_buffer(50000),
label = "meve",
measurement.type = "Ring Width",
chronology.type = "Standard"
)
#> Warning in eval(jsub, SDenv, parent.frame()): NAs introduced by coercion
#> Warning: attribute variables are assumed to be spatially constant throughout all
#> geometries
# Plot the MEVE buffer
plot(
FedData::meve %>%
sf::st_buffer(50000) %>%
sf::st_transform(4326)
)
# Map the locations of the tree ring chronologies
plot(ITRDB$metadata$geometry,
pch = 1,
add = TRUE
)
legend("bottomleft",
pch = 1,
legend = "ITRDB chronologies"
)
# Get the NLCD (USA ONLY)
# Returns a raster
NLCD <- get_nlcd(
template = FedData::meve,
year = 2016,
dataset = "Land_Cover",
label = "meve"
)
# Plot with raster::plot
raster::plot(NLCD, legend = TRUE)
#> Warning in plot.window(...): "legend" is not a graphical parameter
#> Warning in plot.xy(xy, type, ...): "legend" is not a graphical parameter
#> Warning in title(...): "legend" is not a graphical parameter
#> Warning in graphics::rasterImage(z, bb[1], bb[3], bb[2], bb[4], interpolate =
#> interpolate, : "legend" is not a graphical parameter
# Get the NASS (USA ONLY)
# Returns a raster
NASS_CDL <- get_nass_cdl(
template = FedData::meve,
year = 2016,
label = "meve"
)
# Plot with raster::plot
raster::plot(NASS_CDL)
# Get the NASS CDL classification table
raster::levels(NASS_CDL)[[1]]
# Also, a convenience function loading the NASS CDL categories and hex colors
cdl_colors()
This package is a product of SKOPE (Synthesizing Knowledge of Past Environments) and the Village Ecodynamics Project through grants awarded to the Crow Canyon Archaeological Center and Washington State University by the National Science Foundation. This software is licensed under the MIT license.
FedData was reviewed for rOpenSci by @jooolia, and was greatly improved as a result. rOpenSci on-boarding was coordinated by @sckott.


Recursion
How to understand Recursion if you don't know Recursion
1/31/2016
To understand recursion, we will first have to define what recursion is. Recursion occurs when a process or procedure calls upon itself. When this occurs, the process or procedure is said to be recursive. When it comes to programming languages like Ruby, a recursive method calls upon itself and repeats until a end case is defined. If a end case is not defined, the method will repeat infintely and cause issues.
With a very simple recursive method, you can count down to 0 with any integer put into the countdown method. The "return if" line exists as a base case to halt the recursion so an infinite loop does not occur. The method will then continue to put down the value of x and then run itself again subtracting 1 from x until x is equal to 0. This is an example of single recursion, where a function calls upon itself. Single recursion is very similar to iteration and is more a matter of space and computation time. There are multiple types of recursion relating to the where the function is called and by how many functions that call it.
Recursion can be used to target specific ranges in large databases and execute a procedure with less coding. Most of the time in coding, recursion is used to make code simpler to read(assuming you understand what recursion is) and to simplify repetitive code.


--- layout: post permalink: kettleworx.html Tags: Array NameOfCoupon: KettleWorx Cash Back Summary: See our KettleWorx Coupon Code, KettleWorx Rebate, KettleWorx Promo Code, KettleWorx Discount, KettleWorx Coupon Cash Back Rebate here. MetaKeywords: KettleWorx Coupon Code, KettleWorx Rebate, KettleWorx Promo Code, KettleWorx Cash Back Rebate, KettleWorx Discount, KettleWorx Coupon Image: images/22443.jpg LinkURL: http://www.shareasale.com/r.cfm?b=176730&u=412002&m=22443 affiliate_url_link: http://www.icouponblog.com/jane.php?id=221 thesis_readmore: See the KettleWorx Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=kettleworx.com Title: Save 3.5% - KettleWorx Coupon Code for kettleworx.com. KettleWorx Rebate & Discount thesis_description: Our KettleWorx Discount Coupon Code for kettleworx.com. We have the best KettleWorx Rebate anywhere. thesis_keywords: KettleWorx, KettleWorx Coupon Code, KettleWorx Discount, KettleWorx Rebate product_name: KettleWorx hop_url: http://www.icouponblog.com/hop.php?id=221 ---
Are you too busy to exercise or do not feel motivated to go to the gym? You can get a total body workout at home in just 20 minutes at three times per week with KettleWorx Sculpt lean muscle, eliminate fat, get a great cardio and resistance workout in just 20 minutes, only three times a week. Lose inches, weight, look your best. With KettleWorx your body will go through a big transformation in just six weeks! Use our discount coupon now to buy KettleWorx a product that will help you get a healthy lifestyle.
KettleWorx is a complete home fitness program based entirely on kettlebell training. The complete KettleWorx system includes ten DVDs, training in 200 unique exercises, over 12 hours of personalized kettlebell instruction and a healthy eating guide. The KettleWorx program results in a remarkable body transformation after just six weeks, and requires only three 20-minute workouts per week. No other product can offer you so much in so little time. Check out KettleWorx now and give your body the gift of health and muscles.
Look and feel your best in a short time. Spare just 20 minutes three times a week to get a complete, full body workout. Most machines work just one or two muscles at a time. . KettleWorx has a system which exercises multiple muscles simultaneously thereby getting the most out of a workout in a very short time. Get a discount with our coupon on KettleWorx


#include <ACIA_sysdep.h>
Public Member Functions | |
| ACIA_sysdep (ACIA *interface) | |
| ~ACIA_sysdep () | |
| void | InterruptRec () |
| void | InterruptEm () |
| void | SendChar () |
| void | Drain () |
Private Attributes | |
| ACIA * | interface |
| int | sock |
| char | sockName [32] |
|
|
Initializes a system dependent part of the ACIA.
|
|
|
Destructor. Deallocate it and close the socket.
|
|
|
Simulate the input register draining. |
|
|
Send a char through the socket and drain the output register |
|
|
Check if there is incoming char. Schedule itself in order to be executed in a while. This cycle start when the ACIA_sysdep object is created. |
|
|
Schedule an interrupt in order to simulate the output register dumping. |
|
|
|
|
|
UNIX socket number for incoming/outgoing packets.
|
|
|
File name corresponding to UNIX socket.
|


www.coded.com
|
Profiles
|
Jobs Vacancies
|
Discussions
Welcome to the Official Page of CODED
We are a leading company that provides all sort computer and software solution to enhance your business. Our Top Leadership Holders are as follows...
Dulaj Rajitha
Cleint Manager
Intergrted Computer Engineering Student, University of Moratuwa


A Lua interface to reCaptcha.
Overview · Installation · Using Recaptcha · Contact · LuaDoc · License
reCaptcha is a free captcha web service that shows the visitors words from old books helping digitize them. This, module provides a Lua interface to recaptcha. You will need to get your own API key from recaptcha.net to use it.
The Lua interface Recaptcha to recaptcha consists of a single file (recaptcha.lua) of less than 100 lines, plus a test script (tests/recaptcha.cgi) which is meant to be used with WSAPI. Here is a list of recent releases:
You can also install it using LuaRocks with
luarocks install recaptcha
or:
luarocks --from=http://sputnik.freewisdom.org/rocks/earth install recaptcha
You will need to get your PRIVATE and PUBLIC API keys from recaptcha.net. Once you have them, create an instance or ReCaptcha like this:
captcha = recaptcha.new{PRIVATE, PUBLIC}
Include the output of captcha:get_html() into your form. For instance:
my_html = "<form action='...' method='post'...>"
.. "..." -- add your fields
.. captcha:get_html()
.. "<input type='submit'/>"
.. "</form>"
Send your POST fields and the user's IP address to captcha:verify(). For instance, for WSAPI:
local request = wsapi.request.new(wsapi_env)
local ok, err = captcha:verify(request.POST, wsapi_env.REMOTE_ADDR)
if ok then
...
else
print ("Error: "..err)
end
recaptcha |
|
| ReCaptcha:get_fields() | Returns a table of names of fields posted by the captcha widget.
|
| ReCaptcha:get_html() | Returns the html block that creates the ReCaptcha widget.
|
| ReCaptcha:verify() | Verifies the captcha.
|
| new() | Creates a new ReCaptcha object.
|
Copyright (c) 2008 Yuri Takhteyev
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Bibliography¶
- FE15
Daniel P. Friedman and Carl Eastlund. The Little Prover. The MIT Press, 1st edition, 2015. ISBN<PHONE_NUMBER>.
- HF13
Jason Hemann and Daniel P Friedman. Μkanren: a minimal functional core for relational programming. In Scheme and Functional Programming Workshop, volume 2013. 2013.


Last login: Mon March 25 08:17:58 on ttys000 ________________________________________________________________________________ | ~ @ writing sound (writing_sound_master) | => help Capturing The Sound of Code Sam Gildea ________________________________________________________________________________ | ~ @ writing sound (writing_sound_master) | =>
For this project I wanted to try and capture a very specific aspect of my life, computer programming. There are many sounds that I find are very unique to the atmosphere of when I am writing a computer program. From the sounds of frantically typing on a keyboard, to the sound of my coffee machine brewing coffee with the sounds of my computer overheating as the fan turns on. My goal was to combine these sounds in a way that allowed me to fully convey what it sounds like when I am computer programming. I wanted to truly capture and produce a field recording of what it sounds like when I am debugging code both inside and outside of my brain.
One thing that I really wanted to convey throughout this piece was the overall environment of programming on a computer. It reminded me a lot of reading about Ludwig Göransson capturing the environment of Wakanda when he was working on the score of Black Panther. Given that I spend hours each day writing code on my computer, this is an environment that I was very familiar with and something I knew exactly how the energy and overall atmosphere had to feel.
The most interesting thing that I found about when creating this project was when I was working studying the sound of my mechanical keyboard when I was typing. When I was programming, the sounds of typing were much more aggressive and sporadic. There would be quick bursts of fast typing followed by a pause. After recording myself typing I started to realize that a lot of my typing while I was programming was following a very specific rhythm. Immediately I realized I wanted to build the entire piece around the very rhythmic and percussive sound of me loudly typing on my keyboard.
I think in many ways I was expressing my self when I was typing. The way I type is very indicative to how my brain works when I am problem solving while I am programming. I wanted to try and represent the way I think in the overall composition of this piece. Another thing I really wanted to add was the sound of coffee. In many ways coffee is a very large part of my overall self when I am programming because typically I spend a lot of time debugging my code and the energy the caffeine from the coffee really helps me focus. I added the sound effect of my coffee machine brewing a cup of coffee and overlayed it with the other noises in the composition.
One of the hardest parts I noticed was trying to represent the energy and overall feeling I get when I am frustrated programming. I wanted to convey my thought process and how it feels when I am stuck on a bug while programming. I wanted people to be able to have a window into my mind when I am programming. That was the overall energy I wanted to show with this piece.
When I was trying to record this piece it reminded me heavily of Steven Feld talking about recording the toads. My mechanical keyboard and the very amplified loud sound of each key slamming on the keyboard was very "acousticly rich". In addition, the sound of my coffee machine had a very full and acoustic sound when it was brewing and dispensing the coffee. The environment of both my coffee machine paired with the sound of my mechanical keyboard was something I didn't realize captured my thoughts and energy as I was programming. It was almost as if my keyboard and my coffee machine was speaking to each other as the noises followed very similar patterns. Both my keyboard and my coffee machine had pauses in between making the sounds which helped me understand what Feld meant when he described the toads making noises and interacting with each other.
The one thing that I really wanted to capture was the chaos of frantically trying to debug a program. It is a very amazing when my mind is running as fast as my keyboard and I feel like my brain is going to explode. I wanted to put the frustration of trying to program in this piece. The way I did this was on top of the sound effects of me programming I wanted to add some electronic noises that in my mind represented a computer. I wanted to combine the inner confusion of my mind with the electronic sounds representing a computer. I managed to achieve this by using a software that replicates a modular synthesizer. Then I managed to use an arpegiator plugin to randomize the notes being played. I wanted the noise to be as random as possible to express my mindset when I am frustrated programming.
In the end, by using some of the readings on Ludwig Göransson, and Steven Feld I believe I was able to capture the environment and mental state of me programming. Overall, I believe what I was able to do was portray my mind and the soundss that are most common while I computer programming for hours.
Listening to Histories of Listening: Collaborative Experiments in Acoustemology with Nii Otoo Annan - Steven Feld


To help you make decodable readers, Bloom needs to know the letters and letter combinations that you will be teaching.
Separate each letter or letter combination with a space. For example, here is what we might use for the English language:
a b c ch d e f g h i j k l m n ng o p q r s sh t th u v w x y z ' -
Notice that the English list includes symbols that are used to make words, like ' in it's.
To help you make decodable readers, Bloom can suggest words that fit within the current stage. There are two ways to give words to Bloom:
| Reader Levels |


--- layout: pattern title: "Item List" summary: "Creates a neatly spaced, stacked list of 'entries'. Typically used 'Entry-like' content listings such as for Blog archive layouts. Comes with `.item-list--contracted` and `.item-list--expanded` modifiers." ---
Lorem ipsum dolor sit amet, consectetur adipisicing elit.


Due to the recent news we want to inform that we developed a new Application that can show the Coronavirus alerts near you.
This software is absolutely free in United Kingdom
You can find the software by this link
Department of Health & Social Care 2020


Pulau Tekong water supply has fully resumed after disruption: PUB
SINGAPORE: The water supply on Pulau Tekong fully resumed on Thursday night (Nov 21), after more than a day of disruption.
Discoloured tap water was reported at some parts of the Basic Military Training Centre (BMTC) on Pulau Tekong on Wednesday morning.
READ: 'Discoloured' tap water reported on Pulau Tekong; SAF servicemen getting water from alternative sources: MINDEF
In a Facebook update on Thursday, PUB said the water supply had fully resumed at 9.30pm and water samples tested safe for drinking and consumption.
The national water agency was notified of the incident at 7.30am on Wednesday and its officers went on site to carry out "flushing" of the water network.
"PUB officers carried out overnight operations and have completed the flushing of the water mains serving the internal service pipes for all camps," said the agency on Thursday.
"PUB worked with BMTC to carry out flushing of the camp’s service system and the water in the BMTC main pipes is now clear."
Water wagons were also deployed to provide a temporary water supply to those affected.
The agency said it would continue to monitor the situation closely. Investigations are ongoing.
In a Facebook update early on Friday, the Ministry of Defence said water in the main pipes at BMTC was clear and that water supply had "fully resumed".


First Column
Second Column
Third Column
Row 1
Text
1
Row 2
Abcdefg
123
Row 3
Abcdefghijklmnop
123456


API Docs for:
Modules
Classes
Authenticate
Chatroom
Comment
Exchange
Follow
Goods
Message
Notification
Queue
Search
Star
Upload
User
Elements
API Docs - Main Index
Something smart and pretty should probably go here.


My Curriculum Vitae
here's your basic info, your applied companys will see.
First Name
Last Name
Gender
Man
Womanan
Degree
Bachelor's degree
Master's degree
Doctoral's degree
Years of experience
Email*
Tel
Blog
Experience & skills
Submit CV


CaseViewNet Solution Finder
Answer a few questions to build the realtime solution that's right for you:
Do you use Case CATalyst?
Choose...
Yes
No
Will you ever have clients receiving realtime remotely?
Choose...
Yes
No
I don't know.
Will a wireless network (Wi-Fi) always be available for you to use?
Choose...
Yes. Wi-Fi will always be available to use.
No. I have to supply my own Wi-Fi.
I don't know.
Submit Answers
Explanation
What to buy
Graphical Representation


ResourceBundle
objects.
Translatable text includes status messages, error messages, log file
entries, and GUI component labels. This text is hardcoded into programs
that haven't been internationalized. You need to locate all occurrences
of hardcoded text that is displayed to end users. For example, you
should clean up code like this:
String buttonLabel = "OK"; ... JButton okButton = new JButton(buttonLabel);
See the section Isolating Locale-Specific Data for details.
Integer fileCount; ... String diskStatus = "The disk contains " + fileCount.toString() + " files.";
Double amount; TextField amountField; ... String displayAmount = amount.toString(); amountField.setText(displayAmount);
You should replace the preceding code with a routine that formats the number correctly. The Java programming language provides several classes that format numbers and currencies. These classes are discussed in the section Numbers and Currencies.
Date currentDate = new Date(); TextField dateField; ... String dateString = currentDate.toString(); dateField.setText(dateString);
If you use the date-formatting classes, your application can display dates and times correctly around the world. For examples and instructions, see the section Dates and Times.
char ch; ... if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) // WRONG!
if
statement misses
the character ü in the German word Grün.
The Character
comparison methods use the Unicode standard
to identify character properties. Thus you should replace the previous
code with the following:
char ch; ... if (Character.isLetter(ch))
Character
comparison methods,
see the section
Checking Character Properties.
String
class. A program that hasn't been internationalized might compare
strings as follows:
String target; String candidate; ... if (target.equals(candidate)) { ... if (target.compareTo(candidate) < 0) { ...
The String.equals
and String.compareTo
methods perform binary comparisons, which are ineffective when sorting
in most languages. Instead you should use the Collator
class, which is described in the section
Comparing Strings.
Characters in the Java programming language are encoded in Unicode. If your application handles non-Unicode text, you might need to translate it into Unicode. For more information, see the section Converting Non-Unicode Text.


The BRIN interface has a high level of abstraction, requiring the access method implementer only to implement the semantics of the data type being accessed. The BRIN layer itself takes care of concurrency, logging and searching the index structure.
All it takes to get a BRIN access method working is to implement a few user-defined methods, which define the behavior of summary values stored in the index and the way they interact with scan keys. In short, BRIN combines extensibility with generality, code reuse, and a clean interface.
There are four methods that an operator class for BRIN must provide:
BrinOpcInfo *opcInfo(Oid type_oid)
Returns internal information about the indexed columns' summary data.
The return value must point to a palloc'd BrinOpcInfo
,
which has this definition:
typedef struct BrinOpcInfo { /* Number of columns stored in an index column of this opclass */ uint16 oi_nstored; /* Opaque pointer for the opclass' private use */ void *oi_opaque; /* Type cache entries of the stored columns */ TypeCacheEntry *oi_typcache[FLEXIBLE_ARRAY_MEMBER]; } BrinOpcInfo;
BrinOpcInfo
.oi_opaque
can be used by the
operator class routines to pass information between support functions
during an index scan.
bool consistent(BrinDesc *bdesc, BrinValues *column,
ScanKey key)
Returns whether the ScanKey is consistent with the given indexed values for a range. The attribute number to use is passed as part of the scan key.
bool addValue(BrinDesc *bdesc, BrinValues *column,
Datum newval, bool isnull)
Given an index tuple and an indexed value, modifies the indicated
attribute of the tuple so that it additionally represents the new value.
If any modification was done to the tuple, true
is
returned.
bool unionTuples(BrinDesc *bdesc, BrinValues *a,
BrinValues *b)
Consolidates two index tuples. Given two index tuples, modifies the indicated attribute of the first of them so that it represents both tuples. The second tuple is not modified.
The core distribution includes support for two types of operator classes: minmax and inclusion. Operator class definitions using them are shipped for in-core data types as appropriate. Additional operator classes can be defined by the user for other data types using equivalent definitions, without having to write any source code; appropriate catalog entries being declared is enough. Note that assumptions about the semantics of operator strategies are embedded in the support functions' source code.
Operator classes that implement completely different semantics are also possible, provided implementations of the four main support functions described above are written. Note that backwards compatibility across major releases is not guaranteed: for example, additional support functions might be required in later releases.
To write an operator class for a data type that implements a totally ordered set, it is possible to use the minmax support functions alongside the corresponding operators, as shown in Table 67.2. All operator class members (functions and operators) are mandatory.
Table 67.2. Function and Support Numbers for Minmax Operator Classes
| Operator class member | Object |
|---|---|
| Support Function 1 | internal function brin_minmax_opcinfo() |
| Support Function 2 | internal function brin_minmax_add_value() |
| Support Function 3 | internal function brin_minmax_consistent() |
| Support Function 4 | internal function brin_minmax_union() |
| Operator Strategy 1 | operator less-than |
| Operator Strategy 2 | operator less-than-or-equal-to |
| Operator Strategy 3 | operator equal-to |
| Operator Strategy 4 | operator greater-than-or-equal-to |
| Operator Strategy 5 | operator greater-than |
To write an operator class for a complex data type which has values included within another type, it's possible to use the inclusion support functions alongside the corresponding operators, as shown in Table 67.3. It requires only a single additional function, which can be written in any language. More functions can be defined for additional functionality. All operators are optional. Some operators require other operators, as shown as dependencies on the table.
Table 67.3. Function and Support Numbers for Inclusion Operator Classes
| Operator class member | Object | Dependency |
|---|---|---|
| Support Function 1 | internal function brin_inclusion_opcinfo() |
|
| Support Function 2 | internal function brin_inclusion_add_value() |
|
| Support Function 3 | internal function brin_inclusion_consistent() |
|
| Support Function 4 | internal function brin_inclusion_union() |
|
| Support Function 11 | function to merge two elements | |
| Support Function 12 | optional function to check whether two elements are mergeable | |
| Support Function 13 | optional function to check if an element is contained within another | |
| Support Function 14 | optional function to check whether an element is empty | |
| Operator Strategy 1 | operator left-of | Operator Strategy 4 |
| Operator Strategy 2 | operator does-not-extend-to-the-right-of | Operator Strategy 5 |
| Operator Strategy 3 | operator overlaps | |
| Operator Strategy 4 | operator does-not-extend-to-the-left-of | Operator Strategy 1 |
| Operator Strategy 5 | operator right-of | Operator Strategy 2 |
| Operator Strategy 6, 18 | operator same-as-or-equal-to | Operator Strategy 7 |
| Operator Strategy 7, 13, 16, 24, 25 | operator contains-or-equal-to | |
| Operator Strategy 8, 14, 26, 27 | operator is-contained-by-or-equal-to | Operator Strategy 3 |
| Operator Strategy 9 | operator does-not-extend-above | Operator Strategy 11 |
| Operator Strategy 10 | operator is-below | Operator Strategy 12 |
| Operator Strategy 11 | operator is-above | Operator Strategy 9 |
| Operator Strategy 12 | operator does-not-extend-below | Operator Strategy 10 |
| Operator Strategy 20 | operator less-than | Operator Strategy 5 |
| Operator Strategy 21 | operator less-than-or-equal-to | Operator Strategy 5 |
| Operator Strategy 22 | operator greater-than | Operator Strategy 1 |
| Operator Strategy 23 | operator greater-than-or-equal-to | Operator Strategy 1 |
Support function numbers 1-10 are reserved for the BRIN internal
functions, so the SQL level functions start with number 11. Support
function number 11 is the main function required to build the index.
It should accept two arguments with the same data type as the operator class,
and return the union of them. The inclusion operator class can store union
values with different data types if it is defined with the
STORAGE
parameter. The return value of the union
function should match the STORAGE
data type.
Support function numbers 12 and 14 are provided to support irregularities of built-in data types. Function number 12 is used to support network addresses from different families which are not mergeable. Function number 14 is used to support empty ranges. Function number 13 is an optional but recommended one, which allows the new value to be checked before it is passed to the union function. As the BRIN framework can shortcut some operations when the union is not changed, using this function can improve index performance.
Both minmax and inclusion operator classes support cross-data-type
operators, though with these the dependencies become more complicated.
The minmax operator class requires a full set of operators to be
defined with both arguments having the same data type. It allows
additional data types to be supported by defining extra sets
of operators. Inclusion operator class operator strategies are dependent
on another operator strategy as shown in
Table 67.3, or the same
operator strategy as themselves. They require the dependency
operator to be defined with the STORAGE
data type as the
left-hand-side argument and the other supported data type to be the
right-hand-side argument of the supported operator. See
float4_minmax_ops
as an example of minmax, and
box_inclusion_ops
as an example of inclusion.


// these two functions in all blocks.
block = copy.copy(old_block)
block.clear_nodes()
if isinstance(block, preprocessor.Preprocessor):
block.clear_weights()
return block
class GraphHyperModel(GraphHyperModelBase):
def copy_block(old_block):
block = old_block.__class__()
block.set_config(old_block.get_config())
return block
class GraphHyperModel(GraphHyperModelBase):


--- title: "Configuring BMC or iDRAC from ESXi or Linux" date: "2012-03-01" redirect_from: "/post/17480234232/configuring-bmc-drac-from-esxi-or-linux" categories: - "VMware ESXi" - "VMware ESX" - "IPMI" - "BMC" - "omconfig" - "KVM" --- VMware ESX 4.1u1, ipmitool 1.8.11, Dell C2100 with BMC or Dell R710 with Enterprise iDRAC6
ryan@buggy:~/src$ tar zxvf ipmitool-1.8.11.tar.gz
ryan@buggy:~/src/ipmitool-1.8.11$ ./configure CFLAGS=-m32 LDFLAGS=-static
ryan@buggy:~/src/ipmitool-1.8.11$ scp ./src/ipmitool qaesx01.qa.lan:/scratch/
root@C2100:~ # cd /scratch/ root@C2100:/vmfs/volumes/4f364c4f-5e22faef-0987-e89a8f229d27 # ./ipmitool shell ipmitool> lan set 1 ipsrc static # If your eth0 is tagged (802.1q), then you may need to set the VLAN # to remove the 802.1q tag, use "lan set 1 vlan id off" #ipmitool> lan set 1 vlan id 43 ipmitool> lan set 1 ipaddr <IP_ADDRESS> ipmitool> lan set 1 netmask <IP_ADDRESS> ipmitool> lan set 1 defgw ipaddr <IP_ADDRESS> ipmitool> lan set 1 auth ADMIN MD5,PASSWORD ipmitool> lan set 1 arp respond on ipmitool> lan set 1 arp generate on ipmitool> lan set 1 arp interval 5 ipmitool> lan set 1 access on ipmitool> user set name 2 root ipmitool> user set password 2 BuggyP@ssw0rd ipmitool> channel setaccess 1 2 callin=on link=on privilege=4 ipmitool> user enable 2 ipmitool> lan print 1 Set in Progress : Set Complete Auth Type Support : NONE MD2 MD5 PASSWORD Auth Type Enable : Callback : MD2 MD5 : User : MD2 MD5 : Operator : MD2 MD5 : Admin : MD5 PASSWORD : OEM : IP Address Source : Static Address IP Address : <IP_ADDRESS> Subnet Mask : <IP_ADDRESS> MAC Address : 00:22:19:27:53:10 SNMP Community String : public IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10 Default Gateway IP : <IP_ADDRESS> Default Gateway MAC : 00:00:00:00:00:00 Backup Gateway IP : <IP_ADDRESS> Backup Gateway MAC : 00:00:00:00:00:00 802.1q VLAN ID : Disabled 802.1q VLAN Priority : 0 RMCP+ Cipher Suites : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 Cipher Suite Priv Max : aaaaaaaaaaaaaaa : X=Cipher Suite Unused : c=CALLBACK : u=USER : o=OPERATOR : a=ADMIN : O=OEM
root@R710:~# ipmitool lan print Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory Get Channel Info command failed Invalid channel: 255The fix is to insert the ipmi kernel module and create the /dev/ipmi0 character device:
root@R710:~# modprobe ipmi_devintf root@R710:~# modprobe ipmi_msghandler root@R710:~# modprobe ipmi_si root@R710:~# cat /proc/devices | grep ipmi 247 ipmidevTake the major number for ipmidev (247 in above example; your machine will probably be different) and create the character block device /dev/ipmi0:
root@R710:~# mknod -m 0600 /dev/ipmi0 c 247 0Now it works
root@R710:~# lsmod | grep ipmi ipmi_si 39597 0 ipmi_devintf 7203 0 ipmi_msghandler 35197 2 ipmi_si,ipmi_devintf root@R710:~# ipmitool lan print Set in Progress : Set Complete Auth Type Support : NONE MD2 MD5 PASSWORD Auth Type Enable : Callback : MD2 MD5 : User : MD2 MD5 : Operator : MD2 MD5 : Admin : MD2 MD5 : OEM : MD2 MD5 IP Address Source : Static Address IP Address : <IP_ADDRESS> Subnet Mask : <IP_ADDRESS> MAC Address : 00:24:e8:7a:8e:0f SNMP Community String : public IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10 Default Gateway IP : <IP_ADDRESS> Default Gateway MAC : 00:00:00:00:00:00 Backup Gateway IP : <IP_ADDRESS> Backup Gateway MAC : 00:00:00:00:00:00 802.1q VLAN ID : Disabled 802.1q VLAN Priority : 0 RMCP+ Cipher Suites : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 Cipher Suite Priv Max : aaaaaaaaaaaaaaa : X=Cipher Suite Unused : c=CALLBACK : u=USER : o=OPERATOR : a=ADMIN : O=OEM
ryan@buggy:~/src/ipmitool-1.8.11$ ./configure --enable-intf-lanplus
ryan@buggy:~/src/ipmitool-1.8.11$ ./src/ipmitool -I lanplus -H <IP_ADDRESS> -U root -P 'BuggyP@ssw0rd' -v shell ipmitool> lan print 1 Set in Progress : Set Complete Auth Type Support : NONE MD2 MD5 PASSWORD Auth Type Enable : Callback : MD2 MD5 : User : MD2 MD5 : Operator : MD2 MD5 : Admin : MD5 PASSWORD : OEM : IP Address Source : Static Address IP Address : <IP_ADDRESS> Subnet Mask : <IP_ADDRESS> MAC Address : 00:22:19:27:53:10 SNMP Community String : public IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10 Default Gateway IP : <IP_ADDRESS> Default Gateway MAC : 00:00:00:00:00:00 Backup Gateway IP : <IP_ADDRESS> Backup Gateway MAC : 00:00:00:00:00:00 802.1q VLAN ID : Disabled 802.1q VLAN Priority : 0 RMCP+ Cipher Suites : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 Cipher Suite Priv Max : aaaaaaaaaaaaaaa : X=Cipher Suite Unused : c=CALLBACK : u=USER : o=OPERATOR : a=ADMIN : O=OEM


{{/*
This file is a 1:1 copy of the one in docsy but with adding scripts
for enabling Datatables on the KEP page.
Remove this notice if a better way is found to include the scripts.
*/}}
{{ with .Site.Params.algolia_docsearch }}
{{ end }}
{{ if .HasShortcode "keps-data" }}
{{ end }}


Plexdata CSV Parser
Overview
The Plexdata CSV Parser represents a library that allows importing and exporting of CSV files based on user defined classes. Further, it is possible to configure the importing and exporting behavior.
Main feature of this library is that users only need to create an own class representing a single line of a CSV file. Each property that has to be included in the CSV processing should be tagged by a proper CSV attribute, which can be obtained from this library. Thereafter, this custom class can be used either together with the importer or together with the exporter to process CSV files.
Finally, it would also be possible (assuming a proper configuration is used) to write a CSV output according to the rules of RFC 4180. For more information about RFC 4180 please visit the web‑site under https://www.ietf.org/rfc/rfc4180.txt.
Documentation
The full API documentation as CHM file is part of the release bundle. The online version of this documentation can be found in the project’s Wiki.
Licensing
The software has been published under the terms of
MIT License
Copyright © 2022 plexdata.de
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Installation
The binary files of the Plexdata CSV Parser are provided as NuGet package and can be obtained from https://www.nuget.org/packages/Plexdata.CsvParser.NET. How to install this NuGet package manually is explained there.
Using the Plexdata CSV Parser together with Visual Studio.
- Create a new .NET Framework project.
-
Open menu Tools → NuGet Package Manager and choose command Manage NuGet Packages for Solution….
- Alternatively, simply right‑click the project in the Solution Explorer and choose command Manage NuGet Packages….
-
Switch to Browse page and in the search box just type
plexdata.csvparser
. -
From the shown list select Plexdata.CsvParser.NET and click button
[Install]
at the right. - Confirm the dialog box and that’s it.
Additionally, all releases can be downloaded from GitHub. Please visit page Plexdata CSV Parser to find all available versions.
Escaping
The current library version also supports escaping of double‑quotes according to the rules of RFC 4180. This mean for example that values which contain a double‑quote inside their strings do no longer end at this double‑quote. Consider the following CSV content for an example what is actually meant.
Name, Notes
"Marley, Bob", "Having an ""escaped"" double quote in here."
"Hurley, Elizabeth", "Having another \"escaped\" double quote in here."
As shown in the example above, the first data row contains ""escaped""
, which actually represents
the double‑quote escaping according to the RFC. The second data line instead contains \"escaped\"
.
This kind of escaping represents the default character escaping which is usually applied in strings. No matter
which of these variations is used, the CSV Importer is able to process both of them.
In contrast to that, the CSV Exporter will always replace each double‑quote inside a string value into two double‑quotes. This is exactly the behavior which the RFC 4180 describes.
Importing
Importing data from an external CSV file is pretty easy. The only thing to do is to create a custom entity
class that contains public properties. As next, each of the properties should be tagged by an attribute called
CsvColumn
.
On the other hand, each property that is not tagged by attribute CsvColumn
will be ignored implicitly.
But it would also be possible to explicitly exclude properties from being processed. For such a case the library
provides an attribute called CsvIgnore
.
Please keep in mind, all examples in this section are provided in C#. For other languages, the code should look pretty similar.
Here below an example of how such a custom entity class could look like.
[CsvDocument]
class Customer
{
[CsvIgnore]
public Int32 Id { get; set; }
[CsvColumn(Offset = 2, Header = "Identifier")]
public Int32 ExternalId { get; set; }
[CsvColumn(Offset = 1, Header = "Forename")]
public String FirstName { get; set; }
[CsvColumn(Offset = 0, Header = "Surname")]
public String LastName { get; set; }
[CsvColumn(Offset = 5, Header = "Active")]
public Boolean IsActive { get; set; }
[CsvColumn(Offset = 3, Header = "Date")]
public DateTime? EntryDate { get; set; }
[CsvColumn(Offset = 4, Header = "Sales")]
public Decimal SalesAverage { get; set; }
[CsvColumn(Offset = 6, Header = "Notes")]
public String Description { get; set; }
}
With an entity class as show above it would be possible to import a CSV file that looks like shown below.
Surname, Forename, Identifier, Date, Sales, Active, Notes
"Marley", "Bob", 1001, 2007-05-03, "1,234.56", nope, "Have a short note here."
"Monroe", "Marilyn", 1002, 2008-06-05, "1,234.56", nope, ""
"Snipes", "Wesley", 1003, 2009-07-06, "1,234.56", yeah, "Have a short note here."
"Hurley", "Elizabeth", 1004, 2005-08-08, "1,234.56", yeah, "Have a short note here."
As next it might be considered to use a configuration. Such a configuration is done by using the
class CsvSettings
. With this class it becomes possible to tell the importer, for example,
how to handle decimal conversions. In this conjunction it’s important to know that the importer
always uses current UI culture. This means that on a German operating system all decimal numbers are
split by a comma. Therefore, if it is wanted to force the usage of a dot separator instead, the culture
“en‑US” should be used.
Here an example of how the importer could be configured using “en‑US” as culture and replacing each “yeah” value of type Boolean by “true” as well as each “nope” value by “false”.
CsvSettings settings = new CsvSettings
{
Culture = CultureInfo.GetCultureInfo("en-US"),
Mappings = new CsvMappings
{
TrueValues = new List<String> { "yeah" },
FalseValues = new List<String> { "nope" },
},
};
Now, the only remaining thing is to perform the import. This is done by calling the CSV Importer together with all necessary parameters. The example below shows exemplarily how to do the file import.
IEnumerable<Customer> result = CsvImporter<Customer>.Load(filename, settings);
foreach (Customer current in result)
{
Console.WriteLine(current.ToString());
}
Console.ReadKey();
Finally, please note, it is strictly recommended to surround each call to the CSV Importer by an
appropriated try…catch
block!
Exporting
The same as mentioned in section Importing applies to Exporting as well. First thing to do, a custom entity class should be created. Such a class could look like shown below.
[CsvDocument]
class Customer
{
[CsvIgnore]
public Int32 Id { get; set; }
[CsvColumn(Offset = 2, Header = "Identifier")]
public Int32 ExternalId { get; set; }
[CsvColumn(Offset = 1, Header = "Forename")]
public String FirstName { get; set; }
[CsvColumn(Offset = 0, Header = "Surname")]
public String LastName { get; set; }
[CsvColumn(Offset = 5, Header = "Active")]
public Boolean IsActive { get; set; }
[CsvColumn(Offset = 3, Header = "Date")]
public DateTime? EntryDate { get; set; }
[CsvColumn(Offset = 4, Header = "Sales")]
public Decimal SalesAverage { get; set; }
[CsvColumn(Offset = 6, Header = "Notes")]
public String Description { get; set; }
}
As next a configuration should be created which is used together with the CSV Exporter. Here an example of such a configuration.
CsvSettings settings = new CsvSettings
{
Culture = CultureInfo.GetCultureInfo("en-US"),
Textual = true,
Mappings = new CsvMappings
{
TrueValue = "yeah",
FalseValue = "nope",
},
};
In contrast to the configuration used for importing, this configuration explicitly enables Textual mode. This mode surrounds each value of type string by double quotes.
Finally, the remaining thing is to perform an export. For this purpose a list of custom entities like this is assumed.
List<Customer> customers = new List<Customer>
{
new Customer {
LastName = "Marley",
FirstName = "Bob",
ExternalId = 1001,
EntryDate = new DateTime(2007, 5, 3),
SalesAverage = 1234.56m,
IsActive = false,
Description = "Have a short note here." },
new Customer {
LastName = "Monroe",
FirstName = "Marilyn",
ExternalId = 1002,
EntryDate = new DateTime(2008, 6, 5),
SalesAverage = 1234.56m,
IsActive = false,
Description = null },
new Customer {
LastName = "Snipes",
FirstName = "Wesley",
ExternalId = 1003,
EntryDate = new DateTime(2009, 7, 6),
SalesAverage = 1234.56m,
IsActive = true,
Description = "Have a short note here." },
new Customer {
LastName = "Hurley",
FirstName = "Elizabeth",
ExternalId = 1004,
EntryDate = new DateTime(2005, 8, 8),
SalesAverage = 1234.56m,
IsActive = true,
Description = "Have a short note here." },
};
Now, exporting of those data takes place like shown as follows.
CsvExporter<Customer>.Save(customers, filename, settings);
Console.ReadKey();
Under the above conditions, the output file would look like this.
Surname,Forename,Identifier,Date,Sales,Active,Notes
"Marley","Bob",1001,2007-05-03T00:00:00,1234.56,nope,"Have a short note here."
"Monroe","Marilyn",1002,2008-06-05T00:00:00,1234.56,nope,
"Snipes","Wesley",1003,2009-07-06T00:00:00,1234.56,yeah,"Have a short note here."
"Hurley","Elizabeth",1004,2005-08-08T00:00:00,1234.56,yeah,"Have a short note here."
As already mentioned, it is strictly recommended to surround each call to the CSV Exporter
by an appropriated try…catch
block!
Reading
Another feature in the current version is the possibility to read a CSV content into some kind of “plain” structure. This plain structure in turn allows an access to each cell independently.
With this in mind, the CSV Reader allows processing of CSV content that either has more than the expected number of cells in a particular line or vice versa that has fewer cells. See code snippet below to get an impression about what is meant in detail.
// Source file could contain this content:
// Name; Notes
// "Marley, Bob"; "Jamaican singer-songwriter"
// "Monroe, Marilyn"; "American actress"; "model and singer"
// "Snipes, Wesley"; "American actor"; "director, film producer"; "martial artist"
// "Hurley, Elizabeth"
CsvSettings settings = new CsvSettings() { Heading = true, Separator = ColumnSeparators.SemicolonSeparator };
CsvContainer container = CsvReader.Read(filename, settings);
String col0row1 = container.GetValue<String>(0, 1) as String; // Marley, Bob
String col0row2 = container.GetValue<String>(0, 2) as String; // Monroe, Marilyn
String col0row3 = container.GetValue<String>(0, 3) as String; // Snipes, Wesley
String col0row4 = container.GetValue<String>(0, 4) as String; // Hurley, Elizabeth
String col1row1 = container.GetValue<String>(1, 1) as String; // Jamaican singer-songwriter
String col1row2 = container.GetValue<String>(1, 2) as String; // American actress
String col1row3 = container.GetValue<String>(1, 3) as String; // American actor
String col1row4 = container.GetValue<String>(1, 4) as String; // null
String col2row1 = container.GetValue<String>(2, 1) as String; // null
String col2row2 = container.GetValue<String>(2, 2) as String; // model and singer
String col2row3 = container.GetValue<String>(2, 3) as String; // director, film producer
String col2row4 = container.GetValue<String>(2, 4) as String; // null
String col3row1 = container.GetValue<String>(3, 1) as String; // null
String col3row2 = container.GetValue<String>(3, 2) as String; // null
String col3row3 = container.GetValue<String>(3, 3) as String; // martial artist
String col3row4 = container.GetValue<String>(3, 4) as String; // null
As shown above, the example CSV file contains just two columns for the header. But in line three the file contains exactly three columns. On the other hand, four columns are available in line four. In contrast to that, line five contains just one single column.
Another detail to mention is that the second value of the call of method GetValue()
starts at one. This is because of the CSV file contains a header at line zero. Therefore,
accessing the data cells must start at line one.
Writing
With the current version it becomes possible to write a matrix of objects, which represents a kind of “plain” CSV content, into a CSV file. This functionality in turn allows to write everything into a CSV file, not matter if the lines contain a flexible number of columns.
The following code snippet shows how to use the CSV Writer to put a flexible content into a CSV file.
List<List<Object>> content = new List<List<Object>>
{
new List<Object> { "Name", "Notes" },
new List<Object> { "Marley, Bob", "Jamaican singer-songwriter" },
new List<Object> { "Monroe, Marilyn", "American actress", "model and singer" },
new List<Object> { "Snipes, Wesley", "American actor", "director, film producer", "martial artist" },
new List<Object> { "Hurley, Elizabeth" }
};
CsvSettings settings = new CsvSettings() {
Heading = true, Textual = true,
Separator = ColumnSeparators.SemicolonSeparator };
CsvWriter.Write(content, filename, settings);
With the above example code in mind, the output file would contain the following content.
Name;Notes
"Marley, Bob";"Jamaican singer-songwriter"
"Monroe, Marilyn";"American actress";"model and singer"
"Snipes, Wesley";"American actor";"director, film producer";"martial artist"
"Hurley, Elizabeth"
Since adding new features it will also be possible to create a CSV file from scratch.
This can easily be done by creating an appropriated CSV container and putting all header
items as well as all line items. For this purpose the CsvContainer
provides
property setters for the index operator as well as for the header operator. The next two
examples illustrate how to use the new property setters.
// Create a container with two columns and five lines.
CsvContainer container = new CsvContainer(2, 5);
// Set both column headers.
container[0, 0] = "Name";
container[1, 0] = "Notes";
// Access each single line and apply their values.
// Be aware, with Heading disabled and accessing a
// column by number requires to start at index one.
container[0, 1] = "Marley, Bob";
container[1, 1] = "Jamaican singer-songwriter";
container[0, 2] = "Monroe, Marilyn";
container[1, 2] = "American actress";
container[0, 3] = "Snipes, Wesley";
container[1, 3] = "American actor";
container[0, 4] = "Hurley, Elizabeth";
container[1, 4] = "American actress";
// Finally, write content into a CSV file.
CsvWriter.Write(container, filename);
Another possibility would be to access columns through its header, as far as exists. The following code snippet demonstrates how to do that in detail.
// Create default settings but with Heading enabled.
CsvSettings settings = new CsvSettings() { Heading = true };
// Create a container with two columns and five lines.
CsvContainer container = new CsvContainer(2, 5, settings);
// Set both column headers.
container[0, 0] = "Name";
container[1, 0] = "Notes";
// Access each single line and apply their values.
// Be aware, with Heading enabled and accessing a
// column by header requires to start at index zero.
container["Name", 0] = "Marley, Bob";
container["Notes", 0] = "Jamaican singer-songwriter";
container["Name", 1] = "Monroe, Marilyn";
container["Notes", 1] = "American actress";
container["Name", 2] = "Snipes, Wesley";
container["Notes", 2] = "American actor";
container["Name", 3] = "Hurley, Elizabeth";
container["Notes", 3] = "American actress";
// Finally, write content into a CSV file.
CsvWriter.Write(container, filename, settings);
For shure, the last example looks pretty much as the same as the previous example. But
some details are different. First of all an instance of the CsvContainer
is created with a settings instance where property Heading
is enabled. As
next the header line is created by using the plain index operator. Thereafter all content
lines are accessed by using the column header instead of a line index.
Attention: It is important to note in this context that the line index must start at zero
as long as Heading
is activated!
Running the code of both examples from above will create a CSV file with a content as shown below.
Name,Notes
"Marley, Bob",Jamaican singer-songwriter
"Monroe, Marilyn",American actress
"Snipes, Wesley",American actor
"Hurley, Elizabeth",American actress
Settings
The Settings are made by using a library class called CsvSettings
. This class
provides properties that allow to control the handling of data imports and data exports. Which of
these properties is responsible for what, is part of this section.
| Property | Description |
|---|---|
| Culture | The used culture mainly applies to number conversion. For example using German culture will treat numbers such as 1.234,56 as valid decimals. In contrast to that, using an English culture will treat a number like 1,234.56 as valid decimal value. Default value is current UI culture. |
| Encoding | File encoding is relevant for both, importing and exporting CSV data. It describes how data have to be handled during loading as well as during saving. For most cases UTF‑8 file encoding is a good choice. Default value is UTF‑8. |
| Exactly | If this mode is enabled, then the column heading as well as the column order must exactly fit the data type definition, but only if Heading mode is enabled as well. Furthermore, exactly treatment also applies to data type conversion. For example, an exceptions is thrown if exactly mode is enabled and one of the imported data items could not be converted. The exactly mode is only relevant for a CSV data import and its default value is false. |
| Heading | If this mode is enabled, then the header is written into the output. In this case the header information is taken from the column attributes. In case of a column attribute does not contain header information then the property name is taken as header instead. Otherwise, the header is excluded. Default value is true. |
| Mappings |
The mapping is used to interpret values while importing respectively while exporting data. For example, an
imported CSV file contains yes and/or no for Boolean values. In such a case
the mapping is used to tell the importer that yes means true and of course vice
versa no means false . Default value is standard mapping (see below).
|
| Separator | The separator character is used to determine the split position in each line of a CSV file. Usually a comma is used for this purpose. But because of missing a clear definition there are many CSV files that uses various different characters. Some of the examples are: semicolon, tabulator, colon and sometimes spaces as well. With this property it becomes possible to define the character to be used to split the content of any CSV file. Default value is a comma. |
| Textual | If this mode is enabled, then any textual data types are enclosed in double quotes. This would overwrite the default behavior. Default behavior means that only those textual data types are enclosed in double quotes which contain control characters such as the separator, carriage returns, line feeds, and/or double quotes. The textual mode is only relevant for a CSV data export and its default value is false. |
The Mappings are used to convert CSV values into its programmable representation. This handling works
for both, importing and exporting. The library provides a class called CsvMappings
for this purpose.
How the value mapping works is part of the following details.
Consider a CSV file to import that contains values of type Boolean. But those values are not set to
true
respectively to false
. These values using yes
and no
instead. So, the problem is how to convert yes
into true
and no
into
false
. The solution, class CsvMappings
can do this mapping.
The following example demonstrates how to configure class CsvMappings
to become able to handle
a mapping of values yes
and no
.
CsvMappings Mappings = new CsvMappings
{
TrueValues = new List<String> { "yeah" },
FalseValues = new List<String> { "nope" },
};
On the other hand, the same mapping can be applied for exporting CSV data. But instead of using the “plural”
properties, the “singular” properties are configured. See following example of how to put yes
and no
into the output file, instead of true
and false
.
CsvMappings Mappings = new CsvMappings
{
TrueValue = "yes",
FalseValue = "no",
};
See following overview for more details about the properties of class CsvMappings
.
| Property | Description |
|---|---|
| TrueValue | Modifies the descriptor representing a “True” value which should occur in an exported CSV file instead of the standard Boolean “True” value. The default “True” descriptor is “true”. |
| FalseValue | Modifies the descriptor representing a “False” value which should occur in an exported CSV file instead of the standard Boolean “False” value. The default “False” descriptor is “false”. |
| NullValue | Modifies the descriptor representing a “Null” value which should occur in an exported CSV file instead of an empty string. The default “Null” descriptor is “empty”. |
| TrueValues | Modifies the list of descriptors containing all possible values representing variations of “True” which may occur in imported CSV files. The default list of “True” descriptors contain “true”, “1”, “y” and “yes”. |
| FalseValues | Modifies the list of descriptors containing all possible values representing variations of “False” which may occur in imported CSV files. The default list of “False” descriptors contain “false”, “0”, “n” and “no”. |
| NullValues | Modifies the list of descriptors containing all possible values representing variations of “Null” which may occur in imported CSV files. The default list of “Null” descriptors just contains “<null>”. |
Limitation
There are some limitations when using the Plexdata CSV Parser. Clarifying them is task of this section.
The content of a CSV file header may contain the separator character. In such a case it is strictly recommended to ensure that each header part is enclosed in double quotes that contains the separator. Here an example of what is meant.
"Head,er1",Header2,Header3
Such a constellation will not cause any trouble if the header is formatted as shown above. But if the header of a CSV file is formatted like shown below, then a problem will occur.
"Head,er1","Header2,Header3"
In this case the parser will discover only two columns, instead of the wanted three. This will end up in an error and the parser gives up with an exception!


int argc, code; char *string; char **argv; ... code = Tcl_SplitList(interp, string, &argc, &argv);Then you should eventually free the storage with a call like the following:
Tcl_Free((char *) argv);
Tcl_SplitList normally returns TCL_OK, which means the list was successfully parsed. If there was a syntax error in list, then TCL_ERROR is returned and the interpreter's result will point to an error message describing the problem (if interp was not NULL). If TCL_ERROR is returned then no memory is allocated and *argvPtr is not modified.
Tcl_Merge is the inverse of Tcl_SplitList: it takes a collection of strings given by argc and argv and generates a result string that has proper list structure. This means that commands like index may be used to extract the original elements again. In addition, if the result of Tcl_Merge is passed to Tcl_Eval, it will be parsed into argc words whose values will be the same as the argv strings passed to Tcl_Merge. Tcl_Merge will modify the list elements with braces and/or backslashes in order to produce proper Tcl list structure. The result string is dynamically allocated using Tcl_Alloc; the caller must eventually release the space using Tcl_Free.
If the result of Tcl_Merge is passed to Tcl_SplitList, the elements returned by Tcl_SplitList will be identical to those passed into Tcl_Merge. However, the converse is not true: if Tcl_SplitList is passed a given string, and the resulting argc and argv are passed to Tcl_Merge, the resulting string may not be the same as the original string passed to Tcl_SplitList. This is because Tcl_Merge may use backslashes and braces differently than the original string.
Tcl_ScanElement and Tcl_ConvertElement are the procedures that do all of the real work of Tcl_Merge. Tcl_ScanElement scans its src argument and determines how to use backslashes and braces when converting it to a list element. It returns an overestimate of the number of characters required to represent src as a list element, and it stores information in *flagsPtr that is needed by Tcl_ConvertElement.
Tcl_ConvertElement is a companion procedure to Tcl_ScanElement. It does the actual work of converting a string to a list element. Its flags argument must be the same as the value returned by Tcl_ScanElement. Tcl_ConvertElement writes a proper list element to memory starting at *dst and returns a count of the total number of characters written, which will be no more than the result returned by Tcl_ScanElement. Tcl_ConvertElement writes out only the actual list element without any leading or trailing spaces: it is up to the caller to include spaces between adjacent list elements.
Tcl_ConvertElement uses one of two different approaches to handle the special characters in src. Wherever possible, it handles special characters by surrounding the string with braces. This produces clean-looking output, but cannot be used in some situations, such as when src contains unmatched braces. In these situations, Tcl_ConvertElement handles special characters by generating backslash sequences for them. The caller may insist on the second approach by OR-ing the flag value returned by Tcl_ScanElement with TCL_DONT_USE_BRACES. Although this will produce an uglier result, it is useful in some special situations, such as when Tcl_ConvertElement is being used to generate a portion of an argument for a Tcl command. In this case, surrounding src with curly braces would cause the command not to be parsed correctly.
By default, Tcl_ConvertElement will use quoting in its output to be sure the first character of an element is not the hash character (“#”.) This is to be sure the first element of any list passed to eval is not mis-parsed as the beginning of a comment. When a list element is not the first element of a list, this quoting is not necessary. When the caller can be sure that the element is not the first element of a list, it can disable quoting of the leading hash character by OR-ing the flag value returned by Tcl_ScanElement with TCL_DONT_QUOTE_HASH.
Tcl_ScanCountedElement and Tcl_ConvertCountedElement are the same as Tcl_ScanElement and Tcl_ConvertElement, except the length of string src is specified by the length argument, and the string may contain embedded nulls.