The following table lists many of the major MIDI messages in numerical (binary) order. This table is intended as an overview of MIDI, and is by no means complete.
See also:
Additional messages are listed in the printed documentation available from the MMA.
WARNING! Details about implementing these messages can
dramatically impact
compatibility with other products. We
strongly recommend consulting the official
Complete MIDI 1.0 Detailed Specification for
additional information.
Table 1: MIDI 1.0 Specification Message Summary Updated 1995 By the MIDI Manufacturers Association Status Data Byte(s) Description D7----D0 D7----D0 ------------------------------------------------------------------------- Channel Voice Messages [nnnn = 0-15 (MIDI Channel Number 1-16)] ------------------------------------------------------------------------- 1000nnnn 0kkkkkkk Note Off event. 0vvvvvvv This message is sent when a note is released (ended). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. 1001nnnn 0kkkkkkk Note On event. 0vvvvvvv This message is sent when a note is depressed (start). (kkkkkkk) is the key (note) number. (vvvvvvv) is the velocity. 1010nnnn 0kkkkkkk Polyphonic Key Pressure (Aftertouch). 0vvvvvvv This message is most often sent by pressing down on the key after it "bottoms out". (kkkkkkk) is the key (note) number. (vvvvvvv) is the pressure value. 1011nnnn 0ccccccc Control Change. 0vvvvvvv This message is sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages" (below). (ccccccc) is the controller number. (vvvvvvv) is the new value (0-119). 1100nnnn 0ppppppp Program Change. This message sent when the patch number changes. (ppppppp) is the new program number. 1101nnnn 0vvvvvvv Channel Pressure (After-touch). This message is most often sent by pressing down on the key after it "bottoms out". This message is different from polyphonic after-touch. Use this message to send the single greatest pressure value (of all the current depressed keys). (vvvvvvv) is the pressure value. 1110nnnn 0lllllll Pitch Wheel Change. 0mmmmmmm This message is sent to indicate a change in the pitch wheel. The pitch wheel is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the transmitter. (llllll) are the least significant 7 bits. (mmmmmm) are the most significant 7 bits. ------------------------------------------------------------------------- Channel Mode Messages (See also Control Change, above) ------------------------------------------------------------------------- 1011nnnn 0ccccccc Channel Mode Messages. 0vvvvvvv This the same code as the Control Change (above), but implements Mode control and special message by using reserved controller numbers 120-127. The commands are: All Sound Off. When All Sound Off is received all oscillators will turn off, and their volume envelopes are set to zero as soon as possible. c = 120, v = 0: All Sound Off
Reset All Controllers. When Reset All Controllers is received, all controller values are reset to their default values. (See specific Recommended Practices for defaults). c = 121, v = x: Value must only be zero unless otherwise allowed in a specific Recommended Practice.
Local Control. When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Played data, etc. will be ignored. Local Control On restores the functions of the normal controllers. c = 122, v = 0: Local Control Off c = 122, v = 127: Local Control On All Notes Off. When an All Notes Off is received, all oscillators will turn off. c = 123, v = 0: All Notes Off (See text for description of actual mode commands.) c = 124, v = 0: Omni Mode Off c = 125, v = 0: Omni Mode On c = 126, v = M: Mono Mode On (Poly Off) where M is the number of channels (Omni Off) or 0 (Omni On) c = 127, v = 0: Poly Mode On (Mono Off) (Note: These four messages also cause All Notes Off) ------------------------------------------------------------------------- System Common Messages ------------------------------------------------------------------------- 11110000 0iiiiiii System Exclusive. 0ddddddd This message makes up for all that MIDI .. doesn't support. (iiiiiii) is usually a .. seven-bit Manufacturer's I.D. code. If the 0ddddddd synthesizer recognizes the I.D. code as 11110111 its own, it will listen to the rest of the message (ddddddd). Otherwise, the message will be ignored. System Exclusive is used to send bulk dumps such as patch parameters and other non-spec data. (Note: Real-Time messages ONLY may be interleaved with a System Exclusive.) This message also is used for extensions called Universal Exclusive Messages. 11110001 Undefined. (Reserved) 11110010 0lllllll Song Position Pointer. 0mmmmmmm This is an internal 14 bit register that holds the number of MIDI beats (1 beat= six MIDI clocks) since the start of the song. l is the LSB, m the MSB. 11110011 0sssssss Song Select. The Song Select specifies which sequence or song is to be played. 11110100 Undefined. (Reserved) 11110101 Undefined. (Reserved) 11110110 Tune Request. Upon receiving a Tune Request, all analog synthesizers should tune their oscillators. 11110111 End of Exclusive. Used to terminate a System Exclusive dump (see above). ------------------------------------------------------------------------- System Real-Time Messages ------------------------------------------------------------------------- 11111000 Timing Clock. Sent 24 times per quarter note when synchronization is required (see text). 11111001 Undefined. (Reserved) 11111010 Start. Start the current sequence playing. (This message will be followed with Timing Clocks). 11111011 Continue. Continue at the point the sequence was Stopped. 11111100 Stop. Stop the current sequence. 11111101 Undefined. (Reserved) 11111110 Active Sensing. Use of this message is optional. When initially sent, the receiver will expect to receive another Active Sensing message each 300ms (max), or it will be assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non- active sensing) operation. 11111111 Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up.


They say the fishing is excellent at Lake Chargoggagoggmanchauggagoggchaubunagungamaugg, though I've never been there myself. (normal)
They say the fishing is excellent at Lake Chargoggagoggmanchauggagoggchaubunagungamaugg, though I've never been there myself. (overflow-wrap)
They say the fishing is excellent at Lake Chargoggagoggmanchauggagoggchaubunagungamaugg, though I've never been there myself. (word-break)
They say the fishing is excellent at Lake Chargoggagoggmanchauggagoggchaubunagungamaugg, though I've never been there myself. (hyphens)


I'm Learning HTML and CSS, JavaScript, PHP, Python, Android and Ios.
I'm writing front-end codes, with these skills
Contact me by sent me an e-mail!


Developer Survey Form
Why do you want to be a developer?
This is a short survery to find out your motivation for being a developer
What's your name?
What's your email?
What's your gender?
Female
Male
Undefined
How many years of experience do you have?
What type of developer do you want to be?
Select one
Front End
Back End
Full Stack
What programming languages would you like to learn?
JavaScript
PHP
Ruby
Python
Describe why you want to become a developer:


Question 6/10
What are the following looping structures are available in javascripts?
for,forecach
foreach,whileloop
do-while loop,foreach
for , while loop


Fabian Delph out of England squad with injury - and Jack Grealish won't replace him
Fabian Delph was carrying an injury when he was called up, but it was hoped he'd be fit in time for England's upcoming Euro 2020 qualifiers against Montenegro and Kosovo
by Jake Polden, https://www.mirror.co.uk/authors/jake-polden/Fabian Delph has pulled out of the England squad with an injury - but he will not be replaced, the FA has confirmed.
The Everton midfielder was carrying an injury when he was called up, but it was hoped he'd be fit in time for the Three Lions' upcoming Euro 2020 qualifiers.
Delph will now return to Goodison Park for further rehabilitation.
A statement from the FA read: "The midfielder arrived with an injury but it was hoped he would be available to play a part in the Three Lions' forthcoming Euro 2020 qualifiers.
"However, it has now been decided that Delph is unlikely to feature and will return to his club for further rehabilitation."
England have not named a replacement for the matches against Montenegro and Kosovo, in what is another blow for the in-form Jack Grealish.
Aston Villa midfielder Grealish was expected to get a call-up the first time round, but will miss out once again, despite boss Gareth Southgate previously singing his praises.
"He's a very good player. I've watched him closely this season," said Southgate. "The reality of that is that he's up against [Raheem] Sterling, [Marcus] Rashford, [Callum] Hudson-Odoi, [Jadon] Sancho in those wide areas.
"The competition in that area is a really high level. I think Jack's a very good player. He's very close. He's just got to keep playing the way he is, and if we had issues over the weekend, I wouldn't hesitate to call him into the squad."
Delph's last appearance for England came in the Nations League third-place play-off win over Switzerland in June.
The midfielder has made 10 appearances for Everton this season but missed the Toffees' 2-1 win at Southampton on Saturday.


| Mal-Shi Picture |
| Breed Information |
| Popularity |
# |
| Name |
Mal-Shi |
| Other names |
Malshi, Malti Zu, Malt-Tzu |
| Origin |
United States Canada |
| Breed Group |
|
| Size |
Small |
| Type |
Cross Breed |
| Life span |
12-15 years |
| Temperament |
AffectionateAlertIndependentIntelligentLovingOut-GoingPlayfulQuietSocial |
| Height |
10-20 inces (25-51 cm) |
| Weight |
5-15 pounds (2.3-6.8 kg) |
| Colors |
BlackBrownGrayWhiteYellow |
| Litter Size |
4-8 puppies |
| Puppy Price |
Average $800 - $1000 USD |
|
|
| Breed Characteristics |
| Adaptability |
3 stars |
| Apartment Friendly |
3 stars |
| Barking Tendencies |
3 starsOccassional |
| Cat Friendly |
3 stars |
| Child Friendly |
4 starsGood with Kids: This is a suitable breed for kids and is known to be playful, energetic, and affectionate around them. |
| Dog Friendly |
4 stars |
| Exercise Needs |
3 starsMal-Shi are house pets in need of protection from extreme temperatures and they require plenty of exercise and playtime. A brisk twenty minute daily walk may do the trick, but don't neglect to fulfill their never ending desire to run, chew and play. |
| Grooming |
3 starsModerate Maintenance: Regular grooming is required to keep its fur in good shape. |
| Health Issues |
3 starsBecause they do not shed, mal-shis need to be groomed often. Sometimes this breed can also have some health problems because of their size, flat face, and small wind pipe. Some mal-shi suffer from White Shaker Syndrome, malformed knee joints, known as patellar luxation, which causes internal friction and can eventually cause arthritis.Hypoallergenic: Unknown |
| Intelligence |
2 starsRanking: (#). (See All Rankings) |
| Playfulness |
3 stars |
| Shedding Level |
1 starsMinimal Shedding: Recommended for owners who do not want to deal with hair in their cars and homes. |
| Stranger Friendly |
3 stars |
| Trainability |
3 starsA first generation Mal-Shi is typically a highly intelligent focused dog. General speaking, in comparison to training a Shih Tzu, the MalShih is a star pupil. The MalShih is usually quite perceptive and eager to learn and comply, making them a good choice for first time dog owners or those lacking the patience and training skills required for formal housetraining. Early socializing with children, friends, animals and travel is recommended. |
| Watchdog Ability |
3 stars |
|
|


Documentation
What is Silverblue?
Silverblue is the new face of Atomic Workstation from Project Atomic. With good support for container-focused workflows, this variant of Fedora Workstation targets developer communities.
The use of rpm-ostree for the core OS brings fully atomic upgrades, easy rollbacks and workflows that are familiar from OSTree-based servers. Because rpm-ostree is a hybrid image/package system, it is also possible to layer RPMs for desktop applications which aren't yet Flatpaks, and for "OS extensions" such as powerline and ykclient.
Moving desktop applications into Flatpak brings stronger isolation, and solves longstanding issues with using yum/dnf for desktop applications, such as the fact that upgrading deletes the files underneath the running application and often breaks it. (And we don't want most desktop applications in the base OSTree stream, since it is meant for the "base OS" which goes along with a kernel which requires a reboot).
Learning More
The Getting Started guide will help you take the first steps with Team Silverblue. You can learn more about the anatomy of the system and the available tools.


Smokey supports BasketVols
KNOXVILLE, Tenn. (WVLT) -- Smokey made an appearance at the Vols game against Chattanooga on Monday night.
Smokey was named among the greatest mascots in college football history this year. Plus, the Bluetick Hound was officially dubbed Tennessee's state dog this summer.
The prolific dog has been part of the Vols history for 65 years. After General Neyland stepped down, the University of Tennessee started looking for a mascot and had its eyes set on a hound. So, they held a contest and let the students decide. Rev. Bill Brooks brought in his prize-winning Bluetick Coonhound.
Smokey will be at the Thompson-Boling Arena on Monday night to cheer on the BasketVols as they take on Chattanooga and hope to keep their home game winning streak.


Month completed
Milestone
% of project costs
Payment request
Add another project milestone
Total payment requested
Task or activity
Month completed
1
Milestone
Payment requested (£)
Remove
milestone


Planned Voyages
Training
Flight
My Accounts
My Payslip
My Expenses
My Documents
Chat with office
Logout
Seafarer Portal
Sorry, there was a temporary error. Please try again in a minute.
<EMAIL_ADDRESS>Sign In
Sign Up


A file can be included by Drag and Drop.
It is also possible to add a template of a launch tag by using the Add tag button. Or you can press right mouse button to get a context menu with possible tags or attributes. (Currenty there is no context menu if you are in launch group)
You can also search in included files using the find dialog: Double click on the file in the find dialog opens the file.
Include Graph shows an overview of all included files:


Formatting the Required Files¶
The pipeline does require some formatting for file names and contents within files to be present. This section explains the file format expectations, as well as file name expectations.
Parameter: ChromosomeLengthFile¶
The ChromsomeLengthFile
parameter is a file that can be downloaded and modified from sources such as NCBI and UCSC. It should be a tab-delimted file with chromosomes 1-22 listed in the first column and the length of the chromosome in the second column. This file contains no header. The build you select should be based upon the build used for your imputation file. If only using genotyping file, base this file on the genotype build.
Warning
hg19 vs hg38 formatting Depending on the build you choose you must format your file accordingly.
hg19: omit "chr" and should strictly be integer values between 1-22 for the first column.
hg38: include the preceding "chr" string (no spaces) for integer values between 1-22 for the first column.
Parameter: ImputeSuffix¶
This string is the suffix of your imputation file. The imputation files require to be named and split in a particular way.
- First, all imputation files follow these rules:
split by chromosome
sample names are the samples names used in
GenerateGRM
andGenerateNull
(order doesn't need to be maintained)gzipped vcf files, and
have the matching tabix index ending in the imputation file name followed by the .tbi string
This is how each imputation file needs to be named:
for hg38
for hg19
Warning
hg19 vs hg38 formatting Depending on the build you choose you must format your file name accordingly.
hg19: omit "chr" and strictly be integer values between 1-22 as the prefix, followed by a required underscore, following by remaining string.
hg38: include the preceding "chr" string (no spaces) for integer values between 1-22 as the prefix, followed by a required underscore, following by remaining string.
Parameter: PhenoFile¶
This is tab-delimited txt file that contains all the sample IDs (must be the same IDs used in the plink file, imputation file, GRM, and null model -- order agnostic). In addition to the sample IDs, it also contains any phenotype(s) you may want to run and any covariates you may want to use, although the user is not required to use everything listed in the header/file.
Below is an example of a tab-delimited PhenoFile
. Again, none of these header names are required, however, there needs to be a header variable at minimum that denotes the sample ID and a phenotype to analyze.
Note
It is worthwhile to generate a single PhenoFile that contains many phenotypes and covariates you may want to analyze for the sample set. Within the config file, the user can specify which single phenotype to run and which covariates to run. That way, the user can run several jobs in parallel using the same PhenoFile but just changing the trait, phenotype, covariates, and invNorm parameters without having to change anything else.
Parameter: Plink¶
- Plink is a software tool that produces a commonly used format for storing genotype/variant data, is generally computationally inexpensive and can be converted easily between common genotype formats such as vcf, bgen, on-binary plinks (.ped/.map) etc. For SAIGE-BRUSH, we recommend the following:
- Convert your genotyped data for use in either GRM or null model steps into binary plink format (i.e., these are 3 files that have the suffix, .bed, .bim, .fam)
For example if your dataset is called
myInputGenoData
, then you will have 3 plink files:myInputGenoData.bed
myInputGenoData.bim
myInputGenoData.fam
LD-prune this set along with adding a minor allele frequency threshold using plink. For example, if you wanted to LD-prune and apply a minor-allele frequency of 5%, you would do this:
plink --bfile myInputGenoData --indep 50kb 5 2 --maf 0.05 --make-bed --out myNewLDdata
The file is ready and the path and the prefix can be included in the config file for the
Plink
parameter:
Warning
Sample Name Formatting The sample names/IDs in the plink file must be exactly the same as in the association files and throughout the entire analysis!!
Parameter: Pheno¶
The Pheno
parameter refers to a column name that exists in the PhenoFile
. There are a few rules you must follow to format your phenotype columns:
For binary phenotypes, they must be coded in true binary format (0 or 1 for control and cases)
For quantitative phenotypes, be sure all values are numeric (no >, <, = symbols)
If a value is missing, it can be listed as NA or leave the position blank and tab-over to the next column in the
PhenoFile
.You can list as many phenotype columns as you would like in the
PhenoFile
and re-use the file for another analysis.The
Pheno
parameter can only take in one phenotype per analysis run! Only the phenotype listed will have the analysis performed. All other phenotype columns in thePhenoFile
will be ignored.
Here are some examples of phenotype columns that are both formatted correctly and incorrectly to illustrate some common pitfalls:
Here is an example of how to fill out the phenotype and trait information in the config file:
See also
For more information on formatting the PhenoFile
see Parameter: PhenoFile.
Parameter: Covars¶
Unlike the Pheno
parameter, the Covars
parameters can take in a comma-separted list of covariates you want to use in your analysis, as long as it meets the following requirements:
Follows the same formatting conventions and rules as the
Pheno
andPhenoFile
parameters and filesCovariate name(s) must be present in the
PhenoFile
tab-delimited fileIf using more than 1 covariate, it must be a comma-separted list with no spaces
Here is an example of how to fill out the parameter Covars
in the config file:
See also
For more information on formatting the PhenoFile
see Parameter: PhenoFile. For formatting conventions see Parameter: Pheno.
Parameter: SampleID¶
Parameter: InfoFile¶
This is a tab-delimited file that contains information about all snps present in the genotyping chip and imputation files. This file is really only necessary if GenerateResults:
is set to true
.
- The following headers must be present:
CHR
POS
Allele1
Allele2
R2
ER2
GENOTYPE_STATUS


First name is required.
Last name is required.
Email address is required.
Email address is invalid.
Username is required.
Please enter a valid username: 3+ characters long, non restricted word, characters "_-.", no consecutive dots, does not begin or end with dots, letters a-z and numbers 0-9.
Password is required.
{{passwordError}}
AWS ID is required.
AWS Secret is required.
Associate ID is required.


| I l@ve RuBoard |
Microsoft has recently enhanced COM to support distributed objects. These enhancements are known as distributed COM, or DCOM. The term distributed objects refers to objects that operate on different machines: a COM client and COM server may be on different parts of the network.
There are a number of reasons why this may be appealing. It allows you to host your objects close to your data; for example, on a server with high-speed access to a database server. Microsoft also has a product available called the Microsoft Transaction Server (MTS) that provides additional facilities for large-scale distributed applications. Alternatively, DCOM may allow you to use specific hardware installed on a remote machine, by running on that machine and controlling it from your own workstation.
One of the key strengths of the DCOM architecture is that in many cases, the objects don't need to have special code to support distributed objects. DCOM manages all this behind the scenes, and neither the local or remote object need be aware they are not running locally.
DCOM comes with a tool that allows you to configure the DCOM characteristics of the local machine and of each specific object registered on your machine. For each individual object, you can specify the machine where that object should be executed. In addition, the code that creates a new COM object (i.e., the COM client) can specify its own settings by making slight changes to the creation process.
To demonstrate DCOM, let's use the standard Python.Interpreter COM object and configure it to be created on a remote machine. Here's the process:
Configure DCOM on the remote machine.
Configure DCOM and our object on the local machine.
Test the remote object using normal COM.
Test the remote object using DCOM-specific calls.
The first step is to configure DCOM on the remote machine, where the object will actually run.
To configure DCOM, start the DCOM configuration tool by selecting the Run option from the Windows start menu, and enter dcomcnfg. The mail display is shown in Figure 12.4.
Now select the Default Properties tab and ensure that DCOM is enabled for this computer, as shown in Figure 12.5.
No additional configuration options are required on the remote machine, but you do need to ensure the COM object itself is installed on this computer. There's nothing special about registering your object for DCOM; perform a normal registration process for the object, as described in the previous section Section 12.6.2.
The Python.Interpreter object you use is part of the standard Python COM distribution, so it should have been registered when the Python COM extensions were installed. However, it can't hurt to reregister it. To register the Python.Interpreter object, perform the following steps on the remote machine:
Start PythonWin.
Select File Run, select the Browse button, and locate the file win32com\servers\interp.py.
Select OK.
The PythonWin window should report:
Registering COM server... Registered: Python.Interpreter
The next step is to configure your local machine, where you actually create and use the object running on the remote machine.
First, ensure the object is registered on the local machine; although you don't need to start the object on this local machine, the object must be registered locally so the COM and DCOM architecture know about the object and how to redirect it. To register the object locally, perform the same process you did for registering the object on the remote machine.
Now start the DCOM configuration tool to configure the object on the local machine. Use the same process you used to start the tool on the remote machine, but this time at the local machine.
The same initial dialog in Figure 12.4 is displayed. Locate the Python.Interpreter object in the list and select the Properties button. The default properties for the object should look something like Figure 12.6.
If you select the Location tab, you see the available options. The default setting should indicate that the application runs only on this computer. Disable the local computer option and enable the "Run application on the following computer" setting. The remote computer is named SKIPPY. Now enter the name of your remote machine. The dialog should now look something like Figure 12.7.
Select the OK button, and you're ready to go.
Before testing, there is a slight complication that needs to be addressed. If you recall the discussion at the beginning of the chapter regarding InProc, LocalServer, and RemoteServer objects, it should come as no surprise that remote DCOM objects must be hosted by an executable. It's not possible to use an object implemented in a DLL, since the object is running on a different computer than the user of the object, so it must be in a different process. This is not a problem, since by default all Python COM objects are registered with both executable and DLL support.
The complication is on the local machine. Although you configured DCOM not to run the object on the local computer, this applies only to LocalServer objects. If there is an InProc object registered locally, this object is used regardless of the DCOM settings. As your object is registered on the local machine as an InProc application, you need to take action to ensure this version of the object isn't loaded.
It's worth noting that this complication is provided courtesy of COM and DCOM. There is nothing Python-specific about this problem; it exists for all COM objects regardless of their implementation language. Python is slightly unique in that the default registration for its objects are for both LocalServer and InProc; most languages force you to choose one or another quite early in the development process. There are two ways to solve this dilemma:
Modify the COM object so it supports only LocalServer operations by setting the _reg_clsctx_ attribute in the class. See the earlier section Section 12.6.2 for more details.
Make a slight change to the object creation code to explicitly exclude the InProc version of the object from being used.
Because we are using the existing Python.Interpreter example, we won't modify the it, but will go for the second option. You do this by specifying the clsctx parameter to the win32com.client.Dispatch() function. If you decide to change your COM object to support only LocalServer operations, this step isn't necessary, and the object creation code is identical to the normal object creation process.
To execute the object remotely, start Python or PythonWin on the local computer. First, let's prove the name of the local machine:
>>> import win32api >>> win32api.GetComputerName() 'BOBCAT' >>>
Now, let's create a Python.Interpreter object. As discussed, you pass a custom clsctx parameter to the Dispatch() function. Because the clsctx parameter is not the second parameter, specify it by name:
>>> import pythoncom, win32com.client >>> clsctx=pythoncom.CLSCTX_LOCAL_SERVER >>> i=win32com.client.Dispatch("Python.Interpreter", clsctx=clsctx) >>>
Now, let's use this object. Ask it to report what machine it is on. Then ask the remote interpreter to import the win32api module and print the value of win32api.GetComputerName(). Because the object is running remotely, expect to see the name of the remote computer:
>>> i.Exec("import win32api") >>> i.Eval("win32api.GetComputerName()") 'SKIPPY' >>>
If you view the Task Manager for the remote machine, notice a new process pythonw.exe. This is the process hosting the remote object. If you release the reference to the object, you should see the process terminate. To release the reference, execute:
>>> i=None >>>
And within a few seconds the process on the remote server terminates.
As you can see, it worked! Setting up the machines for DCOM is quite painless, and using the remote object is as simple as if it were a local object.
You may have noticed that the DCOM configuration dialog states "Client applications may override your selection." So when you configure DCOM, you really just provide default values for non-DCOM-aware programs. In fact, if you want to make your client code DCOM-aware, it isn't necessary to configure DCOM on the local machine at all; your client code provides the information needed.
To demonstrate this, let's restore the DCOM configuration on the local machine to the defaults. Restart the DCOM configuration tool and again select the Python.Interpreter object. Select the Location tab and restore the settings to how you first found them. The dialog should look similar to Figure 12.8.
Select the OK button to apply the changes.
First, let's check that the object is indeed restored correctly. Execute the same lines of code used previously, but because the DCOM configuration has been restored, the object should be local:
>>> i=win32com.client.Dispatch("Python.Interpreter", clsctx=clsctx) >>> i.Exec("import win32api") >>> i.Eval("win32api.GetComputerName()") 'BOBCAT' >>>
As expected, the local machine name is now being used, and you should be able to locate a pythonw.exe process running on the local computer.
The win32com.client.DispatchEx() function allows you to override the DCOM defaults for your object.
The first parameter to DispatchEx() is the ProgID for the object you wish to create, the same ProgID you would pass to Dispatch(). The second parameter is the name of the machine to create the object on. If the machine name isn't specified, the call operates identically to win32com.client.Dispatch().
Let's test drive this function. Although the DCOM configuration for the local machine is set up to run locally, use the following code to force a remote server:
>>> i=win32com.client.DispatchEx("Python.Interpreter", "skippy", clsctx=clsctx) >>> i.Exec("import win32api") >>> i.Eval("win32api.GetComputerName()") 'SKIPPY' >>>
Note that the same clsctx complications exist here. If the object is registered as an InProc server locally, all DCOM settings (including the explicit machine name) are ignored.
| I l@ve RuBoard |


Nico Daunt is a developer/designer living in Portland Oregon. His current works focus on breaking out in the VR/AR universe through creating web apps, 3d assets, and building scripting solutions.
« LINK 1 | LINK 2
I specialize in VR/AR solutions. Utilizing knowledge of Web Design, Javascript, C#, .NET, Unity, and the Adobe Suite.
All content unless specified created by Nico Daunt
TEST


Hello! I'm Seth Dumaguin. I am a second year Intended Computer Science major and Geographic Information System Minor. I am an aspiring web developer and software engineer. My purpose of being a computer science major is to combine computer science and teaching together. I love teaching students and making a little difference in their life and that is why my focus on most of my games are teaching games. I mostly create mathematics games because I love math and when I was young I had a hard time practicing on math so I want to help students to not struggle in math in their early years.
A game created during CalHacks with my CS partner, Seth Lu. The game is geared towards elementary and middle school students wanting to learn famous landmarks around the state of California. We used JavaScript, CSS, and HTML to create the game. We also used the leaflet API for the map backgroup and different functions. (2017)
A math game set during the attack on Pearl Harbor and the player are asked to select the correct Trig Identity in the form of care packages. This game enforces quick thinking for players. This game was programmed in HTML, JavaScript, and CSS. This game is a Globaloria Globey Winner. (2016)
A math game that lets the player choose between Algebra and Calculus Players are then presented with questions based on the topic that they picked. Players are chased with enemies and they are trying to collect the correct answer before the enemy catches them. This game is a Globaloria Globey Winner(2015)


If you want to send me a comment about these pages, a patch, idea, etc., you can use my email address:
Olivier dot Singla at gmail dot com
LinuxFromScratch is released under the BSD License
Copyright (c) 2015 Olivier Singla
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


a
Experimental frequencies refer to the samples of Figure 2 c,d. The TSL period is 9 nm. The scattering configuration used both for experiments and calculations is x̅( zz) x for the TO and LO modes and x̅( yy) x for the E 2 H. The error on the experimental values is ±0.5 cm –1. The value between parentheses for the calculated LO frequency of the ZB has been obtained by renormalization of the non-analytical corrections using the experimental value of the dielectric constant.


South Park: Bigger, Longer and Uncut (1999) Trey Parker, Matt Stone, Mary Kay Bergman, Isaac Hayes, George Clooney, Minnie Driver, Dave Foley, Mike Judge, Eric Idle, Brent Spiner. Music by Marc Shaiman. Screenplay by Trey Parker & Matt Stone and Pam Brady. Directed by Trey Parker. 82 minutes. Rated R, 3.5 stars (out of five stars)
Review by Ed Johnson-Ott, NUVO Newsweekly www.nuvo-online.com Archive reviews at http://us.imdb.com/M/reviews_by?Edward+Johnson-ott To receive reviews by e-mail at no charge, send subscription requests to<EMAIL_ADDRESS>"Off to the movies we shall go, Where we learn everything that we know, 'Cause the movies teach us what our parents don't have time to say." from "Mountain Song," written by Trey Parker and Marc Shaiman
So begins the animated musical "South Park: Bigger, Longer and Uncut," which starts off strong, sags quite a bit in the middle, but comes back for a rousing finale. The big-screen version of the popular TV series is staggeringly profane and very funny, although it may prove troublesome to those gentle souls offended by non-stop swearing, bathroom humor, sacrilegious remarks and jokes about "family values," small town Americana, Heaven, Hell, the movie ratings system, racism, abortion, menstruation, rednecks, gays, Christians, Jews, Canadians, doctors, homeless people, fat people, the military, the Presidency, Saddam Hussein, Bryan Adams, Anne Murray, Celine Dion, Alanis Morissette, Winona Ryder, Brooke Shields, the Baldwin Brothers, Bill Gates and Jar Jar Binks. Give creators Trey Parker and Matt Stone credit, though: they treat Olympic skater Brian Boitano with the utmost of respect.
A word of warning to parents: Even if you allow your children to watch "South Park" on TV, do not let them see this movie without first screening it yourself. "Bigger, Longer and Uncut" is a comedy for adults that takes full advantage of its "R" rating.
In fact, parents who fail to adequately monitor their children are key to the film's plot. After eight-year-old twerps Stan Marsh, Kenny McCormick, Kyle Broflovski and Eric Cartman take in a screening of "Asses of Fire," an R-rated movie starring their favorite TV stars, Canadian comics Terrance and Phillip, they emerge from the theater with a broader vocabulary, courtesy of their newly uncensored heroes. When the children of the sleepy little Colorado town of South Park begin swearing like longshoremen, their parents wildly overreact, leading to the United States declaring war on Canada.
As happens weekly on the TV version of "South Park," Kenny dies horribly, only this time we follow him into the afterlife. Rejected from Heaven, Kenny plummets to Hell, where he overhears a conversation between Satan and his lover, Saddam Hussein. To save the world, Kenny must return to Earth and somehow prevent the pending execution of Terrance and Phillip.
While the animation for the big screen "South Park" remains as delightfully crude as the original, co-writers Parker, Stone and Pam Brady use their new forum to create a lavish send-up of animated musicals. The 12 songs lampoon everything from Broadway style show stoppers to cheesy power ballads. Highlights include "Uncle Fucka," an obscenity-fest from Terrance and Phillip, "Blame Canada," a brassy offering from the parents, the peppy "Kyle's Mom's A Bitch" and "Up There," a terrifically hokey "inspirational" number from Satan himself, complete with the Dark Lord breaking into a falsetto during the overwrought climax, as a choir swells behind him.
The songs, with lyrics by Parker and music by Marc Shaiman, are hilarious dead-on parodies, but for a film only 82 minutes long, a dozen tunes are a bit much (although I can't imagine cutting even one of these nasty little ditties). Surprisingly, Chef (Isaac Hayes), the one character who routinely croons on the TV series, doesn't sing a note here.
After a powerhouse beginning, "Bigger, Longer and Uncut" suffers from a flaccid midsection. The boys organize "La Resistance," a children's crusade to rescue Terrance and Phillip, while Kenny counsels Satan about his codependent relationship with Saddam Hussein. Both storylines are sporadically amusing, but fail to sustain the riotous tone established earlier in the film. Thankfully, everything builds to an ending that almost recaptures the energy level of the opening. And, as an added treat, fans get to clearly see and hear little Kenny for the first time.
 Some fans will bemoan the musical format, while social observers will likely wail that the film is another example of how far our culture has fallen. To both groups, I can only quote the immortal words of Eric Cartman: "Screw you guys, I'm going home."
© 1999 Ed Johnson-Ott
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% extends "base.html" %} {% load crispy_forms_tags i18n %} {% block title %}Submit a Proposal for a {{ kind.name }} | {% endblock %} {% block body %}
You will be able to edit your proposal after it has been submitted. The program committee may ask questions, provide feedback, and even suggest changes to your proposal as part of the review processes.


“
Don't believe everything that you read on the internet, it may be fake.
Abraham Lincoln
❤
Hateful Comments
Hateful comments are made everyday that have no basis in fact. This feature was designed to rebuff these comments by allowing users to enter a hateful comment into the textbox. Users are then returned, factual comments from the department of labor, and reputable new sources.
Enter a Questionable Comment


Bigger Applications - Multiple Files
If you are building an application or a web API, it's rarely the case that you can put everything on a single file.
FastAPI provides a convenience tool to structure your application while keeping all the flexibility.
Info
If you come from Flask, this would be the equivalent of Flask's Blueprints.
An example file structure¶
Let's say you have a file structure like this:
.
├── app
│ ├── __init__.py
│ ├── main.py
│ └── routers
│ ├── __init__.py
│ ├── items.py
│ └── users.py
Tip
There are two __init__.py
files: one in each directory or subdirectory.
This is what allows importing code from one file into another.
For example, in app/main.py
you could have a line like:
from app.routers import items
- The
app
directory contains everything. - This
app
directory has an empty fileapp/__init__.py
.- So, the
app
directory is a "Python package" (a collection of "Python modules").
- So, the
- The
app
directory also has aapp/main.py
file.- As it is inside a Python package directory (because there's a file
__init__.py
), it is a "module" of that package:app.main
.
- As it is inside a Python package directory (because there's a file
- There's a subdirectory
app/routers/
. - The subdirectory
app/routers
also has an empty file__init__.py
.- So, it is a "Python subpackage".
- The file
app/routers/items.py
is beside theapp/routers/__init__.py
.- So, it's a submodule:
app.routers.items
.
- So, it's a submodule:
- The file
app/routers/users.py
is beside theapp/routers/__init__.py
.- So, it's a submodule:
app.routers.users
.
- So, it's a submodule:
APIRouter
¶
Let's say the file dedicated to handling just users is the submodule at /app/routers/users.py
.
You want to have the path operations related to your users separated from the rest of the code, to keep it organized.
But it's still part of the same FastAPI application/web API (it's part of the same "Python Package").
You can create the path operations for that module using APIRouter
.
Import APIRouter
¶
You import it and create an "instance" the same way you would with the class FastAPI
:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Foo"}, {"username": "Bar"}]
@router.get("/users/me", tags=["users"])
async def read_user_me():
return {"username": "fakecurrentuser"}
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
Path operations with APIRouter
¶
And then you use it to declare your path operations.
Use it the same way you would use the FastAPI
class:
from fastapi import APIRouter
router = APIRouter()
@router.get("/users/", tags=["users"])
async def read_users():
return [{"username": "Foo"}, {"username": "Bar"}]
@router.get("/users/me", tags=["users"])
async def read_user_me():
return {"username": "fakecurrentuser"}
@router.get("/users/{username}", tags=["users"])
async def read_user(username: str):
return {"username": username}
You can think of APIRouter
as a "mini FastAPI
" class.
All the same options are supported.
All the same parameters, responses, dependencies, tags, etc.
Tip
In this example, the variable is called router
, but you can name it however you want.
We are going to include this APIrouter
in the main FastAPI
app, but first, let's add another APIRouter
.
Another module with APIRouter
¶
Let's say you also have the endpoints dedicated to handling "Items" from your application in the module at app/routers/items.py
.
You have path operations for:
/items/
/items/{item_id}
It's all the same structure as with app/routers/users.py
.
But let's say that this time we are more lazy.
And we don't want to have to explicitly type /items/
and tags=["items"]
in every path operation (we will be able to do it later):
from fastapi import APIRouter, HTTPException
router = APIRouter()
@router.get("/")
async def read_items():
return [{"name": "Item Foo"}, {"name": "item Bar"}]
@router.get("/{item_id}")
async def read_item(item_id: str):
return {"name": "Fake Specific Item", "item_id": item_id}
@router.put(
"/{item_id}",
tags=["custom"],
responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
if item_id != "foo":
raise HTTPException(status_code=403, detail="You can only update the item: foo")
return {"item_id": item_id, "name": "The Fighters"}
Add some custom tags
, responses
, and dependencies
¶
We are not adding the prefix /items/
nor the tags=["items"]
to add them later.
But we can add custom tags
and responses
that will be applied to a specific path operation:
from fastapi import APIRouter, HTTPException
router = APIRouter()
@router.get("/")
async def read_items():
return [{"name": "Item Foo"}, {"name": "item Bar"}]
@router.get("/{item_id}")
async def read_item(item_id: str):
return {"name": "Fake Specific Item", "item_id": item_id}
@router.put(
"/{item_id}",
tags=["custom"],
responses={403: {"description": "Operation forbidden"}},
)
async def update_item(item_id: str):
if item_id != "foo":
raise HTTPException(status_code=403, detail="You can only update the item: foo")
return {"item_id": item_id, "name": "The Fighters"}
The main FastAPI
¶
Now, let's see the module at app/main.py
.
Here's where you import and use the class FastAPI
.
This will be the main file in your application that ties everything together.
Import FastAPI
¶
You import and create a FastAPI
class as normally:
from fastapi import Depends, FastAPI, Header, HTTPException
from .routers import items, users
app = FastAPI()
async def get_token_header(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
app.include_router(users.router)
app.include_router(
items.router,
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
Import the APIRouter
¶
But this time we are not adding path operations directly with the FastAPI
app
.
We import the other submodules that have APIRouter
s:
from fastapi import Depends, FastAPI, Header, HTTPException
from .routers import items, users
app = FastAPI()
async def get_token_header(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
app.include_router(users.router)
app.include_router(
items.router,
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
As the file app/routers/items.py
is part of the same Python package, we can import it using "dot notation".
How the importing works¶
The section:
from .routers import items, users
Means:
- Starting in the same package that this module (the file
app/main.py
) lives in (the directoryapp/
)... - look for the subpackage
routers
(the directory atapp/routers/
)... - and from it, import the submodule
items
(the file atapp/routers/items.py
) andusers
(the file atapp/routers/users.py
)...
The module items
will have a variable router
(items.router
). This is the same one we created in the file app/routers/items.py
. It's an APIRouter
. The same for the module users
.
We could also import them like:
from app.routers import items, users
Info
The first version is a "relative import".
The second version is an "absolute import".
To learn more about Python Packages and Modules, read the official Python documentation about Modules.
Avoid name collisions¶
We are importing the submodule items
directly, instead of importing just its variable router
.
This is because we also have another variable named router
in the submodule users
.
If we had imported one after the other, like:
from .routers.items import router
from .routers.users import router
The router
from users
would overwrite the one from items
and we wouldn't be able to use them at the same time.
So, to be able to use both of them in the same file, we import the submodules directly:
from fastapi import Depends, FastAPI, Header, HTTPException
from .routers import items, users
app = FastAPI()
async def get_token_header(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
app.include_router(users.router)
app.include_router(
items.router,
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
Include an APIRouter
¶
Now, let's include the router
from the submodule users
:
from fastapi import Depends, FastAPI, Header, HTTPException
from .routers import items, users
app = FastAPI()
async def get_token_header(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
app.include_router(users.router)
app.include_router(
items.router,
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
Info
users.router
contains the APIRouter
inside of the file app/routers/users.py
.
With app.include_router()
we can add an APIRouter
to the main FastAPI
application.
It will include all the routes from that router as part of it.
Technical Details
It will actually internally create a path operation for each path operation that was declared in the APIRouter
.
So, behind the scenes, it will actually work as if everything was the same single app.
Check
You don't have to worry about performance when including routers.
This will take microseconds and will only happen at startup.
So it won't affect performance.
Include an APIRouter
with a prefix
, tags
, responses
, and dependencies
¶
Now, let's include the router from the items
submodule.
But, remember that we were lazy and didn't add /items/
nor tags
to all the path operations?
We can add a prefix to all the path operations using the parameter prefix
of app.include_router()
.
As the path of each path operation has to start with /
, like in:
@router.get("/{item_id}")
async def read_item(item_id: str):
...
...the prefix must not include a final /
.
So, the prefix in this case would be /items
.
We can also add a list of tags
that will be applied to all the path operations included in this router.
And we can add predefined responses
that will be included in all the path operations too.
And we can add a list of dependencies
that will be added to all the path operations in the router and will be executed/solved for each request made to them. Note that, much like dependencies in path operation decorators, no value will be passed to your path operation function.
from fastapi import Depends, FastAPI, Header, HTTPException
from .routers import items, users
app = FastAPI()
async def get_token_header(x_token: str = Header(...)):
if x_token != "fake-super-secret-token":
raise HTTPException(status_code=400, detail="X-Token header invalid")
app.include_router(users.router)
app.include_router(
items.router,
prefix="/items",
tags=["items"],
dependencies=[Depends(get_token_header)],
responses={404: {"description": "Not found"}},
)
The end result is that the item paths are now:
/items/
/items/{item_id}
...as we intended.
- They will be marked with a list of tags that contain a single string
"items"
. - The path operation that declared a
"custom"
tag will have both tags,items
andcustom
.- These "tags" are especially useful for the automatic interactive documentation systems (using OpenAPI).
- All of them will include the predefined
responses
. - The path operation that declared a custom
403
response will have both the predefined responses (404
) and the403
declared in it directly. - All these path operations will have the list of
dependencies
evaluated/executed before them.- If you also declare dependencies in a specific path operation, they will be executed too.
- The router dependencies are executed first, then the
dependencies
in the decorator, and then the normal parameter dependencies. - You can also add
Security
dependencies withscopes
.
Tip
Having dependencies
in a decorator can be used, for example, to require authentication for a whole group of path operations. Even if the dependencies are not added individually to each one of them.
Check
The prefix
, tags
, responses
and dependencies
parameters are (as in many other cases) just a feature from FastAPI to help you avoid code duplication.
Tip
You could also add path operations directly, for example with: @app.get(...)
.
Apart from app.include_router()
, in the same FastAPI app.
It would still work the same.
Very Technical Details
Note: this is a very technical detail that you probably can just skip.
The APIRouter
s are not "mounted", they are not isolated from the rest of the application.
This is because we want to include their path operations in the OpenAPI schema and the user interfaces.
As we cannot just isolate them and "mount" them independently of the rest, the path operations are "cloned" (re-created), not included directly.
Check the automatic API docs¶
Now, run uvicorn
, using the module app.main
and the variable app
:
uvicorn app.main:app --reload
And open the docs at http://<IP_ADDRESS>:8000/docs.
You will see the automatic API docs, including the paths from all the submodules, using the correct paths (and prefixes) and the correct tags:
Include the same router multiple times with different prefix
¶
You can also use .include_router()
multiple times with the same router using different prefixes.
This could be useful, for example, to expose the same API under different prefixes, e.g. /api/v1
and /api/latest
.
This is an advanced usage that you might not really need, but it's there in case you do.


Spain's Rivera steps down as lawmaker and Ciudadanos party leader
MADRID (Reuters) - The leader of Spain’s Ciudadanos, Albert Rivera, on Monday said he had resigned as party president and lawmaker after the centre-right party saw its support plunge in Sunday’s election.
Rivera, visibly moved, said he took responsibility for the party’s “poor result” in hopes that the party would return to its roots as a centrist and liberal political project, in televised remarks after meeting with his party’s executive committee.
Ciudadanos won 10 seats in Sunday’s election, less than a fifth of 57 seats won in the previous April election.
Various potential solutions to unblock the stalemate, however, involve Ciudadanos, alongside regionalist parties.


1. Media
2. Trypsin
3. Flasks
4. Hood
5. Pipettes and Pipettor
Spray gloves and workspace
Place media and trypsin in hot water bath to thaw
1. Place all materials under hood
2. Open cap of flask
3. Open 10 mL pipette and screw into pipetter
4. Take out all media out of flask and put in discard beaker
5. Open trypsin bottle
6. Take out 5 mL pipette (same as above)
7. Pipette 3 mL of trypsin in flask if you are working with a T-75 Flask and 1.5 mL of trypsin if you are working with a T-25 Flask
8. Tap flask to spread trypsin
9. Pipette out trypsin into waste beaker
10. Pipette same amount of trypsin (as before) and put in flask
11. Place the flask in the incubator for three minutes
12. View cells under microscope to make sure that cells are moving and not attached.
13. Pipette out trypsin into waste beaker
14. Add 10-12 mL media into flask and place in incubator


MC Hawking - Entropy
Time: 0
VOL:
Time: 0
VOL:
slow fade
quick fade
"Weird Al" Yankovic - White & Nerdy (Official Video)
Search YouTube Videos Here:


Notice:
This page has been converted from a dynamic Wordpress article to a static HTML document. As a result, some content may missing or not rendered correctly.
This page has been converted from a dynamic Wordpress article to a static HTML document. As a result, some content may missing or not rendered correctly.
Comments
{{#each comments}}{{#if commentAuthorUrl}} {{commentAuthor}} {{else}} {{commentAuthor}} {{/if}} said ({{commentDateGmt}} GMT):
{{/if}} {{/each}}


Subscribe to my Newsletter!
Get Now!
Receive
FREE
resources!
Interview Strategies
Web Development Paths
Thinking out-of-the-box
Realist Perspectives
Become a Good Mentor


Pregnant CVS employee shot during robbery holds baby delivered via emergency surgery for the first time
by Madeline FarberA CVS employee in Texas who was shot during a robbery and required emergency surgery to deliver her son has finally held her baby for the first time.
SUDDEN CARDIAC ARREST BRIEFLY KILLS NEW JERSEY MAN, 23; HYPOTHERMIA USED TO PREVENT BRAIN DAMAGE
Orelia Hollins, who works at a CVS near the Southern Methodist University campus, was injured last weekend when an armed robber entered the store and opened fire. Hollins, who was eight months pregnant at the time, underwent emergency surgery to deliver her son.
Hollins, 29, and her child remain hospitalized, but both are showing signs of improvement, Fox 4 reports. As of Monday, they were considered in “critical but stable condition,” The Dallas Morning News reported.
She is now able to walk with assistance while her baby is “moving both arms and legs” and is “squirming around,” per Fox 4.
CLICK HERE TO GET THE FOX NEWS APP
The gunman, who allegedly demanded money before shooting Hollins, has not been identified, according to The Dallas Morning News.


Bury St Edmunds Christmas fayre hailed as 'best year yet'
by Holly HumeBusiness leaders are hailing the Bury St Edmunds Christmas market as one of the 'best so far' after a successful four days of festive shopping, entertainment and food.
Fears of traffic gridlock failed to materialise - even with the A14 closed for emergency roadworks - and town businesses as well as the visiting traders reported a spike in profits.
Mark Cordell, CEO of Our Bury St Edmunds Business Improvement District, said the 14th edition of the famous Christmas market could well have been the "best year yet".
MORE: See these stunning aerial pictures of magical fayre
He added: "The council made a real effort to make sure they kept us updated with when the car parks were full.
"They also provided additional car parks and have worked with the local radio station to provide updates."
Mr Cordell continued: "The town business holders are all saying they've had a great year too so people have gone in and spent in the shops as well as the stalls.
"It seems to have benefited everyone."
MORE: Can you spot yourself in our photo gallery of the fayre?
He is yet to analyse the figures but added: "I look at how much people have enjoyed themselves as a better marker of success."
"It appears, in that regard, that we have had the best year yet in the sense its been the most beneficial and the least irritating.
"Many local people have said how they managed to make it into town and do normal shopping and didn't struggle like in previous years."
West Suffolk Council tweeted on Saturday afternoon that Highways England would be unexpectedly closing a stretch of the A14 between Bury St Edmunds and Newmarket at 8pm, just as festivities ended for the day but traffic continued to flow and there were no reports of major congestion.
- An elderly woman was involved in a collision with car in the arc shopping centre car park on Saturday and had to be taken to hospital for further care.
Her injuries were not thought to be serious.


Sahi Pro - Fetch APIs
abstract
While working on scripts, we often need to fetch content from the web page.
Examples may be:
Examples may be:
- Fetching and storing a generated userId for later use in script
- Getting the value of form field for verification
- Getting the text from a UI element for assertion
- Getting some particular attribute of a UI element, like href of a link
info
Sahi's script is executed on in the proxy JVM and not in the browser.
Only steps needed to be executed on the browser are sent to the browser.
Fetch APIs work by first sending a command to evaluate the given expression on the browser
and then another call is made internally to read the value.
Only steps needed to be executed on the browser are sent to the browser.
Fetch APIs work by first sending a command to evaluate the given expression on the browser
and then another call is made internally to read the value.
_getValue
Since Sahi Pro: 3.5Since Sahi OS: 3
_getValue($element)
Arguments
| $element | HTML DOM element | Form element whose value we need |
Details
Returns the value as a string
For getting text out of div or span like elements, use _getText
Returns the value as a string
info
This API only works on elements which take user text input.
// Using in an assertion
_assertEqual("Tyto", _getValue(_textbox("company")));
// Fetching and storing value
var $userId = _getValue(_textbox("userId"));
For getting text out of div or span like elements, use _getText
_getText
Since Sahi Pro: 3.5Since Sahi OS: 2
_getText($el)
Arguments
| $el | HTML DOM element | Element whose text we need |
Details
Returns the text content as a string
The returned string is normalized for different browsers. Multiple continuous spaces are replaced with single space.
Multiple continuous newlines are replaced with single newline. Newlines are always returned as \n even on
Mac and Linux, so that scripts can work across browsers and OSes.
This API uses the textContent or innerText attributes of elements.
Returns the text content as a string
The returned string is normalized for different browsers. Multiple continuous spaces are replaced with single space.
Multiple continuous newlines are replaced with single newline. Newlines are always returned as \n even on
Mac and Linux, so that scripts can work across browsers and OSes.
This API uses the textContent or innerText attributes of elements.
// Using in an assertion
_assertEqual("Tyto", _getText(_div("companyDiv")));
// Fetching and storing value
var $userId = _getText(_div("userIdDiv"));
_getOptions
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_getOptions($el[, $type])
Arguments
| $el | HTML DOM element | Select element |
| $type | string optional | If "value" is passed, option values are returned. If anything else is passed, the visible texts of the options are returned. If type is not passed, the visible texts of the options are returned. |
Details
Returns an array containing the values or texts of all options of the select element.
If we want the values of all the options of the selectbox:
Returns an array containing the values or texts of all options of the select element.
If we want the values of all the options of the selectbox:
var $list = _getOptions(_select("select_id"), "value");
_assertEqual("Value of First Option", $list[0]);
_assertEqual("Value of Second Option", $list[1]);
_assertEqual(2, $list.length);
For getting visible text of all options:var $list = _getOptions(_select("select_id"));
_assertEqual("Visible Text of First Option", $list[0]);
_assertEqual("Visible Text of Second Option", $list[1]);
_assertEqual(2, $list.length);
_getCellText
Since Sahi Pro: 3.5Since Sahi OS: 2
_getCellText($el)
Arguments
| $el | HTML DOM element | Cell (TD) element whose text we need |
Details
Returns the text content as a string
Returns the text content as a string
dangerDEPRECATED:
Use
Use
_getText(element)
instead._getSelectedText
Since Sahi Pro: 3.5Since Sahi OS: 2
_getSelectedText($el)
Arguments
| $el | HTML DOM element | Select dropdown element whose selected text we need |
Details
Returns the text content of the selected option of a select dropdown as a string
Returns the text content of the selected option of a select dropdown as a string
// Using in an assertion
_assertEqual("18", _getSelectedText(_select("legalAge")));
// Fetching and storing value
var $legalAge = _getSelectedText(_select("legalAge"));
warning
_getSelectedText returns the text of the selected option in a select dropdown box.
_getSelectionText returns the text that the user has selected on a page.
_getSelectionText returns the text that the user has selected on a page.
_getAttribute
Since Sahi Pro: 3.5Since Sahi OS: 3
_getAttribute($el, $attributeName)
Arguments
| $el | HTML DOM element | Element whose attribute we need |
| $attributeName | string | The DOM attribute to be fetched |
Details
Returns the attribute as a string.
Returns the attribute as a string.
// Using in an assertion
_assertEqual("http://sahi.co.in/", _getAttribute(_link("Home"), "href"));
// Fetching and storing value
var $href = _getAttribute(_link("Home"), "href");
warning
Some attributes may have different names in javascript and HTML. Always use the javascript attribute name.
For example,
the
the
Fortunately there are not many such differences.
For example,
the
class
attribute in HTML is accessed as className
in javascriptthe
for
attribute of labels in HTML is accessed as htmlFor
in javascriptFortunately there are not many such differences.
_exists
Since Sahi Pro: 3.5Since Sahi OS: 3
_exists($el)
Arguments
| $el | HTML DOM element | Element to check |
Details
Returns true if element exists on the page.
Returns true if element exists on the page.
// Using in an assertion
_assertTrue(_exists(_link("Home")));
// same as
_assertExists(_link("Home")));
// Fetching and storing value
var $exists = _exists(_link("Home"));
info
_exists() checks for existence of the element in the DOM.
Elements may exist but not be visible to the end user.
For testing, _isVisible is a better check than _exists.
Elements may exist but not be visible to the end user.
For testing, _isVisible is a better check than _exists.
_areEqual
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_areEqual($expected, $actual)
Arguments
| $expected | any | Expected value. This value can be any normal javascript data type or an array Regular expressions can also be used. (eg. "/del/") |
| $actual | any | Actual value. This value can be any normal javascript data type or an array. It is mostly some attribute of a HTML DOM element. |
Details
Compares two Javascript data type or arrays. Returns true if the expected and actual values match, else false.
Compares two Javascript data type or arrays. Returns true if the expected and actual values match, else false.
// Compare string with regular expression.
var $compare1 = _areEqual("/^a.*c$/", "abc"); // $compare1 is true.
// Compare text of an element with regular expression.
var $compare2 = _areEqual("/created/", _getText(_div("result")));
// Compare arrays.
$exp = [/[a-z]+$/, "b"];
$act = ["ab", "b"];
var $compareArr = _areEqual($exp, $act)); // $compareArr is true.
info
_assertEqual allows a regular expression in the expected value. But it cannot be used in an if condition.
Instead one could use _areEqual in the if condition to execute the desired code and _assert(false) can be used in the else block to indicate failure.
The advantage of using _areEqual instead of a direct equal to (==) comparison is that _areEqual allows the use of regular expression in the expected value.
Instead one could use _areEqual in the if condition to execute the desired code and _assert(false) can be used in the else block to indicate failure.
The advantage of using _areEqual instead of a direct equal to (==) comparison is that _areEqual allows the use of regular expression in the expected value.
_isVisible
Since Sahi Pro: 3.5Since Sahi OS: 2
_isVisible($el[, $checkZIndex[, $doScroll]])
Arguments
| $el | HTML DOM element | Element to check |
| $checkZIndex | boolean optional | If true, checks whether the element is on top or not(Checks whether some other element with a higher Z index is not hiding it). If false, omits this check. Default is false. |
| $doScroll | boolean optional | If true, checks whether element is the top element by scrolling to the element. If false, checks only for the current viewport. Default is false. Used only when checkZIndex is true. |
Details
Returns true if element is visible, else false.
Returns true if element is visible, else false.
info
In 6.0.0, $checkZIndex and $doScroll have been newly added. Scripts written before 6.0.0 do NOT need changes.
// Using in an assertion
_assertTrue(_isVisible(_link("Home"))); // doesn't check z-index
_assertTrue(_isVisible(_link("Home"), true)); //checks z-index
_assertTrue(_isVisible(_link("Home"), true, true)); //checks z-index after scrolling
// Fetching and storing value
var $visible = _isVisible(_link("Home"));
_containsText
Since Sahi Pro: 3.5Since Sahi OS: 2
_containsText($element, $text)
Arguments
| $element | el | Element where we need to check if text is present |
| $text | string | Text to check for. Can also be a regular expression |
Details
Returns boolean true or false.
Returns boolean true or false.

Formatted Text

_containsText(_div("d1"), "Formatted") //=true
_containsText(_div("d1"), "Text") //=true
_containsText(_div("d1"), "Formatted Text") //=true
_containsText(_div("d1"), "/Format.*Text/") //=true
_containsText(_div("d1"), "/mat.*Te/") //=true
_containsText(_div("d1"), "Non existent") //=false
_containsHTML
Since Sahi Pro: 3.5Since Sahi OS: 2
_containsHTML($element, $html)
Arguments
| $element | el | Element where we need to check if text is present |
| $html | string | HTML to check for. Can also be a regular expression |
Details
Returns boolean true or false.
Returns boolean true or false.

Formatted Text

_containsHTML(_div("d1"), "Formatted") //=true
_containsHTML(_div("d1"), "Text") //=true
_containsHTML(_div("d1"), "Formatted Text") //=true
_containsText(_div("d1"), "/.* Text/") //=true
_containsHTML(_div("d1"), "Formatted Text") //=false
_containsHTML(_div("d1"), "Non existent") //=false
_contains
Since Sahi Pro: 3.5Since Sahi OS: 2
_contains($parent, $child)
Arguments
| $parent | HTML DOM element | Parent element |
| $child | HTML DOM element | Child element |
Details
Returns true if $child is a child of $parent
Returns true if $child is a child of $parent

inside

_contains(_div("d1"), _span("inside")) //=true
_title
Since Sahi Pro: 3.5Since Sahi OS: 3
_title()
Arguments
| None |
Details
Returns the title of the top most page (the title visible on the browser)
Returns the title of the top most page (the title visible on the browser)
var $title = _title(); // returns "Sahi Pro - Fetch APIs" for this page.
_getTableContents
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_getTableContents($tableEl[, $columns[, $rows[, $count]]])
Arguments
| $tableEl | HTML DOM element | Table element |
| $columns | object optional | Array of column identifiers. The identifiers can be index, text or regular expression of text |
| $rows | object optional | Can be a regular expression, an array of indexes or the starting index |
| $count | integer optional | If rows is the starting index, count is the ending index, If rows is a regular expression, count is the total count. If rows is an array of indexes, count is ignored. |
Details
Returns the data from the table as a 2 dimensional array
Returns the data from the table as a 2 dimensional array
// All table data
var $data = _getTableContents(_table("tableId"));
// All rows, but only specific columns from the table
var $data = _getTableContents(_table("tableId"), [1,3,7] );
// Returns all rows with columns 2, 4 and 8 since index is 0 based.
// All rows, but only specific columns from the table
var $data = _getTableContents(_table("tableId"), [1,"Price", "/Stock/"] );
// Returns all rows with column 2 (index is 0 based), column with header "Price" and column header matching regular expression /Stock/
// Rows containing specified keyword, but only specific columns from the table
var $data = _getTableContents(_table("tableId"), ["Price", "/Stock/"], "/pen/" );
// Returns all rows containing words matching regular expression /pen/, with columns having column header Price and column header matching
// regular expression /Stock/. Note that /pen/ is matched with all the columns of the row.
// First n rows containing specified keyword, but only specific columns from the table
var $data = _getTableContents(_table("tableId"), ["Price", "/Stock/"], "/pen/", 8);
// Returns first 8 rows contain words matching regular expression /pen/ having column header Price and column header matching
// regular expression /Stock/
// Rows having indexes specified in array, with specific columns from the table
var $data = _getTableContents(_table("tableId"), ["Price", "/Stock/"], [3,4,7]);
// Returns rows 4, 5 and 8 (index is 0 based) having all columns with header "Price" and column header matching regular expression /Stock/
// Rows from m to n, but only specific columns from the table
var $data = _getTableContents(_table("tableId"), ["Price", "/Stock/"], 3, 7 );
// Returns rows from 3 to 7 having all columns with header "Price" and column header matching regular expression /Stock/
info
Prefer using _getTableContents to _collect or _collectAttributes, if you specifically need the contents of an html table (as against other collections) and you need to get the content of many such tables in a script.
_style
Since Sahi Pro: 3.5Since Sahi OS: 2
_style($el, $styleAttribute)
Arguments
| $el | HTML DOM element | element whose style attribute we need |
| $styleAttribute | string | style attribute to be fetched |
Details
Returns the style attribute value as string
Returns the style attribute value as string
info
Styles in HTML elements are calculated by the browser based on various CSS rules.
_style returns the computed style that is finally applicable to the element.
Accessing style directly as an attribute will not give computed style. Always use _style instead.
_style returns the computed style that is finally applicable to the element.
Accessing style directly as an attribute will not give computed style. Always use _style instead.
// Using in assertion
_assertEqual("24px", _style(_heading1(0), "font-size"));
// Fetching and storing value
var $fontSize = _style(_heading1(0), "font-size");
_position
Since Sahi Pro: 3.5Since Sahi OS: 2
_position($el[, $relative])
Arguments
| $el | HTML DOM element | element whose position we need |
| $relative | boolean optional | If true, returns position relative to current viewport. Default is false. |
Details
Returns an array [x,y] of the elements position in pixels relative to its window/frame/iframe
This may be used to verify layouts by comparing positions of specific elements.
Returns an array [x,y] of the elements position in pixels relative to its window/frame/iframe
This may be used to verify layouts by comparing positions of specific elements.
// Using in assertion
_assertEqual([10,20], _position(_image("logo")));
// Fetching and storing value
var $position = _position(_image("logo"));
_log($position[0]); //logs x coordinate (eg. 10)
_log($position[1]); //logs y coordinate (eg. 20)
_getSelectionText
Since Sahi Pro: 5.1.0Since Sahi OS: 5.0
_getSelectionText($el)
Arguments
| $el | object | Element in which to look for selection. Need not be specified as Sahi will automatically look in all frames and elements. |
Details
Returns the text selected by the user (using mouse drag, like we select before copy paste)
Returns the text selected by the user (using mouse drag, like we select before copy paste)
// Using in an assertion
_assertEqual("Search", _getSelectionText());
// Fetching and storing value
var $currentSelectedText = _getSelectionText();
warning
_getSelectionText returns the text that the user has selected on a page.
_getSelectedText returns the text of the selected option in a select dropdown box.
_getSelectedText returns the text of the selected option in a select dropdown box.
Browser Detection APIs
info
Browser detection APIs are used to identify browsers at runtime, so that specific paths in code can be chosen.
_userAgent
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_userAgent()
Arguments
| None |
Details
Returns the userAgent string of the current browser.
Returns the userAgent string of the current browser.
info
Useful for testing a responsive website. Refer to _getScreenSize
_getScreenSize
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_getScreenSize()
Arguments
| None |
Details
Returns the screen size as an array of two values. The first value is the inner width of the browser window and the second value is the inner height.
Returns the screen size as an array of two values. The first value is the inner width of the browser window and the second value is the inner height.
// Using in an assertion
var $screensize=_getScreenSize();
_assertTrue(($screensize[0]>=783)&&($screensize[0]<=800));
_assertTrue(($screensize[1]>=280)&&($screensize[1]<=400));
info
When dealing with a responsive website, you may want to write a single script to test functionality on different devices along with the desktop.
Some parts of the website UI may be same across different devices but some parts may be different. To test the parts that are different, you would use the _getScreenSize and _userAgent APIs to identify a specific device and write specific code for that device.
Some parts of the website UI may be same across different devices but some parts may be different. To test the parts that are different, you would use the _getScreenSize and _userAgent APIs to identify a specific device and write specific code for that device.
_isIE
Since Sahi Pro: 3.5Since Sahi OS: 3
_isIE()
Arguments
| None |
Details
Returns true if the current browser is Internet Explorer
Returns true if the current browser is Internet Explorer
_isIE9
Since Sahi Pro: 3.5.2Since Sahi OS: 3.5
_isIE9()
Arguments
| None |
Details
Returns true if the current browser is Internet Explorer 9
Returns true if the current browser is Internet Explorer 9
_isIE10
Since Sahi Pro: 4.5.2Since Sahi OS: 5.0
_isIE10()
Arguments
| None |
Details
Returns true if the current browser is Internet Explorer 10
Returns true if the current browser is Internet Explorer 10
_isFF
Since Sahi Pro: 3.5Since Sahi OS: 3
_isFF()
Arguments
| None |
Details
Returns true if the current browser is Firefox
Returns true if the current browser is Firefox
_isFF3
Since Sahi Pro: 3.5Since Sahi OS: 3
_isFF3()
Arguments
| None |
Details
Returns true if the current browser is Firefox 3
Returns true if the current browser is Firefox 3
_isFF4
Since Sahi Pro: 3.5.2Since Sahi OS: 3.5
_isFF4()
Arguments
| None |
Details
Returns true if the current browser is Firefox 4
Returns true if the current browser is Firefox 4
_isChrome
Since Sahi Pro: 3.5Since Sahi OS: 3
_isChrome()
Arguments
| None |
Details
Returns true if the current browser is Chrome
Returns true if the current browser is Chrome
_isSafari
Since Sahi Pro: 3.5Since Sahi OS: 3
_isSafari()
Arguments
| None |
Details
Returns true if the current browser is Safari
Returns true if the current browser is Safari
_isOpera
Since Sahi Pro: 3.5Since Sahi OS: 3.5
_isOpera()
Arguments
| None |
Details
Returns true if the current browser is Opera
Returns true if the current browser is Opera
_isPhantomJS
Since Sahi Pro: 6.0.0Since Sahi OS: NA
_isPhantomJS()
Arguments
| None |
Details
Returns true if the current browser is PhantomJS
Returns true if the current browser is PhantomJS
_isHTMLUnit
Since Sahi Pro: 3.5Since Sahi OS: 3.5
_isHTMLUnit()
Arguments
| None |
Details
Returns true if the current browser is HTMLUnit
Returns true if the current browser is HTMLUnit
Rich Text Editors (Content Editable elements)
infoRefer to RTE APIs.
Generic attribute fetching mechanism
Most common attributes needed during automation are exposed via Sahi's fetch APIs.However there are lots of DOM attributes which are not exposed.
For example the href attribute of a link is not exposed by any in-built Sahi API.
To work with such attributes, the APIs _fetch, _set and _condition are used.
info
_fetch is a newer API and can be used in place of both _set and _condition.
_fetch
Since Sahi Pro: 3.5Since Sahi OS: 3
_fetch($expression)
Arguments
| $expression | DOM expression | Expression which we wish to evaluate and fetch. |
Details
Returns the value of expression
Returns the value of expression
info
_fetch API was introduced later than _set and may be a cleaner way.
For secondary (popup) windows, _fetch can be used only with _selectWindow and not with _popup prefix.
For secondary (popup) windows, _fetch can be used only with _selectWindow and not with _popup prefix.
var $rowCount = _fetch(_table("tableId").rows.length);
// While working with popup windows use _selectWindow first
_selectWindow("popupWin");
// Fetch table row count from popupWin window
var $rowCount = _fetch(_table("tableId").rows.length);
warning
_fetch is only required for fetching DOM attributes from the browser.
It is NOT required for assigning constants etc.
It is NOT required for assigning constants etc.
$x = _fetch(10) // wrong
_set
Since Sahi Pro: 3.5Since Sahi OS: 2
_set($variable, $expression)
Arguments
| $variable | variable | Variable into which we wish to get the specific value. |
| $expression | DOM Expression | Expression which we wish to evaluate and set. |
Details
Sets the value of expression into variable
_set communicates with the browser to evaluate the expression and fetches the result.
Sets the value of expression into variable
_set communicates with the browser to evaluate the expression and fetches the result.
warning
_fetch may be a better way than _set to fetch values from browser.
// Fetching href attribute
var $href = null; // initialize variable
_set($href, _link("Home").href); // set it
// Getting row count of table
var $rowCount = 0; // initialize variable
_set($rowCount, _table("tableId").rows.length); // set it
// Getting column count of table (first row)
var $colCount = 0; // initialize variable
_set($colCount, _table("tableId").rows[0].cells.length); // set it
// Working with popup windows using _popup prefix
var $colCount = 0;
_popup("popupWin")._set($colCount, _table("tableId").rows[0].cells.length); // CORRECT
_set($colCount, _popup("popupWin")._table("tableId").rows[0].cells.length); // WRONG
// Better to use with _selectWindow
var $colCount = 0;
_selectWindow("popupWin"); // Select window first
_set($colCount, _table("tableId").rows[0].cells.length);
warning
_set is only required for fetching DOM attributes from the browser.
It is NOT required for assigning constants etc.
It is NOT required for assigning constants etc.
_set($x, 10) // wrong
_condition
Since Sahi Pro: 3.5Since Sahi OS: 3
_condition($expression)
Arguments
| $expression | DOM expression | Expression which we wish to evaluate. |
Details
Returns true or false
Returns true or false
if (_condition(_link(0).href == "http://sahi.co.in/")){
_click(_link(0));
}
// Note that this is the same as
var $href = _fetch(_link(0).href);
if ($href == "http://sahi.co.in/"){
_click(_link(0));
}
// or
var $href = null;
_set($href, _link(0).href);
if ($href == "http://sahi.co.in/"){
_click(_link(0));
}
// For popup windows use _selectWindow and then use _condition
_selectWindow("popupWin"); // select Window
// Check condition on popup window
if (_condition(_link(0).href == "http://sahi.co.in/")){
_click(_link(0));
}
warning
_condition is only required for fetching DOM attributes from the browser.
It is NOT required for comparing constants etc. like
It is NOT required for comparing constants etc. like
$x == 10
Multiple Elements
_collect
Since Sahi Pro: 3.5Since Sahi OS: 3.5
_collect($apiType, $identifier[, $relations ...])
Arguments
| $apiType | string | type of elements to collect. Eg. "_link" , "_button" etc. |
| $identifier | string|int | Sahi Identifier. Can also be just an index. |
| $relations ... | relations optional | Relations like _in, _near etc. |
Details
Returns an array of element stubs of all elements of type apiType matching the identifier within relations
Returns an array of element stubs of all elements of type apiType matching the identifier within relations
// Collect all textboxes matching any identifier, in table "listing".
// Note the use of match all regular expression "/.*/"
var $textboxes = _collect("_textbox", "/.*/", _in(_table("listing"));
// Iterate and set values on all textboxes
for (var $i=0; $i<$textboxes.length; $i++) {
_setValue($textboxes[$i], "value");
}
_count
Since Sahi Pro: 3.5Since Sahi OS: 3.5
_count($apiType, $identifier[, $relations ...])
Arguments
| $apiType | string | type of elements to collect. Eg. "_link" , "_button" etc. |
| $identifier | string|int | Sahi Identifier. Can also be just an index. |
| $relations ... | relations optional | Relations like _in, _near etc. |
Details
Returns count of all elements of type apiType matching the identifier within relations
Returns count of all elements of type apiType matching the identifier within relations
// Count all textboxes matching any identifier, in table "listing".
// Note the use of match all regular expression "/.*/"
var $textboxCount = _count("_textbox", "/.*/", _in(_table("listing")); // may return 5;
_collectAttributes
Since Sahi Pro: <IP_ADDRESS>Since Sahi OS: NA
_collectAttributes($apiType, $identifier, $attribute[, $relations ...])
Arguments
| $apiType | string | type of elements to collect. Eg. "_link" , "_button" etc. |
| $identifier | string|int | Sahi Identifier. Can also be just an index. |
| $attribute | attribute|function | attribute or function. |
| $relations ... | relations optional | Relations like _in, _near etc. |
Details
Returns an array of element attributes of all elements of type apiType matching the identifier within relations
Fetching a simple attribute from multiple elements
Fetching one of few simple attributes from multiple elements
Fetching some synthesized/processed values from multiple elements by executing an inline function for each element
Fetching some synthesized/processed values from multiple elements by executing a defined function for each element
Fetching some synthesized/processed values from multiple elements by executing nested functions
Returns an array of element attributes of all elements of type apiType matching the identifier within relations
Fetching a simple attribute from multiple elements
// Collect the id attribute of all textboxes in table "listing".
// Note the use of match all regular expression "/.*/"
var $textboxIds = _collectAttributes("_textbox", "/.*/", "id", _in(_table("listing")));
// Collect text of divs whose className is menu-item
var $menuTexts = _collectAttributes("_div", "menu-item", "sahiText");
// or more explicitly
var $menuTexts = _collectAttributes("_div", {className:"menu-item"}, "sahiText");
Fetching one of few simple attributes from multiple elements
// Return name or id of textboxes. If name is found return name, else id.
// Note the use of single pipe |.
var $identifiers = _collectAttributes("_textbox", "/.*/", "name|id");
Fetching some synthesized/processed values from multiple elements by executing an inline function for each element
// For each div of className menu-item, function will be called and the current div will be passed as $el.
var $htmls = _collectAttributes("_div", "menu-item", function ($el) {return $el.innerHTML;}, _in(_div("navbar")));
Fetching some synthesized/processed values from multiple elements by executing a defined function for each element
// getInnerHTML will be called for each element whose attribute we are collecting.
function getInnerHTML($el) {
return $el.innerHTML;
}
// For each div of className menu-item, getInnerHTML function will be called and the current div will be passed as $el.
var $htmls = _collectAttributes("_div", "menu-item", getInnerHTML, _in(_div("navbar")));
Fetching some synthesized/processed values from multiple elements by executing nested functions
// Notice the use of browser tag for the second level function called from getHTML.
<browser>
function getInnerHTMLOfParent(el){
return el.parentNode.innerHTML;
}
</browser>
// This is not inside a browser tag.
function getHTML(el) {
// calls another function.
// The called function should be inside a browser tag,
// because of the way Sahi serializes content between proxy and browser.
return getInnerHTMLOfParent(el);
}
var $htmls = _collectAttributes("_div", "menu-item", getHTML, _in(_div("navbar")));


| | | | |
Summary
An Electronics & Communication (EC) graduate with a demonstrated exposure in Embedded Systems, Image Processing, and Python-based development; I am currently looking for an opportunity in similar domains.
I have worked extensively with - AVR/ARM microcontrollers, implementing source codes in ASM/C; OCR & QR Codes in addition to conventional image processing; Python3 for creating GUIs & shell utilities, web applications (using Flask/Selenium), and machine learning scripts (using SciPy stack).
I’m open to all software development roles.
Education
- July 2021 - 2023 (expected)
IIT Guwahati
Pursuing Master of Technology (MTech) in VLSI Design (Electrical Engineering).
- June 2014 - Jun 2018
Birla Vishvakarma Mahavidyalaya, Vallabh Vidyanagar (GTU)
- Completed Bachelor of Engineering (B.E.) in Electronics & Communication with a CGPA of 8.35.
- June 2014
OSEM High School, Morbi
- Completed HSC from CBSE Board with an aggregate of 80.2%.
- June 2012
Delhi Public School, Gandhinagar
- Completed SSC from CBSE Board with a CGPA of 9.8.
Experience
- October, 2020
Sat-Trac [INFO] [DEMO] [CODE]
A pyQGIS utility to classify buildings using satellite images & curated building-footprints. (CERN Port, 2020)
- Wrote scripts to extract data from building-footprints (.geojson).
- June, 2020
Less Typing, More Thinking [INFO] [DEMO] [CODE]
A web utility to lookup Latex code for extensively used Maths equations. (CERN WebFest, 2020)
- Wrote scripts to scrape & parse Tex equations from two datasets (~400 & ~18,000 entries respectively).
- March, 2018
ISR3 [INFO]
A web utility to extract text from community assets’ images. (Smart India Hackathon, 2018)
- Led a team of 6; Wrote scripts to extract location from EXIF files, and pre-process & binarize images. Also, created an original dataset for testing.
Publications & Invited Talks
- 15 June, 2020
- Unboxing GitHub [SLIDES] [VIDEO]
A talk for academics, with focus on basic GitHub features, and how to use them to create effective lecture notes.
- 21st April, 2020
- Creating eBooks from Webpages using Python [SLIDES] [VIDEO]
A talk to get you started with web scraping in Python using minimal external dependencies. We will write a script that scrapes online court judgments and creates Android/Kindle compatible ebooks from them.
- 2018
- A Novel Approach of Tesseract-OCR Usage for Newspaper Article Images
(Chaitanya Tejaswi, Bhargav Goradiya, Ripal Patel; Journal of Computer Technology & Applications. 2018; 9(3): 24–29p.)
A novel approach for optical character recognition of newspaper article images (captured as smartphone camera images) is presented, with evaluation based on two sets of images; both captured using the same camera, under varying lighting conditions.
Projects (Academic)
- April, 2018
Pico-Projector based Automation
Guide: Bhargav Goradiya, BVM VVNagar
- Implemented Classroom Automation (for teachers) using DLPDLCR2000EVM pico-projector module & Raspberry Pi 3B as server.
- October, 2017
OCR-based Personal Assistant
Guide: Bhargav Goradiya, BVM VVNagar
- Implemented a text extractor & text reader module for newspaper article images using Tesseract OCR & OpenCV, implemented in Python.
- April, 2017
QR Code-based information system using QPython3 IDE on Android devices
Guide: Kaushal Patel, BVM VVNagar
- Wrote sample codes for automation using QR codes.
- October, 2016
GSM Communication with AVRµc
Guide: Anish Vahora, BVM VVNagar
- Implemented serial communication between AVRµc (ATmega32) & GSM Module (SIM300).
- April, 2016
Filter Implementation using MATLAB
Guide: Robinson Paul, BVM VVNagar
- Implemented lowpass and bandpass filters in MATLAB as an application of Sampling Theorem.
- April, 2016
Keypad & ADC/DAC Interfacing with 8085µp
Guide: Bhargav Goradiya, BVM VVNagar
- Interfaced 4x4 keypad & ADC/DAC (0800/0808) with Intel 8085µp using 8255 PPI.
- October, 2015
Mod-100 Counter
Guide: Anish Vahora, BVM VVNagar
- Implemented a Mod-100 Counter using IC-7490 (Decade Counter) & IC-74248 (BCD to 7-segment Decoder) that loops through 00-99.
Projects (Personal)
- June, 2020 -
API
Personal collection of static APIs.
- Automated chores using JSON files.
Skills
- Languages (Programming)
- PowerShell, Python, C/C++, ASM (AVR, x86), HTML/CSS/JS.
- Languages (Spoken)
- English, Hindi, Gujarati.
- Software Stack
- Python (SciPy stack, OpenCV, Flask, Selenium).
- Others
- Version-Control (Git), Media (Pandoc, ImageMagick, FFMpeg), …
References
- Dr. Bhargav Goradiya
- Head of Dept., Electronics & Communication Dept. (BVM Engineering College, VVNagar)
- Prof. Anish Vahora
- Asst. Professor, Electronics & Communication Dept. (BVM Engineering College, VVNagar)


constants relative to the Amf format
| package | Amfphp_Core_Amf |
|---|---|
| author | Ariel Sommeria-klein |
AMF0_ENCODING
AMF3_ENCODING
CLIENT_FAILURE_METHOD
CLIENT_SUCCESS_METHOD
CONTENT_TYPE
CREDENTIALS_FIELD_PASSWORD
CREDENTIALS_FIELD_USERID
CREDENTIALS_HEADER_NAME
can be used for AS3, but is mostly AS2 only
DEFAULT_REQUEST_RESPONSE_URI
FIELD_EXPLICIT_TYPE
try to use this where possible, but it can't be everywhere because we would need to use ReflectionClass::hasProperty, and that is only with PHP 5.1
FIELD_EXTERNALIZED_DATA


|
|
||
| Will apply: "{{contractGroupName}}" | ||
| select an external contract group or groups from the dropdown |
| Applying: "{{contractGroupName}}" |
| No external contract groups were selected |
| Name | Tenant | Type | Contracts |
|---|---|---|---|
| {{contractGroup.contractsGroupName}} | {{contractGroup.tenantName}} | {{contractGroup.contractsType}} | {{contractGroup.contracts?.join(", ")}} |
| None applied |


CONTACT : Praveen sankar -<PHONE_NUMBER>
Instincts Hospitality
General Guidelines
Accomodation Guidelines
MTC Routes
Please carry with you your college ID card.
Cars and bikes will not be allowed to enter campus. So you will be asked to park them at the gate and walk inside.
Registrations start at 10.30AM on Day 1 and 9AM on Day 2 and Day 3. Please be there on time. Kindly take a note of the events under general registration and those under special event registration.
Kindly download the SSN Instincts 2016 android application, it will be of great use during Instincts (for those who have already downloaded it, please make sure you update it).
Please respect the college rules and regulations and abide by them.
For any other queries please feel free to contact us or mail us.
Smoking is strictly prohibited inside the campus premises. Possession and consumption of alcohol and narcotics and other illegal activities in any form is strictly prohibited. Any violation of the mentioned rules will be reported to your college and the case will be severely dealt with.
If any damage to the college properties is reported, the cost of the damage will be collected.
The Organisation will not take responsibility for any form of damage to person or property during the course of Instincts 2016.
In case of any discrepancy, the decision of Instincts team is final.
The college bus can be availed for travel to Instincts 2016.
The college bus routes and MTC bus routes can be found in the website.
Please feel free to contact us anytime
Accommodation will be provided on a sharing basis. However, large teams or teams from the same college may be put up in the same rooms.
Accomodation is provided on first cum first served basis.
Participant will be charged on 24-hour basis, that is you will be charged from the day of check-in till the day you check out.
Advance booking for accomodation is not available.
ID cards are compulsory.
The accomodation cost is Rs 100 per person.
All members of a team should register for accommodation individually.
Accomodation will be provided on 9th to 11th only
Girls have to follow the curfew system that prevails in the college strictly (8 pm).
Please make entries in the register kept with the security whenever you move in and out of the allotted room.
• It is not advisable to keep valuable items along with the luggage in the room.
Instincts 2016 will not be responsible for any loss or damage of your property.
Point of contact: Rengarajan -<PHONE_NUMBER>
CMBT TO KELAMBAKKAM (KLM): 570, 570X (SSNCE, Not very Frequent)
Note: Do not board 570S. The destination of 570S is Siruseri/Sipcot and not Kelambakkam.
T NAGAR TO KLM via Saidapet :19B (AC and Non AC), 519(SSNCE), 219A
CENTRAL TO SSNCE: 221H (Not very frequent)
CENTRAL R.S to BROADWAY: 10A,10E,11,11G,120K,15A,15B,15G,15L,17,17A,17B,17C,17D,17E,17G,17K,18A,18E,18F,18K,20A,20N,26,50,52B,52G,52L,53P,54V,5C,60D,60H,64C,71C,71D7F,88M,9M,G17,M51,M88,11,120,15B,15G.
BROADWAY TO KLM: 102(AC and Non AC), 521H (Stops at SSN College of Engineering)
TAMBARAM to SSNCE: 515, 555.
SRP TOOLS TO KELAMBAKKAM: 19P, M19A, 102, 19B, 519(SSNCE), 521H (SSNCE), 568(SSNCE), 221H (SSNCE), 570.
KEELKATALAI to SSNCE via Kovilambakkam, Medavakkam, South Pallikaranai, Sozhinganallur : 552K
AMBATTUR TO KLM via Ampa Skywalk, Loyola, T nagar, Saidapet, Madhyakailash : 219A (Not Very Frequent)
KELAMBAKKAM TO SSN
221H, 515, 521H,522,522K,566,568,568C,587, Share auto towards Thiruporur.
Please Note that buses will not be available after 11 pm


Home
About
Service
Product
Contact
Games
E-Commerce
Websites
Applications
A-302,Avadh Victory Sarthana Jakatnaka Surat-395006
Home
About
Service
Product
Contact
| Privacy Policy |
COPYRIGHT BY @ ABC