Identity Server is an open source OpenID Connect and OAuth 2.0 framework. It can be used to make your application an authentication / single sign on server. It can also issue access tokens for 3rd party clients. This document describes how you can integrate IdentityServer4 (version 2.0+) to your project.
This document assumes that you have created an ASP.NET Core based project (including module zero) from startup templates and made it working. I created an ASP.NET Core MVC startup project for demonstration.
There are two nuget packages:
Since EF Core package already depends on the first one, you can only install Abp.ZeroCore.IdentityServer4.EntityFrameworkCore package to your project. Install it to the project contains your DbContext (.EntityFrameworkCore project for default templates):
Install-Package Abp.ZeroCore.IdentityServer4.EntityFrameworkCore
Then you can add dependency to your module (generally, to your EntityFrameworkCore project):
[DependsOn(typeof(AbpZeroCoreIdentityServerEntityFrameworkCoreModule))]
public class MyModule : AbpModule
{
//...
}
Configuring and using IdentityServer4 with Abp.ZeroCore is similar to independently use IdentityServer4. You should read it's own documentation to understand and use it. In this document, we only show additional configuration needed to integrate to Abp.ZeroCore.
In the ASP.NET Core Startup class, we should add IdentityServer to service collection and to ASP.NET Core middleware pipeline. Highlighted the differences from standard IdentityServer4 usage:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(IdentityServerConfig.GetIdentityResources())
.AddInMemoryApiResources(IdentityServerConfig.GetApiResources())
.AddInMemoryClients(IdentityServerConfig.GetClients())
.AddAbpPersistedGrants<IAbpPersistedGrantDbContext>()
.AddAbpIdentityServer<User>(); ;
//...
}
public void Configure(IApplicationBuilder app)
{
//...
app.UseJwtTokenMiddleware("IdentityBearer");
app.UseIdentityServer();
//...
}
}
Added services.AddIdentityServer() just after IdentityRegistrar.Register(services) and added app.UseJwtTokenMiddleware("IdentityBearer") just after app.UseAuthentication() in the startup project.
We have used IdentityServerConfig class to get identity resources, api resources and clients. You can find more information about this class in it's own documentation. For the simplest case, it can be a static class like below:
public static class IdentityServerConfig
{
public static IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("default-api", "Default (all) API")
};
}
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResources.Phone()
};
}
public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",
AllowedGrantTypes = GrantTypes.ClientCredentials.Union(GrantTypes.ResourceOwnerPassword).ToList(),
AllowedScopes = {"default-api"},
ClientSecrets =
{
new Secret("secret".Sha256())
}
}
};
}
}
AddAbpPersistentGrants() method is used to save consent responses to the persistent data store. In order to use it, YourDbContext must implement IAbpPersistedGrantDbContext interface as shown below:
public class YourDbContext : AbpZeroDbContext<Tenant, Role, User, YourDbContext>, IAbpPersistedGrantDbContext
{
public DbSet<PersistedGrantEntity> PersistedGrants { get; set; }
public YourDbContext(DbContextOptions<YourDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ConfigurePersistedGrantEntity();
}
}
IAbpPersistedGrantDbContext defines PersistedGrants DbSet. We also should call modelBuilder.ConfigurePersistedGrantEntity() extension method as shown above in order to configure EntityFramework for PersistedGrantEntity.
Notice that this change in YourDbContext cause a new database migration. So, remember to use "Add-Migration" and "Update-Database" commands to update your database.
IdentityServer4 will continue to work even if you don't call AddAbpPersistedGrants<YourDbContext>() extension method, but user consent responses will be stored an in-memory data store in that case (which is cleared when you restart your application).
If we want to authorize clients against the same application we can use IdentityServer authentication middleware for that.
First, install IdentityServer4.AccessTokenValidation package from nuget to your project:
Install-Package IdentityServer4.AccessTokenValidation
Then we can add the middleware to Startup class as shown below:
services.AddAuthentication().AddIdentityServerAuthentication("IdentityBearer", options =>
{
options.Authority = "http://localhost:62114/";
options.RequireHttpsMetadata = false;
});
I added this just after services.AddIdentityServer() in the startup project.
IdentityServer4.AccessTokenValidation package is not ready for ASP.NET Core 2.0 yet (at the time we write this document). See https://github.com/IdentityServer/IdentityServer4/issues/1055
Now, our identity server is ready to get requests from clients. We can create a console application to make requests and get responses.
While IdentityModel nuget package is enough to create a client and consume your API, I want to show to use API in more type safe way: We will convert incoming data to DTOs returned by application services.
Then we can change Program.cs as shown below:
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using Abp.Json;
using IdentityModel.Client;
using Abp.MultiTenancy;
using Abp.Web.Models;
using IdentityServerIntegrationDemo.Users.Dto;
using Newtonsoft.Json;
namespace IdentityServerIntegrationDemo.ConsoleApiClient
{
class Program
{
static void Main(string[] args)
{
RunDemoAsync().Wait();
Console.ReadLine();
}
public static async Task RunDemoAsync()
{
var accessToken = await GetAccessTokenViaOwnerPasswordAsync();
await GetUsersListAsync(accessToken);
}
private static async Task<string> GetAccessTokenViaOwnerPasswordAsync()
{
var disco = await DiscoveryClient.GetAsync("http://localhost:62114");
var httpHandler = new HttpClientHandler();
httpHandler.CookieContainer.Add(new Uri("http://localhost:62114/"), new Cookie(MultiTenancyConsts.TenantIdResolveKey, "1")); //Set TenantId
var tokenClient = new TokenClient(disco.TokenEndpoint, "client", "secret", httpHandler);
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("admin", "123qwe");
if (tokenResponse.IsError)
{
Console.WriteLine("Error: ");
Console.WriteLine(tokenResponse.Error);
}
Console.WriteLine(tokenResponse.Json);
return tokenResponse.AccessToken;
}
private static async Task GetUsersListAsync(string accessToken)
{
var client = new HttpClient();
client.SetBearerToken(accessToken);
var response = await client.GetAsync("http://localhost:62114/api/services/app/user/GetAll");
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
return;
}
var content = await response.Content.ReadAsStringAsync();
var ajaxResponse = JsonConvert.DeserializeObject<AjaxResponse<PagedResultDto<UserListDto>>>(content);
if (!ajaxResponse.Success)
{
throw new Exception(ajaxResponse.Error?.Message ?? "Remote service throws exception!");
}
Console.WriteLine();
Console.WriteLine("Total user count: " + ajaxResponse.Result.TotalCount);
Console.WriteLine();
foreach (var user in ajaxResponse.Result.Items)
{
Console.WriteLine($"### UserId: {user.Id}, UserName: {user.UserName}");
Console.WriteLine(user.ToJsonString(indented: true));
}
}
}
internal class UserListDto
{
public int Id { get; set; }
public string UserName { get; set; }
}
}
Before running this application, ensure that your web project is up and running, because this console application will make request to the web application. Also, ensure that the requesting port (62114) is the same of your web application.


#assign donationHistory="active"> <#assign subtitle = "Donatation history">
This logs total donations to the Ebean project
$120 donations to date. Max $100, Szabolcs $10,$10.
$105 donations. Szabolcs $10,$20,$10,$20,$10, Piotr $10, Ivaney $10, Michael $15.
$1620 donations. Wealth Systems $1000, Patrick $300, Glenn $20, Miguel $50, Marc $250.
$80 donations. Mikka $15, David $50, Al-Mothafar $15
$335 donations.


With innovative approaches and advanced methodologies, Vecta Corporation provides scalable business solutions to help companies achieve success through revenue increase, cost management, and user satisfaction. Our approach stems from the three most important business growth aspects: helping companies reach prospects, assist in converting prospects to customers, and assist in retaining those customers. This is accomplished through our interactive solutions and expertise in providing a memorable and positive user experience.
Throughout the years we have worked with Vecta Corporation, we have always been amazed at the level of dedication and professionalism that they have provided us and our WGDC products. It is this commitment that has increased both our income and exposure exponentially.
Iona Ford
President
Incredible results from an incredible effort by the Vecta Corporation team! We are very pleased with the business benefits we have rceived by working with them.
Robin Banks
CEO
Define and research your target audience, define your strategy to reach that audience and present a strong and memorable brand to that audience. vProspect can help your business: Define your target audience and competition. Research your competition and your target audience's behavior, needs, technical know-how level, etc. Establish a conceptual and visual identity that corresponds to the defined direction of the company. Ensure consistency across all media. Establish corporate guidelines for cohesiveness of any future developments. Define and/or re-defining your service and/or product offerings. Define expansion plans and strategies. Implement Search Engine Optimization of all Online materials.
Create a highly user-friendly and easy-to-navigate information architecture that will help your prospects interact with the company on a highly interactive level. vConvert can help your business: Build a visual and functional user front end that focuses exclusively on providing an exceptional user experience while conveying company, service and product information. Cause the desired emotional response in a user to facilitate conversion to a client. Build sites that move beyond merely conveying information. They advertise, motivate, excite and inspire. Users are more likely to remember and recommend your site. Research your target audience's behavior, needs, technical know-how and level, etc. Develop any applicable back-end programs to facilitate user interaction with the company and offerings on a highly functional level to allow any kind of online transactions and a completely centralized information collection and access point, accessible from any location. Create an architecture to display the site content and information in a logical and easy to access manner. Facilitating thereby the desired ease, for the user to find what they are looking for quickly and easily. Allowing the user to focus on the subject at hand rather than searching for information on the site.
Build on existing customer relationships to improve productivity and maximize customer loyalty, while growing revenues. vRetain can help your business: Streamline existing business infrastructures by utilizing technology for automation, information centralization, and information sharing among all business units and departments, as well as efficient prospect & customer tracking and interaction within the company. Collect crucial information, data and statistics that allow a company to keep in touch with users in a very customized, highly targeted way. Analyze site visitor behavior through traffic analysis, usability studies and interactive polling. Recommending and making site and application adjustments to improve usability and user experience.
Please fill out this form below and we will conntact you as soon as possible.


This module extends a Helper with the ability to have dynamic views for configured output classes. After a Helper has extended this module, it can use it within a render() by calling #dynamic_options() to get dynamically generated options for the object it’s rendering. See Hirb::Helpers::AutoTable as an example.
Whereas normal views are generated from helpers with static helper options, dynamic views are generated from helpers and dynamically generated helper options. Let’s look at an example for Rails’ ActiveRecord classes:
Hirb.add_dynamic_view("ActiveRecord::Base", :helper=>:auto_table) {|obj| {:fields=>obj.class.column_names} }
From this dynamic view definition, any ActiveRecord model class will render a table with the correct fields, since the fields are extracted from the output object’s class at runtime. Note that dynamic view definitions should return a hash of helper options.
To define multiple dynamic views, create a Views module where each method ending in ‘_view’ maps to a class/module:
module Hirb::Views::ORM def data_mapper__resource_view(obj) {:fields=>obj.class.properties.map {|e| e.name }} end def sequel__model_view(obj) {:fields=>obj.class.columns} end end Hirb.add_dynamic_view Hirb::Views::ORM, :helper=>:auto_table
In this example, ‘data_mapper__resource_view’ maps to DataMapper::Resource and ‘sequel__model_view’ maps to Sequel::Model. Note that when mapping method names to class names, ‘__’ maps to ‘::’ and ‘_’ signals the next letter to be capitalized.
Add dynamic views to output class(es) for a given helper. If defining one view, the first argument is the output class and a block defines the dynamic view. If defining multiple views, the first argument should be a Views::* module where each method in the module ending in _view defines a view for an output class. To map output classes to method names in a Views module, translate’::‘ to ’__’ and a capital letter translates to a ‘_’ and a lowercase letter.
Required option. Helper class that view(s) use to format. Hirb::Helpers::AutoTable is the only valid helper among default helpers. Can be given in aliased form i.e. :auto_table -> Hirb::Helpers::AutoTable.
Examples:
Hirb.add_dynamic_view Hirb::Views::ORM, :helper=>:auto_table Hirb.add_dynamic_view("ActiveRecord::Base", :helper=>:auto_table) {|obj| {:fields=>obj.class.column_names} }
# File lib/hirb/dynamic_view.rb, line 44 def self.add(view, options, &block) raise ArgumentError, ":helper option is required" unless options[:helper] helper = Helpers.helper_class options[:helper] unless helper.is_a?(Module) && class << helper; self.ancestors; end.include?(self) raise ArgumentError, ":helper option must be a helper that has extended DynamicView" end mod = block ? generate_single_view_module(view, &block) : view raise ArgumentError, "'#{mod}' must be a module" unless mod.is_a?(Module) helper.add_module mod end
Returns a hash of options based on dynamic views defined for the object’s ancestry. If no config is found returns nil.
# File lib/hirb/dynamic_view.rb, line 69 def dynamic_options(obj) view_methods.each do |meth| if obj.class.ancestors.map {|e| e.to_s }.include?(method_to_class(meth)) begin return send(meth, obj) rescue raise "View failed to generate for '#{method_to_class(meth)}' "+ "while in '#{meth}' with error:\n#{$!.message}" end end end nil end
Stores view methods that a Helper has been given via ::add
# File lib/hirb/dynamic_view.rb, line 109 def view_methods @view_methods ||= [] end


Custom Contract
Method: "hello"
Payable: false - StateMutability: "view"
Network: Transfer - (unfinished)
Method: "sendEthWithArgs"
Payable: true - StateMutability: "payable"
Method: "viewMultipleArgsMultipleReturn"
Payable: false - StateMutability: "view"
Inputs
- from - address
- multiplier - uint256
Outputs
- _balanceMultiplied - uint256
- _hello - bytes32
Method: "sendVariableEthNoArgs"
Payable: true - StateMutability: "payable"
Method: "viewMultipleArgsSingleReturn"
Payable: false - StateMutability: "view"
Inputs
- from - address
- multiplier - uint256
Outputs
- _balanceMultiplied - uint256
Method: "viewNoArgsMultipleReturn"
Payable: false - StateMutability: "view"
Inputs
Outputs
- _important - uint256
- _hello - bytes32
Method: "important"
Payable: false - StateMutability: "view"
Method: "sendVariableEthWithArgs"
Payable: true - StateMutability: "payable"
Method: "fee"
Payable: false - StateMutability: "view"
Method: "sendEthNoArgs"
Payable: true - StateMutability: "payable"
Method: "triggerEvent"
Payable: false - StateMutability: "nonpayable"
Method: "sendEthWithArgs"
Payable: true - StateMutability: "payable"
Method: "sendEthWithArgs"
Payable: true - StateMutability: "payable"


{% extends "base.html" %} {% block modal_body %}
Thanks for the use.
The file {{ file_name }} is sent.


Assertion and Testing¶
Chainer provides some facilities to make debugging easy.
Type checking utilities¶
Function
uses a systematic type checking of the chainer.utils.type_check
module.
It enables users to easily find bugs of forward and backward implementations.
You can find examples of type checking in some function implementations.
-
class
chainer.utils.type_check.
Expr
(priority)[source]¶ Abstract syntax tree of an expression.
It represents an abstract syntax tree, and isn’t a value. You can get its actual value with
eval()
function, and get syntax representation with the__str__()
method. Each comparison operator (e.g.==
) generates a newExpr
object which represents the result of comparison between two expressions.Example
Let
x
andy
be instances ofExpr
, then>>> x = Variable(1, 'x') >>> y = Variable(1, 'y') >>> c = (x == y)
is also an instance of
Expr
. To evaluate and get its value, calleval()
method:>>> c.eval() True
Call
str
function to get a representation of the original equation:>>> str(c) 'x == y'
You can actually compare an expression with a value:
>>> (x == 1).eval() True
Note that you can’t use boolean operators such as
and
, as they try to cast expressions to boolean values:>>> z = Variable(1, 'z') >>> x == y and y == z # raises an error Traceback (most recent call last): RuntimeError: Don't convert Expr to bool. Please call Expr.eval method to evaluate expression.
-
chainer.utils.type_check.
expect
(*bool_exprs)[source]¶ Evaluates and tests all given expressions.
This function evaluates given boolean expressions in order. When at least one expression is evaluated as False, that means the given condition is not satisfied. You can check conditions with this function.
Parameters: bool_exprs (tuple of Bool expressions) – Bool expressions you want to evaluate.
-
class
chainer.utils.type_check.
TypeInfo
(shape, dtype)[source]¶ Type information of an input/gradient array.
It contains type information of an array, such as the shape of array and the number of dimensions. This information is independent of CPU or GPU array.
Gradient checking utilities¶
Most function implementations are numerically tested by gradient checking.
This method computes numerical gradients of forward routines and compares their results with the corresponding backward routines.
It enables us to make the source of issues clear when we hit an error of gradient computations.
The chainer.gradient_check
module makes it easy to implement the gradient checking.
-
chainer.gradient_check.
check_backward
(func, x_data, y_grad, params=(), eps=0.001, atol=1e-05, rtol=0.0001)[source]¶ Test backward procedure of a given function.
This function automatically check backward-process of given function. For example, when you have a
Function
classMyFunc
, that gets two arguments and returns one value, you can make its test like this:>> def test_my_func(self): >> func = MyFunc() >> x1_data = xp.array(...) >> x2_data = xp.array(...) >> gy_data = xp.array(...) >> check_backward(func, (x1_data, x2_data), gy_data)
This method creates
Variable
objects withx_data
and callsfunc
with theVariable
s to get its result asVariable
. Then, it setsy_grad
array tograd
attribute of the result and callsbackward
method to get gradients of the inputs. To check correctness of the gradients, the function callsnumerical_grad()
to calculate numerically the gradients and compares the types of gradients withassert_allclose()
. If input objects (x1_data
or/andx2_data
in this example) represent integer variables, their gradients are ignored.You can simplify a test when
MyFunc
gets only one argument:>> check_backward(func, x1_data, gy_data)
If
MyFunc
is a loss function which returns a zero-dimensional array, passNone
togy_data
. In this case, it sets1
tograd
attribute of the result:>> check_backward(my_loss_func, (x1_data, x2_data), None)
If
MyFunc
returns multiple outputs, pass all gradients for outputs as a tuple:>> gy1_data = xp.array(...) >> gy2_data = xp.array(...) >> check_backward(func, x1_data, (gy1_data, gy2_data))
You can also test a
Link
. To check gradients of parameters of the link, set a tuple of the parameters toparams
arguments:>> check_backward(my_link, (x1_data, x2_data), gy_data, >> (my_link.W, my_link.b))
Note that
params
are notndarray
s, butVariables
s.Function objects are acceptable as
func
argument:>> check_backward(lambda x1, x2: f(x1, x2), >> (x1_data, x2_data), gy_data)
Note
func
is called many times to get numerical gradients for all inputs. This function doesn’t work correctly whenfunc
behaves randomly as it gets different gradients.Parameters: - func (callable) – A function which gets
Variable
s and returnsVariable
s.func
must returns a tuple ofVariable
s or oneVariable
. You can useFunction
object,Link
object or a function satisfying the condition. - x_data (ndarray or tuple of ndarrays) – A set of
ndarray
s to be passed tofunc
. Ifx_data
is onendarray
object, it is treated as(x_data,)
. - y_grad (ndarray or tuple of ndarrays or None) – A set of
ndarray
s representing gradients of return-values offunc
. Ify_grad
is onendarray
object, it is treated as(y_grad,)
. Iffunc
is a loss-function,y_grad
should be set toNone
. - params (Variable) – A set of
Variable
s whose gradients are checked. Whenfunc
is aLink
object, set its parameters asparams
. Ifparams
is oneVariable
object, it is treated as(params,)
. - eps (float) – Epsilon value to be passed to
numerical_grad()
. - atol (float) – Absolute tolerance to be passed to
assert_allclose()
. - rtol (float) – Relative tolerance to be passed to
assert_allclose()
.
- See:
numerical_grad()
- func (callable) – A function which gets
-
chainer.gradient_check.
numerical_grad
(f, inputs, grad_outputs, eps=0.001)[source]¶ Computes numerical gradient by finite differences.
This function is used to implement gradient check. For usage example, see unit tests of
chainer.functions
.Parameters: - f (function) – Python function with no arguments that runs forward computation and returns the result.
- inputs (tuple of arrays) – Tuple of arrays that should be treated as inputs. Each element of them is slightly modified to realize numerical gradient by finite differences.
- grad_outputs (tuple of arrays) – Tuple of arrays that are treated as output gradients.
- eps (float) – Epsilon value of finite differences.
Returns: Numerical gradient arrays corresponding to
inputs
.Return type:
Standard Assertions¶
The assertions have same names as NumPy’s ones.
The difference from NumPy is that they can accept both numpy.ndarray
and cupy.ndarray
.
Function testing utilities¶
Chainer provides some utilities for testing its functions.


Module Sorter
Templates are used for sorter methods because int[] and int[size] are different types Templates allow for having the same methods for different tyeps Using a template and not separate methods incurs no runtime costs because template parameters are evaluated at compiletime All arguments are ref because they take arrays in by reference and not by value Taking arrays in by reference allows for in-place sorting and swapping
Functions
| Name | Description |
|---|---|
bubbleSort(array)
|
A function that bubbleSorts the given array in place |
insertionSort(array)
|
A function that insertionSorts the given array in place |
mergeSort(array)
|
A function that mergeSorts the given array in place |
quickSort(array)
|
A function that quickSorts the given array in place Default pivot is the middle element of the array |
selectionSort(array)
|
A function that selectionSorts the given array in place |
swap(array, firstIndex, secondIndex)
|
Swaps elements in array at firstIndex and secondIndex in place |


WSL preview: Manchester United to push early top-four bid while Bristol City eye Manchester City upset
Here is the latest preview of the upcoming round of WSL games
by Paul Clark, Ella JermanFrom breaking record attendances on Women’s Football Weekend to seeing young stars shine in the FA Women’s Continental League Cup, we certainly haven’t been short of women’s football action over the past seven days.
Now, it’s time to feast our eyes on more with another round of Barclays FA Women’s Super League fixtures. Here’s everything you need to know.
Manchester United v Brighton
Sunday, 12pm, Leigh Sports Village
Unlucky, Brighton. There has probably never been a worse time for anyone to play Women’s Super League newcomers Manchester United with the Red Devils coming into the game straight off the back of their 11-1 midweek cup victory over Leicester.
Ella Toone scored five as a merciless United swept aside their opponents, with Kirsty Smith and Hayley Ladd also grabbing their first goals for the club.
They’ll be looking to maintain the high when they welcome the Seagulls on Sunday, who will be keen to win successive WSL games for the first time after downing Birmingham 3-0 last weekend.
Arsenal v Liverpool
Sunday, 2pm, Meadow Park
If Liverpool hadn’t had a tougher start to the WSL season already, now they face one of the trickiest challenges yet – a trip to reigning champions Arsenal.
As expected, Joe Montemurro’s side are enjoying themselves this season. They cruised into the Women’s Champions League quarter-finals with a 13-2 aggregate victory over Slavia Praha, before beating Tottenham in front of 38,000 last weekend and running out 7-0 winners over Bristol City in the midweek cup tie.
The same can’t be said for Liverpool, who sit bottom without a win from their opening six league games despite beating Championship outfit Blackburn Rovers 6-0 in the Conti Cup on Thursday.
Birmingham City v Chelsea
Sunday, 2;45pm, SportNation.bet stadium, Solihull Moors, live on BT Sport
Contrary to general assumptions, the last time these two sides met it was Birmingham who came out with the three points, running out 3-2 winners at Kingsmeadow back in January to end their nine-game winless run against the Blues.
However, since that meeting, Chelsea, who currently top the division are unbeaten in 12 WSL games, scoring 36 goals and conceding just eight.
They come into the fixture off the back of defeating Tottenham 5-1 in the Conti Cup, while Birmingham will be looking to bounce back from last week's 3-0 loss to Brighton.
Everton v Tottenham
Sunday, 12:30pm, Southport Football Club
From playing their first ever top-flight fixture at Stamford Bridge to welcoming 38,000 fans to the Tottenham Hotspur Stadium to break a WSL attendance record, this season has already been full of new challenges for Spurs.
And on Sunday they go again when they face Everton for the first-ever time in any competition.
The Toffees have got their 2019/20 season off to a blinding start, winning four of six to sit just behind Arsenal in fourth place.
They’ll be full of confidence after beating Liverpool 1-0 in the Merseyside derby at Anfield, while Spurs will be determined to bounce back from their 2-0 North London derby defeat.
Bristol City v Manchester City
Sunday, 12:30pm, Stoke Gifford Stadium, live on BBC Sport website and BBC red button
Manchester City will be looking to build on last weekend’s 5-0 victory over West Ham when they make the trip to Bristol City as Nick Cushing’s side turn their focus to domestic success after bowing out of the Champions League at the hands of Atletico Madrid.
They may have been defeated on their last away trip to Arsenal, but City have only lost successive games on two previous occasions in the WSL.
The fixture marks the end of a tough week for Bristol City who lost 7-0 to Arsenal on Thursday evening, but striker Ebony Salmon will be searching for her fourth goal or assist in as many appearances to help turn their fortunes around.
West Ham v Reading
Sunday, 3pm, Rush Green Stadium
It’s a battle of the mid-table rivals as eighth-placed West Ham welcome Reading in seventh to Rush Green.
They bounced back from their 5-0 loss to City last weekend with a 3-1 victory over Lewes in the cup on Wednesday but face the Royals who demolished Crystal Palace 6-0 the following evening.
The two sides met fighting for a spot in the FA Cup final last season, with West Ham winning on penalties to progress to Wembley.
To follow the action, buy tickets and sign-up for The FA Player’s live Barclays FA Women’s Super League coverage visit here.
Get lots more news, opinion and transfer updates on our Bristol City FC page and add a bookmark to find it quickly next time.


Teenager stabbed 'during fight at vigil' for friend who died in police chase
The mourner was attacked in Manchester as respects were being paid to the 17-year-old who was killed in Sunday's car crash
by Sam Elliott, Charlotte Dobson, https://www.mirror.co.uk/authors/sam-elliott/A teenager has been stabbed following a fight at a vigil to mourn the death of a close friend .
An 18-year-old was attacked as pals paid their respects to a 17-year-old who died after the car he was in smashed into a building during a police chase.
According to the ManchesterEveningNews , police were called to reports of a brawl in the south of the city on Monday.
The teenager was stabbed in the shoulder before being taken to hospital. Police said he is in a stable condition.
They say the fight broke out at a vigil in memory of Deon Simpson, who died in a police chase.
The teenager stabbed on Monday night is believed to have been one of Deon's friends - and a pal of the other person injured in the horror smash on Sunday.
The two young men inside the vehicle were taken to hospital with life-threatening injuries.
Deon, understood to have lived in Gorton having grown up in Moss Side, later died .
The other person remains in hospital. A referral has been made to the Independent Office for Police Conduct (IOPC) and an investigation into the collision has been launched.
Deon's friends flooded Facebook with tributes on Monday .
Some arranged to meet at the scene of the tragedy to pay their respects. Flowers were laid there throughout the day.
At around 7pm, people reported on social media that someone had been knifed.
One person wrote: "Poor lad has gone to pay his respects and then been stabbed."
Several other sources told the M.E.N. the attack happened during the vigil.
A friend of the teenager said he was recovering well.
Greater Manchester Police have not confirmed the stabbing and Sunday night's crash are linked.
A statement from the force read: "Shortly after 6.50pm on Monday 4 November 2019, police were called to reports of people fighting on Burnage Lane in Burnage.
"Officers attended and an 18-year-old man was taken to hospital with a stab wound to his shoulder. He remains in a stable condition.
"No arrests have been made and enquiries are ongoing.
"Police patrols remain in the area."


Min. Deviation Time(s): 0
Min. Deviation Distance(m): 0
Alternatives
Any route
Better route
Alternative type


{{ define "disclaimer" }}
We do not make any guarantees for data accuracy.
Visadb.io News is not responsible for, and expressly disclaims all liability for, damages of any kind arising out of use, reference to, or reliance on any information contained within the site. While the information contained within the site is periodically updated, no guarantee is given that the information provided in this Web site is correct, complete, and up-to-date. Although the Visadb.io may include links providing direct access to other Internet resources, including Websites,visadb.io News is not responsible for the accuracy or content of information contained in these sites.responsible for the accuracy or content of information contained in these sites.
Privacy policy:
By using visadb.io News website you agree to allow us to collect personal information about you and to track your behaviour by using cookies.


{% extends "app.html" %} {% block css %} {% endblock %} {% block title %}Top Charts{% endblock %} {% block content %}
Oh What? You're favorite song is not on the list? Recommend us your favorite song and share with the world


(c)
COPYRIGHT 1999: THE AUTHORS, DR. PETER HOLTAPPELS AND CAPTAIN WERNER HUMMEL.
THIS REPORT OR PART(S) THEREOF MAY ONLY BE COPIED OR REPRODUCED UPON WRITTEN
PERMISSION BY THE PROPRIETORS OF THE COPYRIGHT THEREOF. THIS RESTRICTION APPLIES
ON ANY KIND OF REPRO-DUCTION, I.E. REPRINTING, COPYING, TAPE RECORDING OR THE
LIKE.


Answering questions
Gather your material
In preparation for putting your oral presentation together,
you need to spend about 10 - 15 minutes deciding what information you have
that is suitable to show. The key ingredients in any oral presentation
are graphs of the data and an explanation of the physics and your analysis.
At a minimum you must be prepared to discuss these main points.
Back to the top
Organize your material
Once you have gathered all the bits you need, you need
to organize them into a sensible order. This is done by following the two
general sets of rules for oral presentation preparation.
Back to the top
-
Begin your talk with a brief overview of where you are
going, a roadmap. In other words, tell them what you are about to tell
them.
-
Next comes the body of the talk where your tell them
what you have to say.
-
Finally, briefly summarize the main points you want
the audiecnce to leave you with. That is, tell them what you told them.
If this sounds redundant, it is supposed to. Remember,
your audience is not taking notes and cannot remember all the details like
you can, so providing frequent reminders is a useful way to keep them on
track with you. This is related to the other tool you will use, transparencies.
More on this later.
This first set of rules gives you a strategy for
preparing the presentation, now we need some tactics. The second set of
rules provide a more specific procedure to follow to fill in the details.
Back to the top
-
Begin with the end of your talk. What do you want to
say, what is the point? For example, if you are launching rocks from your
catapult to smash down the castle walls, your presentation to the commanding
officer should probably end with a clear statement of how fast you are
making holes in the walls, the location of these holes and how big they
are. This would be the point of your presentation. This is what the presentation
is all about. Once you have identified this idea, concept, piece of data,
or graph, you are well on your way. Identify this first since it is the
most important part of the talk.
-
Now, jump to the beginning of the talk. You now know
where you want to go, but where do you start? You want to start at a place
where you audience can understand what you have to say. As the field catapult
commander, you wouldn't begin by explaining the new assembly-line technique
you use for getting really big rocks to your catapult until you first explain
where you have to go to get the rocks.  Here, this is easy. The rest of
the class probably knows about what you knew when you started the lab project.
Starting here will insure that everybody understands what you are talking
about. And this is the point, right?
-
Now that the beginning and end are specified, the middle
is easy. Make a list of the ideas and equations you are assuming that your
audience knows at the beginning and a list of things that they need to
understand by the end of your presentation. The main body of your talk
will fill the gap. Everything on the end-of-talk list that is not on the
beginning-of-talk list must be explained in a way that assumes only things
on the beginning-of-talk list. Once you've done this, your presentation
is prepared.
Back to the top
The actual presentation
Once you have everything figured out, you are ready
to assemble the presentation. The primary tool a scientist uses to give
a presentation is the transparency or slide. Since we remember little of
what we hear and only half of what we see, transparencies provide a way
to show your audience what you are doing and improve the transfer of information
tremendously.
There are three transparencies that are required:
A title slide to tell the audience who you are and what you are going to
talk about, a slide that shows the main graph, diagram, calculation, or
data summary from your experiment, and a summary/conclusion slide that
tells the audience what you want them to know (the point of the talk).
Other transparencies will certainly be needed to explain these three.
Once you have these three made, fill in the missing
pieces as described in our tactical rule set (set #2). Think of the transparencies
as paragraphs in a paper: every time you change main topics, change transparencies.
This should occur no more frequently that about once a minute or minute
and a half. Thus, for a 10 minute presentation, you should have no more
than 7-10 transparencies. It takes about a minute to say anything useful
and coherent on any topic so this is a rule of thumb rooted in the way
we normally talk to each other. One/minute is an upper limit, fewer is
better.
Back to the top
Making readable transparencies
Don't just make transparencies of your written report
and expect to do well. For starters, the text is just too small to be read
from the back of the room.  If you put up a page full of text, they will
begin by trying to read it all and not listen to you. Once they realize
that they cannot see what you've put up, they loose interest quickly and
tune you out.
The rule of thumb for preparing transparencies is
that the text should be printed large enough for you to easily read
at arm's length. This corresponds to at least 14 point type, preferably
larger. If you can do that, then when it is projected, people at the back
of the room can read what is written. Of course, neatness counts. You can
prepare some of your transparencies with a marker if you do it neatly,
just be aware that you are writing to be read from the back of the room.
This, of course, limits the amount of information you can put on one slide.
This is good. You only need enough information to fill one or two minutes
of discussion. Since you should never put up information on a slide that
you don't explain, a minute's worth of talking doesn't need much material
anyway, so this really isn't a serious limit.
Transparencies are really there to help you as much
the audience. They provide a kind of public outline for what you are saying
to keep you and the audience on track. By putting this outline on the transparency,
you don't have your face buried in a sheet of paper with your outline on
it. You can point to the items on your transparency as you explain them
to the class. This makes for a much less boring presentation (think about
boring lectures you've sat through).
On the slides, bulleted lists are good. The idea
is to have the slide tell the audience the key points of what you are telling
them is, not the other way around. Don't just stand and read the transparency.
It should summarize what you say, you shouldn't summarize what it says.
When you put a transparency up that shows a graph,
explain it to the audience. Explain the labels and units on the axes. Tell
them the origin of the numbers you have plotted. Tell them what the slope
or y-intercept (as appropriate) mean. Guide them through the plot so when
you finish they know what you know about the figure. If you just put a
transparency with a graph of your data and say "Here are the results of
our experiment" and then just stand there, at least two bad things will
happen: 1) you will move on to the next slide too quickly and no one will
have time to understand what you've shown them and 2) you haven't told anyone
what to look for in the graph. Remember, there is no one else
in the room that knows the experiment as well as you do and nobody knows
your data at all.
Back to the top
Answering questions
At the end of your presentation, you will be asked questions.
Contrary to popular opinion, this is a good thing. This means that people
paid attention to you and understood at least a portion of what you had
to say. Don't be shy about wading right in to the questions. In this class,
if you don't know the answer, chances are that others in the class don't
either. I'll help sort out the answer, even if I asked the question. Naturally,
the better prepared you are, the easier this part of the presentation will
be.
Remember: you are now the class expert on your
experiment.
Back to the top


The Side Navigation can display structures of up to three levels.
In the Wide variant:
- The first levels always shows an icon
- If first-level items have children, they show the expand/collapse arrows
- Second level items do not display an icon and are not indented
- If second-level items have children, they show the expand/collapse arrows
- Third level items do not display an icon and are indented by 2 rem (32px)
In the Narrow variant:
- The first levels always shows an icon
- If first-level items have children, they show the expand/collapse arrows
-
If first-level items have children, and they are clicked, the popover displays the First-level item in
bold letters, then the second level items in regular.
- Second level items do not display an icon and are not indented
- If second-level items have children, they show the expand/collapse arrows
- Third level items do not display an icon and are indented by 2 rem (32px)
A note about height:
It is advised to place the side nav in a container of fixed height, or have it occupy the full height of the
screen. Otherwise the height of the side nav will change based upon the expanding and collapsing of items with
children.


Concat
Added/Revised at June 25, 2013
Added/Revised at June 25, 2013
When the concat method is called with zero or more arguments item1, item2, etc., it returns an array containing the array elements of the object followed by the array elements of each argument in order. The following steps are taken:
Let O be the result of calling ToObject passing the this value as the argument.
Let A be a new array created as if by the expression new Array() where Array is the standard built-in constructor with that name.
Let n be 0.
Let items be an internal List whose first element is O and whose subsequent elements are, in left to right order, the arguments that were passed to this function invocation.
Repeat, while items is not empty
Remove the first element from items and let E be the value of the element.
If the value of the [[Class]] internal property of E is “Array”, then i. Let k be 0. ii. Let len be the result of calling the [[Get]] internal method of E with argument “length”. iii. Repeat, while k < len
Increase n by 1.
Increase k by 1.
Else, E is not an Array i. Call the [[DefineOwnProperty]] internal method of A with arguments ToString(n), Property Descriptor {[[Value]]: E, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}, and false. ii. Increase n by 1.
Return A. The length property of the concat method is 1.
NOTE The concat function is intentionally generic; it does not require that its this value be an Array object. Therefore it can be transferred to other kinds of objects for use as a method. Whether the concat function can be applied successfully to a host object is implementation-dependent.


SoftBank CEO Son says his judgment on WeWork was poor in many ways
(Reuters) - SoftBank Group Corp (9984.T) fell into the red in the second quarter for the first time in 14 years, with its gigantic Vision Fund suffering a 970 billion yen ($8.9 billion) loss on plunging valuations of WeWork and Uber Inc (UBER.N).
Last month, SoftBank was forced to spend more than $10 billion to bail out WeWork after the U.S. company’s IPO attempt flopped, and it said on Wednesday the fair value of its investment in the office-sharing startup decreased by $3.4 billion in the second quarter.
At a post-earnings briefing, Chief Executive Masayoshi Son said his judgment in dealing with WeWork had been poor in many ways, a remarkable admission for an executive well known for his ebullience.
Here are some of Son’s comments, translated from Japanese:
On WeWork:
* Says his judgment on WeWork was poor in many ways, but the U.S. company is not a sinking boat
* Says in about 18 months the majority of WeWork offices will be profitable as occupancy increases
* SoftBank stopped new leases for WeWork a month ago and this may continue for three to four years, Son says
* Says he expects there will be a hockey stick recovery in WeWork profits
* Son says he was told off by SoftBank board members over WeWork
On WeWork founder Adam Neumann:
* Son says he overestimated Neumann’s good side, turned a blind eye to things like corporate governance, and that he should have known better
* Says learned a harsh lesson from his experience with Neumann
On Vision Fund 2:
* Says Vision Fund 2 is starting investing with SoftBank’s money
* Vision Fund 2 is going to be launched as scheduled, declined to discuss status of negotiations with potential investors
* Vision Fund 2 to be a similar size to the first $100 billion fund
On IPO pipeline:
* Says has started to think SoftBank should be more cautious about timing of IPOs for companies like Uber and Slack
* Says there is no change to the trend that multiple portfolio companies will go public every year
* Says for companies that are getting closer to turning a profit, SoftBank will support them in going public


{% extends "layout.html" %} {% block page_title %} Are you currently in work? {% endblock %} {% block content %} Back Are you currently in work? Are you currently in work? Yes No {% endblock %}


v2.0.14
ref
More...
player.html
blog/html/songs/index.html
blclassTest.html
tryit_asp.html
github*
github_cchess
beautifullover.org
people.highline.edu
w3schools.com
CodeMirror
google
cbcpubliclibrary.net/
shanuan
blog
littleflute
xd
vc6
blog


Emotional Inteligence
Emotional Intelligence Is your ability to understand, control, and know your emotions as well as understand others emotions and how to use it to better your relationships and and understanding of others. Emotional Intelligence is defined as a person's ability to identify, evaluate, control, and express emotions. People with high EQ usually make great leaders and team players because of their ability to understand, empathize, and connect with the people around them.
How IQ differs from EQ is that IQ is more about intelligence, problem solving, book smarts and the like while EQ focuses more on how you feel and more about how you feel and understanding emotions in yourself and others.
EQ is important in nearly every way: it's the understanding of how you process and evaluate emotions as well as how you relate and understand others. You use EQ in everyday life when you interact with others, starting conversations, or when you're processing hard emotions and need to deal with them in a healthy way.


Presidency fumes at ‘fake’ media reports 22 Nov 2019, 07:40 by Kuzeeko Tjitemisa Home \ Front Page News \ Presidency fumes at ‘fake’ media reports - New Era Live


General discussion and support for anyone who wants to get involved in the development of Cake.
Note, if you just have questions about using Cake, you should use the user's mailing list.
| Post | (Un-)Subscribe |
|---|---|
|<EMAIL_ADDRESS>| Manage Email |
Due to massive abuse by spammers the subscriptions is centralized for email lists of all projects hosted on Codehaus. After following the link above just register with your email address and you can manage all subscriptions at once.


I was just wondering if anyone had any ideas for a strength based barbarian/harper/xxx with mighty rage? Preferrably without dev crit
try searching for it using pulse caps' search engine. i know i made one using barb/ranger/hs, which was pretty cool.
Well, the search engine came up with zero results for a barb/ranger/hs, but i found it the old fashioned way


Python Installation Guide¶
Regardless of how you choose to install Python, please make sure you install Python version 3.x. The latest increment of version 3 is ideal. Python 2 is no longer supported. As part of your educational experience, throughout class you will use jupyter notebooks, a programming environment that runs in a web browser. For this to work you will need a reasonably up-to-date browser, like the current version of Chrome, Safari or Firefox. For more information see the browsers supported by Jupyter.
We recommend the use of the Anaconda distribution to maintain your Python environment for most data science applications. Python is currently the most popular data science language used in industry. A major reason it is an industry standard today is its diverse and well-maintained ecosystem of packages. Anaconda is essentially a bundle of many of these packages, and it comes with Conda, a package management system.
Note
You do not need administrator or root permissions to install Anaconda if you select a user-writable install location.
Download the image or install script from https://www.anaconda.com/download/
On Ubuntu¶
install via the command line
~$ bash ~/Downloads/Anaconda3-2020.02-Linux-x86_64.sh
The above link may not have the same name as the actual file downloaded
Important
Answer yes to questions that you are prompted with
Restart terminal
On OSX¶
Run the installer on the downloaded image
Important
Answer yes to the path adding question
restart terminal
On Windows¶
Ensure that you install the
Anaconda installer for Windows
for Python 3Double-click the .exe file
Follow the instructions on the screen
If you are unsure about any setting, accept the defaults. You can change them later. When installation is finished, from the Start menu, open the Anaconda Prompt.
Important
Ensure that you check Make Anaconda the default Python
For more info, see https://conda.io/docs/user-guide/install/windows.html
Keeping conda up-to-date¶
~$ conda update --all


House raided in Oman for illegal furniture works
by Times News ServiceMuscat: Muscat Municipality in coordination with the Royal Oman Police raided a house in Al Amerat, where expatriate workers illegally conducted carpentry activities.
In a statement issued online Municipality said: “Muscat Municipality in Al Amerat in cooperation with the Royal Oman Police raided a residential building where expat workers were conducting illegal activity of furniture upholstery in violation of the Municipal laws and regulations of commercial activities and the uses of residential buildings.”
“The municipality has taken law procedures against the violators and investigation is underway.”


Class: Rails::CommandsTasks
| Inherits: |
Object
|
| Defined in: |
Overview
This is a class which takes in a rails command and initiates the appropriate initiation sequence.
Warning: This class mutates ARGV because some commands require manipulating it before they are run.
Constant Summarycollapse
- COMMAND_WHITELIST =
-
%w(plugin generate destroy console server dbconsole runner new version help)
- HELP_MESSAGE =
-
<<-EOT Usage: rails COMMAND [ARGS] The most common rails commands are: generate Generate new code (short-cut alias: "g") console Start the Rails console (short-cut alias: "c") server Start the Rails server (short-cut alias: "s") dbconsole Start a console for the database specified in config/database.yml (short-cut alias: "db") new Create a new Rails application. "rails new my_app" creates a new application called MyApp in "./my_app" In addition to those, there are: destroy Undo code generated with "generate" (short-cut alias: "d") plugin new Generates skeleton for developing a Rails plugin runner Run a piece of code in the application environment (short-cut alias: "r") All commands can be run with -h (or --help) for more information. EOT
Instance Attribute Summary collapse
- #argv readonly
Class Method Summary collapse
-
.new(argv) ⇒ CommandsTasks
constructor
a new instance of CommandsTasks
Instance Method Summary collapse
- #console
- #dbconsole
- #destroy
- #generate
- #help
- #new
- #plugin
- #run_command!(command)
- #runner
- #server
- #version
Constructor Details
.new(argv) ⇒ CommandsTasks
a new instance of CommandsTasks
32 33 34
# File 'railties/lib/rails/commands/commands_tasks.rb', line 32 def initialize(argv) @argv = argv end
Instance Attribute Details
#argv (readonly)
[ GitHub ]8
# File 'railties/lib/rails/commands/commands_tasks.rb', line 8 attr_reader :argv
Instance Method Details
#console
[ GitHub ]57 58 59 60 61 62 63 64 65 66 67 68 69
# File 'railties/lib/rails/commands/commands_tasks.rb', line 57 def console require_command!("console") = Rails::Console.parse_arguments(argv) # RAILS_ENV needs to be set before config/application is required ENV['RAILS_ENV'] = [:environment] if [:environment] # shift ARGV so IRB doesn't freak shift_argv! require_application_and_environment! Rails::Console.start(Rails.application, ) end
#dbconsole
[ GitHub ]#destroy
[ GitHub ]53 54 55
# File 'railties/lib/rails/commands/commands_tasks.rb', line 53 def destroy generate_or_destroy(:destroy) end
#generate
[ GitHub ]49 50 51
# File 'railties/lib/rails/commands/commands_tasks.rb', line 49 def generate generate_or_destroy(:generate) end
#help
[ GitHub ]106 107 108
# File 'railties/lib/rails/commands/commands_tasks.rb', line 106 def help end
#new
[ GitHub ]93 94 95 96 97 98 99
# File 'railties/lib/rails/commands/commands_tasks.rb', line 93 def new if %w(-h --help).include?(argv.first) require_command!("application") else exit_with_initialization_warning! end end
#plugin
[ GitHub ]45 46 47
# File 'railties/lib/rails/commands/commands_tasks.rb', line 45 def plugin require_command!("plugin") end
#run_command!(command)
[ GitHub ]36 37 38 39 40 41 42 43
# File 'railties/lib/rails/commands/commands_tasks.rb', line 36 def run_command!(command) command = parse_command(command) if COMMAND_WHITELIST.include?(command) send(command) else (command) end end
#runner
[ GitHub ]89 90 91
# File 'railties/lib/rails/commands/commands_tasks.rb', line 89 def runner require_command!("runner") end
#server
[ GitHub ]71 72 73 74 75 76 77 78 79 80 81 82
# File 'railties/lib/rails/commands/commands_tasks.rb', line 71 def server set_application_directory! require_command!("server") Rails::Server.new.tap do |server| # We need to require application after the server sets environment, # otherwise the --environment option given to the server won't propagate. require APP_PATH Dir.chdir(Rails.application.root) server.start end end
#version
[ GitHub ]101 102 103 104
# File 'railties/lib/rails/commands/commands_tasks.rb', line 101 def version argv.unshift '--version' require_command!("application") end


Student Details
Student Management
View Report
Register User
Upload Certificate
Update Student Record


Galactic Calculation
Enter your age to get some interstellar information!
Time for some interstellar facts!
Since you're years old on Earth...

- You've got roughly years to live.

On Venus:
- A young years of age.
- A plentiful years to go.
- You've aged like fine wine! years over what we expected.
On Mars:
- You've lived years on the orange rock so far!
- Just about more to go. Think you'll find Marvin by than?
- Determined to live aren't you? years over life expentancy and still rockin'!
On Jupiter:
- Just a sprout of years.
- It may not seem like a lot, but is quite a ways to go!
- Trust me, years there is a lot more than you think. You're going to live forever at this rate.


MEO injection .±. mice liver Figure oil toxicity kidney groups study normal weight body subcutaneous skin blood control different increase {border-style compared showed control. px;} saline #ffffff;} using dose essential group higher injected parameters phase Table enzymes samples spleen standard toxic volume abnormalities ... WBC damage deviation doses food injection. mice. organs shown experiment expressed intake level liver, mean results various μL) MEO. So, Values activity did hematological hydrosol myrrh spleen, Statistical day decrease effect followed granuloma kidney, safe sample second studies BUN Effect Health administration calculated change lower natural obtained pulp px; significance similar site used {font-family Blood Histology Mice Myrrh cells effects evaluate font-size heart inflammation levels nodule one-way red serum structure study, study. subcutaneously toxicity. volumes ANOVA AST Control Dunnett's comparison double; evaluation groups. histology increased like multiple products test. treatment use ALT AST, CRE CRE, Clinical Commiphora Sciences Subcutaneous animal border-color border-width changes count data distillation doses. eosin evaluated experiment. help hematoxylin histological human lungs, medicine observed peanut rats reaction region reported revealed seen significant solid; taken tissue toxicity, vigorously white wound {font-style {font-weight < (U/L) Body Experiment Experimental Methods Phase Research Weight acute analysis analyzed. associated bold caused considered counts courier; day. em; extract formation histopathological important indicated indicates indicating layer leading little lowest magnification). mainly measured mixing organ pattern prepared pt;} right sacrifice sharp staining subacute swelling time


Conversation 1
Conversation 2
Conversation 3
Incoming Message
Outgoing Message
Your browser does not support iframes.
iframes are displayed with a yellow backgound


| Life |
Always do right. This will gratify some people and astonish the rest.
- Mark Twain
A man is a success if he gets up in the morning and gets to bed at night,
and in between he does what he wants to do.
- Bob Dylan
Don't wait for the Last Judgement. It takes place every day.
- Albert Camus
Brick walls are there for a reason. They're not there to keep us out. The brick walls are there to give us a chance to show how badly we want something.
- Randy Pausch
Far and away the best prize life has to offer is the chance to work hard
at work worth doing.
- Theodore Roosevelt
I cannot afford to waste my time making money.

- Gandalf
The quality of a person's life is in direct proportion to their commitment to
excellence, regardless of their field of endeavor.
- Vince Lombardi
No art, however minor, demands less than total dedication if you want to excel in it.
- Leon Battista Alberti, (architect, painter and mathematician)
My crystal ball is fuzzy
- Lotfi Zadeh (inventor of Fuzzy Logic, when asked to predict the future)
If I had a dollar for every million-dollar idea I've had, I'd be rich.
- Greg Meyer
There's nothing that will change someone's
moral outlook quicker than cash in large sums.
- Larry Flynt
The perfect is the enemy of the good.
- Voltaire
I have great faith in fools. Self-confidence, my friends call it.
- Edgar Allen Poe
The point of all this is to be able to spend more time at the beach!
- Nils Nilsson
Being famous has its benefits, but fame isn't one of them.
- Larry Wall
Personally, I liked the university. They gave us money and facilities, we didn't have to produce anything! You've never been out of college! You don't know what it's like out there! I've worked in the private sector. They expect results.
- Dr Ray Stanz (Dan Aykroyd), Ghostbusters
A great many people think they are thinking when they are merely rearranging their prejudices.
- William James
It is the mark of an educated mind to be able to entertain a thought without
accepting it.
- Aristotle
I try to leave out the parts that people skip.
- Elmore Leonard (on his secret to writing)
Either write something worth reading or do something worth writing.
- Benjamin Franklin
Believe, if thou wilt, that mountains change their place, but believe not that man changes his nature.
- Mohammed
| The Universe |
In the beginning, the Universe was created. This has
made a lot of people very angry and been widely regarded
as a bad move.
- Douglas Adams
Space isn't remote at all.
- Fred Hoyle
Man is the best computer we can put aboard a spacecraft... and the
only one that can be mass produced with unskilled labor.
- Wernher von Braun
We can lick gravity, but sometimes the paperwork is
overwhelming.
- Wernher von Braun
I don't see any god up here.
- Yuri Gagarin (in orbit, 1961)
Only two things are infinite, the universe and human stupidity,
and I'm not sure about the former.
- Albert Einstein
There are 1011 stars in the galaxy. That used
to be a huge number. But it's only a hundred billion.
It's less than the national deficit! We used to call them
astronomical numbers. Now we should call them economical
numbers.
- Richard Feynman
For all our conceits about being the center of the universe, we live in
a routine planet of a humdrum star stuck away in an obscure corner ... on an
unexceptional galaxy which is one of about 100 billion galaxies. ... That is
the fundamental fact of the universe we inhabit, and it is very good for us to
understand that.
- Carl Sagan
Far out in the uncharted backwaters of the unfashionable end of the Western Spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-eight million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea.
- Douglas Adams
| Computers |
Some software is actually pretty good, by any standard. Think of the Mars Rovers, Google, and the Human Genome Project. Now, that's quality software!
- Bjarne Stroustrup, (when asked by Technology Review "Why is software so bad?". I'm proud
to have worked on two of those three projects.)
The world has arrived at an age of
cheap complex devices of great reliability; and something is bound
to come of it.
- Vannevar Bush (1945)
Power corrupts, and obsolete power corrupts obsoletely.
- Ted Nelson, on the Microsoft DOS operating system
Computers make it easier to do a lot of things, but most of the things they make it easier to do don't need to be done
- Andy Rooney
As soon as we started programming, we found out to our surprise that it wasn't as
easy to get programs right as we had thought. Debugging had to be discovered. I
can remember the exact instant when I realized that a large part of my life from then
on was going to be spent in finding mistakes in my own
programs.
- Maurice Wilkes
Only wimps use tape backup: real men just upload their important stuff
on ftp, and let the rest of the world mirror it.
- Linus Torvalds
C++ is history repeated as tragedy. Java is history repeated
as farce.
- Scott McKay
Nothing is destroyed until it is replaced.
- Auguste Comte (1798-1857) (on the need for revolutionary new theories (or on the need to do x.f = null in garbage-collected languages with destructors))
In general, they do what you want, unless you want consistency.
- Larry Wall (on Perl functions)
Computer language design is just like a stroll in the park. Jurassic Park, that is.
- Larry Wall
If you give someone Fortran, he has Fortran.
If you give someone Lisp, he has any language he pleases.
- Guy L. Steele
[Lisp] is the only computer language that is beautiful.
- Neal Stephenson
If you can't hear me, it's because I'm in parentheses.
- Steven Wright
He who refuses to do arithmetic is doomed to talk nonsense.
- John McCarthy
Belief is no substitute for arithmetic.
- Henry Spencer
Object-oriented programming is an exceptionally bad idea
which could only have originated in California.
- Edsger Dijkstra (attributed)
We read Knuth so you don't have to.
 They can only give you answers.
- Pablo Picasso
I do not believe in objects. I believe only in their relationships.
- George Braque
I don't paint things. I only paint the difference between things.
- Henri Matisse
Mathematicians do not study objects, but relations among objects;
they are indifferent to the replacement of objects by others as long
the relations don't change. Matter is not important, only form
interests them.
- Henri Poincare
Have nothing in your houses that you do not know to be useful, or believe to be beautiful.
- William Morris
All models are wrong. Some models are useful.
- George Box
When cryptography is outlawed, bayl bhgynjf jvyy unir cevinpl!
- Brad Templeton
Errors using inadequate data are much less than those using no data at all.
- Charles Babbage
In the future, search engines should be as
useful as HAL in the movie 2001: A Space Odyssey--but hopefully they won't kill people.
- Sergey Brin
| Everything |
Doubt is not a pleasant condition, but certainty is an absurd one.
- Voltaire
There are three principal ways to lose money: wine, women, and
engineers. While the first two are more pleasant, the third is by far
the more certain.
- Baron Rothschild
God is a hacker, not an engineer.
- Francis Crick
You can do reverse engineering, but you can't do reverse hacking.
- V. S. Ramachandran
I have often thought that if there had been a good rap group in those days, I might have chosen a career in music instead of politics.
- Richard Nixon
If I have made myself clear, you must have misunderstood me.
- Alan Greenspan
Science is like sex: sometimes something useful comes out,
but that is not the reason we are doing it
- Richard Feynman
Literature is mostly about having sex, and not much about having babies; life is the other way round.
- David Lodge
More than any other time in history mankind faces a crossroads.
One path leads to despair and utter hopelessness, the other to total
extinction. Let us pray we have the wisdom to choose correctly.
-Woody Allen
When you have eliminated the impossible, whatever remains, however improbable,
must be the truth.
- Sir Arthur Conan Doyle
Chance favors only the prepared mind.
- Louis Pasteur
Lord, give us the wisdom to utter words that are gentle and tender, for
tomorrow we may have to eat them.
-Sen. Morris Udall
It does not require a majority to prevail, but rather an irate, tireless minority keen to set brush fires in people's minds.
- Samuel Adams
I don't want to achieve immortality through my work ... I want to achieve it through not dying.
- Woody Allen
I am a man of fixed and unbending principles, the first of which is to
be flexible at all times.
- Sen.
Everett Dirksen
When I face an issue of great import
that cleaves both constituents and colleagues, I always take
the same approach. I engage in deep deliberation and
quiet contemplation. I wait to the last available minute
and then I always vote with the losers. Because, my friend,
the winners never remember and the losers never forget.
- Sen. Everett Dirksen
Wise men make proverbs, but fools repeat them.
- Samuel Palmer
In the End, we will remember not the words of our enemies,
but the silence of our friends.
- Martin Luther King Jr.
In the end, everything is a gag.
- Charlie Chaplin


--- layout: default title: Sorry class: sorry skin: dark nav: false description: I'm sorry, but... ---
Sorry dude, but you're using an outdated browser.
Please, update or download another browser.


@@include('../partials/head/head.html')
Sign
in
Your login or email
Your password
Login
Remember me
Forgot Password?
@@include('../partials/scripts/common.html')


Notebooks
Story: Ssauken (a game)
Ssauken (a game)
Title
Ssauken (a game)
Collection
Summary
Ssauken. A game played among the Bushmen, in which both sexes appear to take part. By /han≠kass’o (L VIII.-26. 8335-8350). It seems to resemble a dance in the people's movements.
Comments
1) Date on p.8343: 26 March, 2) p.8336v: the korhaan malkop's cry resembles a roar, 3) This story is found in Book VIII-26
Contributors
|han≠kass'o (Klein Jantje) (VIII)
Date
25 March 1879 (started on or about)
Categories
Keywords
ssauken (a game) , ssauken (women clap their hands during) , ssauken (the people pass in between each other during) , ssauken (men hum during) , ssauken ('piercing' it) , ssauken (women sing in) , ssauken (what the men and women do) , ssauken (the positions of men and women in) , ssauken (a description of) , ssauken (played by men and women) , ssauken (resembles a dance) , game (called ssauken) , game (a description of) , game (played by men and women) , game (resembles a dance) , singing (by women in ssauken) , humming (by men in ssauken) , name (a game called ssauken played by men and women) , dance (a game called ssauken resembles one) , women (and the ssauken game) , men (and the ssauken game)
Story Pages
8335-8350


In most application development a considerable time is spent on developing
data management at the client. Common data structures are linked lists,
tables etc. One step in the right direction is to use STL or MFS'c
to utilise already tested and proven container classes.
Still, using STL or MFC the programmer is not relieved the strain of having to choose and tailor
the utilisation of the selected container classes. Also none of the
containers will give access to data stored in some other container or provide any means of
modelling the relations between the data stored in the different containers.
Hence the program must not only have knowledge about what data is available
it must also know where it is stored. Using ODB all this overhead is
in your software project is eliminated.
Using ODB will reduce the time and hence the cost of any
software project that handles data (which most do). ODB is optimized towards
speed and memory utlisation.
Hence, ODB provides a lightweight main memory Object Oriented database with
persistent objects. Using ODB the developer uses a GUI to model the data,
(or the API, or the ODBQL) and he retrieves the data through the powerful query interface
proveded by the ODB API.
The database engine is accessed by applicaions through a simple and consistent
application programming interface, API. ODB is a light-weight
single- user main-memory object-oriented database.
ODB supports, subtyping, inheritance, complex objects and all
objects have a unique identity
hence ODB is object-oriented.
It always keeps the data in main memory, thus it is primarily intended
for applications with
moderately sized data requirements. It uses secondary storage only for
storing the
database between sessions.
It is light-weight because some of the traditional database facilities
such as locking and logging
does not exist in ODB. The reason is that it is intended to be used
as a fast and easy to
use storage and search module in any application where traditionally the
application developer
programmed the data storage, e.g. as sequential file scans etc.
It differs from other C++ based object-oriented databases
in that it is dynamic in nature. Hence your application
is linked and compiled once and the database schema
is created or changed dynamically without any
recompilation of the application.
The ODB-system consists of two parts: A graphical user interface for
creation and maintenance of the database and a C++ API for accessing the
database engine from another application.
Figure 1. System Overview
The graphical user interface faciliates creation, update and deletion of types,
properties and objects in an easy manner. The interface also supports loading,
saving and creation of ODB-databases.
The C++ API gives any application access to a set of high-level easy to use
interface methods to the database engine. The API gives the application access to the same functionality which is available in the user interface. In addition, the API also provides a powerful stream based query interface to the database.
The on-line version of ODB contains all functionality of the system,
except the persistenct i.e. it is a special shareware version.
If you use ODB and find it useful the cost is US$99.
Send an e-mail to ODB for Win 95 / NT for further
details.
An ODB-database is a collection of types with properties
and objects which are instances of types. ODB-types are instances
of the system class usertypes and ODB-objects are instances of the
object system class
Figure 2. System Class hierarchy
The types are organized in a subtype-supertype hierarchy where subtypes
inherit all properties defined or inherited to its supertype. In addition
to the inherited properties new properties can be created.
A property is a name which denotes values of objects. Properties can
denote values of the following ODB-database types:
Integer
Real
Charstring
Object reference
Collection of Integer
Collection of Real
Collection of Charstring
Collection of object reference.
ODB-objects are instances of ODB-types where all properties
defined or inherited to the type can be assigned values for the object.
Objects can be retreived by their property values. And the extent of a
type, i.e. the objects that belongs to a particular type and all subtypes to
that type, can be queried through a stream based query interface. To facilitate
fast look-up of objects indexes can be built over some or all of the
properties of a type.
The database can easily be updated or altered in the following ways:
Type creation
Property creation
Object creation
Index creation
Type deletion
Property deletion
Object deletion
Index deletion
Object modification.
Integrity constraints will be maintained by the system when types or
objects are deleted or modified. All properties and indexes are inherited
automatically to any newly created subtype of a particular type.
ODB for Win95 / NT
An Object-Oriented Database V. 0.1 Mail to
ODB for Win 95 / NT


bash & zsh Shortcuts
자주 사용하는 단축키 목록
CTRL + A
: 라인 시작으로 이동CTRL + E
: 라인 끝으로 이동CTRL + Left Arrow
: 한단어 왼쪽으로 이동ALT + B
CTRL + Right Arrow
: 한단어 오른쪽으로 이동ALT + F
CTRL + U (bash)
: 라인 시작 부터 현재 커서까지 삭제CTRL + U (zsh)
: 라인 삭제CTRL + K
: 현재 커서 위치 부터 라인 끝까지 삭제CTRL + W
: 커서 앞 단어 삭제CTRL + R
: 히스토리 검색CTRL + G
: 히스토리 검색 빠져나오기CTRL + +
: 콘솔 폰트 키우기CTRL + -
: 콘솔 폰트 줄이기
zsh
사용시 bindkey
명령어를 이용하여 단축키 목록을 볼 수 있다.
 expand-history
"^[\"" quote-region
"^[\$" spell-word
"^['" quote-line
"^[-" neg-argument
"^[." insert-last-word
"^[0" digit-argument
"^[1" digit-argument
"^[2" digit-argument
"^[3" digit-argument
"^[4" digit-argument
"^[5" digit-argument
"^[6" digit-argument
"^[7" digit-argument
"^[8" digit-argument
"^[9" digit-argument
"^[<" beginning-of-buffer-or-history
"^[>" end-of-buffer-or-history
"^[?"  backward-kill-word
"^_" undo
" " magic-space
"!"-"~" self-insert
"^?" backward-delete-char
"\M-^@"-"\M-^?" self-insert


{%extends "base.html"%} {%block title%} Admin/Users {%endblock%} {%block body%} {%include 'messages.html' %} Admin Read or update user information {%endblock%}


Nehemiah 6:5
Then sent Sanballat his servant unto me in like manner the fifth time with an open letter in his hand;


PyTest-VW
- Makes failing test cases succeed in CI.
TrumpScript
- Make Python great again.
Outcognito Mode
- Incognito Mode for extroverts.


{% extends 'base.html' %} {% block content %}
{{ about.description }}
{{ service.description }}
Do you want to speak with me or want to schedule a meeting?
+1<PHONE_NUMBER>


All calls to functions that are written in a language other than the current "version 1" interface for compiled languages (this includes functions in user-defined procedural languages, functions written in SQL, and functions using the version 0 compiled language interface) go through a call handler function for the specific language. It is the responsibility of the call handler to execute the function in a meaningful way, such as by interpreting the supplied source text. This chapter outlines how a new procedural language's call handler can be written.
The call handler for a procedural language is a "normal" function that must be written in a compiled language such as C, using the version-1 interface, and registered with PostgreSQL as taking no arguments and returning the type language_handler. This special pseudotype identifies the function as a call handler and prevents it from being called directly in SQL commands. For more details on C language calling conventions and dynamic loading, see Section 35.9.
The call handler is called in the same way as any other function: It receives a pointer to a FunctionCallInfoData struct containing argument values and information about the called function, and it is expected to return a Datum result (and possibly set the isnull field of the FunctionCallInfoData structure, if it wishes to return an SQL null result). The difference between a call handler and an ordinary callee function is that the flinfo->fn_oid field of the FunctionCallInfoData structure will contain the OID of the actual function to be called, not of the call handler itself. The call handler must use this field to determine which function to execute. Also, the passed argument list has been set up according to the declaration of the target function, not of the call handler.
It's up to the call handler to fetch the entry of the function from the
pg_proc
system catalog and to analyze the argument
and return types of the called function. The AS clause from the
CREATE FUNCTION command for the function will be found
in the prosrc column of the
pg_proc
row. This is commonly source
text in the procedural language, but in theory it could be something else,
such as a path name to a file, or anything else that tells the call handler
what to do in detail.
Often, the same function is called many times per SQL statement. A call handler can avoid repeated lookups of information about the called function by using the flinfo->fn_extra field. This will initially be NULL, but can be set by the call handler to point at information about the called function. On subsequent calls, if flinfo->fn_extra is already non-NULL then it can be used and the information lookup step skipped. The call handler must make sure that flinfo->fn_extra is made to point at memory that will live at least until the end of the current query, since an FmgrInfo data structure could be kept that long. One way to do this is to allocate the extra data in the memory context specified by flinfo->fn_mcxt; such data will normally have the same lifespan as the FmgrInfo itself. But the handler could also choose to use a longer-lived memory context so that it can cache function definition information across queries.
When a procedural-language function is invoked as a trigger, no arguments are passed in the usual way, but the FunctionCallInfoData's context field points at a TriggerData structure, rather than being NULL as it is in a plain function call. A language handler should provide mechanisms for procedural-language functions to get at the trigger information.
This is a template for a procedural-language handler written in C:
#include "postgres.h" #include "executor/spi.h" #include "commands/trigger.h" #include "fmgr.h" #include "access/heapam.h" #include "utils/syscache.h" #include "catalog/pg_proc.h" #include "catalog/pg_type.h" #ifdef PG_MODULE_MAGIC PG_MODULE_MAGIC; #endif PG_FUNCTION_INFO_V1(plsample_call_handler); Datum plsample_call_handler(PG_FUNCTION_ARGS) { Datum retval; if (CALLED_AS_TRIGGER(fcinfo)) { /* * Called as a trigger procedure */ TriggerData *trigdata = (TriggerData *) fcinfo->context; retval = ... } else { /* * Called as a function */ retval = ... } return retval; }
Only a few thousand lines of code have to be added instead of the dots to complete the call handler.
After having compiled the handler function into a loadable module (see Section 35.9.6), the following commands then register the sample procedural language:
CREATE FUNCTION plsample_call_handler() RETURNS language_handler AS 'filename' LANGUAGE C; CREATE LANGUAGE plsample HANDLER plsample_call_handler;
Although providing a call handler is sufficient to create a minimal procedural language, there are two other functions that can optionally be provided to make the language more convenient to use.  A validator can be provided to allow language-specific checking to be done during CREATE FUNCTION. An inline handler can be provided to allow the language to support anonymous code blocks executed via the DO command.
If a validator is provided by a procedural language, it
must be declared as a function taking a single parameter of type
oid. The validator's result is ignored, so it is customarily
declared to return void. The validator will be called at
the end of a CREATE FUNCTION command that has created
or updated a function written in the procedural language.
The passed-in OID is the OID of the function's pg_proc
row. The validator must fetch this row in the usual way, and do
whatever checking is appropriate. Typical checks include verifying
that the function's argument and result types are supported by the
language, and that the function's body is syntactically correct
in the language. If the validator finds the function to be okay,
it should just return. If it finds an error, it should report that
via the normal ereport()
error reporting mechanism.
Throwing an error will force a transaction rollback and thus prevent
the incorrect function definition from being committed.
Validator functions should typically honor the check_function_bodies parameter: if it is turned off then any expensive or context-sensitive checking should be skipped. In particular, this parameter is turned off by pg_dump so that it can load procedural language functions without worrying about possible dependencies of the function bodies on other database objects. (Because of this requirement, the call handler should avoid assuming that the validator has fully checked the function. The point of having a validator is not to let the call handler omit checks, but to notify the user immediately if there are obvious errors in a CREATE FUNCTION command.)
If an inline handler is provided by a procedural language, it must be declared as a function taking a single parameter of type internal. The inline handler's result is ignored, so it is customarily declared to return void. The inline handler will be called when a DO statement is executed specifying the procedural language. The parameter actually passed is a pointer to an InlineCodeBlock struct, which contains information about the DO statement's parameters, in particular the text of the anonymous code block to be executed. The inline handler should execute this code and return.
The procedural languages included in the standard distribution are good references when trying to write your own language handler. Look into the src/pl subdirectory of the source tree. The CREATE LANGUAGE reference page also has some useful details.


| Timer |
Today |
Actions |
{% for timer in cat.unarchived_timers %}
|
{% include 'timers/modals.html' with timer=timer %}
{{ timer.name }}
|
{{ timer.today|format_timedelta }}
|
|
{% empty %}
|
You haven't created any timers in this category.
|
{% endfor %}
{% with n_archived=cat.archived_timers.count %}
{% if n_archived > 0 %}
|
{% include 'categories/archived_timers_modal.html' with cat=cat %}
Not showing
{{ n_archived }} archived timer{{ n_archived|pluralize }}.
|
{% endif %}
{% endwith %}
|
|
{% if cat.category_set.all %}
{# Avoid run-away recursion problem by using "with" for the template name #}
{% with template_name='timers/listing.html' %}
{% for subcat in cat.category_set.all %}
{% include template_name with cat=subcat %}
{% endfor %}
{% endwith %}
{% endif %}


This is Words and Buttons Online — a collection of interactive #tutorials, #demos, and #quizzes about #mathematics, #algorithms and #programming.
This is the Game of Life in APL.
life←{↑1 ⍵∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂⍵} |
I know, I know. I should have started with the introduction. But doesn’t it introduce itself rather well? You can see for yourself that it’s ultimately concise, expressive and utterly alien to all the mainstream computer languages.
In fact, it didn’t originate as a computer language at all. It was proposed as a better notation for tensor algebra by Harvard mathematician Kenneth E. Iverson. It was meant to be written by hand on a blackboard to transfer mathematic ideas from one person to another.
But due to its formality, it turned up to be surprisingly good to transfer ideas from people to computers as well. It was made into a computer language in the early 60's, and these weird symbols like ↑ or ⌽ were not a problem at all, because every hardware manufacturer had its own keyboard at the time anyway. ASCII wasn’t yet even ratified.
Its popularity grew through the following years peaking in the 70's. Fun fact, the very first portable computer by IBM — IBM 5100 “a 50-lb package of interactive personal computing” — came 6 years before the famous IBM PC and with APL on board.
By Marcin Wichary from San Francisco, U.S.A.
([1]Uploaded by Partyzan_XXI) [CC BY 2.0], via Wikimedia Commons
The secret of APL’s popularity was simple: learning all the alien symbols is a one-time investment, and expressiveness — the leverage you as a programmer gain — is for life.
However, later on, with the rise of BASIC based personal computing and C powered UNIX platform, APL came off the scene. It is still used in some niches, such as in financial sector, so there are people who actually make good money using APL up to this day. But it is, of course, as far from the mainstream as it can get.
Still, it's a nice and powerful language. And it's simple too. You might not believe it, but it’s one of the simplest languages in existence. Here, let me show you how the Game of Life works.
By Kieff [GFDL or CC-BY-SA-3.0], from Wikimedia Commons
The left arrow is an assignment, and the brackets mark a function's body. So this: life←{...} is simply a function definition.
In APL function's arguments are tacit, meaning you don’t have to specify a name for every argument, you just know by convention, that the left argument is always ⍺ and the right is always ⍵. But doesn’t it mean that APL functions take only two arguments at most? Not really. When you want to call C-like function like this: foo(x, y, z), in APL terms you simply pass a tuple of 3 values as a single argument. It’s still one ⍵. And you can't do (a, b, c)foo(x, y, z) in C at all, so APL is actually more powerful than C in this regard.
Let’s run our life with some input. We’ll use a ⍴ function to form a 5x5 matrix out of a linear array.
1. Form the in variable as a 5x5 matrix in ← 5 5 ⍴ 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 |
In the Game of Life this figure is called Glider. Running the life function on in will result in this:
1. Show the in variable in 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 |
The Glider moves!
In APL what we would normally call operators are functions too. Things like +, -, × etc. The functions are executed from right to left one at the time. There is no precedence, all the functions are equal.
The first function of the life's body would be enclose: ⊂. What it does — it makes our 5x5 matrix input into a scalar containing 5x5 matrix.
1. Show the in variable in 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 |
The next thing, as we're going right to left, is a bit trickier. It is rotate: ⌽. It rotates an array at given index.
1. Rotate an array 1 position left 1 ⌽ 1 2 3 4 2 3 4 1 |
But in our example, it doesn’t go by itself. It is itself an argument for an outer product operator: ∘. (in APL functions that take other functions as arguments are called operators).
And together they do this:
1. Enclose the in variable ⊂ in ┌─────────┐ │0 0 0 0 0│ │0 0 1 0 0│ │0 0 0 1 0│ │0 1 1 1 0│ │0 0 0 0 0│ └─────────┘ |
The next function also goes with an operator. It’s rotate first: ⊖. It works pretty much like rotate, but it rotates a nested array around the first level of “nestedness”. Basically, it scrolls matrices.
1. Just show the in in 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 |
With the outer product operator and our previous result it goes like this:
1. Enclose the in variable ⊂ in ┌─────────┐ │0 0 0 0 0│ │0 0 1 0 0│ │0 0 0 1 0│ │0 1 1 1 0│ │0 0 0 0 0│ └─────────┘ |
The next function in called ravel: , and it looks like a comma. What it does, it makes a nested array 1-dimensional.
1. Form the x variable as a 2x3 matrix x ← 2 3 ⍴ 1 2 3 4 5 6 |
It doesn’t ravel scalars, so being applied to our 3x3 matrix of enclosed matrices, it would make a linear array of 9 enclosed matrices.
,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂in ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 1 0│0 0 1 0 0│0 1 0 0 0│ │0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 1 0│0 0 1 0 0│0 1 0 0 0│0 0 0 0 1│0 0 0 1 0│0 0 1 0 0│ │0 0 0 1 0│0 0 1 0 0│0 1 0 0 0│0 0 0 0 1│0 0 0 1 0│0 0 1 0 0│0 0 1 1 1│0 1 1 1 0│1 1 1 0 0│ │0 0 0 0 1│0 0 0 1 0│0 0 1 0 0│0 0 1 1 1│0 1 1 1 0│1 1 1 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│ │0 0 1 1 1│0 1 1 1 0│1 1 1 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│0 0 0 0 0│ └─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ |
The next piece of code is an operator and function pair. Operator reduce: /, and a function plus: +. As you might guess, it reduces, as in map-reduce, a summation of all the matrices in the linear array.
+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂in ┌─────────┐ │0 1 1 1 0│ │0 1 2 2 1│ │1 3 5 4 2│ │1 2 4 3 2│ │1 2 3 2 1│ └─────────┘ |
Operator compare: = produces matrices of 0 and 1 based on whether every element in the right argument equals a corresponding element in the left argument. In our case we would use it to filter out 3s and 4s:
1. Sum all the rotated matrices +/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂in ┌─────────┐ │0 1 1 1 0│ │0 1 2 2 1│ │1 3 5 4 2│ │1 2 4 3 2│ │1 2 3 2 1│ └─────────┘ |
Then there is the logical part. Functions or: ∨ and and: ∧ used with the . — the inner product operator. They form an operator that makes an and on every element pair and then an or on a result.
1. And function 1 0 1 0 ∧ 1 1 0 0 1 0 0 0 |
Remember, we didn't count the neighbors exactly, we counted them along with the value in each cell. This was the 0 0 rotation. Now we have to build our logic around this.
That's why when we want our and to work with 3s unconditionally, we supply it with identity matrix 1. And when we want to and 4s with the original input, we supply it with in. Then we only have to or the results so any condition produces a living cell. That's how 1 in ∨.∧ 3 4... works.
1 in ∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂in ┌─────────┐ ⍝ Identity Original in │0 0 0 0 0│ ⍝ 1 1 1 1 1 0 0 0 0 0 │0 0 0 0 0│ ⍝ 1 1 1 1 1 0 0 1 0 0 │0 1 0 1 0│ ⍝ 1 1 1 1 1 0 0 0 1 0 │0 0 1 1 0│ ⍝ 1 1 1 1 1 0 1 1 1 0 │0 0 1 0 0│ ⍝ 1 1 1 1 1 0 0 0 0 0 └─────────┘ |
The last function mix ↑ here simply removes enclosure.
1. Enclosed 1 in ∨.∧3 4=+/,¯1 0 1∘.⊖¯1 0 1∘.⌽⊂in ┌─────────┐ │0 0 0 0 0│ │0 0 0 0 0│ │0 1 0 1 0│ │0 0 1 1 0│ │0 0 1 0 0│ └─────────┘ |
Not so alien now, is it?
By Nash Gordon [CC BY-SA 4.0], from Wikimedia Commons
If you got interested but not enough to get things installed, you can try an online APL interpreter: https://tryapl.org/.
The last decade was a renaissance for the Lisp being reborn in Clojure. Also Erlang, being a niche language for telecom, decided to waltz into the mainstream with a plethora of web frameworks. Even Haskell not only gained popularity on its own but deeply influenced F# and Scala. APL however, despite its tremendous power, didn't get too much acclaim.
My theory is, since it was designed to be written by hand, it didn't work out very well with an ASCII. Didn't survive the standardization. Of course, APL has its ASCII friendly descendants inherited its expressiveness but frankly, they are all ugly far beyond the possibility of public success. Roughly 86% of all the fun you get from APL programming comes from the mysterious symbols and the magic behind them. It’s not that APL is alien to computers, it’s just the computers were alien to APL for quite a while.
But now, with the development of touch interfaces and optical character recognition, it might just get its second chance. Since on a tablet or on a phone you do have to use a virtual keyboard anyway, why not choose APL for its tablet-friendly concision? Or you could even draw APL symbols with your fingers. Not being constrained with the keyboard, you could name your own functions with hand-written symbols as well. You could develop your own truly free-form language just like Iverson did.
I would love that! Wouldn't you?
| Index #programming #tutorials | ← there's more. |
+
So You Think You Know C (free book) + Geometry for Programmers (paid book) + Github & RSS |


Journal of Neuroscience: 2019-06-19 Vol.39 Issue 25¶
Contents¶
- This Week in The Journal
- []
- Journal Club
- []
- Research Articles
- Cellular/Molecular
- []
- Development/Plasticity/Repair
- []
- Systems/Circuits
- []
- Behavioral/Cognitive
- []
- Neurobiology of Disease
- []
- Cellular/Molecular


BTS drop acoustic remix of 'Make it Right' feat. Lauv
by germainejBTS have dropped the acoustic remix of their song "Make it Right" featuring Lauv.
"Make it Right" was originally released as a track on BTS's 'Map of the Soul: Persona' album, and it was recently remixed in a collaboration with American singer-songwriter Lauv. The above video gives an acoustic take on the remix with Lauv.
Listen to BTS's remix above, and let us know what you think in the comments below.


Tap or move your finger in this section to move the image.
Move the slider to change the scale of the image
Current scale: 1
Click an image to select it.


Kongou
Menu
New Email
Send Email
Email Composer
Email Subject:
Mail To:
@
Carbon Copy
CC To:
@
@
@
Email Body


I am adding the P tag back in for my second attempt at finishing this lab. 4.3.2020 4.4.2020 I added the link section to link to the css file.