Basics first. I'm originally from New York, but went to school at Providence college and liked the city so much that I stayed here. My absolute favorite movie of all time, without dispute, is The Lion King. I will defend my opinion on that to my grave. I love math, the Mets and Italian food. I'm struggling to learn to play the Ukulele. I love snowboarding, and have played Ultimate (Frisbee) obsessively since my Freshman year of college way back in 2012.
I picked up coding my junior year of college as part of my mathematics major and immediately fell in love. I learned C++ in school, Python during my senior year internship, Javascript on the side, and I currently develop in PxPlus at work. I love a challenge and diving into new problems head first. I love learning new tools and trying to approach problems from all different angles.
Farsounder is a company that makes sonars that generate a 3-D map of the ocean floor in front of the ship they're installed on. I interned there for around a year, and worked in both C++ and Python. Although I learned C++ in school, I had never written anything in Python before.
I learned how to use Python via my first project at the internship. I wrote various scripts that created a hash-based tag support system that functioned as a lookup tool for the large collection of internal data playbacks. Later in the internship, I expanded on my Python knowledge to work on a research project regarding the feasibility of using the forward-looking sonar for depth approximation. This involved creating visualization tools with tkinter and matplotlib to graph the various depths the forward looking sonar recorded, and then, using tools like numpy, match them against a straight-down only depth finder for accuracy. The main hurdle with this project was correlating the ship's path (which provided the straight down measurement) with the array of data taken from in front of the ship.
I also improved my C++ skills there, it being my first experience with C++ out of a classroom. I completed two separate projects with C++ during my internship. First I implemented improvements to the C++ map based overlay. This involved redesigning the look of how the system displayed the ships recent path. It was my first exercise in digging into a deep codebase to find exactly where the logic I needed to change lived. Once I tracked that down, changing how the line was drawn was pretty easy. With my newly learned skill of "code spelunking" I moved on to the next portion. Using some trigonometry, I created a feature that tracked where on the map the mouse cursor was, and then calculated the distance the cursor was from the bow of the ship, and at what angle it was.
For my final project of the internship, I implemented
a custom shortcut key feature. This project used the RegisterHotKey
function in C++ to allow the user
to define their own shortcuts in an .ini
file, and then used ZeroMQ as a message queue to relay the captured
hot keys to their corresponding functions in the program (such as zoom, or change modes or themes).
Computer Associates makes ERP software for millwork companies, lumber yards and door shops. While there I developed in a language call PxPlus. Its a language influenced by Business Basic and boasts the benefits of being easy to use to create GUI screens, its own built in database and it works cross platform. Its also a language I had never heard of when I started my new job!
I started working, right out of college, in the customer support department, where I was responsible for taking customers error reports, often working directly with the users, in order to track down the origins, and then fix bugs in the software. Sometimes the fixes required altering the client's code base, other times it required reconstructing corrupt data. This was a great way to learn both how the industry worked, and learn how to use a language I'd never encountered.
After about a year, I was promoted to become a consultant for the Millwork team. In this role I was responsible for actually developing new software features for clients. I mainly worked directly with clients to customize the software package to better fit their daily needs. The biggest project I worked on, however, lived on the web.
One of its the other nice, newer features, PxPlus allowed for a developer to easily convert an existing code base to be used on the web. One of our clients wanted to create a web store for their business, and I was assigned to help out on the execution. This involved creating a few new displays to interact with the client's database, allowing for their customers to make purchases directly, as well as designing the CSS to fit what the client wanted the site to look like.
After completing a few of the freecodecamp projects, I decided to combine some of them all into a single page, inspired by the momentum addon. This page combines a weather widget, random quote generator and a wikipedia search widget, with a random background image. You can find the codepen link for it here.
Another freecodecamp project. This is a simple calculator I made using JS. You can find the project here.
This is my rendition of a Fibonacci Clock. Its a cool way to tell time, based on the Fibonacci sequence. small squares are worth 1 each. Then, the values of the squares increase based on size (2,3,5). To tell time you add up the squares. If a square is blue, it counts towards the hours. If it is green, it counts towards minutes. A red square counts for both hours and minutes. To figure out the time, sum the hours and minutes. Minutes need to be multiplied by 5 after they're summed (so it is only accurate within 5 minutes). The pictured screenshot represents 4:30. You can find that project here!


Second Video as part of a presentation MSOSUG in April 2011 showing how to create a Solaris 10 branded container in Solaris 11
--- title: "Solaris 10 Container in Solaris 11" layout: "post" permalink: "/2011/04/solaris-10-container-in-solaris-11.html" uuid: "8656907387137820136" guid: "tag:blogger.com,1999:blog-8745734052417186264.post-8656907387137820136" date: "2011-04-17 12:30:00" updated: "2011-04-17 12:39:53" description: blogger: siteid: "8745734052417186264" postid: "8656907387137820136" comments: "0" categories: [blog, work, Solaris 11, solaris] tags: [work, Solaris 11, solaris] author: name: "Alan Chalmers" url: "https://plus.google.com/109008868852571463084?rel=author" image: "//lh6.googleusercontent.com/-vRVdiWd12ak/AAAAAAAAAAI/AAAAAAAAHKc/wXgK4dFefp8/s512-c/photo.jpg" ---


If you have questions around timing, pricing, or anything else, please feel free to reach out. We typically respond same day.
If you're ready to move ahead, please send us your project details including a link to your store so we get an idea of your styles (or attach a few pics). Please include details around the number of items, images per item, timeline and any special instructions. We will get back to you same day or the next business day at the latest with more info - photoaisle@gmail.com


Details of former 'Isibaya' actor Andile Gumbi's memorial released
Phakamani Mvelashe
Cape Town - Details of former Isibaya actor Andile Gumbi’s memorial have finally been released.
His memorial service will take place at Assemblies of God church in Sandton, north of Johannesburg on Wednesday from 14:00.
The actor, who is best known for his role as Zweli Ngubane on Isibaya, lost his life after suffering a heart attack.
He was admitted at the Shaare Zedek Medical Centre in Israel, Jerusalem where he fought for his life in ICU.
Even though the details have not been confirmed, Move! has learnt that his funeral will be on Saturday in Durban.
The family representatives will issue more details after the memorial service.


-{% extends 'layout.html' %} {% block pageTitle %} Blank template - NHS.UK prototype kit {% endblock %} {% block beforeContent %} {{ breadcrumb({ href: "/", text: "Home" }) }} {% endblock %} {% block content %}
Please only enter details of anyone you haven't already named or identified.


This is a fake website with vacation packages to Hawaii, to demonstrate using rows and columns to make grids. This pair project uses HTML CSS and Bootstrap. I should emphasize that Herbert is a dog.


Level 100 character build that utilizes fire combat magic. Race: Elf Levels: * Combat: 100 * 1 Brilliance * 20 Devastation * 20 Searing Flames * 19 Quickened Casting * 20 Ignite * 20 Arcane Fury * Melee: 0 * Nature: 0 * Ranged: 0


Founded in 2010, Cuberto's expert team of iOS and Android mobile developers creates stunning, highly polished applications. We've delivered 50+ successful apps for clients across the globe. Our goals are simple: develop brilliant, high‑end software that guarantees results.
Whether you're looking to increase brand engagement, enhance productivity, or cultivate the best online presence for your company, you've come to the right place. From conception to completion, Cuberto's revolutionary approach to style blows past cookie-cutter designs because we do what others don't.
We designed an app
with HD-quality calling
and low rates.
Rebranding and design
for an international
calling app.
Built a professional
instant messenger
for business communication.
Designed and built
a social application
for study-abroad students.
Online community
for finding solutions
in the hospitality industry.
Total branding
overhaul for a goods
distribution app.
Branding and design
for a messenger with
music videos.
We made UX/UI
design a social network
for traders.
Design and development
of a medical startup
for ECG monitoring.
Design and development
of the official app
for the WHSD tollway.
Created a clever, high-end
app which enables users to
learn English words.
Design and development
of an application
in the mathematics field.
Development and design
of a social media application
for sports fans.
Redesigned a popular
coloring book with
copyrighted drawings.
Developing the first
entertainment app
for Kazakhstani cities.


Condo security guard jailed for stealing cash card and Tongkat Ali bottles
by Rachel PhuaSINGAPORE: A security guard who stole a cash card and eight Tongkat Ali bottles was sentenced to four weeks' jail on Wednesday (Nov 20).
Ong Seng Poh, 59, pleaded guilty to one charge of theft and two charges of theft in dwelling. Five other charges were taken into consideration.
The court heard that on the morning of Oct 14, 2018, Ong noticed that a car parked in the basement of The Rise@Oxley condominium was unlocked.
Ong, who was working as a security guard at the condo along Oxley Rise, then opened the car door and took the cash card out from the in-vehicle unit.
The same day, Ong transferred the cash value of S$192.47 from the stolen cash card into his personal bank account.
Ong has since made restitution of S$200 to the car owner.
The following year on Jul 11, Ong stole four bottles of Tongkat Ali bottles valued at S$128 each from Overseas Emporium, a departmental store inside People’s Park Complex.
He repeated the act again on Jul 24. His actions were captured on closed-circuit television cameras at the shop on both occasions.
Ong was arrested on Jul 25.
Four bottles of the Tongkat Ali medicine were seized, but the bottles’ seals had been compromised.
The total value across all charges was S$1916.36.
For theft in dwelling, Ong could have been jailed for up to seven years, and liable to a fine, while for each charge of theft, Ong could have been jailed for up to three years, fined, or both.


---
layout: post
title: "Cloud Security: Vulnerabilities and Threats."
date: 2019-04-12 23:45:13 -0400
background: '/img/posts/05.jpg'
---
Cloud security is the security of an application, data, infrastructure, and network
in cloud computing. Security in public cloud is a shared responsibility between user
and cloud service provider. Many organization uses Hybrid cloud to have better
security so that they can keep the most sensitive data in private cloud within
own data center boundary. Shared responsibility also gets changed with the cloud
vendor and what is in SLA that you signed.
AWS defines shared responsibility as AWS is responsible for “security of the cloud”
that means hardware, software, networking, and facilities that run AWS Cloud services.
Customer is responsible for “security in the cloud” means If a customer deploys an
Amazon EC2 instance, they are responsible for management of the guest operating system
(including updates and security patches), any application software or utilities
installed by the customer on the instances, and the configuration of the AWS-provided
firewall (called a security group) on each instance.
Shared responsibility (AWS).
Before designing security first you should do the cost-benefit analysis and
risk tolerance of organization. Every workload does not require the highest level of
encryption and security.
If you are migrating from your data center to cloud, you will need to have all the
security measures that you have an on-premises data center. But when you are migrating
from in-house data center to third-party data center, you have to put some additional
security measure because of multi-tenancy nature of the public cloud.
To ensure security, cloud vendor and cloud customer can use Cloud Controls
Matrix (CCM), a control framework provided by Cloud Security Alliance (CSA),
that provides industry-accepted security standards. The CSA CCM is specifically
designed to provide fundamental security principles to guide cloud vendors and to
assist prospective cloud customers in assessing the overall security risk of a cloud
provider. As a framework, the CSA CCM provides organizations with the needed structure,
detail, and clarity relating to information security tailored to the cloud industry.
A report published by Cloud Security Alliance (CSA) about the top threats of
cloud computing, using security guidelines and this report below is the main point
to consider for security:
-
Data Breaches: Any data or information that is not intended for unauthorized access
is stolen because of human error, application vulnerabilities, or poor security
practices. The primary objective of a targeted attack is data breaches.
-
Weak Identity, Credential, and Access Management: Lack of identity and access management
system and credential policy is the main reason for data breaches. Identity management
system must support immediate de-provisioning of access to resources when personnel
changes. We can consider multifactor authentication system. TLS certificates,
keys used to protect the access of data and keys used to encryption of data at
rest must be rotated periodically. There should be a provision to enforce change
password periodically.
-
Malicious Insiders: CERN defines an insider threat as follows: “A malicious
insider threat to an organization is a current or former employee, contractor,
or other business partner who has or had authorized access to an organization’s
network, system, or data and intentionally exceeded or misused that access in a
manner that negatively affected the confidentiality, integrity, or availability
of the organization’s information or information systems.”
-
Advanced Persistent Threats (APTs) : Spearphishing, direct hacking systems,
delivering attack code through USB devices, penetration through partner
networks and use of unsecured or third-party networks are common points of entry
for APTs. Awareness programs that are regularly reinforced are one of the best
defenses against these types of attacks because many of these vulnerabilities
require user intervention or action.
-
Denial of Service (DoS): Denial-of-service (DoS) attacks are attacks meant to
prevent users of a service from being able to access their data or their
applications. By forcing the targeted cloud service to consume inordinate
amounts of finite system resources such as processor power, memory, disk space
or network bandwidth, the attacker—or attackers, as is the case in distributed
denial-of-service (DDoS) attacks—causes an intolerable system slowdown and leaves
all legitimate service users confused and angry as to why the service is not responding.
-
Network Security in the cloud: Ensuring the confidentiality and integrity of an
organization’s data-in-transit is very important in network security. Stratoscale
identifies the following four principles of network security in cloud computing:
-
Isolation between multiple zones should be guaranteed using layers of firewalls.
-
Network controls for traffic to and from their applications.
-
End-to-end transport level encryption should be used by applications.
-
Standard secure encapsulation protocols such as IPSEC, SSH, SSL
should be used when deploying a virtual private cloud.
To reduce vulnerability in the cloud, organizations can consider below steps:
-
Make sure everyone in the organization understands Cloud Service Provider’s
shared responsibility model and its impact based on their role in an organization.
-
Good planning is required for selecting an appropriate tool and technology
or any applications to move in the cloud. Also, a good amount of analysis
and planning needed to buy vs build analysis.
-
Ensure all steps should be taken to maintain the availability of your application.
-
Should have good real-time and continuous monitoring and alert mechanism in place,
so that you can identify prospective threat upfront. For example, you started
getting a huge hit from an area where you do not have any customer, or you can
catch if anyone trying continuously with a different wrong token to access your system.
-
Always rotate cryptographic key and TLS key based on regular or irregular
rotation strategy you have chosen.
-
Continuously learning about the latest trends and vulnerabilities and keep
updating your security plan and tools accordingly.
-
Implements best practices for deployments and ensure to have full automation.
-
Ensure proper use of Identity and Access Management (IAM) for assign user
access rights and resource access policies.
Photographs by Unsplash.


|
s2n-doxygen-full
|
Data Fields | |
| s2n_hmac_algorithm | alg |
| uint8_t | in_key [80] |
| uint32_t | in_key_len |
| uint8_t | salt [80] |
| uint32_t | salt_len |
| uint8_t | info [80] |
| uint32_t | info_len |
| uint8_t | pseudo_rand_key [MAX_PSEUDO_RAND_KEY_SIZE] |
| uint32_t | prk_len |
| uint8_t | output [MAX_OUTPUT_SIZE] |
| uint32_t | output_len |
Definition at line 35 of file s2n_hkdf_test.c.
Definition at line 36 of file s2n_hkdf_test.c.
| uint8_t in_key[80] |
Definition at line 37 of file s2n_hkdf_test.c.
| uint32_t in_key_len |
Definition at line 38 of file s2n_hkdf_test.c.
| uint8_t salt[80] |
Definition at line 39 of file s2n_hkdf_test.c.
| uint32_t salt_len |
Definition at line 40 of file s2n_hkdf_test.c.
| uint8_t info[80] |
Definition at line 41 of file s2n_hkdf_test.c.
| uint32_t info_len |
Definition at line 42 of file s2n_hkdf_test.c.
| uint8_t pseudo_rand_key[MAX_PSEUDO_RAND_KEY_SIZE] |
Definition at line 43 of file s2n_hkdf_test.c.
| uint32_t prk_len |
Definition at line 44 of file s2n_hkdf_test.c.
| uint8_t output[MAX_OUTPUT_SIZE] |
Definition at line 45 of file s2n_hkdf_test.c.
| uint32_t output_len |
Definition at line 46 of file s2n_hkdf_test.c.


Citation Custom Elements
Any random guy can say cool random things.
Pay attention!
Something critical just happened!
This is a checkpoint
Fork me on Github
Felipe N. Moura


Thank you for purchasing my item. If you have any questions that are beyond the scope of this help file, please feel free to email me via my user page contact form on CodeCanyon. Thanks so much!
This is HTML5 ready video player that plays videos from YouTube, Vimeo and self hosted videos (mp4) with optional pre-roll, mid-roll, post-roll and pop-up advertising system for each video you create.
Player supports gallery (with unlimited videos) which can be on right side or turned off.
You can add videos to playlist manually or automatically (from youtube playlist or youtube user channel).
Inside the download zip from CodeCanyon you'll find the following structure:
deploy - containes "minified" versions of all scripts (js/css). This means the scripts/css
files have been compressed so they load faster.
documentation - containes documentation files
source - containes original versions of all scripts (js/css).Identical to "deploy" folder
except nothing is minified. If you wish to change css and javascript files use this folder. After making
changes, for faster loading you can minify the CSS/JS files by using the following tools:
JS: http://closure-compiler.appspot.com/home
CSS: http://www.refresh-sf.com/yui/
Open index.html file from the "deploy" folder.
Video player only needs few lines of code to get started:
$(document).ready(function($) { videoPlayer = $("#Elite_video_player").Video(); });
But you can also override the default settings by passing the arguments.
Below is example of calling the plugin with explanation of arguments (all plugin options) and added 1 video to the playlist:
$(document).ready(function($) { videoPlayer = $("#Elite_video_player").Video({ //ALL PLUGIN OPTIONS instanceName:"player1", //name of the player instance autohideControls:3, //autohide HTML5 player controls hideControlsOnMouseOut:"No", //hide HTML5 player controls on mouse out of the player: "Yes","No" videoPlayerWidth:1006, //fixed total player width videoPlayerHeight:420, //fixed total player height responsive:false, //this option will overwrite above videoPlayerWidth/videoPlayerHeight and set player to fit your div (parent) container: true/false playlist:"Right playlist", //choose playlist type: "Right playlist", "Off" playlistScrollType:"light", //choose scrollbar type: "light","minimal","light-2","light-3","light-thick","light-thin","inset","inset-2","inset-3","rounded","rounded-dots","3d" playlistBehaviourOnPageload:"opened", //choose playlist behaviour when webpage loads: "closed", "opened" (not apply to Vimeo player) autoplay:false, //autoplay when webpage loads: true/false colorAccent:"#cc181e", //plugin colors accent (hexadecimal or RGB value - http://www.colorpicker.com/) vimeoColor:"00adef", //set "hexadecimal value", default vimeo color is "00adef" youtubeControls:"custom controls", //choose youtube player controls: "custom controls", "default controls" youtubeSkin:"dark", //youtube theme: light,dark youtubeColor:"red", //youtube color: red, white youtubeQuality:"default", //choose youtube quality: "small", "medium", "large", "hd720", "hd1080", "highres", "default" youtubeShowRelatedVideos:"Yes", //choose to show youtube related videos when video finish videoPlayerShadow:"effect1", //choose player shadow: "effect1" , "effect2", "effect3", "effect4", "effect5", "effect6", "off" loadRandomVideoOnStart:"No", //choose to load random video when webpage loads: "Yes", "No" shuffle:"No", //choose to shuffle videos when playing one after another: "Yes", "No" (shuffle button enabled/disabled on start) posterImg:"images/preview_images/poster.jpg",//player poster image onFinish:"Play next video", //"Play next video","Restart video", "Stop video", nowPlayingText:"Yes", //enable disable now playing title: "Yes","No" fullscreen:"Fullscreen native", //choose fullscreen type: "Fullscreen native","Fullscreen browser" rightClickMenu:true, //enable/disable right click over player: true/false hideVideoSource:false, //option to hide self hosted video sources (to prevent users from download/steal your videos): true/false showAllControls:true, //enable/disable all HTML5 player controls: true/false allowSkipAd:true, //enable/disable "Skip advertisement" option: true/false infoShow:"Yes", //enable/disable info option: "Yes","No" shareShow:"Yes", //enable/disable all share options: "Yes","No" facebookShow:"Yes", //enable/disable facebook option individually: "Yes","No" twitterShow:"Yes", //enable/disable twitter option individually: "Yes","No" mailShow:"Yes", //enable/disable mail option individually: "Yes","No" facebookShareName:"Elite video player", //first parametar of facebook share in facebook feed dialog is title facebookShareLink:"http://codecanyon.net/item/elite-video-player-wordpress-plugin/10496434", //second parametar of facebook share in facebook feed dialog is link below title facebookShareDescription:"Elite Video Player is stunning, modern, responsive, fully customisable high-end video player for WordPress that support advertising and the most popular video platforms like YouTube, Vimeo or self-hosting videos (mp4).", //third parametar of facebook share in facebook feed dialog is description below link facebookSharePicture:"https://0.s3.envato.com/files/123866118/preview.jpg", //fourth parametar in facebook feed dialog is picture on left side twitterText:"Elite video player", //first parametar of twitter share in twitter feed dialog is text twitterLink:"http://codecanyon.net/item/elite-video-player-wordpress-plugin/10496434", //second parametar of twitter share in twitter feed dialog is link twitterHashtags:"wordpressvideoplayer", //third parametar of twitter share in twitter feed dialog is hashtag twitterVia:"Creative media", //fourth parametar of twitter share in twitter feed dialog is via (@) googlePlus:"http://codecanyon.net/item/elite-video-player-wordpress-plugin/10496434", //share link over Google + logoShow:"Yes", //"Yes","No" logoClickable:"Yes", //"Yes","No" logoPath:"images/logo/logo.png", //path to logo image logoGoToLink:"http://codecanyon.net/", //redirect to page when logo clicked logoPosition:"bottom-left", //choose logo position: "bottom-right","bottom-left" embedShow:"Yes", //enable/disable embed option: "Yes","No" embedCodeSrc:"www.yourwebsite.com/videoplayer/index.html", //path to your video player on server embedCodeW:"746", //embed player code width embedCodeH:"420", //embed player code height embedShareLink:"www.yourwebsite.com/videoplayer/index.html", //direct link to your site (or any other URL) you want to be "shared" youtubePlaylistID:"", //automatic youtube playlist ID (leave blank "" if you want to use manual playlist). For example: for this URL https://www.youtube.com/playlist?list=LL4qbSRobYCjvwo4FCQFrJ4g youtubePlaylistID is "LL4qbSRobYCjvwo4FCQFrJ4g" youtubeChannelID:"", //automatic youtube channel ID (leave blank "" if you want to use manual playlist). For example: for this URL https://www.youtube.com/channel/UCHqaLr9a9M7g9QN6xem9HcQ youtubeChannelID is "UCHqaLr9a9M7g9QN6xem9HcQ" //manual playlist videos:[ { videoType:"youtube", //choose video type: "HTML5", "youtube", "vimeo" title:"Youtube video", //video title showing in playlist youtubeID:"LfTLc5JGFPc", //if you use single youtube videos youtube ID is for example "LfTLc5JGFPc" from URL https://www.youtube.com/watch?v=LfTLc5JGFPc vimeoID:"32707724", //vimeo ID is for example 32707724 for URL http://vimeo.com/32707724 mp4:"http://player.pageflip.com.hr/videos/Pieces.mp4", //URL to self-hosted video (mp4) on your server imageUrl:"images/preview_images/poster2.jpg", //display image instead of playing video prerollAD:"no", //show pre-roll "yes","no" prerollGotoLink:"http://codecanyon.net/", //pre-roll goto link preroll_mp4:"http://player.pageflip.com.hr/videos/Short_Elegant_Logo_Reveal.mp4", //URL to self-hosted pre-roll video (mp4) on your server prerollSkipTimer:5, //seconds when to show skip advertisement button midrollAD:"yes", //show mid-roll "yes","no" midrollAD_displayTime:"00:10", //show mid-roll at any custom time in format "minutes:seconds" ("00:00") midrollGotoLink:"http://codecanyon.net/", //mid-roll goto link midroll_mp4:"http://creativeinteractivemedia.com/player/videos/Logo_Explode.mp4", //mid-roll video mp4 format midrollSkipTimer:5, postrollAD:"yes", //show post-roll "yes","no" postrollGotoLink:"http://codecanyon.net/", //post-roll goto link postroll_mp4:"http://creativeinteractivemedia.com/player/videos/Logo_Light.mp4", //post-roll video mp4 format postrollSkipTimer:5, popupImg:"images/preview_images/popup.jpg", //popup image URL popupAdShow:"yes", //enable/disable popup image: "yes","no" popupAdStartTime:"00:03", //time to show popup ad during playback popupAdEndTime:"00:07", //time to hide popup ad during playback popupAdGoToLink:"http://codecanyon.net/", //re-direct to URL when popup ad clicked description:"Video description goes here.", //video description showing in playlist thumbImg:"images/thumbnail_images/pic1.jpg", //path to playlist thumbnail image info:"Video info goes here.
This text can be HTML formatted, find out more.
You can disable this info window in player options.

Lorem ipsum dolor sit amet, eu pri dolores theophrastus. Posidonium vituperatoribus cu mel, cum feugiat nostrum sapientem ne. Vis ea summo persius, unum velit erant in eos, pri ut suas iriure euripidis. Ad augue expetendis sea. Ne usu saperet appetere honestatis, ne qui nulla debitis sententiae." //video info for self hosted videos (if you use HTML5 videoType) } ] }); });
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="description" content="Video Player"/> <meta property="og:title" content="Video Player by _zac_"/> <meta property="og:image" content="http://player.pageflip.com.hr/imgFB/preview3.png"/> <link rel="stylesheet" href="css/elite.css" type="text/css" media="screen"/> <link rel="stylesheet" href="css/elite-font-awesome.css" type="text/css"> <link rel="stylesheet" href="css/jquery.mCustomScrollbar.css" type="text/css">

A webpage should only load one instance of jQuery. Loading more then one instance of the jQuery library can cause conflicts.
youtubePlaylistID: "LL4qbSRobYCjvwo4FCQFrJ4g "
youtubeChannelID: "UCHqaLr9a9M7g9QN6xem9HcQ"
youtubeChannelID: "djolepiv"
videoType:"HTML5"
mp4:"http://player.pageflip.com.hr/videos/Pieces.mp4"
videoType:"youtube"
youtubeID:"LfTLc5JGFPc"
videoType:"vimeo"
vimeoID:"32707724"
videoType:"image"
imageUrl:"images/preview_images/poster2.jpg"
imageTimer: 4
, { videoType:"vimeo", title:"Vimeo video", youtubeID:"LfTLc5JGFPc", vimeoID:"32707724", mp4:"http://player.pageflip.com.hr/videos/Pieces.mp4", prerollAD:"no", prerollGotoLink:"http://codecanyon.net/", preroll_mp4:"http://player.pageflip.com.hr/videos/Short_Elegant_Logo_Reveal.mp4", prerollSkipTimer:5, description:"Video description goes here.", thumbImg:"images/thumbnail_images/pic1.jpg", info:"Video info goes here.
This text can be HTML formatted, find out more.
You can disable this info window in player options.

Lorem ipsum dolor sit amet, eu pri dolores theophrastus. Posidonium vituperatoribus cu mel, cum feugiat nostrum sapientem ne. Vis ea summo persius, unum velit erant in eos, pri ut suas iriure euripidis. Ad augue expetendis sea. Ne usu saperet appetere honestatis, ne qui nulla debitis sententiae." }
If you use self-hosted videos (videoType:"HTML5"), you will need to provide only mp4 format to make player work cross-browsers on all platforms (desktop and mobile phones/tablets).
To convert your video to mp4 you can use this online converter, or any other similar software.
To use pre-roll videos as advertising simply enable pre-roll option for particular video and enter URL to your ad video from your server:
prerollAD:"yes" preroll_mp4:"http://player.pageflip.com.hr/videos/Short_Elegant_Logo_Reveal.mp4"
prerollGotoLink:"http://codecanyon.net/"
Also you can have timer when to show "skip advertisement" option,
which can be set to any time you want (seconds):
prerollSkipTimer:5
To use mid-roll advertising simply enable mid-roll option for particular video and enter URL to your ad video from your server:
midrollAD:"yes" midroll_mp4:"http://player.pageflip.com.hr/videos/Short_Elegant_Logo_Reveal.mp4"
midrollGotoLink:"http://codecanyon.net/"
midrollAD_displayTime:"00:10",
Also you can have timer when to show "skip advertisement" option,
which can be set to any time you want (seconds):
midrollSkipTimer:5
To use post-roll advertising simply enable post-roll option for particular video and enter URL to your ad video from your server:
postrollAD:"yes" postroll_mp4:"http://player.pageflip.com.hr/videos/Short_Elegant_Logo_Reveal.mp4"
postrollGotoLink:"http://codecanyon.net/"
Also you can have timer when to show "skip advertisement" option,
which can be set to any time you want (seconds):
postrollSkipTimer:5
To use pop-up advertising simply enable pop-up option for particular video and enter URL to your image ad from your server:
popupAdShow:"yes" popupImg:"images/preview_images/popup.jpg"
popupAdGoToLink:"http://codecanyon.net/",
popupAdStartTime:"00:03" popupAdEndTime:"00:07"
You can customize look of your player by inserting any color as "color accent" option.
Color accent can be hexadecimal value (#cc181e) or rbg value ( rgb(204,24,30)).
colorAccent:"#cc181e"
is equvalent to:
colorAccent:"rgb(204, 24, 30)"
To choose color accent for your player you can use one of these online color pickers:
http://www.w3schools.com/tags/ref_colorpicker.asp
http://www.rapidtables.com/web/color/color-picker.htm
This tool can be useful if you want to match your website colors http://www.imagecolorpicker.com/
Popular pre-built colors you can use:
To customize vimeo and youtube players separately use this options:
vimeoColor:"00adef", //set "hexadecimal value", default vimeo color is "00adef" youtubeSkin:"dark", //youtube theme: light,dark youtubeColor:"red", //youtube color: red, white
To customize playlist scrollbar set one of the pre-built scrollbar themes:
playlistScrollType:"light",
available scrollbar themes:
"light","minimal","light-2","light-3","light-thick","light-thin","inset","inset-2","inset-3","rounded","rounded-dots","3d"
You can have multiple players per page. Every player can have it's own settings. Add the following in your HTML document:
Example how to show 2 players in one page:

 //add this for player 2:

For each instance of the player you need to change option instanceName, for example:
first instance of the player:
instanceName:"player1"
second instance of the player:
instanceName:"player2"
Done! Now you should be able to see 2 player in your HTML page.
AddType video/mp4 .mp4
Vimeo usage:
If you use vimeo player, you’ll need to be running on a web server instead of opening the file directly in your browser. Flash and JS security restrictions will prevent the API from working when run locally.
If you like this product please give a rating on CodeCaynon:
HTML5 Video Player & Advertising - WordPress plugin


--- layout: page title: "关于" description: "Hey, this is CS 1504." header-img: "//i.loli.net/2018/03/09/5aa21d7f364df.jpg" multilingual: true ---


Windows 10 x64 (18362.116)
wil_details_FeatureTestState
+0x000 kind : wil_details_FeatureTestStateKind
+0x004 featureId : Uint4B
+0x008 state : wil_FeatureEnabledState
+0x00c variant : UChar
+0x010 payload : Uint4B
+0x018 next : Ptr64 wil_details_FeatureTestState


Preparation time
30 mins to 1 hour
Cooking time
less than 10 mins
Serves
Serves 4
If you don’t have time to make the mayo for the tartare sauce, substitute with a good-quality bought mayonnaise.
For the fish cakes, put the mashed potato in a bowl and break up with a fork. Flake in the salmon, then season well with salt and pepper and add the lemon zest and dill. Stir well to combine – you can use your hands for this, then shape into eight fish cakes. Chill in the freezer for 10 minutes if possible, just to firm up before you coat them.
To coat, divide the plain flour, one of the eggs and half the breadcrumbs over three plates. Dip the fish cakes in each plate, in that order, shaking off excess as you go. This does get messy, so do it in two batches. If you have time, chill the coated fishcakes to firm up – this time in the fridge and for at least 20 minutes, preferably longer.
To fry, heat the oil and butter in a large frying pan. Fry the fish cakes on each side for a few minutes until they have developed a good golden-brown crust and the centres are hot.
To make the tartare sauce, put the egg yolk in a bowl or food processor with a generous pinch of salt and the mustard. Whisk or pulse briefly, then very gradually start adding the oil. When you have an emulsion, you can start adding the oil in a steady, slightly faster stream until it is all incorporated and you have a thick mayonnaise. Stir through the remaining ingredients.
Serve the fish cakes with a dollop of salmon caviar and the tartare sauce on the side.


001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the "License"); 007 * you may not use this file except in compliance with the License. 008 * You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018 /* 019 * $Id: CoroutineManager.java<PHONE_NUMBER>-10-28 07:07:05Z minchau $ 020 */ 021 package org.apache.xml.dtm.ref; 022 023 import java.util.BitSet; 024 025 import org.apache.xml.res.XMLErrorResources; 026 import org.apache.xml.res.XMLMessages; 027 028 029 /** 030 *
Support the coroutine design pattern.
 031 * 032 *
A coroutine set is a very simple cooperative non-preemptive 033 * multitasking model, where the switch from one task to another is 034 * performed via an explicit request. Coroutines interact according to 035 * the following rules:
 036 * 037 *
 038 *
One coroutine in the set has control, which it retains until it 039 * either exits or resumes another coroutine.
 040 *
A coroutine is activated when it is resumed by some other coroutine 041 * for the first time.
 042 *
An active coroutine that gives up control by resuming another in 043 * the set retains its context -- including call stack and local variables 044 * -- so that if/when it is resumed, it will proceed from the point at which 045 * it last gave up control.
 046 *
 047 * 048 *
Coroutines can be thought of as falling somewhere between pipes and 049 * subroutines. Like call/return, there is an explicit flow of control 050 * from one coroutine to another. Like pipes, neither coroutine is 051 * actually "in charge", and neither must exit in order to transfer 052 * control to the other.
 053 * 054 *
One classic application of coroutines is in compilers, where both 055 * the parser and the lexer are maintaining complex state 056 * information. The parser resumes the lexer to process incoming 057 * characters into lexical tokens, and the lexer resumes the parser 058 * when it has reached a point at which it has a reliably interpreted 059 * set of tokens available for semantic processing. Structuring this 060 * as call-and-return would require saving and restoring a 061 * considerable amount of state each time. Structuring it as two tasks 062 * connected by a queue may involve higher overhead (in systems which 063 * can optimize the coroutine metaphor), isn't necessarily as clear in 064 * intent, may have trouble handling cases where data flows in both 065 * directions, and may not handle some of the more complex cases where 066 * more than two coroutines are involved.
 067 * 068 *
Most coroutine systems also provide a way to pass data between the 069 * source and target of a resume operation; this is sometimes referred 070 * to as "yielding" a value. Others rely on the fact that, since only 071 * one member of a coroutine set is running at a time and does not 072 * lose control until it chooses to do so, data structures may be 073 * directly shared between them with only minimal precautions.
 074 * 075 *
"Note: This should not be taken to mean that producer/consumer 076 * problems should be always be done with coroutines." Queueing is 077 * often a better solution when only two threads of execution are 078 * involved and full two-way handshaking is not required. It's a bit 079 * difficult to find short pedagogical examples that require 080 * coroutines for a clear solution.
 081 * 082 *
The fact that only one of a group of coroutines is running at a 083 * time, and the control transfer between them is explicit, simplifies 084 * their possible interactions, and in some implementations permits 085 * them to be implemented more efficiently than general multitasking. 086 * In some situations, coroutines can be compiled out entirely; 087 * in others, they may only require a few instructions more than a 088 * simple function call.
 089 * 090 *
This version is built on top of standard Java threading, since 091 * that's all we have available right now. It's been encapsulated for 092 * code clarity and possible future optimization.
 093 * 094 *
(Two possible approaches: wait-notify based and queue-based. Some 095 * folks think that a one-item queue is a cleaner solution because it's 096 * more abstract -- but since coroutine _is_ an abstraction I'm not really 097 * worried about that; folks should be able to switch this code without 098 * concern.)
 099 * 100 *
%TBD% THIS SHOULD BE AN INTERFACE, to facilitate building other 101 * implementations... perhaps including a true coroutine system 102 * someday, rather than controlled threading. Arguably Coroutine 103 * itself should be an interface much like Runnable, but I think that 104 * can be built on top of this.
 105 * */ 106 public class CoroutineManager 107 { 108 /** "Is this coroutine ID number already in use" lookup table. 109 * Currently implemented as a bitset as a compromise between 110 * compactness and speed of access, but obviously other solutions 111 * could be applied. 112 * */ 113 BitSet m_activeIDs=new BitSet(); 114 115 /** Limit on the coroutine ID numbers accepted. I didn't want the 116 * in-use table to grow without bound. If we switch to a more efficient 117 * sparse-array mechanism, it may be possible to raise or eliminate 118 * this boundary. 119 * @xsl.usage internal 120 */ 121 static final int m_unreasonableId=1024; 122 123 /** Internal field used to hold the data being explicitly passed 124 * from one coroutine to another during a co_resume() operation. 125 * (Of course implicit data sharing may also occur; one of the reasons 126 * for using coroutines is that you're guaranteed that none of the 127 * other coroutines in your set are using shared structures at the time 128 * you access them.) 129 * 130 * %REVIEW% It's been proposed that we be able to pass types of data 131 * other than Object -- more specific object types, or 132 * lighter-weight primitives. This would seem to create a potential 133 * explosion of "pass x recieve y back" methods (or require 134 * fracturing resume into two calls, resume-other and 135 * wait-to-be-resumed), and the weight issue could be managed by 136 * reusing a mutable buffer object to contain the primitive 137 * (remember that only one coroutine runs at a time, so once the 138 * buffer's set it won't be walked on). Typechecking objects is 139 * interesting from a code-robustness point of view, but it's 140 * unclear whether it makes sense to encapsulate that in the 141 * coroutine code or let the callers do it, since it depends on RTTI 142 * either way. Restricting the parameters to objects implementing a 143 * specific CoroutineParameter interface does _not_ seem to be a net 144 * win; applications can do so if they want via front-end code, but 145 * there seem to be too many use cases involving passing an existing 146 * object type that you may not have the freedom to alter and may 147 * not want to spend time wrapping another object around. 148 * */ 149 Object m_yield=null; 150 151 // Expose??? 152 final static int NOBODY=-1; 153 final static int ANYBODY=-1; 154 155 /** Internal field used to confirm that the coroutine now waking up is 156 * in fact the one we intended to resume. Some such selection mechanism 157 * is needed when more that two coroutines are operating within the same 158 * group. 159 */ 160 int m_nextCoroutine=NOBODY; 161 162 /**
Each coroutine in the set managed by a single 163 * CoroutineManager is identified by a small positive integer. This 164 * brings up the question of how to manage those integers to avoid 165 * reuse... since if two coroutines use the same ID number, resuming 166 * that ID could resume either. I can see arguments for either 167 * allowing applications to select their own numbers (they may want 168 * to declare mnemonics via manefest constants) or generating 169 * numbers on demand. This routine's intended to support both 170 * approaches.
 171 * 172 *
%REVIEW% We could use an object as the identifier. Not sure 173 * it's a net gain, though it would allow the thread to be its own 174 * ID. Ponder.
 175 * 176 * @param coroutineID If >=0, requests that we reserve this number. 177 * If <0, requests that we find, reserve, and return an available ID 178 * number. 179 * 180 * @return If >=0, the ID number to be used by this coroutine. If <0, 181 * an error occurred -- the ID requested was already in use, or we 182 * couldn't assign one without going over the "unreasonable value" mark 183 * */ 184 public synchronized int co_joinCoroutineSet(int coroutineID) 185 { 186 if(coroutineID>=0) 187 { 188 if(coroutineID>=m_unreasonableId || m_activeIDs.get(coroutineID)) 189 return -1; 190 } 191 else 192 { 193 // What I want is "Find first clear bit". That doesn't exist. 194 // JDK1.2 added "find last set bit", but that doesn't help now. 195 coroutineID=0; 196 while(coroutineID<m_unreasonableId) 197 { 198 if(m_activeIDs.get(coroutineID)) 199 ++coroutineID; 200 else 201 break; 202 } 203 if(coroutineID>=m_unreasonableId) 204 return -1; 205 } 206 207 m_activeIDs.set(coroutineID); 208 return coroutineID; 209 } 210 211 /** In the standard coroutine architecture, coroutines are 212 * identified by their method names and are launched and run up to 213 * their first yield by simply resuming them; its's presumed that 214 * this recognizes the not-already-running case and does the right 215 * thing. We seem to need a way to achieve that same threadsafe 216 * run-up... eg, start the coroutine with a wait. 217 * 218 * %TBD% whether this makes any sense... 219 * 220 * @param thisCoroutine the identifier of this coroutine, so we can 221 * recognize when we are being resumed. 222 * @exception java.lang.NoSuchMethodException if thisCoroutine isn't 223 * a registered member of this group. %REVIEW% whether this is the 224 * best choice. 225 * */ 226 public synchronized Object co_entry_pause(int thisCoroutine) throws java.lang.NoSuchMethodException 227 { 228 if(!m_activeIDs.get(thisCoroutine)) 229 throw new java.lang.NoSuchMethodException(); 230 231 while(m_nextCoroutine != thisCoroutine) 232 { 233 try 234 { 235 wait(); 236 } 237 catch(java.lang.InterruptedException e) 238 { 239 // %TBD% -- Declare? Encapsulate? Ignore? Or 240 // dance widdershins about the instruction cache? 241 } 242 } 243 244 return m_yield; 245 } 246 247 /** Transfer control to another coroutine which has already been started and 248 * is waiting on this CoroutineManager. We won't return from this call 249 * until that routine has relinquished control. 250 * 251 * %TBD% What should we do if toCoroutine isn't registered? Exception? 252 * 253 * @param arg_object A value to be passed to the other coroutine. 254 * @param thisCoroutine Integer identifier for this coroutine. This is the 255 * ID we watch for to see if we're the ones being resumed. 256 * @param toCoroutine Integer identifier for the coroutine we wish to 257 * invoke. 258 * @exception java.lang.NoSuchMethodException if toCoroutine isn't a 259 * registered member of this group. %REVIEW% whether this is the best choice. 260 * */ 261 public synchronized Object co_resume(Object arg_object,int thisCoroutine,int toCoroutine) throws java.lang.NoSuchMethodException 262 { 263 if(!m_activeIDs.get(toCoroutine)) 264 throw new java.lang.NoSuchMethodException(XMLMessages.createXMLMessage(XMLErrorResources.ER_COROUTINE_NOT_AVAIL, new Object[]{Integer.toString(toCoroutine)})); //"Coroutine not available, id="+toCoroutine); 265 266 // We expect these values to be overwritten during the notify()/wait() 267 // periods, as other coroutines in this set get their opportunity to run. 268 m_yield=arg_object; 269 m_nextCoroutine=toCoroutine; 270 271 notify(); 272 while(m_nextCoroutine != thisCoroutine || m_nextCoroutine==ANYBODY || m_nextCoroutine==NOBODY) 273 { 274 try 275 { 276 // System.out.println("waiting..."); 277 wait(); 278 } 279 catch(java.lang.InterruptedException e) 280 { 281 // %TBD% -- Declare? Encapsulate? Ignore? Or 282 // dance deasil about the program counter? 283 } 284 } 285 286 if(m_nextCoroutine==NOBODY) 287 { 288 // Pass it along 289 co_exit(thisCoroutine); 290 // And inform this coroutine that its partners are Going Away 291 // %REVIEW% Should this throw/return something more useful? 292 throw new java.lang.NoSuchMethodException(XMLMessages.createXMLMessage(XMLErrorResources.ER_COROUTINE_CO_EXIT, null)); //"CoroutineManager recieved co_exit() request"); 293 } 294 295 return m_yield; 296 } 297 298 /** Terminate this entire set of coroutines. The others will be 299 * deregistered and have exceptions thrown at them. Note that this 300 * is intended as a panic-shutdown operation; under normal 301 * circumstances a coroutine should always end with co_exit_to() in 302 * order to politely inform at least one of its partners that it is 303 * going away. 304 * 305 * %TBD% This may need significantly more work. 306 * 307 * %TBD% Should this just be co_exit_to(,,CoroutineManager.PANIC)? 308 * 309 * @param thisCoroutine Integer identifier for the coroutine requesting exit. 310 * */ 311 public synchronized void co_exit(int thisCoroutine) 312 { 313 m_activeIDs.clear(thisCoroutine); 314 m_nextCoroutine=NOBODY; // %REVIEW% 315 notify(); 316 } 317 318 /** Make the ID available for reuse and terminate this coroutine, 319 * transferring control to the specified coroutine. Note that this 320 * returns immediately rather than waiting for any further coroutine 321 * traffic, so the thread can proceed with other shutdown activities. 322 * 323 * @param arg_object A value to be passed to the other coroutine. 324 * @param thisCoroutine Integer identifier for the coroutine leaving the set. 325 * @param toCoroutine Integer identifier for the coroutine we wish to 326 * invoke. 327 * @exception java.lang.NoSuchMethodException if toCoroutine isn't a 328 * registered member of this group. %REVIEW% whether this is the best choice. 329 * */ 330 public synchronized void co_exit_to(Object arg_object,int thisCoroutine,int toCoroutine) throws java.lang.NoSuchMethodException 331 { 332 if(!m_activeIDs.get(toCoroutine)) 333 throw new java.lang.NoSuchMethodException(XMLMessages.createXMLMessage(XMLErrorResources.ER_COROUTINE_NOT_AVAIL, new Object[]{Integer.toString(toCoroutine)})); //"Coroutine not available, id="+toCoroutine); 334 335 // We expect these values to be overwritten during the notify()/wait() 336 // periods, as other coroutines in this set get their opportunity to run. 337 m_yield=arg_object; 338 m_nextCoroutine=toCoroutine; 339 340 m_activeIDs.clear(thisCoroutine); 341 342 notify(); 343 } 344 }


Dashboard
About Us
my Project
hello
Contact Us
Search button
New corrective actions
Finding id:
Corrective Action Description:
Date of CAP approval:
Due Date:
Contact Person:
Closure Date:(if it is due date is close, else is opened)
Due Date History: text of dates that were changed during the follow up actions (ie. 12/03/2017, 25/07/2017):
Auditee corrective actions:
Date:
Description:
New Pruposed Due Date:
CAA Follow up actions:
Date:
Description:
Who is responsible:
New due date: Update initial due date(Deadline) :
Attach Document files:
1. Foto:
Select file
Change
×
2. Evidenca:
Select file
Change
×
3. Raporti:
Select file
Change
×
4. Orari:
Select file
Change
×
5. Checklists:
Select file
Change
×
Save Document


This website is provided as a public service by the SimpleITK project, which is part of the Insight Software Consortium , a non-profit educational consortium dedicated to promoting and maintaining open-source, freely available software for medical image analysis. SimpleITK does not disclose, give, sell, or transfer personal information about visitors to https://simpleitk.org unless required to do so by law.
Protecting your privacy is very important to us. We do not collect personally identifiable information (PII) about you during your visit to the SimpleITK website unless you choose to give it to us. We do, however, collect some data about visits to our website to help us better understand how the public interacts with the site and how to make it more useful.
The collected information consists of the following:
This information is gathered using a tracking cookie set by the Google Analytics service and handled by Google as described in their privacy policy. See your browser documentation for instructions on how to disable the cookie if you prefer not to share this data with Google. We never collect information for commercial marketing or any purpose unrelated to our mission and goals. By using this website, you consent to the collection of data in this manner and for the purposes described above
SimpleITK may modify or update this Privacy Policy from time to time to reflect the changes in our work and practices. Please review this page periodically.
If you have any questions or concerns about the SimpleITK Privacy Policy, please email contact a member of the Insight Software Consortium Council.


CONFIDENTIAL
| Document ref: | 1215,501/FS |
| Project: | ICA-3 |
| Revision: | $Revision: 1.3 $ |
| Date: | $Date: 1998/10/07 18:46:00 $ |
| Author(s): | Simon Middleton |
| Change: | *** LIVE *** |
| Classification: | Acorn Confidential |
| 1.0 | Overview |
| 2.0 | Outstanding issues |
| 3.0 | Technical background |
| 4.0 | User interface |
| 5.0 | Programmer interface |
| 6.0 | Data interchange |
| 7.0 | Data formats |
| 8.0 | External dependencies |
| 9.0 | Acceptance test |
| 10.0 | Non compliances |
| 11.0 | Development test strategy |
| 12.0 | Product organisation |
| 13.0 | Future enhancements |
| 14.0 | Glossary |
| 15.0 | References |
| 16.0 | History |
There is a need amongst a number of applications (eg ICA, Java) to be able to capture all the users key-presses individually, rather than in the transformed form given by the Wimp. This module provides access to all these events in formats suitable for the applications currently requiring them.
The goals of this module are
To cut down on module proliferation this is an extension of the KeyWatch module originally created for the NC100. This module (in version 0.01) originally only implemented the first two SWI calls.
None known.
The module accomplishes its task by looking at the events generated
On KeyV the kernel first calls EventV to pass the key up or down event and then processes the key through the international keyboard handler and, if necessary, inserts the key into the keyboard buffer. After a suitable interval if the key is still held down then it inserts the key in the keyboard buffer again.
All this information is combined to generate a new key event stream containing all the extended data required.
The characters inserted into the keyboard buffer by the keyboard driver are removed by the KeyWatch module therefore an application using this interface will not receive any keys through the usual wimp key event interface.
There is no user interface.
IN: R0 = flags bits 0-31: reserved OUT: R0 = Address of PollWord
Register with the module to have a pollword updated.
IN: R0 = Address of PollWord OUT:
Unregister a previously allocated pollword.
IN: R0 = flags bits 0-31: reserved OUT: R0 = feature flags R1 = major version * 100 R2 -> minor version string
Return version and feature information about the module.
IN: R0 = flags bit 0: 1 = store codes as PS/2 scan codes 0 = store codes as Acorn internal scan codes bit 1: 1 = send code as message 0 = store code in buffer bit 2: 1 = include mouse clicks 0 = ignore mouse clicks bit 3: 1 = store key transition events (scan codes) 0 = ignore transitions bit 4: 1 = store buffer events 0 = ignore buffer events bit 5: 1 = remove code from input buffer 0 = leave code in input buffer bits 5-31: reserved R1 = wimp task handle OUT:
Call this after receiving input focus to change from using KeyEvent to NewKeyEvent. Note that there may be characters in the input buffer before this is called. These will be delivered to the application as normal through the wimp key event. If possible these should be processed to avoid losing any key presses.
Note that even if scan codes are not entered in to the poll buffer then scan code processing is still performed which means that the shift state is accurate and the scan code is still stored with the buffer code.
If bit 5 is set then OS_Byte,145 is used to remove the key code from the buffer. This prevents the key press from also appearing via the Wimp key event or similar.
IN: R0 = flags bits 0-31: reserved R1 = wimp task handle OUT:
Call this after losing input focus or on window close to allow another window to set its mode correctly.
If the application requested that key events were buffered then there may be keys left in the buffer. Therefore in this case the task should read any keys out using KeyWatch_Poll and send them back to the wimp using Wimp_ProcessKey so that they are sent on to the task receiving the input focus. This must be done before calling Deregister.
Similarly if the application had requested that the keys were delivered using messages then it should maintain a flag to say whether it currently owns the input focus and should call Wimp_ProcessKey for any messages received when it doesn't.
IN: R0 = flags bits 0-31: reserved R1 = wimp task handle R2 = address of buffer or null R3 = size of buffer R4 = max number of entries to retrieve OUT: R0 = flags out bit 0: 1 = an overflow occurred on the internal buffer bits 1-31: reserved R1 = number of bytes per entry if R2 = NULL then R2 = NULL R3 = size of buffer needed for all entries R4 = number of entries pending if R2 <> NULL then R2 = byte after last buffer byte filled R3 = size left in buffer R4 = number of entries asked for and not retrieved
The given buffer is filled with the pending data in the same format as the message data shown below. ie currently there are three words of data in the order flags, scan code, key code.
The flags in R1 are sticky and are cleared when some of the data is read from the buffer. R2 and R3 are updated with their new values after writing out the event structures. R4 contains the size of an individual structure (currently 12 bytes).
If the buffer address is given as null and the size of the buffer as zero then no data is written and R3 on exit will have been decremented by the size of the data that would have been written.
IN: R0 = flags bits 0-31: reserved OUT:
The SWI is allows other modules to instruct the KeyWatch module to ignore the next key that is pressed. This allows modules such as the STB IR handset module to by-pass the KeyWatch module.
*KeyWatchForceClose
This command forces keywatch to discard all registrations and detach from all event handlers. This means that it can be killed. It is only designed to be used if a client application crashes so that the module can be killed safely.
The following message is sent when a key event is generated by the module (if the appopriate flag was set on registering).
| +0 | size (36) |
| +16 | message code (tbd) |
| +20 | flags |
| bit 0: 1 = Scan code is valid, 0 = Scan code is invalid | |
| bit 1: 1 = Key code is valid, 0 = Key code should be ignored | |
| bit 2: 1 = Key going up, 0 = Key going down | |
| bit 3: 1 = this key code was preceded by a nul character in the keyboard buffer | |
| bit 4: 1 = this scan code was preceded by an 0xE0 character in the keyboard buffer | |
| bits 5-15: reserved | |
| bit 16: 1 = Left Shift is down, 0 = Left Shift is up | |
| bit 17: 1 = Right Shift is down, 0 = Right Shift is up | |
| bit 18: 1 = Left Ctrl is down, 0 = Left Ctrl is up | |
| bit 19: 1 = Right Ctrl is down, 0 = Right Ctrl is up | |
| bit 20: 1 = Left Alt is down, 0 = Left Alt is up | |
| bit 21: 1 = Right Alt is down, 0 = Right Alt is up | |
| bits 22-31: reserved | |
| +24 | scan code |
| either PS/2 or EventV codes | |
| +28 | key code |
| As inserted into keyboard buffer |
When a key code is event structure is created the scan code of the last key to go down is added to it. This only happens on the first key code received after the key goes down. Therefore an auto-repeat key can be distringuished by the fact that the scan code field is invalid.
Note for PS/2 codes the entire byte sequence is entered into the buffer. The Windows keys currently generate 0x7E (left) and 0x7F (right) until the correct codes can be ascertained. Up to and including version 0.08 of this module the codes generated were extended codes (i.e. 0xE0 was generated before each one). From 0.09 this was changed.
No new data formats are defined.
None.
The module will work on RISC OS 3.1 upwards.
None.
To be decided.
A module written in C.
Optionally assemble the bytes of a UTF8 sequence into a UCS4 code.
N/A.
N/A.
$Log: keywatch.html,v $ Revision 1.3 1998/10/07 18:46:00 smiddle Update documentation with last change Revision 1.2 1998/10/07 18:44:03 smiddle Moved to trunk. Changed the fake Windows keys from extended to plain in the PS/2 mappings. This stops strange results being seen in the ICAClient. You must use ICAClient 0.33 or later with it now though. Version 0.09. Tagged as 'KeyWatch-0_09' Revision <IP_ADDRESS> 1998/09/28 16:46:52 olove Added a new SWI KeyWatch_Ignore which will ignore the next key press received by KeyWatch. Revision <IP_ADDRESS> 1998/06/05 13:57:39 smiddle Added the Windows Menu key and fake versions of the left and right Windows keys. Added a flag to say that a byte was preceded by the PS/2 E0 extension byte. Version 0.07, <IP_ADDRESS>. Tagged as 'KeyWatch-0_07-1_1_2_9' Revision <IP_ADDRESS> 1998/03/20 14:55:12 smiddle Added KeyWatchForceClose command to clean up if a client crashes. Version 0.05, <IP_ADDRESS>. Tagged as 'KeyWatch-0_05-1_1_2_7' Revision <IP_ADDRESS> 1998/02/09 11:02:08 smiddle Changed KeyWatch_Poll API to stop allow swallowing of buffer codes even when only using scan code events. Version 0.04, <IP_ADDRESS>. Tagged as 'KeyWatch-0_04-1_1_2_5' Revision <IP_ADDRESS> 1998/02/06 17:00:31 smiddle Fixed some of the PS/2 codes. Changed mechanism so that the real PS/2 style code stream is output. Version 0.03, <IP_ADDRESS>. Tagged as 'KeyWatch-0_03-1_1_2_4' Revision <IP_ADDRESS> 1998/02/03 18:09:57 smiddle Rejigged how PS/2 codes are handled and added a few more flags to RegisterScan Version 0.03, <IP_ADDRESS>. Tagged as 'KeyWatch-0_03-1_1_2_3' Revision <IP_ADDRESS> 1998/02/03 15:25:19 smiddle Whole new load of functionality to support getting a stream of scan keys. See doc/keywatch.html for details. Version 0.02, <IP_ADDRESS>. Tagged as 'KeyWatch-0_02-1_1_2_2'
| This document is issued under license and must not be copied, reproduced or disclosed in part or whole outside the terms of the license. | © Acorn Computers Ltd 1997 |


Across: 1,22. After his death 18 wept and knelt, jarring... I'm hurt terribly! (6 6 4, 2.) 8. Improved mentoring required for killer of 1 across 22 (9) 9. Words said for things seen during first halves - none unsaid! (5) 11. Doctor, heal Mr. Gustav (6) 12. Assaulter I order to provide a sort of extra motivation (8) 14. What, with nous, PC is able to form about one (9) 16. One part of play that's never right in screen adaptation (5) 17. Some beef, raw drive, toppled tower over (5) 19. Got down with "Dirty Deeds", in which many met end (9) 21. Enough of one acquired deviously (with no internal revenue) before end of amnesty (8) 22. see 1 25. Plan on rejecting second compromise (5) 26. One Tintin adventure will... (9) 27. ...preserve Eastern Ocean with some sunshine around both sides, bringing end to 1 across 22 (5 4 3) Down: 1. Change of form with several couples leaving 5 city (7) 2. Anger not right where 8 is to be used legally (5) 3. Little bit backward describing first 9 letters (4) 4. Start to learn one's welcoming lines, experienced in absence of friends (10) 5. State reverse melody on trumpet when coming in before "C" heard (9) 6.  (7) 7. Forty acres perhaps where milk and honey may be found (8 4) 10. Giving up ringers under new scheme (12) 13. 5 accuse 4, with energy and with bitterness (10) 15. In sickness, lose head, hence sway (9) 18. Novel aim: care for country (7) 20.  (7) 23. Core of main nerve bundle (5) 24. Agitation and nasty riots after symbol of love killed (4)


A quick way to automate your conda uninstalls
It’s been a while since my last article, truth be told it was an over-demanding set of months for me and not only in my professional life. One of the best things though, I have done during this past period was to submit a chapter to First year in code (Thanks Isaac for the opportunity :) )
Today, I am gonna showcase a python script I made, to help you uninstall all the anaconda packages that match a certain filter.
Here is the whole script. Nothing much, nothing worth a Turing award, just thought it would be useful to someone.
import os
# Example function, not uninstall packages with the
# digram py in their name. Please update accordingly
def filter_function(name):
return 'py' not in name
# Get the installed conda packages
conda_list_output = os.popen('conda list').read()
# Put them in a list
output_in_lines = conda_list_output.split('\n')
# Line 4 and onwards is what we want (feel free to examine it)
output_in_lines = output_in_lines[3:]
# Name appears in the beginning of the line
only_names = [line.strip().split(' ')[0] for line in output_in_lines]
# Apply the filter defined above
filtered_list = list(filter(filter_function, only_names))
# Convert the list of uninstall candidates to a string
# and run the unins
cmd = f'conda uninstall {" ".join(filtered_list)}'
os.system(cmd)
There is extensive logging in the file but if you are a TL;DR guy
- We get the list of packages
- We clean it and convert it to a friendly format
- We filter out the unwanted ones
- We build and run the uninstall command
The only thing you need to change is the filter function, you can make the filter as sophisticated as it gets
Thank you for reading this really short article. Let me know if this was helpful. :)