glob
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
glob — 寻找与模式匹配的文件路径
说明
array glob ( string $pattern [, int $flags = 0 ] )
glob() 函数依照 libc glob() 函数使用的规则寻找所有与 pattern 匹配的文件路径，类
似于一般 shells 所用的规则一样。不进行缩写扩展或参数替代。
参数
pattern
The pattern. No tilde expansion or parameter substitution is done.
flags
有效标记有：
□ GLOB_MARK - 在每个返回的项目中加一个斜线
□ GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回（不排序）
□ GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
□ GLOB_NOESCAPE - 反斜线不转义元字符
□ GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a'，'b' 或 'c'
□ GLOB_ONLYDIR - 仅返回与模式匹配的目录项
□ GLOB_ERR - 停止并读取错误信息（比如说不可读的目录），默认的情况下忽略所
有错误
返回值
返回一个包含有匹配文件／目录的数组。如果出错返回 FALSE。
Note:
On some systems it is impossible to distinguish between empty match and an
error.
更新日志
版本 说明
5.1.0 GLOB_ERR was added
4.3.3 GLOB_ONLYDIR 在 Windows 或者其它不使用 GNU C 库的系统上开始可用。
范例
Example #1 怎样用 glob() 方便地替代 opendir() 和相关函数
以上例程的输出类似于：
funclist.txt size 44686
funcsummary.txt size 267625
quickref.txt size 137820
注释
Note: 此函数不能作用于远程文件，被检查的文件必须是可通过服务器的文件系统访
问的。
Note: 此函数在一些系统上还不能工作（例如一些旧的 Sun OS）。
Note: GLOB_BRACE 在一些非 GNU 系统上无效，比如 Solaris。
参见
• opendir() - 打开目录句柄
• readdir() - 从目录句柄中读取条目
• closedir() - 关闭目录句柄
• fnmatch() - 用模式匹配文件名
User Contributed Notes 74 notes
===============================================================================
Since I feel this is rather vague and non-helpful, I thought I'd make a post
detailing the mechanics of the glob regex.
glob uses two special symbols that act like sort of a blend between a
meta-character and a quantifier. These two characters are the * and ?
The ? matches 1 of any character except a /
The * matches 0 or more of any character except a /
If it helps, think of the * as the pcre equivalent of .* and ? as the pcre
equivalent of the dot (.)
Note: * and ? function independently from the previous character. For instance,
if you do glob("a*.php") on the following list of files, all of the files
starting with an 'a' will be returned, but * itself would match:
a.php // * matches nothing
aa.php // * matches the second 'a'
ab.php // * matches 'b'
abc.php // * matches 'bc'
b.php // * matches nothing, because the starting 'a' fails
bc.php // * matches nothing, because the starting 'a' fails
bcd.php // * matches nothing, because the starting 'a' fails
It does not match just a.php and aa.php as a 'normal' regex would, because it
matches 0 or more of any character, not the character/class/group before it.
Executing glob("a?.php") on the same list of files will only return aa.php and
ab.php because as mentioned, the ? is the equivalent of pcre's dot, and is NOT
the same as pcre's ?, which would match 0 or 1 of the previous character.
glob's regex also supports character classes and negative character classes,
using the syntax [] and [^]. It will match any one character inside [] or match
any one character that is not in [^].
With the same list above, executing
glob("[ab]*.php) will return (all of them):
a.php // [ab] matches 'a', * matches nothing
aa.php // [ab] matches 'a', * matches 2nd 'a'
ab.php // [ab] matches 'a', * matches 'b'
abc.php // [ab] matches 'a', * matches 'bc'
b.php // [ab] matches 'b', * matches nothing
bc.php // [ab] matches 'b', * matches 'c'
bcd.php // [ab] matches 'b', * matches 'cd'
glob("[ab].php") will return a.php and b.php
glob("[^a]*.php") will return:
b.php // [^a] matches 'b', * matches nothing
bc.php // [^a] matches 'b', * matches 'c'
bcd.php // [^a] matches 'b', * matches 'cd'
glob("[^ab]*.php") will return nothing because the character class will fail to
match on the first character.
You can also use ranges of characters inside the character class by having a
starting and ending character with a hyphen in between. For example, [a-z]
will match any letter between a and z, [0-9] will match any (one) number, etc..
glob also supports limited alternation with {n1, n2, etc..}. You have to
specify GLOB_BRACE as the 2nd argument for glob in order for it to work. So
for example, if you executed glob("{a,b,c}.php", GLOB_BRACE) on the following
list of files:
a.php
b.php
c.php
all 3 of them would return. Note: using alternation with single characters
like that is the same thing as just doing glob("[abc].php"). A more
interesting example would be glob("te{xt,nse}.php", GLOB_BRACE) on:
tent.php
text.php
test.php
tense.php
text.php and tense.php would be returned from that glob.
glob's regex does not offer any kind of quantification of a specified character
or character class or alternation. For instance, if you have the following
files:
a.php
aa.php
aaa.php
ab.php
abc.php
b.php
bc.php
with pcre regex you can do ~^a+\.php$~ to return
a.php
aa.php
aaa.php
This is not possible with glob. If you are trying to do something like this,
you can first narrow it down with glob, and then get exact matches with a full
flavored regex engine. For example, if you wanted all of the php files in the
previous list that only have one or more 'a' in it, you can do this:
glob also does not support lookbehinds, lookaheads, atomic groupings,
capturing, or any of the 'higher level' regex functions.
glob does not support 'shortkey' meta-characters like \w or \d.
===============================================================================
The answer for the difference in the dirsize function of "management at
twilightus dot net":
glob('*') ignores all 'hidden' files by default. This means it does not return
files that start with a dot (e.g. ".file").
If you want to match those files too, you can use "{,.}*" as the pattern with
the GLOB_BRACE flag.
Note: This also returns the directory special entries . and ..
===============================================================================
Those of you with PHP 5 don't have to come up with these wild functions to scan
a directory recursively: the SPL can do it.
Not to mention the fact that $file will be an SplFileInfo class, so you can do
powerful stuff really easily:
isFile()) {
echo substr($file->getPathname(), 27) . ": " . $file->getSize() . " B;
modified " . date("Y-m-d", $file->getMTime()) . "\n";
$size += $file->getSize();
}
}
echo "\nTotal file size: ", $size, " bytes\n";
?>
\Luna\luna.msstyles: 4190352 B; modified 2008-04-13
\Luna\Shell\Homestead\shellstyle.dll: 362496 B; modified 2006-02-28
\Luna\Shell\Metallic\shellstyle.dll: 362496 B; modified 2006-02-28
\Luna\Shell\NormalColor\shellstyle.dll: 361472 B; modified 2006-02-28
\Luna.theme: 1222 B; modified 2006-02-28
\Windows Classic.theme: 3025 B; modified 2006-02-28
Total file size: 5281063 bytes
===============================================================================
Glob function doesn't return the hidden files (including ".*" files). PHP5
RecursiveIterator can be used for iterating through directories recursively.
===============================================================================
===============================================================================
I lost hours looking for the solution for this problem.
glob() wasn't eating up my directory names (stuff like "foobar[]"), and I
searched online for some hours, I tried preg_quote to no avail.
I finally found the proper way to escape stuff in glob() in an obscure Python
mailing list:
If you want to add a directory path before your pattern, you should do it like
this:
preg_quote WILL NOT work in all cases (if any).
===============================================================================
Note that in case you are using braces with glob you might retrieve duplicated
entries for files that matche more than one item :
Result :
Array
(
[0] => /path/file_foo.dat
[1] => /path/file_foobar.dat
[2] => /path/file_foobar.dat
)
===============================================================================
Use this to exclude hidden files on MS Windows.
===============================================================================
Here is a function that returns specific files in an array, with all of the
details.
Variables
$source_folder // the location of your files
$ext // file extension you want to limit to (i.e.: *.txt)
$sec // if you only want files that are at least so old.
The function
function glob_files($source_folder, $ext, $sec, $limit){
if( !is_dir( $source_folder ) ) {
die ( "Invalid directory.\n\n" );
}
$FILES = glob($source_folder."\*.".$ext);
$set_limit = 0;
foreach($FILES as $key => $file) {
if( $set_limit == $limit ) break;
if( filemtime( $file ) > $sec ){
$FILE_LIST[$key]['path'] = substr( $file, 0, ( strrpos( $file, "
\\" ) +1 ) );
$FILE_LIST[$key]['name'] = substr( $file, ( strrpos( $file, "\\"
) +1 ) );
$FILE_LIST[$key]['size'] = filesize( $file );
$FILE_LIST[$key]['date'] = date('Y-m-d G:i:s', filemtime( $file
) );
$set_limit++;
}
}
if(!empty($FILE_LIST)){
return $FILE_LIST;
} else {
die( "No files found!\n\n" );
}
}
So....
$source_folder = "c:\temp\my_videos";
$ext = "flv"; // flash video files
$sec = "7200"; // files older than 2 hours
$limit = 2;
print_r(glob_files($source_folder, $ext, $sec, $limit));
Would return:
Array
(
[0] => Array
(
[path] => c:\temp\my_videos\
[name] => fluffy_bunnies.flv
[size] => 21160480
[date] => 2007-10-30 16:48:05
)
[1] => Array
(
[path] => c:\temp\my_videos\
[name] => synergymx.com.flv
[size] => 14522744
[date] => 2007-10-25 15:34:45
)
===============================================================================
in the example below, i found i got an error if the directory was empty.
I think its because glob()'ing an empty directory returns false, and so calling
foreach (false as $value) will obviously break.
to fix this, i did the following:
Hope this helps someone
===============================================================================
Don't use glob() if you try to list files in a directory where very much files
are stored (>100.000). You get an "Allowed memory size of XYZ bytes exhausted
..." error.
You may try to increase the memory_limit variable in php.ini. Mine has 128MB
set and the script will still reach this limit while glob()ing over 500.000
files.
The more stable way is to use readdir() on very large numbers of files:
===============================================================================
Non-recursive search files, proceeding down directory tree.
===============================================================================
glob() isn't limited to one directory:
',print_r($results,true),'';
?>
Just be careful when using GLOB_BRACE regarding spaces around the comma:
{includes/*.php,core/*.php} works as expected, but
{includes/*.php, core/*.php} with a leading space, will only match the former
as expected but not the latter
unless you have a directory named " core" on your machine with a leading space.
PHP can create such directories quite easily like so:
mkdir(" core");
===============================================================================
As a response to a post by viajy at yoyo dot org on 10-Feb-2007 04:50, he
posted the following code:
0) {
foreach ($dirs as $d) $alldirs[] = $d;
}
foreach ($dirs as $dir) listdirs($dir);
return $alldirs;
}
?>
It is not best practice to use recursive functions like that, so I wrote a safe
(non-recursive) function below:
0)
{
foreach ($_dirs as $key => $_dir)
$dirs[] = $_dir;
}
else
break;
$dir = $dirs[$next++];
}
return $dirs;
}
?>
Example:
print_r(listdirs_safe('*'));
Output:
Array
(
[0] => Dummy folder/Dummy folder 2
[1] => Dummy folder/Dummy folder 2/Dummy Folder 3
[2] => Dummy folder/Dummy folder 2/Dummy Folder 3/4
[3] => Dummy folder/Dummy folder 2/Dummy Folder 3/Dummy folder 4
[4] => Dummy folder/Dummy folder 2/Dummy Folder 3/4/5
)
===============================================================================
glob is case sensitive, even on Windows systems.
It does support character classes though, so a case insensitive version of
could be written as
===============================================================================
A simple function that find all files by extension an return it by an array.
===============================================================================
Recursive glob for PHP>=5.5
function globRecursive($path, $find) {
$dh = opendir($path);
while (($file = readdir($dh)) !== false) {
if (substr($file, 0, 1) == '.') continue;
$rfile = "{$path}/{$file}";
if (is_dir($rfile)) {
foreach (globRecursive($rfile, $find) as $ret) {
yield $ret;
}
} else {
if (fnmatch($find, $file)) yield $rfile;
}
}
closedir($dh);
}
===============================================================================
Pomle.com wrote:
> Here's a function that behaves as a recursive glob(). It does
> rely on shell command find, but works like a charm.
> function glob_rec($pattern, $path) {
> return explode("\n", shell_exec("find $path -name $pattern"));
> }
Do note that this command has a security hole.
If the $path or $pattern given includes special characters, for example a
command substitution such as "`rm index.php`", the shell will process it and
execute that command.
You can fix the problem by either escaping the characters properly (use
shell_escape) or by writing a function that actually calls glob(), or opendir()
/readdir()/closedir(), recursively.
===============================================================================
A couple of notes:
glob() handles symbolic filesystem links and resolves references to './', '../
' nicely and handles an extra '/' character , at least on X-systems. e.g.,
glob("../*") will do next higher dir.
This is good to use so warnings or errors show as "../foo" and not your
system's full path.
Several of the examples use a notation "*.*" when just plain "*" does the same
thing. The "*.*" notation is misleading as it implies foo.ext will not be
found with "*" because the "." is not present.
Watch the flags must not be strings. They are defined constants. Thus,
glob("../*", GLOB_ONLYDIR) works;
glob("../*", "GLOB_ONLYDIR") does not.
===============================================================================
For those who need to recursively search a directory tree and cannot or wish
not to call a function within itself here is another suggestion.
I tried the previously suggested listdirs_safe() and it didn't seem to find all
subfolders in a directory tree.
There are two variations on the same theme.
Single Array.
Multiple arrays.
This will result in the glob looping via "dir/*/*/*/*.." until it is no longer
finding a directory structure.
===============================================================================
http://i.stack.imgur.com/H7UF3.jpg
Best regards.
===============================================================================
glob() doesn't work on php 5.4.14 with curl extension.
error:
Call to undefined function glob()
function_exists('glob') — false
without curl - ok.
===============================================================================
You can do a recursive file search with yield.
===============================================================================
alan at ridersite dot org 18-Mar-2007 03:26 -- Stated '*.*' is the same as '*'
-- This is not true as * alone will return directories too and *.* will only
return files with an extension such as .pdf or .doc or .php.
===============================================================================
First off, it's nice to see all of the different takes on this. Thanks for all
of the great examples.
Fascinated by the foreach usage I was curious how it might work with a for
loop. I found that glob was well suited for this, especially compared to
opendir. The for loop is always efficient when you want to protect against a
potential endless loop.
$dir=$_SERVER['DOCUMENT_ROOT']."/test/directory_listing/test";
echo $dir;
$filesArray=glob($dir."/*.*");
$line.="
";
$line.=print_r($filesArray, true);
$line.="
";
$line.="";
for($i=0;$i";
next($filesArray);
}
echo $line;
Note that I pulled the glob array keys if you should need them.
Also you can tweak it for searches with something like this... (case sensitive)
$search_names="Somedocname";
$filesArray=glob($dir."/".$search_names."*.*");
Enjoy!
===============================================================================
You can use multiple asterisks with the glob() - function.
Example:
$paths will contains paths as following examples:
- my/1/dir/xyz.php
- my/bar/dir/bar.php
- my/bar/dir/foo.php
===============================================================================
The example on this page will generate a warning if the glob function does not
find any filenames that match the pattern.
The glob function result will only be an array if it finds some files and the
foreach statement requires its argument to be an array.
By checking for the possibility that the result of the glob function may not be
an array you can eliminate the warning.
Here's a better example:
===============================================================================
glob() (array_sum() and array_map() in fact too) can be very useful if you want
to calculate the sum of all the files' sizes located in a directory:
Unfortunately there's no way to do this recursively, using glob() (as far as I
know).
===============================================================================
A function to quickly remove a directory (works in seconds for a hundred
thousand files)
===============================================================================
glob() does not work if the path contains brackets "[" and "]".
For example, this will make it fail:
$files = glob("[myfolder]/*.txt");
No error is returned, just an empty array!
===============================================================================
Maybe all of you still know this, but it seems that if the directory contains
some unresolved symlink, glob() simply ignore those files.
===============================================================================
To pick one of the file randomly from your directory with full physical path,
you can write something like this:
===============================================================================
If you have open_basedir set in php.ini to limit which files php can execute,
glob(...) will return false when there are no matching files. If open_basedir
is not set, the very same code will return an empty array in the same
situation.
This is unfortunate as a seemingly innocuous change causes different
functionality that breaks code like:
foreach(glob("*.ext") as $file)
...
See this link if you have any questions as to why this is so:
http://bugs.php.net/bug.php?id=47358
===============================================================================
To: martinlarsen at bigfoot dot com (14-Jun-2007 01:13)
[quote]
glob() does not work if the path contains brackets "[" and "]".
For example, this will make it fail:
$files = glob("[myfolder]/*.txt");
No error is returned, just an empty array!
[/quote]
Hi there,
if you backslash the brackets, it should work. Try:
$files = glob("\[myfolder\]/*.txt");
Hope this helps.
===============================================================================
Note that this function does not list broken symbolic links.
===============================================================================
Reply to ny_obaATgmxDOTnet:
You could also use sql_regcase() to build a pattern for case insensitive
matches.
You may also want to set the locale before, so it is used when building the
pattern.
should therefore match file.pdf AND OtherFile.PDF
See http://www.php.net/sql_regcase for more information.
===============================================================================
Here is the function array_prepend() used by my latest post of safe_glob().
$element)
if(is_array($element))
if($deep)
$array[$key] = array_prepend($element,$string,$deep);
else
trigger_error('array_prepend: array element',E_USER_WARNING);
else
$array[$key] = $string.$element;
return $array;
}
?>
===============================================================================
just a quick one:
get all dirs, without files:
===============================================================================
Be aware that on UNIX, * as the pattern will *not* match dot-files and
dot-directories.  :-) May He bless
you.
===============================================================================
I created a rglob function to support a '/**/' wildcard. You can even set the
order to post-order or pre-order traversal.
===============================================================================
This is a simple and versatile function that returns an array tree of files,
matching wildcards:
===============================================================================
FIX to use GLOB_BRACE pattern in glob_recursive function submitted by Mike
if (! function_exists('glob_recursive')){
function glob_recursive($pattern, $flags = 0, $startdir = ''){
$files = glob($startdir.$pattern, $flags);
foreach (glob($startdir.'*', GLOB_ONLYDIR|GLOB_NOSORT|GLOB_MARK) as
$dir){
$files = array_merge($files, glob_recursive($pattern, $flags,
$dir));
}
return $files;
}
}
===============================================================================
After fiddling with GLOB_BRACE a bunch, I have found the most items that can be
included in the braces is about 10 before glob no longer returns any matches.
I have a scenario where there can be a thousand or more files to check for
where I can't pattern match and need to check specific names. I was hoping to
batch them in large groups to see if it would help performance. However, if I
include more than 10 in a GLOB_BRACE the function will return FALSE.
===============================================================================
recursive file search
===============================================================================
If you want to use wildcard expressions (like they are used by glob() ) to
search on strings, you can use this function:
===============================================================================
As a follow up to recursively determining all paths (by viajy at yoyo dot org)
and opendir being faster than glob (by Sam Yong - hellclanner at live [dot]
com).
The list all dirs code didn't seem to work, at least on my server (provided by
parazuce [at] gmail [dot] com).
I needed a function to create an unlimited multidimensional array, with the
names of the folders/files intact (no realpath's, although that is easily
possible). This is so I can simply loop through the array, create an expandable
link on the folder name, with all the files inside it.
This is the correct way to recurse I believe (no static, return small arrays to
build up the multidimensional array), and includes a check for files/folders
beginning with dots.
// may need modifications
function list_files($path)
{
$files = array();
if(is_dir($path))
{
if($handle = opendir($path))
{
while(($name = readdir($handle)) !== false)
{
if(!preg_match("#^\.#", $name))
if(is_dir($path . "/" . $name))
{
$files[$name] = list_files($path . "/" . $name);
}
else
{
$files[] = $name;
}
}
closedir($handle);
}
}
return $files;
}
print_r(list_files("/path/to/folder"));
// example usage
function list_html($list)
{
$html = "";
foreach($list as $folder => $file)
{
if(is_array($list[$folder]))
{
$html .= "> (folder) " . $folder . " ";
$html .= list_html($list[$folder]);
}
else
{
$html .= " (file) " . $file . " ";
}
}
return $html;
}
echo list_html(list_files("/path/to/folder"));
===============================================================================
In some systems (AIX for example) GLOB_BRACE isn't defined and you get the
error:
glob() expects parameter 2 to be long, string given in /XX/XX.php
foreach (glob("{*.pdf,*.PDF}",GLOB_BRACE ) as $filename) {
echo "$filename \n";
}
?>
The method may help you in this case.
foreach (array_merge(glob("*.pdf"),glob("*.PDF")) as $filename) {
echo "$filename \n";
}
?>
===============================================================================
Run your directory + "file pattern" through preg_quote to get around [ ] / etc
issues...glob uses pattern matching.
===============================================================================
An alternative to this glob function. Like what edogs [at] dogsempire.com said,
opendir should be faster than glob. I have not tested timing for this function
but it works perfectly for me on my PHP v5.2.2 server.
This function returns an empty array if no files are found in the directory or
the path specified is not a directory.
===============================================================================
4.3.8 and 4.4.2 has incompatible behavior.
If there is no glob result, 4.4.2 return empty array but 4.3.8 returns FALSE.
code:
result at 4.3.8:
bool(false)
result at 4.4.2:
array(0) {
}
===============================================================================
Something I used to sort dir & subdir into array (multidimensional) reflecting
dir structure.
function getRecursiveFolderList($curDir,$currentA=false)
{
$dirs = glob($curDir . '/*', GLOB_ONLYDIR);
$cur = 0;
foreach($dirs as $dir)
{
$currentA[$cur]['path'] = $dir;
$currentA[$cur] = $this->getRecursiveFolderList($dir,$currentA
[$cur]);
++$cur;
}
return $currentA;
}
===============================================================================
this is a recursive function i wrote to return an array of all subdirectories
of a dir
function listdirs($dir) {
static $alldirs = array();
$dirs = glob($dir . '/*', GLOB_ONLYDIR);
if (count($dirs) > 0) {
foreach ($dirs as $d) $alldirs[] = $d;
}
foreach ($dirs as $dir) listdirs($dir);
return $alldirs;
}
example:
print_r(listdirs('/some/path'));
===============================================================================
Here is simple function that will find and remove all files (except "." ones)
that match the expression ($match, "*" as wildcard) under starting directory
($path) and all other directories under it.
function rfr($path,$match){
static $deld = 0, $dsize = 0;
$dirs = glob($path."*");
$files = glob($path.$match);
foreach($files as $file){
if(is_file($file)){
$dsize += filesize($file);
unlink($file);
$deld++;
}
}
foreach($dirs as $dir){
if(is_dir($dir)){
$dir = basename($dir) . "/";
rfr($path.$dir,$match);
}
}
return "$deld files deleted with a total size of $dsize bytes";
}
===============================================================================
===============================================================================
I have been working towards a CMS-type design that is both modular and quite
flat. For example, included files are all one level below the installation
folder.
glob() just help me get rid of a lot of opendir() hassle. I wasn't sure if the
double asterix would work - but it's fine:
foreach (glob(SERVER_PATH."/*/includes/*.php") as $inc) {
require($inc);
}
===============================================================================
I was making a directory filesize function but found there's a slight
difference between glob and readdir in terms of getting sizes.
For a directory that's 529216 bytes, readdir correctly gives 529216 while glob
gives 528996, a difference of 220 bytes. Anyone know why there's such a
difference?
===============================================================================
Be aware...
On Windows you need to add "/" mark:
On Unix you cant add the "/" mark:
Hope this will save your time :)
===============================================================================
I've written a function that I've been using quite a lot over the past year or
so. I've built whole websites and their file based CMSs based on this one
function, mostly because (I think) databases are not as portable as groups of
files and folders. In previous versions, I used opendir and readdir to get
contents, but now I can do in one line what used to take several. How? Most of
the work in the whole script is done by calling
glob("$dir/*")
Giving me an array containing the names of the items in the folder, minus the
ones beginning with '.', as well as the ones I specify.
'.$item."\n";
}
?>
Commens on this function are welcome!
===============================================================================
Note that on Windows, glob distinguishes between uppercase and lowercase
extensions, so if the directory contains a file "test.txt" and you glob for
"*.TXT" then the file will not be found!
That bug only happens when you use patterns containing "*", like the example
above. If you for example search for the full filename "test.TXT" then
everything works correctly.
===============================================================================
Whilst on Windows, a path starting with a slash resolves OK for most file
functions - but NOT glob.
If the server is LAUNCHED (or chdir()ed) to W:, then
file_exists("/temp/test.txt")
returns true for the file "W:/temp/test.txt".
But glob("/temp/*.txt") FAILS to find it!
A solution (if you want to avoid getting drive letters into your code) is to
chdir() first, then just look for the file.
Note also, glob() IS case sensitive although most other file funcs on Windows
are not.
===============================================================================
This is a replacement for glob on servers that are running a php version < 4.3
It supports * and ? jokers, and stacking of parameters with ;
So you can do
$results=glob('/home/user/*.txt;*.doc') ?>
And it will return an array of matched files.
As is the behaviour of the built-in glob function, this one will also return
boolean false if no matches are found, and will use the current working
directory if none is specified.
This function is case insensitive, but if needed, you can do this to make it
behave depending on os:
* replace eregi in the example with my_regexp
add this function
===============================================================================
If this function is not available in your version of PHP, think looking at the
'Directory Functions' which can be used instead.
http://www.php.net/manual/en/ref.dir.php
===============================================================================
A slight edit on the globr() function stated by sthomas. This does exactly the
same just works on windows systems for < PHP 4.3.3. :
===============================================================================
glob caused me some real pain in the buttom on windows, because of the DOS
thing with paths (backslashes instead of slashes)...
This was my own fault because I "forgot" that the backslash, when used in
strings, needs to be escaped, but well, it can cause a lot of confusion, even
for people who are not exactly newbies anymore...
For some reason, I didn't have this problem with other file operations (chdir,
opendir, etc...), which was the most confusing of all...
So, for people running scripts on Windows machines (Dos95, 98 or WinNT or
DosXP), just remember this:
glob('c:\temp\*.*'); // works correctly, returns an array with files.
glob("c:\temp\*.*"); // does NOT work... the backslashes need to be escaped...
glob("c:\\temp\\*.*"); // that works again...
This is especially confusing when temporary writable directories are returned
as an unescaped string.
$tempdir = getenv('TEMP');
// this returns "C:\DOCUME~1\user\LOCALS~1\Temp"
so in order to scan that directoy I need to do:
glob($tempdir . "\\*.*");
Or perhaps it's easier to replace all backslashes with slashes in order to
avoid these kinds of confusions...
glob("c:/temp/*.*"); // works fine too...
I know I'm not contributing anything new here, but I just hope this post may
avoid some unnecessary headaches...
===============================================================================
I have written my own function for searching files, but it only supports ? and
*
However it should be easily expandable.
===============================================================================
===============================================================================
Note that, in some configurations, the search is case-sensitive! You'll need to
have something like:
Also on some servers, I have seen such scripts 'crash' with an CGI Error
("...not returning a complete set of HTTP headers...") when glob could not find
any match!
===============================================================================
Take all file names in the directory and put them in a link.
".$filename." ";
}
?>
===============================================================================
Here is a way I used glob() to browse a directory, pull the file name out,
resort according to the most recent date and format it using date(). I called
the function inside a


#include <db.h>int db_jump_set(void *func, int which);
The db_jump_set function enables applications to replace underlying Berkeley DB library functionality by replacing entries in a function call jump table. The which argument specifies the entry to be replaced by the argument func.
No type checking is done of the func argument, and specifying an invalid replacement routine is likely to cause unpredictable results.
The following values of which are supported:
int dirfree(char **namesp, int cnt);
The namesp and cnt arguments are the same values as were returned by the DB_FUNC_DIRLIST function.
The dirfree function returns the value of errno on failure
and 0 on success.
The dir argument is the name of the directory to be searched.
The function must return a pointer to an array of nul-terminated file
names in the memory location referenced by the argument namesp,
and a count of the number of elements in the array in the memory location
referenced by cntp.
The dirlist function returns the value of errno on failure
and 0 on success.
The path argument is the pathname of the file to be checked.
If the isdirp argument is non-NULL, it must be set to non-0 if
path is a directory, and 0 if path is not a directory.
The exists function returns the value of errno on failure
and 0 on success.
The path argument is the pathname of the file to be checked, and the
fd argument is an open file descriptor on the file.
If the mbytesp and bytesp arguments are non-NULL, the
ioinfo function must return in them the size of the file: the
number of megabytes in the file into the memory location referenced by the
mbytesp argument, and the number of bytes over and above that number
of megabytes into the memory location referenced by the bytesp
argument.
In addition, if the iosizep argument is non-NULL, the ioinfo
function must return the optimum granularity for I/O operations to the file
in the memory location referenced by it.
The ioinfo function returns the value of errno on failure
and 0 on success.
The path argument is the name of a file.
The fd argument is an open file descriptor on that file.
The is_region argument will be zero if the intention is to map
a file into shared memory.
In this case, the map function must map the first len
bytes of the file into memory and return a pointer to the mapped
location in the memory location referenced by the argument addr.
In this case, the is_anonymous argument will always be zero.
The is_rdonly argument will be non-zero if the file is considered
read-only by the caller.
The is_region argument will be non-zero if the memory is intended
to be used as a shared memory region for synchronization between Berkeley DB
threads/processes.
In this case, the returned memory may be of any kind (e.g., anonymous),
but must be able to support semaphores.
If the application has previously specified that regions are to be
instantiated in anonymous memory (see DB_REGION_ANON below),
or the region is being joined and is believed to have been allocated
in anonymous shared memory, the is_anonymous argument will be
non-zero.
Additionally, the path and fd arguments may be ignored
(although future map calls using the same path must
return the same memory), and the is_rdonly argument will always
be zero.
By default, on UNIX systems, the Berkeley DB library will use the IEEE Std 1003.1b-1993 (POSIX)
mmap(2) interface to both map regular files into shared memory
and create shared memory regions.
If the application specifies that shared memory regions be instantiated
in anonymous memory (see DB_REGION_ANON below), the
shmget(2) shared memory segment interface will be used, where
available, and the MAP_ANON or MAP_ANONYMOUS options to
mmap(2) when shmget(2) is not available.
When using shmget 2(), shared memory regions are named, and so
multiple processes may share them.
When using the mmap MAP_ANON or MAP_ANONYMOUS options, shared
memory regions are not named, and so may only be accessed by a
single process and its threads.
You do not need to do this if your application can guarantee that only one
process will be accessing Berkeley DB files.
The map function returns the value of errno on failure
and 0 on success.
The path argument is the path argument specified to the DB_FUNC_MAP
function when the region was mapped into memory.
The runlink function returns the value of errno on failure
and 0 on success.
The fd argument is an open file descriptor on the file.
The seek function must cause a subsequent read from or write to the
file to occur at a byte offset specified by the calculation:
If rewind is non-zero, the byte offset is treated as a backwards
seek, not a forwards one.
The whence argument specifies where in the file the byte offset is
relative to, as described by the IEEE Std 1003.1b-1993 (POSIX) lseek system call.
The seek function returns the value of errno on failure
and 0 on success.
The seconds and microseconds arguments specify the amount
of time to wait until the suspending thread of control should run again.
The seconds and microseconds arguments may not be normalized
when the sleep function is called, i.e., the microseconds
argument may be greater than 1000000.
The sleep function returns the value of errno on failure
and 0 on success.
The addr argument is the argument returned by the DB_FUNC_MAP function
when the file or region was mapped into memory, and the len argument
is the same as the len argument specified to the DB_FUNC_MAP function
when the file or region was mapped into memory.
The unmap function returns the value of errno on failure
and 0 on success.
The yield function must be able to cause the rescheduling all
participants in the current Berkeley DB environment, whether threaded or not.
It may be incorrect to supply a thread yield function if more
than a single process is operating in the Berkeley DB environment.
This is because many thread-yield functions will not allow other processes
to run, and the contested lock may be held by another process, not by
another thread.
If no yield function is specified, or if the yield
function returns an error, the function specified by the DB_FUNC_SLEEP
entry will be used instead or subsequently, i.e., if no yield
function is specified, or it is possible for the yield function
to fail, the sleep function must cause the processor
to reschedule any waiting threads of control for execution.
The yield function returns the value of errno on failure
and 0 on success.
int dirlist(const char *dir, char ***namesp, int *cntp);
int exists(const char *path, int *isdirp);
int ioinfo(const char *path, int fd,
u_int32_t *mbytesp, u_int32_t *bytesp, u_int32_t *iosizep);
int map(char *path, int fd, size_t len,
int is_region, int is_anonymous, int is_rdonly,
void **addr);
db_value_set(1, DB_REGION_NAME);
int runlink(char *path);
int seek(int fd, size_t pgsize, db_pgno_t pageno,
u_int32_t relative, int rewind, int whence);
(pgsize * pageno) + relative
int sleep(u_long seconds, u_long microseconds);
int unmap(void *addr, size_t len);
int yield(void);
Applications should be careful to replace related functions as a group and at the same time. Replacing DB_FUNC_MALLOC without replacing DB_FUNC_REALLOC is likely to result in unpredictable results.
The db_jump_set function returns the value of errno on failure, and 0 on success.


Hello Android CMakeIntroduction -------------
Lets now get our jni library running on androidI. Requirements ----------------
Android sdk, eclipse plugin. (if you're here, we'll assume you have and are comfortable with these) Built the Hello CMake project.II. Open eclipse project ----------------
Open up eclipse and start an android project from existing source. Select the hello-android-cmake directory. Assuming you built and installed the native libraries, you should be able to run on an emulator or device with out issue. Verify that there are libhello-cmake.so files in the libs/armeabi and libs/armeabi-v7a directories. I dupplicated the HelloWorld.java file from the Hello CMake tutorial in the source folder for simplicity, but you could also import an existing java jar file.III. Ant Based Build (command line way) ----------------
./project_create.sh ant compile ant install


PageSpeed will rewrite links to PDFs to include a content-hash. PDFs
are identified by having extension ".pdf". Note that this requires a
background asynchronous fetch of the PDF; therefore the page may not be
rewritten the first time. If it isn't, wait a few seconds and reload.
- Standard link to a pdf, will be cache extended:
example.pdf
- Embedded pdf, will also be cache extended:
- Link to a PDF with extension ".notpdf". It won't be cache extended
because a ".pdf" extension is required:
example.notpdf
- Link to a PDF with a query parameter, will be cache extended:
example.pdf?a=b


AsyncBarrier Class
Package: @esfx/async-barrier
Enables multiple tasks to cooperatively work on an algorithm through multiple phases.
Declaration
export declare class AsyncBarrier
Examples
Note
The following example is derived from https://docs.microsoft.com/en-us/dotnet/api/system.threading.barrier?view=net-6.0#examples
import { AsyncBarrier } from "@esfx/async-barrier";
async function main() {
let count = 0;
// Create a barrier with 3 participants and a post-phase action to print results.
// When phase 2 completes, throw an exception to be observed by all participants.
const barrier = new AsyncBarrier(3, b => {
console.log(`Post-phase action: count=${count}, phase=${b.currentPhaseNumber}`);
if (b.currentPhaseNumber === 2) throw new Error("Oops");
});
// Add two participants
barrier.add(2);
barrier.participantCount; // 5
// Remove one participant
barrier.remove();
barrier.participantCount; // 4
const action = async () => {
count++;
// Wait for the current phase to end. During the post-phase action 'count' will be 4
// and 'phase' will be 0.
await barrier.signalAndWait();
count++;
// Wait for the current phase to end. During the post-phase action 'count' will be 8
// and 'phase' will be 1.
await barrier.signalAndWait();
count++;
// When phase 2 ends an exception is thrown to all participants:
try {
await barrier.signalAndWait();
}
catch (e) {
console.log(`Caught error: ${e.message}`);
}
// Wait for the current phase to end. During the post-phase action 'count' will be 16
// and 'phase' will be 3.
await barrier.signalAndWait();
};
// Start 4 async actions to serve as the 4 participants.
await Promise.all([action(), action(), action(), action()]);
}
main().catch(e => console.error(e));
// prints:
// Post-phase action: count=4, phase=0
// Post-phase action: count=8, phase=1
// Post-phase action: count=12, phase=2
// Caught error: Oops
// Post-phase action: count=16, phase=3
Remarks
An AsyncBarrier allows you to coordinate multiple asynchronous operations that should advance from one phase to the next at the same time. Each participant calls and awaits the result of signalAndWait(cancelable) to indicate it has reached the barrier. Once all participants have arrived at the barrier, each participant is resumed and continue processing.
As each phase completes, the currentPhaseNumber is incremented and any registerd post-phase action is executed prior to the participants being released.
You can use add(participantCount) and remove(participantCount) to change the number of expected participants during execution.
Constructors
constructor(participantCount, postPhaseAction)
Initializes a new instance of the Barrier class.
Declaration
constructor(participantCount: number, postPhaseAction?: (barrier: AsyncBarrier) => void | PromiseLike<void>);
Parameters
- postPhaseAction
- (barrier: AsyncBarrier) => void | PromiseLike<void>
An action to execute between each phase.
Properties
currentPhaseNumber
Gets the number of the Barrier's current phase.
Declaration
get currentPhaseNumber(): number;
Property Value
participantCount
Gets the total number of participants in the barrier.
Declaration
get participantCount(): number;
Property Value
remainingParticipants
Gets the number of participants in the barrier that haven't yet signaled in the current phase.
Declaration
get remainingParticipants(): number;
Property Value
Methods
add(participantCount)
Notifies the Barrier there will be additional participants.
Declaration
add(participantCount?: number): void;
Parameters
Returns
remove(participantCount)
Notifies the Barrier there will be fewer participants.
Declaration
remove(participantCount?: number): void;
Parameters
Returns
signalAndWait(cancelable)
Signals that a participant has reached the barrier and waits for all other participants to reach the barrier.
Declaration
signalAndWait(cancelable?: Cancelable): Promise<void>;
Parameters
Returns


To control how to handle reactions, specify the
data-reaction attribute
in the
iframe of the sketcher.
It accepts the following values:
OFF
- Canvas content is never applied as reaction.
Example:

BASIC
- Built-in (native) mechanism to resolve single-step reactions at molecule export.
Example:

EXTERNAL
- Legacy behavior. The reactionconvertws webservice is responsible for
resolving reactions. If the webservice is not available, the behavior of the editor is similar than in OFF mode.
If the service is available, the service attempts to convert canvas content to a single step reaction at molecule export.
Example:


albopictus Ae. distribution Aedes data China dengue environmental China, based predicted northern climatic fever used areas climate study present {border-style file px;} #ffffff;} occurrence sampling sites (Fig. Additional []. global ranges regions risk spatial vector conditions population range surveillance studies factors included mosquito province, [–]. expansion model particularly points recent seasonal southern (Diptera: China. Figure area change months observed potential Culicidae) Med Plateau Trop WorldClim aegypti albopictus. analysis average high influence major modeling new prediction px; records results south suitability temperature using {font-family Qinghai-Tibetan arid central eastern font-size including models northeastern outbreaks populations provinces reported slope temperate Climatic Negl River Science Table United accuracy adult comprehensive double; epidemic information invasive k-medoids key location northwestern numerous previous seasonality southwestern species study. summer systematic vectors virus (Stegomyia) -fold Dise./journal.pntd. Foundation GPS Infect LINK October S). Yellow [], assigned available border-color border-width city clustering conducted cross-validation different disease epidemics facilitate field generated globally human influencing map maps method monitoring monthly predict province public regression risks solid; {font-style {font-weight (range: AUC Autonomous Climate Data Fig. Funding Hyg Qinghai-Tibet Sea South Yangtze accuracy, activity addition al.The approximately biological bold chikungunya cluster clusters considered control courier; curve diseases dynamics em; health i.e., located longitudinal month mosquitoes north occurred past probability pt;} resolution sensitivity, similar site small specificity specificity, temperate, therefore, transmission tree trends tropical


Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Flat no. 323, Mellieha Cout Road , Malta...
Why not help US help YOU find it
Be Updated with our new properties and offers!


We provide language and cultural support for Italian-speaking
Switzerland.
To customize your system to recognize certain language and cultural conventions used in Swiss Italian, such as date and time formats, currency format, and sorting order, follow these steps:
or
Your system has one of several possible keyboards. Although ipanel
provides you with a default keyboard configuration, you should either
confirm the default or select a different configuration.
The standard keyboard shipped with most SGI systems can enter only ASCII characters by default. Configured as shipped, it does not allow users to enter or use non-ASCII characters needed for Swiss-Italian or other European languages.
The Swiss-Italian location makes it possible to use non-ASCII characters with most system tools. The US ASCII with Compose key keyboard layout is exactly like the default layout for the (101-key) US keyboard, except that the right Alt key (the key immediately to the right of the space bar) behaves as a Compose key, which makes it possible to enter many non-ASCII characters. See the compose(5) and composetable(5) man pages for more information about using the Compose key.
Many systems include a keyboard specially designed for Switzerland. If you have a Swiss keyboard, you can choose the Swiss-German keyboard from the Language Controls panel for German and the Swiss-French keyboard for French. This will make your keyboard generate the characters that appear on each key. This choice changes the default behavior of a few keys that generate characters that are not needed for Italian; either choice works equally well. Several of the keys near the C key have four or more symbols engraved on them. When you use the German-Swiss layout, those keys generate the characters with umlauts by default. When the French-Swiss layout is active, those keys generate the characters with accent grave or acute by default. Whatever the default, you can always generate the other character by pressing Shift.
If you are not certain which keyboard you have, first look at the Enter key. If your Enter key is rectangular, you have a US keyboard and should use the US ASCII with Compose key keyboard layout. If your Enter key is non-rectangular, you probably have a Swiss keyboard.
If your keyboard has a non-rectangular Enter key but selecting the one of the Swiss layouts does not make it work properly, it is possible that you have a national keyboard for some other country. You can try each of the keyboard layouts listed in the Language Controls panel until you find the one that matches your layout, or contact your sales and support office for assistance.
For further assistance with language and cultural customization questions please contact your local SGI representative.


HackChat
Home
About
Contact
New User Registration:
*Please fill out every field. We only accept ODU's CS email at this time.
Recieve email as text/html
Recieve email as text/plain
Submit


EV Technologies seeks a Data Scientist to help discover the information hidden in vast amounts of data, and empower our customers to make smarter decisions and deliver even better products. Your primary focus will be in applying data mining techniques, doing statistical analysis, and building high quality prediction systems.
-
Selecting features, building and optimizing classifiers using machine learning techniques.
-
Data mining using state-of-the-art methods.
-
Extending company’s data with third party sources of information when needed.
-
Enhancing data collection procedures to include information that is relevant for building analytic systems.
-
Processing, cleansing, and verifying the integrity of data used for analysis.
-
Doing ad-hoc analysis and presenting results in a clear manner.
-
Creating automated anomaly detection systems and constant tracking of its performance.
-
Excellent understanding of machine learning techniques and algorithms, such as k-NN, Naive Bayes, SVM, Decision Forests, etc.
-
Experience with common data science toolkits, such as R, Weka, NumPy, MatLab, etc. Excellence in at least one of these is highly desirable.
-
Experience with automated modeling tools (Spotfire, SAS, SAP Predictive Analytics, etc.) a big plus.
-
Must speak fluent plebeian.
-
Great communication skills.
-
Experience with data visualisation tools, such as D3.js, GGplot, etc.
-
Proficiency in using query languages such as SQL, Hive, Pig, Sqoop.
-
Experience with NoSQL databases, such as MongoDB, Cassandra, HBase.
-
Good applied statistics skills, such as distributions, statistical testing, regression, etc.
-
Good scripting and programming skills (Java preferred).
-
Data-oriented personality.
Bachelor’s Degree in Business, Statistics, Mathematics, or Computer Science a must. Other areas will be considered on a case-by-case basis. Graduate degree a plus.
Some light travel may be required.
 Please send your resume/CV to hr@evtechnologies.com.


Wushu (simplified Chinese: 武术; traditional Chinese: 武術) is both an exhibition and a full-contact sport derived from traditional Chinese martial arts. It was developed in China after 1949, in an effort to standardize the practice of traditional Chinese martial arts, although attempts to structure the various decentralized martial arts traditions date back earlier, when the Central Guoshu Institute was established at Nanking in 1928. The term wushu is Chinese for "martial arts" (武 "Wu" = military or martial, 术 "Shu" = art). In contemporary times, wushu has become an international sport through the International Wushu Federation (IWUF), which holds the World Wushu Championships every two years; the first World Championships were held in 1991 in Beijing and won by Yuan Wen Qing.
Noticing the small, fragmented nature of wushu clubs in Seattle, the founders of the club, a collection of prominent local wushu teachers, established the club in order to showcase the beauty and art of wushu. By establishing a collegiate group, the founders sought to develop an environment tailored to the transmission of wushu knowledge, allowing people with similar interests to connect and guide the development of wushu in Seattle.
wushu practice at the UW has largely been an underground thing, only known about by a few dedicated practitioners. the yue fei wushu club was the earliest known group to practice wushu at UW. the members were experienced and learned wushu from prominent local teachers like hong yijao, former zhejiang wushu team member; mark jackson, former british national team member; and michael li. at their height in 2004, they had as many as 20 members practicing at the IMA. but they never became official, and major obstacles caused the group to eventually dissipate to just a few dedicated athletes.
the next UW wushu group was another unofficial fledgling group that represented the small wushu population in seattle. weekly practices rarely had more than 3 people, but this routine set the stage for the creation of the current wushu club as the group gained more interested practitioners and participated at several large performances and competed at tournaments.
we are now a larger group that practices regularly at the IMA. we also regularly perform for UW student organizations and also many other non-UW organizations within seattle. we also compete at the annual collegiates competition against other universities, along with the annual CMAT competition at UC Berkeley, the largest chinese martial arts competition in the the United States.
we made our debut at the 16th Annual Chinese Martial Arts Tournament hosted by UC Berkeley. freshman priscilla dang won 3rd place in the women's advanced longfist division and 1st in advanced other weapon. junior and team captain travis dang won 1st place in the men's advanced longfist division. we'll be back next year for more medals.
not only do we practice wushu, we teach a children's wushu class at chinese school on saturdays. it's a chance for us to spread interest in wushu even farther, inspire the next generation of wushu athletes, and give back to the community.
in the future, we hope to become a club sport at UW, offer formal wushu classes coached by li tianyuan, and become a contributing part to the development of US wushu. currently, we're working on our fundamentals, the basic techniques and conditioning, getting our team organized for upcoming demos and performances, and having fun at the same time.


@()(implicit context: model.ApplicationContext, request: RequestHeader) @views.html.football.main("PA browser index") {
Let us help you find and publish stats within our rather extensive Press Association football API.
Not sure where to start? Take a look at our generic API browser or perhaps see what you can do with teams or players.


7
首页
节点数据
设备性能
API信息
用户管理
设备管理
15
Luc Chartier
- yesterday
This ain’t our first item, it is the best of the rest.
Salma Nyberg
- 2 days ago
Oh he decisively impression attachment friendship so if everything.
Hayden Cartwright
- a week ago
Whose her enjoy chief new young. Felicity if ye required likewise so doubtful.
Sandra Eberhardt
- 16 days ago
On so attention necessary at by provision otherwise existence direction.
Luc Chartier
- yesterday
This ain’t our first item, it is the best of the rest.
Salma Nyberg
- 2 days ago
Oh he decisively impression attachment friendship so if everything.
Hayden Cartwright
- a week ago
Whose her enjoy chief new young. Felicity if ye required likewise so doubtful.
Sandra Eberhardt
- 16 days ago
On so attention necessary at by provision otherwise existence direction.
All Messages
7
Mark all Read
You have
3
new notifications.
New user registered
30 seconds ago
Privacy settings have been changed
3 hours ago
Someone special liked this
2 minutes ago
John cancelled the event
9 hours ago
The server is status is stable
yesterday at 10:30am
New comments waiting approval
last week
View all notifications
Arlind Nushi
New Post
Settings
Profile
Help
Logout
用户添加
请输入用户名（不少于8个字符）
请输入邮箱（不少于8个字符）
请输入密码（不少于8个字符）
用户列表


This guide will show you how to setup your compter and PYNQ-Z1 board to get started using PYNQ. Any issues can be posted to the PYNQ support forum.
Getting Started¶
Table of Contents
Setup¶
Prerequisites¶
- PYNQ-Z1 board
- Computer with compatible browser (Supported Browsers)
- Micro-SD card (Minimum 8GB recommended)
- Ethernet cable
- Micro USB cable
- USB port
Get the image and prepare the micro-SD Card¶
- Download the PYNQ-Z1 image, unzip, and write the image to an SD card. Windows: win32DiskImager, Linux/MacOS: dd.
For detailed instructions for different operating systems, see the Appendix: Writing the SD card image.
PYNQ-Z1 setup¶
To set up the board:
- Change the boot jumper to SD (Set the board to boot from the Micro-SD card)
- Insert the Micro SD card loaded with the PYNQ-Z1 image into the board. (The Micro SD slot is underneath the board)
- Connect the USB cable to your PC/Laptop, and to the PROG/UART (J14) on the board
- Connect the Ethernet cable into your board, and directly to your computer or to a router/network switch that your computer is connected to.
- Turn on the power switch on the board
When you power on the board, you should see a Red LED indicating that the board is powered. After a few seconds, you should see a Green LED (LD12/DONE), indicating a bitstream has been downloaded to the programmable logic. This is also a good indication that the boot process has started correctly. After about 30 seconds the board should finish booting. You should see all the LEDs flash, and the yellow LEDs will remain on. You can then connect to the board from your browser.
Connect to the board¶
You need to make sure your board can connect to your computer or network correctly. You will need to know the hostname or the IP address of the board. By default, if the board is connected to a router or network with a DHCP server, it will get an IP address automatically. You can then use the board hostname to connect to it. The default hostname is pynq
.
If you connect your board directly to the Ethernet port of your PC, the board will automatically assign itself a static IP address (<IP_ADDRESS>
by default). To allow the board and computer to communicate, you can manually configure your computer to have an IP address in the same range (e.g. <IP_ADDRESS>). See the Appendix: Assign your PC/Laptop a static ip address
You can also connect to the board using a USB cable, and terminal, to manually configure the Ethernet/IP and any other operating system settings. See the Frequently asked questions for more details on connecting to the board, and changing the IP address and other settings of the board.
Two scripts are available if you need help configuring the Ethernet on a Windows computer, pynq_enable_static_IP_windows.bat
and pynq_disable_static_IP_windows.bat
available in the <GitHub repository>\scripts\host
folder to allow you to enable/disable a static IP address on your host Windows machine. This Batch File scripts can be run from a Windows command prompt. You can also check the internet for instructions on how to configure the Ethernet settings for your computer.
Open a web browser and connect to Pynq Jupyter Notebooks web portal¶
If the board is connected to your network, the board should get a DHCP (dynamic) IP address.
- Open a web browser and go to http://pynq:9090
If the board is connected directly to your laptop/PC Ethernet port, the board will have a static IP (<IP_ADDRESS>) by default.
- Configure your Ethernet adapter IP address to be in the same range as the board (e.g. <IP_ADDRESS>), open a web browser and go to http://<IP_ADDRESS>:9090
The default hostname of the board is pynq and the default static IP address is <IP_ADDRESS>
. If you changed the hostname or static IP, you will need to change the address above to match your hostname.
It may take a few seconds to resolve the hostname/IP address. If you have problems connecting to the board, first try to ping it from your laptop/PC. If you can’t ping it, then try to connect a terminal to the board to check it has booted, and that the Ethernet settings for the board are correct.
You will need to change the hostname if multiple boards are connected to the same network. E.g. classroom teaching. See the Frequently asked questions for instructions to change the hostname, or if you are having problems connecting to the board.
You should now be ready to start using Pynq. You can continue reading this documentation, or try using Pynq on the board. A number of Getting Started Notebooks, and Examples are available in the corresponding directories in the Pynq home area.
Using Pynq¶
Getting started notebooks¶
Jupyter notebooks can be saved as html webpages. Some of this Pynq documentation has been generated directly from Jupyter notebooks.
You can view the documentation as a webpage, or if you have a board running Pynq, you can view and run the notebook documentation interactively. The documentation available as notebooks can be found in the Getting_Started folder in the Jupyter home area.
There are also a number of example notebooks available showing how to use various peripherals with the board.
Accessing files on the board¶
Samba, a file sharing service, is running on the board. The home area on the board can be accessed as a network drive, and you can transfer files to and from the board.
In Windows, to access the pynq home area you can go to:
\\pynq\xilinx
or
\\<IP_ADDRESS>\xilinx
Or in Linux:
smb://pynq/xilinx
or
smb://<IP_ADDRESS>/xilinx
Remember to change the hostname/IP address if necessary.
The Samba username:password is xilinx:xilinx
Troubleshooting¶
If you are having problems getting the board set up, please see the Frequently asked questions or go the PYNQ support forum


The Data Model
A specific node in a tree is identified by a XTreeNode.
A leaf node is a node without any children and that returns false when calling XTreeNode::hasChildrenOnDemand().
An expanded node is a non-leaf node that will displays its children when all its ancestors are expanded.
A collapsed node is one which hides them.
A node is visible when all parent nodes are expanded and the node itself is in the display area.
The nodes are retrieved from a XTreeDataModel.
You can implement it yourself or use the MutableTreeDataModel
which uses XMutableTreeNode and XMutableTreeDataModel
for a simple and mutable data model.
The data model must be set at the TreeControlModel::TreeDataModel property.
Selection
If you are interested in knowing when the selection changes implement a
::com::sun::star::view::XSelectionChangeListener and add the instance with the method
::com::sun::star::view::XSelectionSupplier::addSelectionChangeListener().
You than will be notified for any selection change.
If you are interested in detecting either double-click events or when a user clicks on a node,
regardless of whether or not it was selected, you can get the ::com::sun::star::awt::XWindow
and add yourself as a ::com::sun::star::awt::XMouseClickHandler. You can use the
method XTreeControl::getNodeForLocation() to retrieve the node that was under the
mouse at the time the event was fired.

Now you get called when the node will become expanded or collapsed.
So on XTreeExpansionListener::treeExpanding() you can
check the TreeExpansionEvent if the parent node with children on demand is going to
be expanded and in that case add the missing child nodes. You can also veto the expansion or
collapsing of a parent node by using the ExpandVetoException.


Instruction
Rules to Play Chopsticks:
- The motive is to nullify both hands of your opponent. A hand is "dead" when all 5 fingers are opened.
- Game start with players with each having one finger out.
- One person starts by using one of his hands to touch any other person's hand.
- The person he touches adds up the number of fingers involved (sum of number of fingers in his hand and the hand which touched him).
- Divide: When its your turn and you have both of your hands alive, you can divide. In this, number of fingers in you hand will be added and then divided equally (if the sum is odd i.e. 5 it will be divided into 2 and 3).
- If the sum comes out to be more than 5 i.e. 7, the total is subtracted by 5 which leaves 2 fingers extended.
Instructions for Playing
- The player on the left starts first
- The two hand of each player are exactly below their name
- To make a move, select your hand with which you want to play, then select the hand of other player which you wanna touch.


Server: Microsoft-IIS/3.0
Date: Thu, 18 Dec 1997 18:41:13 GMT
Content-Type: text/html
Accept-Ranges: bytes
Last-Modified: Wed, 08 Oct 1997 20:16:04 GMT
Set-Cookie: EGSOFT_ID=<IP_ADDRESS>-2218149056.29166564; expires=Fri, 31-Dec-2010 00:00:00 GMT; path=/
Content-Length: 3757
Frequently Asked Questions
FREQUENTLY ASKED QUESTIONS
These are the most frequently asked questions about the management of wound care.
Why is a special center for treating wounds necessary?
The Wound Care Center® treats patients who need specialized, aggressive care to treat their wounds. For these people, even minor lesions can lead to chronic, non-healing wounds with serious infection, gangrene and possible amputation. Severe, complex wounds require multi-disciplinary attention that frequently is not provided in other settings.
What are Wound Care Centers®?
Wound Care Centers® are outpatient treatment centers. The centers provide multi-disciplinary and comprehensive wound treatment programs integrating the most advanced wound care techniques, products and services.
How many people have chronic, non-healing wounds?
It is estimated that nearly 5 million Americans suffer from chronic wounds.
What are the causes of these wounds?
The majority of these wounds are the result of diabetes, immobilization or circulatory problems. Approximately 1.5 million people with non-healing wounds have diabetes. Another 2.5 million patients have pressure ulcers. This is a common side effect of spinal cord injury, arthritis and other conditions that require a patient to be bedridden (immobilization). Persons suffering from venous insufficiency (circulatory problems) account for another one half million patients. The rest have wounds that result from traumatic injury, non-healing surgical incisions and a variety of diseases.
What criteria defines a chronic, non-healing wound?
Basically a non-healing wound is one which has not shown significant improvement in four weeks, or completed healing in eight weeks.
How do I seek treatment?
Return to Question list. | Return to the Curative Home Page
Wound Care Center® and Procuren® are registered trademarks of Curative Health Services, Setauket, NY.


This page demonstrates the graph visualization.
Click and drag to move the graph, scroll to zoom the timeline.
Starttime: Endtime:


Company
We develop automated applications and systems for any business case
See our work in action
Our Vision
An Automated Future
We believe in a future where any work that is done repetetively is automated and handled by machines, so the people can realize their true potential of creativity, which is not possible if they are stuck behind a desk that makes them do the same thing over and over. We want people to go where their human touch is required, while computers take care of everything else. Through Davian Studios, we help organizations automate their business flow so that they can focus on their interaction with the outside world as much as possible.
Check out our catalog to see how we accomplish our vision
Meet the team
Amar Agrawal
Founder, Project Manager
A businessman from India, Amar has been working his whole life on making technology accessible to everyone. From providing support for electronics and computers, Amar has went to leading a talented team of developers into providing technical and automated solutions for anyone.
Dev Agrawal
Lead Developer
Dev is a young and skilled developer from India. Dev has been passionate about making the world automated since a young age. Now he gets to realize his dream step by step by automating the work of organizations. He is extremely talented and creative when it comes to technical solutions.
David Halse
Graphics Designer
David is a marketing graduate from Cincinnati and has a passion for creating the best user experiences on the planet. He has designed some of the most loved logos and marketing material for our customers, and his capacity to commit to projects has made out customers keep coming back for more.
Nathan Hall
Intern
Nathan is an IT student in Cincinnati and possesses a great potential. He is interning at Davian Studios with the aim of learning how to work in industry and our talented team helping him grow to his fullest. Like Dev, Nathan is also very passionate and believes in a highly automated future.
Contact Us
Fill this form to reach out to us, and we will call you!
Davian Studios
Magic Street, Cincinnati, OH - 45569
<EMAIL_ADDRESS>+1-513-999-9999


2-Step Verification—{{ title }}
1. Download
Download a smartphone app, e.g., Google Authenticator or Authy, onto your mobile device.
2. Connect
Open your smartphone app and scan this QR code into it.
Open your smartphone app and enter the following code into it.
{{ vm.mfa.data.totpKey }}
{{ vm.showQrCode ? "Can't scan the code?" : 'Try to scan again?'; }}
3. Verify
Enter the code created by your app and click verify.


Include the sample identification (ie. full name of the patient) and then add items to be analyzed
Coronavirus quick test
Reference: 135 - 146 mmol/L
Reference: 3.5 - 5.2 mmol/L
Reference: less than 5.2 mmol/L
Reference: Greater than 200 pmol/L
Reference: 145 - 180 g/L
AIDS test
Reference: 150 - 400 x10 9 /L
Reference: less than 1.71 mmol/L
Check here for analysis status
| Patient | Item | Status | Analyzed By |
|---|


⚠ Documentation is version-specific: This page was generated for ScottPlot 4.1.4-beta
Additional documentation and more version-specific cookbooks are on the ScottPlot Website
Arrows point to specific locations on the plot. Arrows are actually just scatter plots with two points and an arrowhead.
var plt = new ScottPlot.Plot(600, 400);
// plot some sample data
plt.AddSignal(DataGen.Sin(51));
plt.AddSignal(DataGen.Cos(51));
// add arrows using coordinates
plt.AddArrow(25, 0, 27, .2);
plt.AddArrow(27, -.25, 23, -.5, lineWidth: 10);
// the shape of the arrowhead can be adjusted
var skinny = plt.AddArrow(12, 1, 12, .5);
skinny.ArrowheadLength *= 2;
var fat = plt.AddArrow(20, .6, 20, 1);
fat.ArrowheadWidth *= 2; ;
plt.SaveFig("plottable_arrow_quickstart.png");


In this step we inline the variable that is affected by the train wreck:
${variableToInline}
${if firstAffectedStatement}For example, the first statement that will be affected by this is:
${firstAffectedStatement}
${end}We inline the variable under the assumption that it will enable us to migrate the affected code to a form that follows the "Tell, don't ask" mantra. Instead of asking for a value, the code will instead tell the neighbour object to perform a certain operation.


Either if you have annoying parents who want to know exactly what you are doing on your phone, or friends who use your phone too often, your privacy is compromised. Not anymore! Let us introduce LendMyPhone 3, a real guest mode for iOS. LendMyPhone 3 is the best guest mode tweak ever, since it allows you to setup multiple users on your device, like on any computer. But wait! It would quite unnecessary if anyone knew they are using a guest user. Yes, it would. Therefore, LendMyPhone 3 never tells that there are multiple users on the device, or which one is currently in use! Just type in the passcode normally, and it will load the home screen based on your configuration. Smart, right? LendMyPhone 3 can control the multiple events on iOS as described down below.
Events
Hidden Apps
• Select which apps to show on the home screen for each user. All other apps will be hidden, like they have never been installed! They will not even show up in the multitasking app switcher!
Control Center
• Select whether a user can open and interact with the control center.
Icon Editing
• Select whether a user can change your pre-set icon layout on their home screen.
Multitasking
• Select whether the user can kill whitelisted apps. That way, you can know exactly what the guest user has been doing or not. Also, you can completely disable the multitasking app switcher for each user individually.
Notification Center
• Select whether a user can open and interact with the notification center.
Spotlight
• Select whether a user can open the spotlight search on the home screen.
You will never have to remove apps anymore when your parents want to know what you are doing on your phone. From now on, you can even tell them the 'passcode'. And you will never ever have to watch over your friends back to know that they are not messing around with your phone. All this, with LendMyPhone 3.
See the screenshots for a visual overview of the tweak.


classicWork through 50 levels with infinite lives for the highest score and lowest time.highscore 1234
endlessPlay as many randomly generated levels as you can with three lives.highscore 4321
Final score:
Highscore:
main menu
This game uses CSS3 custom cursors, which don't show up on phones.
It shouldn't be that hard.
This game uses CSS3 custom cursors and does not work on mobile and older browsers.If your cursor isn't a one-directional arrow when hovering over here, you can't play.
settings
startclassic
score 0
quit


$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket, $loop);
$http->on('request', function ($req, $rep) {
$rep->writeHead();
$rep->end("Hello World!\n");
});
$socket->listen(8000);
$loop->run();
| L1 cache reference | 0.5 ns |
| L2 cache reference | 7 ns |
| Main memory reference | 100 ns |
| Send 1K bytes over 1 Gbps network | 10,000 ns |
| Read 1 MB sequentially from memory | 250,000 ns |
| Round trip within same datacenter | 500,000 ns |
| Read 1 MB sequentially from SSD | 1,000,000 ns |
| Read 1 MB sequentially from disk | 20,000,000 ns |
| Round trip from US to Europe | 150,000,000 ns |
$filePointer = fopen("http://google.com", "rb");
echo stream_get_contents($filePointer, 25);
// "<!doctype html><html item"
echo stream_get_contents($filePointer, 25);
// "scope="" itemtype="http:/"
$filePointer = fopen("file:///tmp/test", "w");
fwrite($filePointer,
"Actual React code coming soon");
// get requests as streams
$apiStream = $api->getStream($param);
$dbStream = $database->getStream($param);
// still blocks
list($apiResp, $dbResp) =
$this->retrieveData($apiStream, $dbStream);
return new Response($apiResp, $dbResp);
$apiStream = $api->getStream($param);
$dbStream = $database->getStream($param);
// return asynchronously
$this->retrieveStreams($apiStream, $dbStream)
->on('streamsReady',
function($apiResp, $dbResp) {
return new Response($apiResp, $dbResp);
}
);
$filePointer = fopen("http://google.com", "rb");
$readable = [$filePointer];
$write = []; $exc = []; $t = 5;
if (stream_select($readable, $write, $exc, $t)) {
if ($readable) {
$googleStream = $readable[0];
echo stream_get_contents($googleStream, 25);
// echoes <!doctype html><html item
}
}
while (true) {
if (stream_select($read, $write, $exc, 1)) {
if ($read) {
foreach ($readable as $stream) {
// run callback for that stream
}
}
if ($write) {
foreach ($writable as $stream) {
// run callback for that stream
}}
}
}
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$socket->on('connection', function ($conn) {
$conn->write("Hello there!\n");
$conn->write("Don't say anything...\n");
$conn->on('data',
function ($data) use ($conn) {
$conn->close();
});
});
$socket->listen(1337);
$loop->run()
$waiting = null;
$socket->on('connection',
function ($conn) use (&$waiting) {
if (null === $waiting) {
$waiting = $conn;
$conn->write("Wait for a partner.\n");
} else {
$conn->write("Connected!");
$waiting->write("Connected!");
$conn->pipe($waiting)->pipe($conn);
$waiting = null;
}});
TL;DR: You'll get with this approach almost 2.000 requests/s instead of 130 on a large Symfony app.
Even if you have an "opcode cache" you have to declare classes, instantiate your objects, read your caches, etc for every single request. As you can surely imagine this is very time consuming and far away from being a perfect setup for high performance.http://marcjschmidt.de/blog/2014/02/08/php-high-performance.html


Displays differences between the and the current branch.
Displays differences between the and the current branch.
| Action | Command | |
|---|---|---|
| Switch to <branch> | git checkout <branch> | |
| Get status of <branch> | git status |
Note: A newly created repository will have all the repository content (commits) and already be on the 'master' branch.


Youth Entrepreneurship Summer School (YES)
AUEB organizes for eight years now a Youth Entrepreneurship Summer School (YES) addressed to Lyceum students (last three years of high-school). The program gives scholarships to around 75 top students coming from all over Greece and runs for two weeks in July at AUEB premises.


Black Beauty
by Anna Sewell
Black Beauty is a novel told in the first person (or "first horse") as an autobiographical memoir told by a highbred horse named Black Beauty-beginning with his carefree days as a colt on an English farm, to his difficult life pulling cabs in London, to his happy retirement in the country.
Source: Sewell, A. (1870) Black Beauty New York: F.M. Lupton Publishing Co.
- Part 1, Chapter 1: My Early Home
- The narrator describes life as a young horse.
- Part 1, Chapter 2: The Hunt
- The narrator is taken on his first hunt.
- Part 1, Chapter 3: My Breaking In
- The narrator is taught to wear a saddle.
- Part 1, Chapter 4: Birtwick Park
- Black Beauty describes his life and surroundings in Birtwick Park.
- Part 1, Chapter 5: A Fair Start
- Still in pleasant surroundings, Black Beauty learns a few things about his lineage, and meets some of the other horses in the stables.
- Part 1, Chapter 6: Liberty
- Black Beauty finds that his new duties are somewhat restricting.
- Part 1, Chapter 7: Ginger
- Ginger tells the story of her life to Black Beauty.
- Part 1, Chapter 8: Ginger's Story Continued
- Ginger tells more of her life's story to Black Beauty.
- Part 1, Chapter 9: Merrylegs
- Merrylegs finds the vicar and his family's visits exhausting, and decides to take it upon himself to teach the young lads a lesson in courtesy.
- Part 1, Chapter 10: A Talk in the Orchard
- Merrylegs, Ginger, and Black Beauty discuss the limitations of being trained with blinders.
- Part 1, Chapter 11: Plain Speaking
- As time passes at Birtwick, Black Beauty comes to respect and appreciate his master more and more.
- Part 1, Chapter 12: A Stormy Day
- Black Beauty's intuition proves beneficial to his master while traveling in foul weather.
- Part 1, Chapter 13: The Devil's Trade Mark
- Having come across a cruel young man mistreating a horse, John ensures that he is taught a proper lesson about kindness towards animals.
- Part 1, Chapter 14: James Howard
- The master and John discuss the service of James Howard, a young assistant, who is now being offered a new opportunity for advancement.
- Part 1, Chapter 15: The Old Hostler
- En route to visit friends, the master stops at a local hotel where Black Beauty meets the Old Hostler, a longtime caretaker of horses.
- Part 1, Chapter 16: The Fire
- A potential tragedy is averted by the lifesaving heroism of James Howard.
- Part 1, Chapter 17: John Manly's Talk
- A James prepares to depart, a new stable boy is chosen as his replacement.
- Part 1, Chapter 18: Going for the Doctor
- Abstract: With Mrs. Gordon's health in decline, John and Black Beauty depart on an urgent mission.
- Part 1, Chapter 19: Only Ignorance
- Having taken ill, Black Beauty receives questionable medical treatment from the local horse doctor.
- Part 1, Chapter 20: Joe Green
- Joe Green continues to gain the confidence and respect of John and the master, and is eventually allowed to take charge of Black Beauty. Joe attempts to intervene on the behalf of two mistreated horses.
- Part 1, Chapter 21: Parting
- With the departure of the master's wife, Black Beauty's easy life in Birkshire begins to change dramatically.
- Part 2, Chapter 22: Earlshall
- Merrylegs and Black Beauty are taken to their new home in Earlshall Park, where they are introduced to Mr. York. John Manley says his final farewell to the pair. Gradually, Black Beauty and Merrylegs are reintroduced to the check rein.
- Part 2, Chapter 23: A Strike for Liberty
- The use of the check rein has unintended consequences for Ginger and Black Beauty.
- Part 2, Chapter 24: The Lady Anne or a Runaway Horse
- With the Earl and Mr. York away, Lady Anne and Blantyre decide to take a fateful trip on horseback.
- Part 2, Chapter 25: Reuben Smith
- Black Beauty describes his experiences with Reuben Smith, Mr. Yorks temporary replacement. Mr. Smith's irresponsibility causes great pain for Black Beauty.
- Part 2, Chapter 26: How it Ended
- Mr. Smith's actions and death cause a great stir, resulting in a full investigation of the incident. Black Beauty's recovery is slow and painful.
- Part 2, Chapter 27: Ruined and Going Downhill
- Having sufficiently healed from his injuries, Black Beauty bids farewell to an old friend and finds himself in a tolerable new surrounding.
- Part 2, Chapter 28: A Job Horse and His Drivers
- Now placed in the position of job horse, Black Beauty gives his account of the various driving styles his subjected to on a regular basis.
- Part 2, Chapter 29: Cockneys
- Black Beauty tells of another type of driver, the steam-engine style, who's irresponsible handling of a carriage can have grave consequences for a horse. Black Beauty spends some time with the good-natured mare, Peggy, before meeting his new master.
- Part 2, Chapter 30: A Thief
- A sudden decline in Black Beauty's health leads to the arrest of the stable groom.
- Part 2, Chapter 31: A Humbug
- Poor care by an irresponsible stable groom, results in an end to Black Beauty's service in Bath.
- Part 3, Chapter 32: A Horse Fair
- Black Beauty describes his time at the horse fair and introduction to a new master.
- Part 3, Chapter 33: A London Cab Horse
- After becoming acquainted with the rest of the Barker family, Black Beauty begins his duties as a cab.
- Part 3, Chapter 34: An Old War Horse
- Captain tells Black Beauty the story of his life, and his time at war.
- Part 3, Chapter 35: Jerry Barker
- Black Beauty shares some of his experiences with his new master, stable boy and driver.
- Part 3, Chapter 36: The Sunday Club
- A fortuitous run-in with Mr. Briggs, brings a positive change to Black Beauty's cab duties.
- Part 3, Chapter 37: The Golden Rule
- A special request is made of Jerry and his cab horses. Black Beauty takes advantage of a rare opportunity.
- Part 3, Chapter 38: Dolly and a Real Gentleman
- In the course of his duties, Jerry encounters a true gentleman.
- Part 3, Chapter 39: Seedy Sam
- Black Beauty describes the conditions some less fortunate cab horses endure, and the hardships of the working class cab driver as well.
- Part 3, Chapter 40: Poor Ginger
- Black Beauty is deeply troubled by an encounter with an old friend.
- Part 3, Chapter 41: The Butcher
- A visit to the butcher's shop provides Black Beauty with further insight as to the conditions that drivers and horses face in the course of their duties.
- Part 3, Chapter 42: The Election
- With an election approaching, a special request is made of Jerry by one of the candidates. Jerry discusses the meaning of liberty with Harry.
- Part 3, Chapter 43: A Friend in Need
- With election day upon them, Jerry and Black Beauty prepare for a very busy day. Jerry's paternal instincts take over when a rider in need arrives.
- Part 3, Chapter 44: Old Captain and His Successor
- An incident with a brewer's cart badly injures Captain. Black Beauty is introduced to Hotspur.
- Part 3, Chapter 45: Jerry's New Year
- Part 4, Chapter 46: Jakes and the Lady
- Having been sold once again, Black Beauty meets his new master, but finds his time there short lived.
- Part 4, Chapter 47: Hard Times
- Now in the employment of a large cab company, Black Beauty is subjected to harsh treatment by his new master and drivers.
- Part 4, Chapter 48: Farmer Thoroughgood and His Grandson Willie Black Beauty
- Black Beauty is sold once more, this time to a much kinder master.
- Part 4, Chapter 49: My Last Home
- After a long and fruitful life, Black Beauty meets his final masters, and proceeds to spend the rest of his days in comfort.


{% include about.html %}
{% include beers.html %}
{% include press.html %}
{% include hours.html %}
{% include location.html %}
Sur place à la brasserie
{% include ontap.html %}
{% include takeout.html %}


DataFrame.
first
Returns the first row as a Row.
Row
New in version 1.3.0.
Examples
>>> df.first() Row(age=2, name='Alice')


mb.tictactoe.data
Class Game
java.lang.Object
mb.web.Xmlable
mb.tictactoe.data.Game
public class Game
- extends Xmlable
Contains all data about one game.
- Author:
- mb
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
servername
java.lang.String servername
board
private Board board
participants
private volatile java.util.ArrayList<Participant> participants
chat
private java.util.ArrayList<ChatMsg> chat
currPlayer
private Participant currPlayer
nextPlayer
private Participant nextPlayer
p1
private Participant p1
p2
private Participant p2
Game
public Game(java.lang.String servername,
Board board)
Game
public Game(XmlTree tree)
addParticipant
public boolean addParticipant(Participant p)
removeParticipant
public void removeParticipant(int webId)
syncParticipantList
public boolean syncParticipantList(java.util.ArrayList<WebThreadServerClient> clients)
isPlayable
public boolean isPlayable()
getCurrPlayer
public Participant getCurrPlayer()
toXmlTree
public XmlTree toXmlTree()
- Specified by:
toXmlTree
in class Xmlable
toString
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object
getParticipants
public java.util.ArrayList<Participant> getParticipants()
getPlayer
public Participant getPlayer(int number)
addMove
public boolean addMove(CellData cd)
nextTurn
private void nextTurn()
setBoard
public void setBoard(Board board)
getBoard
public Board getBoard()
reInit
public void reInit()
- Initializes the game once more, as if the game was to be played again from the beginning,
in the same conditions.
addChatEntry
public boolean addChatEntry(ChatMsg chatMsg)
isOver
public boolean isOver()
refreshRemoteData
public void refreshRemoteData(WebThreadServer server)


THtmlViewer, TFrameViewer components
function HTMLExpandFilename(const Filename: string): string;
HTMLExpandFilename converts an HTML style file URL to a Dos filename and adds an appropriate path. The path added depends on:
1.If the URL starts with a '/' or '\', the path defined by the ServerRoot property is used.
2.If the <base> tag specifies "DosPath", then no path is added. Files are then searched for in the usual Dos/Windows manner.
3.If the <base> tag specifies another path then that path will be added. File locations are then relative to the base path.
4.If there is no <base> tag, then the path of the current HTML file is used. File locations are then relative to that directory.
See also


You can configure multiple service ports on the server-side of the network for multiple QoS mappings. You define a new service port and then map destination ports to that port, so that QoS configuration settings on the router are applied to that service port.Configuring service port settings is optional.
Select the default service port from the drop-down list. The default service ports are 7800 and 7810.
3. Click Apply to apply your settings.
Select the check box next to the name and click Remove Selected.
2. Click Save to save your settings permanently.Configuring General Service Settings


{% include "site/oauth-login.html" with OAUTH_ENABLED=OAUTH_ENABLED %}
{% trans "Create account" %}
{% blocktrans trimmed %}For speedy validation, it is required that you use a work e-mail address. If you
plan to register your ASN with PeeringDB, it is recommended that you use an email-address
that exists in your ASN's public contact details.{% endblocktrans %}
{% trans "Loading anti-spam challenge" %} ...
{% for field in register_form.visible_fields %}
{% if field.name == "captcha_generator" %}
{{ field }}
{% endif %}
{% endfor %}


Kau'aina Resort is an exclusive over the water cabana resort, with luxury amenities and excellent 24 hour butler service. Enjoy gourmet Michellin star cuisine, world class entertainement, and top quality spa amenities.
Join today for exclusive offers and a chance to swim with dolphins. This membership includes all sister resorts as a way to keep the fun going!
Look out for our new resort in Fiji coming 2021! Hope to see you there!


{{Infobox prepared food | name = Ficelle | image = | caption = | alternate_name = | country = France | region = | creator = | course = | type = | served = | main_ingredient = | variations = | calories = | other = }}
A ficelle is a type of French bread loaf, similar to a baguette but much thinner. The word ficelle literally means "string" in French. Made with yeast.
{{French bread}}
{{bread-stub}}


Allistair Everett
About Me
Portfolio
Contact
Allistair Everett
BACK-END | DATA VISUALIZATION | FRONT-END | APIS & MICROSERVICES
Facebook
Twitter
LinkedIn
Github
Projects
Tribute Page
Project 2
Project 3
Project 4
Project 5
Project 6
Project 7
Project 8
Written and Coded by Allistair Everett


The following samples show common JavaScript APIs accessed from Dart. They run natively in Dartium and via Dart2JS compilation in modern browsers.
| Google Charts API - bubblechart.html | |
| bubblechart.dart |
| Google Maps / Directions API - directions.html | |
| directions.dart |
| Twitter Search via JSONP - twitter.html | |
| twitter.dart |


-
KELSEY BOEING | FILE
Hundreds of Athens residents and OU students gathered Feb. 24 to support increased gun legislation during the March for Our Lives in Athens. The march was organized by the OU College Democrats. The rally in Athens was one of more than 800 similar rallies worldwide.
-
KEVIN PAN | FILE
More than 100 students and faculty members marched across campus Oct. 20 in protest of OU interim “Freedom of Expression’ policy, which banned indoor protests in non-reservable spaces on campus. Demonstrators said the policy limited expression and was retaliation for the protest in Baker Center in February 2017 during which the OU Police Department arrested 70 students.
-
MADELEINE PECK | FILE
Over 100 Athens High School students skipped class March 9 to protest on the steps of the Athens County Courthouse. Students held signs and chanted in support of tighter gun control legislation. The protest came in the wake of a shooting at Marjory Stoneman Douglas High School in Parkland, Florida, on Feb. 14 in which 17 students were killed.
-
HANNAH RUHOFF | FILE
About 200 men, women and children marched in the Athens Women’s March on Jan. 20. The march mirrored the Women’s March on Washington one year before, when half a million people marched for women’s rights in response to the election of President Donald Trump. At the Athens march, people spoke about Trump, women's rights and Planned Parenthood.
-
MEAGAN HALL | FILE
After receiving his Ohio ID, OU President Duane Nellis laughs as he realizes he has his own PID number. Nellis' first official day as OU’s 21st president was June 12, 2017.
-
CARL FONTICELLA | FILE
Maddie Sloat, Lydia Ramlo and Hannah Burke cheer as they are elected OU’s Student Senate president, treasurer and vice president, respectively, on April 3. The three ran unopposed on the Bridge Ohio ticket. Only 673 undergraduate students on the Athens campus voted in the election this year, down 1,529 students from the 2,202 students who voted in the 2017-18 election.
-
ABIGAIL DEAN | FILE
Athens County Board of Elections Director Debbie Quivey watches through the window as the last car of ballots is unloaded on Nov. 7. Voters cast ballots for several local elections this year including Athens City Council, Athens City School District Board of Education and township trustees.
-
ABIGAIL DEAN | FILE
Saraquoia Bryant celebrates as The Athens Cannabis Ordinance, or TACO, passes in Athens on Nov. 7 with 75 percent of the vote. The ordinance reduced fines and fees for misdemeanor marijuana offenses to $0.
-
MIJANA MAZUR | FILE
One man was injured in an explosion on the 100 block of West Union Street on April 15. The explosion blew open nearby doors and shook houses across the street. Columbia Gas Company said the gas lines near the house were properly pressurized; no cause has been determined as of press time.
-
CARL FONTICELLA | FILE
On Feb. 23, a rapid rise of the Hocking River’s water levels due to heavy rainfall in the Athens area caused OU to cancel classes for Feb. 26, giving students an unexpected three-day weekend.
-
ABIGAIL DEAN | FILE
Bethann Hughes enjoys the music on Court Street during the Athens Halloween Block Party on Oct. 28. Attendance and arrests were down at the 2017 block party: On mostly alcohol-related charges, the Athens Police Department arrested about 15 people, the OU Police Department arrested 12 people, and the Ohio Department of Public Safety Investigative Unit charged 32 people.
-
BLAKE NISSEN | FILE
Students participated in several fests during Spring Semester at High Street, Mill Street and Palmer Street. Palmer Fest, the final block party of this year’s fest season, was shut down with riot gear just before 3 p.m. after police deemed the crowd too large and dangerous.
-
EMILEE CHINN | FILE
For community or feral cats, it’s especially important during winter to receive additional protection, so some Athens residents provide heated blankets or build cat houses. Steve the cat poses for a portrait at The New Beginnings Animal Center on Jan. 20. The New Beginnings Animal Center is home to several cats that are ready for adoption.
-
ABBEY MARSHALL | FILE
Dug is a 2-year-old golden retriever who joined OU Counseling and Psychological Services as a therapy dog in November. He is handled and trained by Rinda Scoggan. Dug, named after the talking golden retriever in Disney/Pixar’s Up, began seeing clients after the semi-retirement of Buddy, a 10-year-old standard poodle.
-
HANNAH RUHOFF | FILE
Although the original Vietnam Memorial Wall is in Washington, D.C., Athens residents were able to pay their respects to fallen soldiers at OU’s Bicentennial Park in September. All 58,318 names of Americans who died during the war in Vietnam are engraved on the replica of the wall.
-
MCKINLEY LAW | FILE
The Appalachian Hell Betties got a new floor in April to help them raise hell on competitors. The Hell Betties play about six games in a season and have 20-30 active members. This year the team will play 11 games from March to November this year.
-
MIJANA MAZUR | FILE
Tre Howell, a bartender at The Pigskin Bar and Grille, pours a cup of green beer during Green Beer Day on March 7. Bars served green-dyed beer for Green Beer Day, a tradition that began as a way for students to celebrate St. Patrick’s Day in Athens when the holiday fell on Ohio University’s spring break.
-
CARL FONTICELLA | FILE
Tessa Evanosky, events coordinator for ARTS/West, sets up for a PRISM meeting on Jan. 24. PRISM is an after-school program that began this year and is aimed at local LGBT youth and allies aged 12-18.
-
BLAKE NISSEN | FILE
Patton College of Education Dean Renee Middleton poses for a portrait in her office on March 5. Middleton is the only African-American dean at OU. Colleagues describe her as driven, focused and always on the move. She said women should receive the same respect as their male counterparts.
-
HANNAH RUHOFF | FILE
Freshman environmental studies student Edward Drabold poses for a portrait on Jan. 15. Drabold works in the Institute for Sustainable Energy and Environment lab on West State Street. He seeks ways to effectively use algae to remove pollution from water, create biofuels and absorb harmful carbon dioxide from the atmosphere as part of a $500,000 grant from Honda.
-
HANNAH RUHOFF | FILE
Former OU student Notay Jackson was found guilty Feb. 25 of a rape committed in July 2016. During the emotional four-day trial, the prosecution presented DNA evidence and called witnesses, including the victim, her friends, police officers and health professionals. Jackson was sentenced to 11 years in prison, the maximum sentence for rape.