How to define a network?¶
A formal definition of a network¶
Networks are just Graphs in Graph Theory.
Graphs are comprised of two sets of objects:
A node set: the “entities” in a graph.
An edge set: the “connections” between the entities in the graph.
Usually, we denote a graph as:
\(V\) is the set of vertices and \(E\) is the set of edges. Each edge \(e\) in \(E\) can be represented as \(e_{ij}=(v_i, v_j)\), where \(v_i\) and \(v_j\) must be included in \(V\).
Type of edges and graphs¶
Edges might have intensity: A tweet can be retweeted 10 times or 10000 times. If we want to distinguish this difference, we have to assign weights to the edges. Graphs with weighted edges are weighted graphs.
Edges might have directions: A person might have 10 friends but 10000 followers. Friends mean the person actively follows the other 10 accounts while his/her 10000 followers actively follow him/her. If we want to distinguish the difference, we have to separate the edges directing differently. Graphs with directed edges are directed graphs.
Types of nodes and graphs¶
Nodes can be of different kinds
Nodes can be grouped into different types and the interactions occur between the groups of nodes. Networks with multiple kinds of nodes are called multi-modal networks. The most common one is the bimodal networks, a.k.a., bipartite.
Application of networks¶
This formal definition tells you the basics of every network. When you apply any network analysis techniques to your project, the first thing is to define what’s in your network:
What does a vertex/node mean in your network?
humans, tweets, posts, airports, cells, etc.
What does a connection/edge mean in your network?
befriending, reposting, replying, citing, flying, interacting, etc.
For me, constructing a network is like making up an English sentence where nodes are subjects or objects and edges are the predicates.
Next, you should consider what node/edge attributes are in your defined network, and should these attributes matter to your research?
Should I use weighted edges — if so, how?
What metrics should be used to represent weights?
What are the implications of using the metrics?
Should I use directed edges — if so, how?
Can I think of a property in this graph that represents a solution to my problem? If not:
Can I add properties to the nodes or edges that get me closer?
Can I redefine the nodes or edges?


--- title: "Blog (sorted by tags)" permalink: /tags/ layout: tags author_profile: true ---
Sort by categories or years


What Kind of NERD Are You?
Which CMSC389N Editor Are YOU?


--- layout: default ---
Since 2013 I've been speaking at Ruby conferences, and loving it. Getting up in front a bunch of people who love technology and talking about cool things I've discovered is way more fun than I'd ever have imagined.
And even better, these days the most of my talks are available for anyone who couldn't make the conf. I hope you find something of value in these videos!
Slides for all my presentations, even those that weren't videoed, are available on Speakerdeck.


These features are only available to Red Hat users and have no guarantee of performance or stability. Use these at your own risk.
These features are currently in beta testing and have no guarantee of performance or stability. Use these at your own risk.
These features are currently in beta testing and have no guarantee of performance or stability. Use these at your own risk.
This feature has been disabled by your admin page.


NUnitLite tests may be written using any .NET language that supports attributes.
are used to indicate test classes and methods and to modify their behavior in various ways.
test an actual value against one or more and result in either a successful test or a failure.
User code may acquire information about the test and it's environment by use of the .


--- layout: post title: How to make your computer a CCTV camera with motion detection capability date: 2012-06-18 06:15:12.000000000 +08:00 permalink: how-to-make-your-computer-a-cctv-camera-with-motion-detection-capability/ categories: - android - apple - privacy - social networking - windows tags: - camera - cctv - detection - motion - security - spy - surveillance - webcam status: publish type: post published: true meta: _edit_last: '2' fb_author_message: '' fb_fan_page_message: '' fb_mentioned_friends_post_ids: a:0:{} fb_mentioned_pages_post_ids: a:0:{} _wpas_skip_1611607: '1' _wpas_skip_2452381: '1' _wpas_skip_2203490: '1' _wpas_skip_2452385: '1' _wpas_skip_2452386: '1' dsq_thread_id: '2956174273' ---
You might be amazed of cctv cameras used in secured places, train stations and etc.
Today, I will teach you how to setup one in your own home, with the gadgets you already have and without buying those expensive gadgets we see in full blown surveillance camera.
You can use this tips to:
To start with, let us enumerate what you will need:
So first, download the iCam software here
install it in your computer
it should display a lens icon and should be setup to auto-start when you boot your computer . Also, make sure you have Dropbox installed both in your mobile phone and pc
Now click the iCam icon. you should see something like this
In the camera tab, set a username and password to the bottom of the dialog
make sure also that the Auto-Start checkbox is checked
That image in that camera tab is the one that will be recorded once you set-up the system, so make sure to put the camera in a viewpoint that you are interested in monitoring with .
So the camera is now setup in your pc, now you need to setup your phone, so that you can access via your phone the video that your pc is seeing.
Depending on your phone (Android or iOS). Download the iCam app and install it in your mobile phone
Start the application in your phone and enter the username/password you entered in your pc earlier
Right now, I'm viewing my pc camera via my phone (you can have up to 4 camera setup)
Now, the issue is, depending on the cellphone signal, the video might be choppy.And, you dont want to stare at your camera when there is nothing to watch - no one is moving
So here we go, we will set it up, so that the camera is only active when there is "motion" detected by your camera.
Now, click the Motion Detection tab
you will see the camera with crossed-lines
each square in the image means an area that can be separately monitored for motions
right now, the iCam software was already detecting any motions seens by your camera, and a snapshot of that image is stored in your hard-disk
the trick is here -- to have your mobile phone have an access to the images captured by the iCam software, make the folder location where it saves images under your dropbox folder
so that, when you want to view what is happening in your house (or any other place you have your pc/laptop camera is), all you need to do is open your dropbox app in your mobile phone
And that is that,
you have your cctv camera setup, access it via your mobile phone.
As a bonus, just in case you dont want your pc to be turned on all-day and all night just to monitor your house, you can buy a wireless ip camera and have it connected to your router
let me know if you had any problem and enjoy! :-)


Toggle navigation
Strike Search
API
Plugins
Terms of Service
Privacy Policy
Donate
Contact Us
Your feed is loading


WITNESS LIST Administration Committee May 19, 2003 - 4:00P HB 2242 Registering, but not testifying: For: Fenz, Caton (Harris County Commissioners Court), Houston, TX HB 3248 Registering, but not testifying: For: Fenz, Caton (Harris County Commissioner), Houston, TX Nachtigall, George Assistant County Attorney (Harris County Attorney), Houston, TX HB 3542 Registering, but not testifying: For: Tennyson, Susan (Texas Department of Health), Austin, TX


BS6-compliant Yamaha FZ, FZ-S launched from Rs 99,200
by Vishal VenugopalBoth bikes get a Rs 2,520 hike, with the FZ priced at Rs 99,200 and the FZ-S at Rs 1.01 lakh.
Yamaha has just launched its first BS6-compliant two-wheeler in India, with the updated FZ and FZ-S V3.0. Prices for the standard FZ start at Rs 99,200, while the FZ-S carries a base price tag of Rs 1,01,200; both bikes have received a hike of just over Rs 2,500, over their respective BS4 models. The FZ-S also gets two new colours schemes – Metallic Red and Darknight, the latter costing an additional Rs 1,500.
The BS6-complaint FZ and FZ-S will be powered by a 149cc, single-cylinder engine, just like on the outgoing model. However, Yamaha has increased the compression ratio from 9.5:1 to 9.6:1, and interestingly, the updated engine produces lower power but makes more torque than the unit it is replacing. Peak power and torque stand at 12.4hp at 7,250rpm and 13.6Nm at 5,500rpm, in comparison to 13.2hp at 8,000rpm and 12.8Nm at 6,000rpm on the previous model. As you can see, peak torque also comes in at a lower point in the rev range.
The rest of the bike remains largely unchanged and features like the front and rear disc brake with single-channel ABS and instrument cluster have been carried over from the outgoing FZ. Yamaha has also revealed that it will be launching the rest of its BS6-compliant line-up in the near future.
Also see:


About
This initiative seeks to build on the blossoming national and international interest in William Colenso’s life and ideas as the result of the William Colenso Bicentenary Celebrations in Hawke’s Bay in 2011, and a body of new publications and research.
Explore
Browse, explore, and work with a database of historical New Zealand documents - primarily letters
Contribute
Contribute to this initiative by adding your documents


We got blockchain!
- productize interactive metrics
- unleash revolutionary networks
- target enterprise bandwidth
- streamline revolutionary networks
- visualize transparent eyeballs
- incubate bleeding-edge functionalities
- target compelling supply-chains
- synergize 24/7 experiences
- cultivate dynamic initiatives
- target intuitive synergies
- enhance user-centric metrics
- matrix compelling e-services
- iterate magnetic infrastructures
- drive synergistic models


With MySpace, sharing is easy.
Invite others to view your files and edit them. Or keep your files private.
50GB Free
At MySpace, we understand your requirements. Enjoy 50GB free space for all your needs. You may also upgrade to a larger storage plan.
Store any file.
PDF's, documents,presentations, photos, videos. No matter what type of file, we've got you covered.
Security
File security is our prime concern. Your files are protected by our copywrited security protocol and only you have access to them.
Work Offline
Your files are also available offline so that they are accessible even in case of no connectivity.


The aim of the game is to fill all the target blocks (green outline), using all the number blocks (filled green)
You're the red block. Move around using , , , on your keyboard. You can push the number blocks (filled green), but cannot walk through or push any other type of block.
There are also math blocks, in the purply grey. These let you combine two number blocks by applying the operation indicated on the block. Push two number blocks onto a maths block to see it in action.
Remember, you only win when all target blocks are filled, and all number blocks are used!


OpenStreetCam is a free and open platform for street level imagery. Anyone can contribute images with a smartphone and our open source apps. OSC will detect salient features from the uploaded images such as signs, lanes and road curvature to improve OpenStreetMap.


What are the parties offering business?
The parties’ business proposals are the focus of the day with leaders addressing the CBI Conference.
Business is the topic of the day with Boris Johnson, Jeremy Corbyn and Jo Swinson attending the CBI Conference in an attempt to win over City leaders with their proposals.
Mr Johnson has promised to end Brexit “uncertainty and confusion” while Mr Corbyn unveiled Labour’s plans for 320,000 apprenticeships in England.
The Liberal Democrats say that, as the party of Remain, they are the “party of business”.
Here is what the parties plan to do if they win the General Election:
– What are the Conservatives proposing?
Mr Johnson has said planned cuts to corporation tax next April will be put on hold if the Conservatives get back into power, with the money instead to be spent on the NHS.
Corporation tax, the rate paid by firms on their profits, was due to fall from 19% to 17% in 2020.
The Prime Minister said the move would have cost the Government about £6 billion a year.
Mr Johnson also said he plans to cut National Insurance contributions for employers, who already benefit from a reduction known as the employment allowance.
The party said its plans to increase the employment allowance from £3,000 to £4,000 will provide a cut in National Insurance of up to £1,000 for more than half a million businesses.
Mr Johnson has also promised to increase the Research and Development tax credit rate from 12% to 13%, which the Tories say will boost manufacturing along with the scientific, technical and professional service sectors.
– What is the Labour Party’s plan?
Mr Corbyn has promised to create a climate apprenticeship programme which will train an average of 80,000 people per year.
Under the plans, Labour said it would deliver 320,000 apprenticeships in England during its first term in government, with 886,000 apprenticeships being created through the scheme by 2030.
Labour said the programme will be funded by diverting 25% of the funds employers already set aside through the Apprenticeship Levy, and topped up by any dividends over the cap paid into Labour’s Inclusive Ownership Funds, which the party said is expected to be £700 million by 2024.
Labour also plans to reform the Apprenticeship Levy to better meet the needs of workers and employers, and to also tackle the climate emergency.
– What do the Liberal Democrats say?
The Lib Dems say they are the “natural party of business” by campaigning to remain within the EU.
The party’s economic spokesman Sir Ed Davey has said staying in the EU would create a “£50 billion Remain bonus”, which would allow more money to be invested in schools and policies to tackle inequality.
Ms Swinson has criticised both the Conservatives and Labour’s plans to spend large sums on big infrastructure projects.
– What do businesses think of the parties’ policies?
Responding to Mr Johnson’s speech, Dame Carolyn Fairbairn, Director General of the CBI, the UK’s largest business lobby group, said business welcomes the Prime Minister’s increased investment in education, infrastructure and technology.
However, she warned that his words must become “firm commitments” in the Conservatives’ manifesto.
In response to Labour’s plans, Dame Carolyn showed support for the party’s proposal of greater flexibility on the Apprenticeship Levy and plans for vocational training for school leavers and those switching careers.
However, she raised concerns that “false instincts for mass nationalisations and forcing inclusive ownership schemes onto thriving businesses does little more than frighten off investors from backing the UK”.
– What was the reaction to plans to postpone corporation tax cuts?
In his speech at the CBI Conference, Mr Johnson said the Government would postpone cuts to corporation tax to pay for a £6 billion investment in public services.
Shadow chancellor John McDonnell said Mr Johnson’s plans to pause cuts to corporation tax “cannot compensate for the lives that have been lost and will not repair the damage done to our communities to pay for the Conservatives’ handouts to big business since 2010”.
John O’Connell, chief executive of the TaxPayers’ Alliance, said it is “disappointing” to see a slowdown to cuts in corporation tax.
He added that in order to boost the economy, pay for first-class public services and put more money into the pockets of taxpayers, the parties should be “committing to cutting the tax burden immediately”.
-What do businesses want?
Dame Carolyn said that whichever party wins the General Election must prioritise working with business to provide “bolder, better and fairer” answers to the challenges facing the UK.
Ms Fairbairn has also accused politicians of ignoring the interests of businesses in recent times.
In the business group’s manifesto for political parties, which outlines the steps the next government should take to help businesses, the CBI calls for business rates to be reformed, the “broken” Apprenticeship Levy to be fixed, and for vital infrastructure projects like HS2 and the Heathrow expansion to be completed.
The CBI has also called for a new immigration system which provides access to labour and skills, focuses on contribution, not numbers, and gives business time to adapt.


|
|
Boys of Fall Newsletter
New Release!
The long-awaited release from Boys of Fall is finally here! Be sure to save Better Moments on all major streaming platforms, or head to the inVogue Records website to purchase a hard copy!
|
Official Video for Heartbreaker out now!!
Boys of Fall have released a music video for their single, Heartbreaker.  Grab your tickets here.
-
April 1 - Albany, NY @ The Low Beat
-
April 5 - Manchester, NH @ Bungalow Bar & Grill
-
April 6 - Brooklyn, NY @ Kingsland Bar & Grill
-
April 7 - Amityville, NY @ Revolution Bar & Music Club
-
April 9 - Philadelphia, PA @ Trocadero Balcony
-
April 10 - Columbus, OH @ Donatos Basement
-
April 11 - Lakewood, OH @ Mahall's Locker Room
-
April 12 - Madison, WI @ The Annex
-
April 13 - Chicago, IL @ Cobra Lounge
-
April 14 - Indianapolis, IN @ Irving Theater
|
Follow Boys of Fall
|


Title: ASP.NET Common Web Page Class Library - Part 1
Author: Eric Woodruff
Email<EMAIL_ADDRESS>Environment: Visual Studio .NET, IIS, ASP.NET, C#, VB.NET
Keywords: page, template, focus, detect, change, error, enable, disable, authentication
Level: Intermediate
Description: A set of common, reusable page classes for ASP.NET applications
Section ASP.NET
SubSection General
Table of Contents
The BasePage Class
The RenderedPage Class
Conclusion
Revision History
Introduction
This is the first in a series of articles on a class library for
ASP.NET applications that I have developed. It contains a set of common,
reusable page classes that can be utilized in web applications as-is to
provide a consistent look, feel, and set of features. New classes can also
be derived from them to extend their capabilities. The features are all
fairly modular, and may be extracted and placed into your own classes too.
The classes in the assembly include:
BasePage
- Described in this article, continued in
Part 2 [^]
which covers the data change checking features of the class, and in
Part 3 [^]
which covers the features that allow it to e-mail its rendered content.
RenderedPage
, MenuPage
, and
VerticalMenuPage
- Described in this article. These provide a
way for .NET 1.1 applications to create pages that automatically render all
the common header and footer HTML tags.
PageUtils
- A utility class for the library described in
Part 4 [^].
This also covers a few methods found in the BasePage
class
related to converting validation messages into clickable links.
The downloads contains a small demo application in C# and VB.NET that
makes use of the classes. To try out the demo applications, create two
virtual directories in IIS and point them at the two demo folders:
- Use \DotNet\Web\EWSWeb\EWSWebDemoCS with a virtual directory
name of EWSWebDemoCS11 and \DotNet\Web\EWSWeb\EWSWebDemoVB
with a virtual directory name of EWSWebDemoVB11 for the .NET 1.1
version.
- Use \DotNet20\Web\EWSWeb\EWSWebDemoCS with a virtual
directory name of EWSWebDemoCS20 and
\DotNet20\Web\EWSWeb\EWSWebDemoVB with a virtual directory name of
EWSWebDemoVB20 for the .NET 2.0 version.
The startup page in each application is Default.aspx. The demo
projects are set up to compile and run on a development machine that has
Visual Studio .NET and IIS running on it. If you are using a remote server,
you will need to set up the virtual directories, build the projects, and
copy them to the server location. When opening the pages in design view the
very first time, you may get an error stating that they cannot be viewed.
If this occurs, rebuild the projects so that the assembly containing the
base classes exists.
For the e-mail part of the demo, you will need the SMTP service on the
web server or access to a separate SMTP server. The error page demos use an
e-mail address stored in the Web.config file that is currently set
to a dummy address. You should modify the address specified by the
ErrorRptEMail
key in the appSettings
section to
make it valid. The e-mail page feature can also use an optional configuration
option to control the name of the SMTP server
(EMailPage_SmtpServer
).
Embedded Resources
The library contains some client-side script files. Rather than
distributing and installing them separately, they are embedded in the
assembly as resources that are extracted and returned to the client browser
at runtime. For more information on how this is implemented, see the
included help file and the following Code Project article: A Resource Server
Handler Class For Custom Controls [^].
For the .NET 1.1 version, the embedded resources require that an HTTP
handler entry be added to the Web.config file. This is a simple
procedure and requires nothing more than copying and pasting a definition
from the demo into your own project's Web.config file. Refer to the
supplied help file and the article noted above, for more information. .NET
2.0 provides a built-in method of serving embedded resources so this step is
not necessary for applications using the .NET 2.0 version of the assembly.
Script Compression
The scripts are also compressed during the build step for the project
using the JavaScript compressor described in the article A JavaScript
Compression Tool for Web Applications [^]. This reduces the size of the scripts by removing
comments and extraneous whitespace so that they take up less space. If
you'd prefer to not use script compression, you can remove it from the
pre-build step by opening the project, right click the project name in the
Solution Explorer, select Properties, expand the Common
Properties folder, and select the Build Events sub-item. Click
in the Pre-build Event Command Line option and delete the command
line that you see there. Copy the scripts from the ScriptsDev folder
to the Scripts folder to replace the existing compressed versions
distributed with the library. The ScriptsDev folder can be deleted
from the project if not using the compressor.
Using the Assembly in Your Projects
The BasePage
class and the others in the library are
included in the sample project. They are compiled into an assembly that you
can reference in your own projects. The sections below describe each of the
main features of the class and the methods and properties that are used to
implement them. If you are already using a custom page class in your
applications, you can simply extract the parts that interest you for
inclusion in your own projects.
An HTML help file is included in the source code download that contains
more extensive documentation on the classes in the assembly. It was
generated using NDOC [^] from the XML
comments within the source code. The first page of the help file titled
Usage Notes describes how to install and use the assembly in your own
projects. Please refer to it for more information.
The code is written in C#. However, because .NET is language-neutral,
the assembly is perfectly useable as-is in projects utilizing other
languages such as VB.NET. The class documentation below presents the
properties and methods using their C# declarations. The download file
contains a C# and a VB.NET version of the demonstration application. The
help file mentioned above shows the class declarations and example code in
C# and VB.NET.
Using BasePage and Its Derived Classes In Your Own Applications
Using the page classes in your own applications is fairly
straightforward. Just follow these steps:
If you decide to make use of the RenderedPage
class, you
will also need to do the following:
- Open the new form in design view and switch to HTML view.
- Delete the
<!DOCTYPE>
tag, the
opening <html>
and closing
</html>
tags, the
<head>
section, and the opening
<body>
and closing
</body>
tags. All that should be present
in the new page are the <%@ Page>
directive, the opening <form>
tag, and the
closing </form>
tag.
No Styles In Design View
One problem when using the RenderedPage
class and those
derived from it is that you lose the style settings normally present when
you have the entire supporting header HTML in the ASPX page. A solution for
this is to temporarily add a <link>
tag to
the top of the page that references the application style sheet while you
are designing the initial layout of the page. Just be sure to remove it
when you are done designing the page.
For .NET 2.0, a better solution is to use a master page instead of
RenderedPage
. This allows you to have the same functionality
as the RenderedPage
class but with a lot more flexibility.
However, you can still derive your pages from BasePage
to gain
the extra functionality that it provides.
The BasePage Class
This article presents a class called BasePage
that is
derived from System.Web.UI.Page
. It can be used as the base
class for the pages in any ASP.NET application as well as be used to derive
new classes that contain additional features common to the pages in your
web application. The BasePage
class contains the following
useful features:
- Properties are provided to customize or alter the common header tags if
necessary (i.e. page title, description, keywords, style sheet, robot
options, additional header tags, etc). For the .NET 1.1 version, these
properties are used by the
RenderedPage
class. For the .NET
2.0 version, they are used by BasePage
as long as there is a
head
control with a runat="server"
tag.
- Properties are provided to more easily allow the insertion of user
controls and supporting structure into the page's
form
control
in classes derived from the BasePage
class.
- Methods are provided that allow you to enable and disable one or more
controls in a single call. Support is provided to allow the setting of a
CSS class to better show the disabled state.
- Server-side methods and client-side code are provided to allow you to
set the focus to any control on the page. The controls can be regular
controls on the page itself or those embedded in other controls such as
those in the
EditItemTemplate
of a DataGrid
that
may not exist until the page is rendered.
- For data entry forms, properties and client-side code are provided that
allow you to automatically track the dirty state of the form. For
Internet Explorer, the client-side code can also prompt the user to
save their changes before performing an action such as leaving the page,
closing the browser, etc. that could cause the loss of their data. This is
covered in a separate article as noted at the start of this one.
- An
AuthType
property is provided to allow you to get the
authentication method in effect for the application (Anonymous, Basic,
NTLM, or Kerberos).
- The
OnError
method is overridden to save more context
information about the cause of the error to the application cache so that
it can be passed on to a custom error page.
Enabling and Disabling Form Controls
Enabling and disabling controls is a simple matter of setting their
Enabled
property to true
of false
. However, I have found that the default visual style
of disabled controls on a web page is sometimes hard to discern from
enabled controls. As such, I added a property to allow the specification of
an alternate style that better shows the disabled state. For my own
applications, I use a CSS style that sets a silver background thus better
indicating the disabled state much like a Windows Forms application. The
methods described below make use of this property when disabling controls.
To save some typing, overloads of the methods are provided that allow you
to specify a list of two or more controls to enable or disable at once. A
method is also provided that allows you to enable or disable all controls
on the page in one call. This is a big time saver when the page contains
many controls or controls such as panels that contain nested controls.
public string DisabledCssClass
This property is used to get or set the CSS class for disabled
controls. The CSS class name should appear in the style sheet file
associated with the application. If not set or set to null, the property
will use the style name defined by the BasePage.DisabledCssName
constant. Currently this is set to the style name Disabled.
public void SetEnabledState(WebControl ctl, bool enabled)
This method is used to enable or disable a single control. If disabled
and the control is a TextBox
, DropDownList
, or
ListBox
(or ones derived from them), it sets the style class
to the one specified by the DisabledCssClass
property. When
enabling a control, this method calls the following overload with an empty
string as the normal style.
public void SetEnabledState(WebControl ctl, bool enabled, string normalClass)
This method is the same as the one above but it allows you to specify
the normal style class name for TextBox
es,
DropDownList
s, and ListBox
es. It can be used if
you have explicitly specified a style for the enabled state and need it
restored when enabling the control. Instead of clearing the style with an
empty string as in the prior method, you can use this version to replace it
with the specified style.
public void SetEnabledState(WebControl ctl, bool enabled,
string normalClass)
{
if(ctl == null)
throw new ArgumentNullException("ctl",
"The control cannot be null");
ctl.Enabled = enabled;
if(ctl is System.Web.UI.WebControls.TextBox ||
ctl is System.Web.UI.WebControls.DropDownList ||
ctl is System.Web.UI.WebControls.ListBox)
if(enabled)
ctl.CssClass = normalClass;
else
ctl.CssClass = this.DisabledCssClass;
}
public void SetEnabledState(bool enabled, params WebControl[] ctlList)
This method is used to enable or disable multiple controls in one step.
Simply pass it the state to set and a list of the controls to enable or
disable. When disabling a TextBox
, DropDownList
,
or ListBox
control (or ones derived from them), it sets the
style class to the one specified by the DisabledCssClass
property. When enabling such controls, it clears the style class. The code
is identical to the single control methods above except that it is wrapped
in a foreach
loop that iterates over the passed array
of controls.
public void SetEnabledState(string normalClass, bool enabled, params WebControl[] ctlList)
This method is the same as the one above, but it allows you to specify
the normal style class name for TextBox
es,
DropDownList
s, and ListBox
es. It can be used if
you have explicitly specified a style for the enabled state and need it
restored when enabling the controls.
public void SetEnabledAll(bool enabled, System.Web.UI.Control ctlPageForm)
This can be used to disable or enable all edit controls on a web page,
form, panel, or tab control. The method will call itself recursively if it
encounters other container controls such as Panel
s to enable
or disable controls contained within them too. Note that buttons and links
are not disabled by this method as it is quite likely that you will want
them enabled to perform an action such as exiting the page. If you do want
certain buttons disabled, you will have to make separate calls to the
methods above. Since all controls are disabled, the lack of a distinct
disabled style to distinguish them from enabled controls is not an issue,
so this method will not alter their style in any way.
public void SetEnabledAll(bool enabled, Control ctlPageForm)
{
Control form = null;
string controlType;
// If null, default to the current page
if(ctlPageForm == null)
ctlPageForm = this.PageForm;
// Yes, I could add a reference to the MS IE Web
// Controls, but I don't want this library to have a
// dependency on it so we'll just check for IE Web
// Controls by type name string instead.
controlType = ctlPageForm.ToString();
// If passed a form, panel, multi-page, or page view,
// use it directly. If passed a page, see if it
// contains a form. If so, use that form. If not, use
// the page.
if(ctlPageForm is System.Web.UI.HtmlControls.HtmlForm ||
ctlPageForm is
System.Web.UI.WebControls.ContentPlaceHolder ||
ctlPageForm is System.Web.UI.WebControls.Panel ||
ctlPageForm is System.Web.UI.WebControls.MultiView ||
ctlPageForm is System.Web.UI.WebControls.View ||
controlType.IndexOf("MultiPage") != -1 ||
controlType.IndexOf("PageView") != -1)
{
form = ctlPageForm;
}
else
if(ctlPageForm is System.Web.UI.Page &&
ctlPageForm != this.PageForm)
form = BasePage.FindPageForm((Page)ctlPageForm);
// Ignore anything unexpected
if(form == null)
return;
// Disable each edit control on the page
foreach(Control ctl in form.Controls)
if(ctl is System.Web.UI.WebControls.TextBox ||
ctl is System.Web.UI.WebControls.DropDownList ||
ctl is System.Web.UI.WebControls.ListBox ||
ctl is System.Web.UI.WebControls.CheckBox ||
ctl is System.Web.UI.WebControls.CheckBoxList ||
ctl is System.Web.UI.WebControls.RadioButton ||
ctl is System.Web.UI.WebControls.RadioButtonList)
((WebControl)ctl).Enabled = enabled;
else
{
// As above, done this way to avoid a dependency
controlType = ctl.ToString();
if(ctl is
System.Web.UI.WebControls.ContentPlaceHolder ||
ctl is System.Web.UI.WebControls.Panel ||
ctl is System.Web.UI.WebControls.MultiView ||
ctl is System.Web.UI.WebControls.View ||
controlType.IndexOf("MultiPage") != -1 ||
controlType.IndexOf("PageView") != -1)
this.SetEnabledAll(enabled, ctl); // Recursive
}
}
As seen above, this method is aware of the Microsoft Internet Explorer
Web Controls MultiPage
and PageView
, and will
also enable or disable controls contained within them. Note that there is
no dependency on that assembly due to the way the support for it has been
implemented. Instead of checking for a type and creating a dependency on
the assembly, I chose to check for them by name using a string. This keeps
the assembly independent of the IE Web Control assembly and does not force
developers to include it if they do not use it. It can also be extended to
check for other class names and controls in a similar fashion. The only
potential drawback is that it is hard coding class names as text strings.
However, I feel that this is a small price to pay to keep the assembly free
of dependencies and still provide a very useful service. For more
information about the Internet Explorer Web Controls, see the Source
Projects section of www.asp.net
[^].
Setting Control Focus
Prior to ASP.NET 2.0, I saw several requests on the newsgroups to
explain how to set the focus to a control in a web form as the .NET 1.1
web controls lack any kind of Focus
method. The lack of such
a method makes sense as setting focus is a client-side rather than a
server-side feature. Setting focus thus falls to the page class itself as
it must generate client-side script to do it. To remedy the situation,
BasePage
provides two methods to handle this task. However,
emitting a simple line of JavaScript to call the control's
focus()
method is not enough. The control to focus may be
embedded within another control such as a DataGrid
, and may
not exist at the time the server-side request to give it focus is made, and
it may not end up with the expected control ID assigned at design-time. As
such, the library contains a client-side script module that contains some
expanded abilities with regard to setting the control focus. It will be
described shortly. The following are the two class methods that can be used
to set control focus. In ASP.NET 2.0, all controls do have a
Focus
method. In addition, the Page
class
contains two SetFocus
methods similar to the two in
BasePage
. To avoid conflicts, the two in BasePage
are called SetFocusExtended
. The
SetFocusExtended
methods are available for use in .NET 1.1 to
set the focus to controls and they are available for use in the .NET 2.0
version in case you need to added capabilities that they provide.
/// <summary>
/// This sets the control that should have the focus when the
/// page has finished loading by control reference.
/// </summary>
public void SetFocusExtended(WebControl ctl)
{
if(ctl != null)
{
focusedControl = ctl.ClientID;
findControl = false;
}
else
focusedControl = null;
}
/// <summary>
/// This sets the control that should have the focus when the
/// page has finished loading by control ID.
/// </summary>
public void SetFocus(string clientID)
{
focusedControl = clientId;
findControl = true;
}
Use the first version for controls that are children of the form
control and are not embedded within other controls such as data grids
(i.e., they are normal controls that appear on the form itself). The method
gets the control's client ID and stores it in the private
focusedCtl
variable. The private findCtrl
variable is set to false
which is used to tell the
client-side code to find the control using an exact match on the ID value.
This will be explained below.
The second version is passed the control ID to give the focus as a
string
, and is useful for setting the focus to a
control embedded in some other control such as one in a data grid's edit
item template or a dynamically created control generated and added to the
form at runtime. In the case of embedded controls, the control or its
client-side ID does not always exist when you want to set focus to it, so
this allows it to be set using the design-time control ID. As before, the
focusedCtrl
variable is set to the specified control ID.
This time however, the findCtrl
variable is set to
true
which is used to tell the client-side code to
search for the control that has an ID that ends with the specified ID
value. Containers such as the DataGrid
alter the IDs of the
controls within them to keep them all unique. As such, the client-side code
must locate it by searching for the ID ending in the specified value. For
example, if you place a TextBox
in the
EditItemTemplate
and give it an ID of txtName
,
the control ID actually rendered may look something like
dgGrid:_ctl5:txtName
. The client-side code will search all
controls on the form for the one ending in txtName
and will
give it the focus.
To clear the focus, pass null
(Nothing
in VB.NET) to either method. Due to the
overloading, you will need to use a cast when doing so to let the compiler
pick one version or the other. It does not matter which. For example:
// Clear the focus
this.SetFocus((string)null);
The OnPreRender()
method is overridden to register the
script module containing the client-side focus code if one of the above
methods has been called. It generates a line of startup script that calls
the function in the code module passing the values from the two variables
noted above as parameters and registers the script with the page. You will
also see that the set focus code is rendered if the page has any
validators. This is used to support the
ConvertValMsgsToLinks()
method which is used to convert the
validator messages displayed in a ValidationSummary
control
into clickable links that can be used to take the user to the field that
generated the validation error. That method and its related code are
described in detail in another part in this series that covers the
PageUtils
class. See the table of contents at the start of
this article for a link to it.
function BP_funSetFocus(strID, bFindCtrl)
{
var nPgIdx, nIdx, nPos, ctl, ctlParent, htmlCol;
// Do we need to find the control by partial ID?
if(bFindCtrl == false)
{
ctl = document.getElementById(strID);
// Search for the control if it was found by the
// NAME attribute rather than by ID (i.e. the ID
// matched a NAME attribute on a META tag).
if(ctl != null && typeof(ctl) != "undefined" &&
(typeof(ctl.id) != "string" || ctl.id != strID))
bFindCtrl = true;
}
if(bFindCtrl == true)
{
// True name is unknown. Find the control ending
// with the specified name (i.e. it's embedded in
// a data grid).
htmlColl = document.getElementsByTagName("*");
for(nIdx = 0; nIdx < htmlColl.length; nIdx++)
{
ctl = htmlColl[nIdx];
if(typeof(ctl.id) != "undefined")
{
nPos = ctl.id.indexOf(strID);
if(nPos != -1 && ctl.id.substr(nPos) == strID)
break;
}
else
ctl = null;
}
}
// If not found, exit
if(ctl == null || typeof(ctl) == "undefined")
return false;
The client-side JavaScript function BP_funSetFocus()
is
passed the control ID to give focus and a Boolean flag indicating whether
or not it should search for the control by partial name. If the find flag
is false
, it calls
document.getElementByID()
to obtain a reference to the control
with the specified ID. If true
, it will search
all control elements on the page for one with an ID that ends with the
specified value. If a control with the specified exact or partial ID cannot
be found, the function will exit and nothing will happen. If a control is
found, the following section of code will be executed if it is running on
Internet Explorer.
// NOTE: This section is IE-specific.
// See if there is a parent element. If so, work back up the chain
// to see if the control is embedded in an PageView IE Web Control.
// If so, select that page before giving focus to the control. If
// not, it may not work as the control may not be visible.
if(typeof(ctl.parentElement) != "undefined")
{
ctlParent = ctl.parentElement;
while(ctlParent != null && ctlParent.tagName != "PageView")
ctlParent = ctlParent.parentElement;
// If found, set the page as the active one in the containing
// MultiPage control.
if(ctlParent != null && ctlParent.tagName == "PageView")
{
nPgIdx = ctlParent.PageIndex;
ctlParent = ctlParent.parentElement;
if(ctlParent != null && ctlParent.tagName == "MultiPage")
{
ctlParent.selectedIndex = nPgIdx;
// We also have to set the index of any TabStrip
// associated with the MultiPage.
htmlColl = document.getElementsByTagName("TabStrip");
for(nIdx = 0; nIdx < htmlColl.length; nIdx++)
if(htmlColl[nIdx].targetID == ctlParent.id)
{
htmlColl[nIdx].selectedIndex = nPgIdx;
break;
}
}
}
}
// End IE-specific section
As noted, the code will check for a parent element. If there is one, it
works back up the chain to find out if the control is embedded within a
PageView
Internet Explorer Web Control. If it is, it will make
sure that the correct page view and tab are selected first before giving
focus to the control. If this were not done, the code would generate an
error if the currently selected page view were not the one containing the
control to give focus. I have only been using the Internet Explorer Web
Controls to provide support for tabbed pages in my applications, so they
are the only ones of which it is aware. If you are using different tab and
page view controls, you may be able to modify the section above to detect
them and provide similar support. For more information about the Internet
Explorer Web Controls, see the Source Projects section of www.asp.net
[^].
// Focus the control. If it's a table, we may have been asked to
// set focus to a radio button or checkbox list. If so, select
// the control in the first cell of the table.
if(ctl.tagName == "TABLE")
{
ctl = ctl.cells(0);
ctl = ctl.firstChild;
}
ctl.focus();
// If it is a textbox-type control, select the text in the control
if(ctl.type == "text" || ctl.tagName == "TEXTAREA")
ctl.select();
return false;
The final section is what actually gives focus to the control that was
found in the first step. Radio button and checkbox list controls can
generate their elements within a table. When asked to set focus to such a
control on the server-side, you actually end up with a reference to the
table containing the radio buttons or checkboxes on the client. If left to
set focus to the table control, it would only work for Internet Explorer,
but it would only scroll the page to make the table visible on the screen
and you would not see a focus rectangle around the first checkbox or radio
button. In Netscape, trying to set focus to a table element just does not
work. As such, a check is first made to see if the tag name of the found
control is an HTML table. If so, the control to which the focus is actually
given is set to the first child of the first cell in the table. Doing this
allows the focus to get set to an actual radio button or checkbox control,
which works under both Internet Explorer and Netscape.
Once the control is given the focus, one final check is made to see if
the control is a text box or a text area control. If so, the content is
selected to mimic the behavior used when tabbing into the control. As you
can see, there is actually a lot more to properly setting the focus to a
control under all circumstances than originally meets the eye.
Detecting the Authentication Type
The AuthType
property was added to the class to allow the
user to find out what authentication method is being used by the
application such as Anonymous, Basic, NTLM, or Kerberos.
public string AuthType
{
get
{
// This prevents an exception being reported in
// design view.
if(this.Context == null)
return null;
// Figure out the authentication type
string authType =
Request.ServerVariables["AUTH_TYPE"];
if(authType == "Negotiate")
{
// Typically, NTLM will yield a header that
// is 300 bytes or less while Kerberos is
// more like 5000 bytes. If blank, the best
// we can do is return "Negotiate".
string authorization =
Request.ServerVariables["HTTP_AUTHORIZATION"];
if(authorization != null)
if(authorization.Length > 1000)
authType = "Kerberos";
else
authType = "NTLM";
}
else // If length != 0, it's probably Basic
if(authType.Length == 0)
authType = "Anonymous";
return authType;
}
}
At work, we implemented Integrated Windows Authentication using
Kerberos for our intranet applications. This property proved to be quite
useful in determining whether or not things were working as expected. To
distinguish between NTLM and Kerberos authentication, it relies on the
length of the HTTP_AUTHORIZATION
server variable. As noted in
the comments, NTLM headers are much shorter than Kerberos headers. Be aware
that the HTTP_AUTHORIZATION
variable is only available when
the first page of the application is requested. On all subsequent page
requests, it is not there so the best it can do is return the supplied
AUTH_TYPE
value of "Negotiate".
The class also contains a CurrentUser
property that can be
used to get the ID of the authenticated user. It returns the value of the
User.Identity.Name
property without the domain qualifier if
one is present. For example, if it is MYDOMAIN\EWOODRUFF, this property
returns EWOODRUFF. This saves you from having to check for and remove it if
you do not need it.
Enhanced Error Information
When errors occur in your application, it is always good to have as
much information as possible to help you duplicate the problem and find the
source of the error. The default error page displayed by ASP.NET gives
basic information about the cause of the error. It also lets you override
the error handling features and specify a custom error page. There are many
options available such as writing the information to the event log, writing
it to a text file on the server, sending it in an e-mail to the developer,
etc. Doing some things like writing to the event log require special
permissions on the server. As such, I decided to keep the error handling
behavior of the BasePage
class fairly generic. The decision
about what to do with the error information is deferred to the custom error
page. It can be modified based on the application or environment, to log or
display the information as it sees fit. You may also find that, once
written, the custom error page can be copied from one application to
another without change to provide the same error handling methodology in
all of your applications.
Normally, detailed error information is not available by the time you
reach the custom error page. To overcome this limitation, the class
overrides the OnError
method, and simply packages the
information up and stores it in the application cache. The custom error
page can then retrieve it and complete its task of reporting the error as
it sees fit.
protected override void OnError(System.EventArgs e)
{
string remoteAddr;
Hashtable htErrorContext = new Hashtable(5);
SortedList slServerVars = new SortedList(9);
// Extract a subset of the server variables
slServerVars["SCRIPT_NAME"] =
Request.ServerVariables["SCRIPT_NAME"];
slServerVars["HTTP_HOST"] =
Request.ServerVariables["HTTP_HOST"];
slServerVars["HTTP_USER_AGENT"] =
Request.ServerVariables["HTTP_USER_AGENT"];
slServerVars["AUTH_TYPE"] = this.AuthType;
slServerVars["AUTH_USER"] =
Request.ServerVariables["AUTH_USER"];
slServerVars["LOGON_USER"] =
Request.ServerVariables["LOGON_USER"];
slServerVars["SERVER_NAME"] =
Request.ServerVariables["SERVER_NAME"];
slServerVars["LOCAL_ADDR"] =
Request.ServerVariables["LOCAL_ADDR"];
remoteAddr = Request.ServerVariables["REMOTE_ADDR"];
slServerVars["REMOTE_ADDR"] = remoteAddr;
// Save the context information
htErrorContext["LastError"] =
Server.GetLastError().ToString();
htErrorContext["ServerVars"] = slServerVars;
htErrorContext["QueryString"] = Request.QueryString;
htErrorContext["Form"] = Request.Form;
htErrorContext["Page"] = Request.Path;
// Store it in the cache with a short time limit. The
// remote address is used as a key. We can't use the
// session ID or store the info in the session as it's
// not always the same session on the error page.
Cache.Insert(remoteAddr, htErrorContext,
null, DateTime.MaxValue, TimeSpan.FromMinutes(5));
base.OnError(e);
}
The code creates a sorted list to contain several helpful server
variables such as the authentication method that was in effect, user
information, server information, and script information. Rather than store
them all, I have only saved the ones that I have found useful in the past.
You may wish to add to the list if necessary. The list is stored in a hash
table along with the last error information, query string, form variables,
and the page name. In order to pass the information to the custom error
page, the hash table is stored in the application cache using the remote
address as the key. A five-minute time limit is applied to the object so
that it does not stay in the cache for an extended period of time holding
on to resources unnecessarily. The custom error page can also delete the
object from the cache once it has retrieved it. This method should work
well for most applications. Unless you are expecting an extremely large
number of users and there was an unexpected error that everyone got, it
should not put much of a load on the server.
As noted, the error information is not stored in the session, nor does
it use the session ID as a key. The reason is that on occasions, based on
my experience, when the error page is reached, the session ID is completely
different and thus we have no way to retrieve the information. I have
noticed this most often when an error occurs on the first page loaded for
the application. By using the application cache and using the remote
address as the key, we can be sure that the error information is always
available to the error page when it is reached.
To get ASP.NET to call your custom error page, you need to modify the
customErrors
tag in the Web.config file so that the
defaultRedirect
attribute points to your error page and the
mode
attribute is set to On
or
RemoteOnly
.
<system.web>
<!-- CUSTOM ERROR MESSAGES
Set customErrors mode="On" or "RemoteOnly" to
enable custom error messages, "Off" to disable.
Add <error> tags for each of the errors
you want to handle.
-->
<customErrors mode="RemoteOnly"
defaultRedirect="ErrorPageInternal.aspx" />
</system.web>
The demo project in the download file contains an example that displays
the information retrieved from the application cache after an error occurs.
The RenderedPage Class
There have been several articles both here and on several other sites
that describe the reasons for and various ways to create base page or
template classes for ASP.NET web forms. As such, I will not rehash that
information here. Instead, refer to the following Code Project articles for
more background on why and how to use these methods. The
RenderedPage
class contains my particular implementation, and
its various features are described in the remainder of this article.
ASP.NET 2.0 includes a new master page feature that lets you implement
page templates with much more flexibility. As such, if you are using
ASP.NET 2.0, I would recommend using master pages rather than
RenderedPage
. However, you can still derive your page classes
from BasePage
in order to gain the features described earlier
and in the other articles in this series and use them in conjunction with
master pages.
Note that the .NET 2.0 version of the BasePage
class does
support the use of the PageDescription
,
PageKeywords
, PageTitle
, and Robots
properties. In order to use them, just make sure that your page or master
page contains a head
tag with a runat="server"
attribute. When rendered, the class will add the appropriate tags to the
header control for you. This allows you to modify them from page to page
without any extra coding on your part.
Generation of Common Header and Footer Tags
The RenderedPage
class will render all of the common header
and footer tags including the DOCTYPE
tag, the
html
opening and closing tags, the head
opening and closing tags, a few common meta
tags such as the description, keywords, and robot
instructions, a link
tag for the style sheet that
can be defined via the PageStyleSheet
property, a title
tag containing the page title as set via the
PageTitle
property, and the opening and closing body
tags. The body
tag can be
modified to include a class
attribute as defined by the
PageBodyStyle
property to alter the style of the page body. A
detailed description of each of the rendering methods can be found in the
supplied help file.
The Render
method is overridden to control the rendering
process. Unless it is necessary, you should not override this method to
alter rendering of the page content. Instead, override the following
virtual methods as needed. OnInit
can also be overridden to
insert controls via the PageForm
property. The
MenuPage
class contains an example of that.
protected virtual void RenderHeader(HtmlTextWriter writer)
This method is called first to render the common header tags from the
DOCTYPE
tag through to the opening body
tag. The code is simple and uses a
StringBuilder
to generate the HTML to render. The
StringBuilder
is passed to the following method just before
the closing head
tag is added. The actual content
of the page as defined in the ASPX file will be rendered immediately after
the opening body
tag when this method returns to
the Render
method.
protected virtual void RenderAdditionalHeaderTags(StringBuilder header)
Override this method in derived classes to add other tags inside the
head
section (i.e., other meta
tags for title, keywords, etc). The base class
version does nothing. Additional tags generated by this method are inserted
after the title
tag and just before the closing
head
tag.
protected virtual void RenderFooter(HtmlTextWriter writer)
This method can be overridden by derived classes to add other common
tags at the end of the body before the closing body
tag. If overridden, call the base class method
after outputting the additional tags unless you are completely replacing
the rendering process for all of the closing tags normally generated by
this method.
Adding Additional Controls to the Form at Runtime
Adding additional controls to the form that are created dynamically at
runtime is quite simple. The PageForm
property is used to
obtain a reference to the form defined on the page. You can then use the
Controls
property of the Form
object to insert
additional controls anywhere within it. This is usually done in an
overridden OnInit
method. The MenuPage
class uses
this approach to insert the supporting HTML and a user control file to
create pages with a menu.
The MenuPage and VerticalMenuPage Classes
The MenuPage
class is derived from RenderedPage
and provides the layout for a page with a simple menu horizontally across
the top of the page or vertically down the left side of the page. The menu
is stored in the form of a user control that is loaded by the class at
runtime and placed into the proper location. The user control can be
changed using the MenuControlFile
property. If not specified,
it looks for a control by the name of MenuCtrl.ascx by default. Note
that the class is not intended to compete with some of the more elaborate,
full-featured menu custom controls that are available. It is just a simple
class I use to get my applications up and running quickly using ASP.NET 1.0.
The bulk of the work takes place in the overridden OnInit
method. Based on the setting of the verticalMenu
field, it
uses the BasePage.PageForm
property to insert the HTML for a
table
control around the actual page content within the
form
control.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
// Insert the table and menu control at the start of
// the page. The layout depends on whether or not
// the menu is going to be rendered horizontally at
// the top or vertically down the left side of the
// page.
if(verticalMenu)
{
this.PageForm.Controls.AddAt(0, new LiteralControl(
"<table height='100%' cellpadding='0' " +
"width='100%'>\n<tr valign='top'>\n" +
" <td width='15%'>\n"));
}
else
{
this.PageForm.Controls.AddAt(0, new LiteralControl(
"<table cellpadding='0' width='100%'>\n" +
"<tr>\n<td>\n"));
}
if(menuCtrl != null)
this.PageForm.Controls.AddAt(1,
LoadControl(menuCtrl));
else
this.PageForm.Controls.AddAt(1, new LiteralControl(
"MenuControlFile property not set in derived " +
"OnInit!"));
if(verticalMenu)
{
this.PageForm.Controls.AddAt(2, new
LiteralControl("</td><td> <" +
"/td>\n<td>\n"));
// Page content goes in between and this wraps it up
this.PageForm.Controls.Add(
new LiteralControl("</td>\n</tr>\n" +
"</table>\n"));
}
else // For horizontal, page is rendered below menu
this.PageForm.Controls.AddAt(2,
new LiteralControl("</td>\n</tr>\n" +
"</table>\n"));
}
The VerticalMenuPage
class is even simpler and only
contains a constructor that sets the verticalMenu
field to
true
so that the menu is rendered vertically by
default. As noted, they are not the most sophisticated menu classes, but by
deriving the ASPX pages from either class and creating a menu user control,
you can get a simple application with a menu up and running in very little
time.
Conclusion
I have used the BasePage
class and a few derived from it
in all of my ASP.NET applications to give them a consistent look, feel, and
set of features. Hopefully, you will find this class and the others in the
library, or parts of them, as useful as I have.
Revision History
| 04/02/2006 |
|
Non-breaking changes in this release:
- The latest version of the JavaScript compressor is being used
to further reduce the size of the embedded scripts.
- The .NET 2.0 demos have been reworked to use master pages
instead of
RenderedPage and MenuPage .
- For the .NET 2.0 version, the method of embedding the script
resources was changed to use the .NET 2.0 method so it is no longer
necessary to add the
httpHandlers section for the
EWSoftware.Web.aspx resource page. As such, this section
can be deleted from your Web.config file.
Breaking changes:
- Significantly modified the
BasePage class by splitting out the
rendering code to its own derived class (RenderedPage ). This makes
it easier to move to .NET 2.0 and use master pages while still
retaining the non-rendering related features of the BasePage class
(data change checking, etc).
- The
EMailPage class has been removed. The
e-mailing functionality has been merged with the
BasePage class. This was necessary in order to move
the rendering code into its own derived class.
- Several properties and method names have been modified to
conform to the .NET naming conventions with regard to casing
(
BasePage.BypassPromptIds ,
BasePage.DisabledCssClass ,
BasePage.DisabledCssName ,
BasePage.MsgLinkCssClass ,
BasePage.MsgLinkCssName ,
BasePage.SkipDataCheckIds ,
EMailPageEventArgs.SmtpServer ,
MenuPage.MenuCtrlFileName ,
PageUtils.HtmlEncode ,
RenderedPage.PageBodyCssClass ,
RenderedPage.CssFileName ).
- The
BasePage.SetFocus methods have been renamed
BasePage.SetFocusExtended . In .NET 2.0, every web
control now has a Focus method. In addition, the
standard Page class has two SetFocus
methods somewhat equivalent to the old BasePage
versions. The SetFocusExtended methods are available
for use in .NET 1.1 to set the focus to controls and they are
available for use in the .NET 2.0 version in case you need the added
capabilities that they provide.
|
| 11/26/2004 |
|
Changes in this release:
- Removed the hard-coded class name and cell padding from the
MenuPage class's generated HTML. The menu user control should
control the style and padding.
- Fixed a bug in BP_funSetFocus() reported by Michael Freidgeim so that
it finds controls by ID correctly if the ID happens to match a NAME
attribute on a META tag.
- Added
RobotOptions enumerated type and a
Robots property to BasePage to allow
inclusion of a Robots meta tag in the page header.
- Added
PageDescription and PageKeywords
properties to BasePage to allow inclusion of
Description and Keywords meta tags in the page header.
|
| |
| 12/01/2003 |
|
Initial release |


Click here if any content is missing
Local time is expressed in hours of Tomsk Summer Decree (TLDV). TLDA = UTC + 7 hours.
Dependences of the Schumann resonance frequencies in Hertz from local time.
Dependences of the amplitudes of the Schumann resonance on local time.
Dependences of the Q-values â€‹â€‹of the Schumann resonance on local time.
Cumulative Spectrogram of Schumann resonance on local time.
Check Electrogaiagram Basket Status
|
View Project Home
Map of Active Random Event Generators Currently Monitored
[ Live Events Flashing ]
Dependences of the critical frequencies of the ionosphere on local time. Local time is expressed in hours of Tomsk Summer Decree (TLDV). TLDA = UTC + 7 hours.
The initial data is provided by the National Center for Geophysical Data NGDC.
stay woke


This is a simple card. It comes in different material colors. You can use these cards to specify small bits of information.
This is a simple card. It comes in different material colors. For eg: To make it primary, use
md-colors
directive and specify background color.
This is a simple card. It comes in different material colors. You can use these cards to specify small bits of information.
This is a simple card. It comes in different material colors. For eg: To make it like warn, use
md-colors
directive and specify background color.
This is a simple card. It comes in different material colors. You can use these cards to specify small bits of information.
This is a simple card. It comes in different material colors. For eg: To make it green, apply
md-colors
directive with green-700
color to specify background.
This is a simple card. It comes in different material colors. You can use these cards to specify small bits of information.
Lorem ispum dolar sit amet consector adipising. You can use these cards to specify small bits of information.


--- layout: page title: About header-img: "img/about-bg.png" ---
Busy mom of a two months old boy, looking for a change, and just learning how to dive into coding.


4. The Good, the Bad, and the Ugly¶
When it comes to Visualization for communication, this means Dashboards and graphs that are created to inform others (Not the plots you make in EDA), a large component involves art and design.
We can communicate different agendas depending on how we visualize our data.
For example, let’s look at this award-winning visualization named “Iraq’s Bloody Toll” created in 2011 by Simon Scarr which appeared in the South China Morning Post.
This visualization communicates the number of deaths per month in Iraq from 2003 until the beginning of the US withdrawal of troops at the end of 2011.
How does this plot communicate with you right off the bat?
It is designed in such a way so that it resembles dripping blood, with its downward-facing bars and blood-red colour. This is to really relay the negative measurement of the data; the deaths in Iraq as indicated in the title.
If we instead change the colour, orientation of the bars, and title, we have a different story now.
Instead of the horrible statistic of how the war caused an increase in death rates, we have a figure that communicates the decline of deaths in Iraq.
The green colour is less jarring and negatively associated with. The bars showing the decrease in count also show a happy story along with the title.
Both figures show the same data, neither is being deceptive but with 3 small differences, they communicate quite different messages.
4.1. Storytelling¶
The above example is a great way to show how design choices are so important in the storytelling process.
Just like visualizations, storytelling is crucial to communicating your insights to your audience.
Generally speaking, the below points will aid in creating a compelling story.
What question(s) are we going to attempt to answer?: It shouldn’t come as a surprise that this is one of our items. We learned this in the last lesson and it should make complete sense that we want to communicate this in our storytelling. We want the audience to know what it is they are going to learn while viewing your visualization(s)?
Peak your audience’s interest: We want to captivate our readers’ interest early on in a manner that will make them want to learn more and continue viewing. This can take place in a striking figure, a problem that demands a solution.
Present facts in an engaging way without hyperbole: Remember that the audience often remembers the story and not the data, and so this part is extremely important to create a long-lasting impression. It is also important that although the story should be exciting, the root of our visualizations is data and so the story must be maintained in fact. We want clear and honest communication. The visualization and narration MUST be true to maintain the trust and credibility of our reports and organizations.
Tailor it to the audience you have in mind: Keep in line with whom you are speaking with. That means, using technical language and answering questions that are fitting to the respective readers or else it can be ineffective in both directions.
For some amazing examples of data storytelling take a look at the following:
4.2. Best Practices¶
This section will pinpoint a few beast practices to instill to avoid common pitfalls that occur, often without too much thought.
4.2.1. Aspect ratios¶
Something as simple as a ratio can be problematic when communicating through graphs. It’s important that when you are placing worksheets on a dashboard, or simply creating a single visualization, you are representing it with a standard height and width. Aspect ratios can affect our perception of rates of change.
Let’s take the following as an example.
Source: socviz.co and William S. Cleveland
The leftmost plot shows a graph where the line appears to converge to infinity as x increases. However, looking further and re-adjusting to a wider plot corrects for this miscommunication and there no longer appears to be such convergence.
4.2.2. Avoid Misleading Axes¶
Another poor way to communicate your data is breaking your axis or not showing the 0 mark where your data begins which leads to a deceptive difference in proportion.
Generally speaking, we like to make comparisons in the categories of our data and when we some axis techniques, this can make the difference between values of categories look much larger than they truly are.
Let’s first see an example of this when we break up the axis.
Source: Joel Osblom - Data Visualization originally from The Economist
The left plot shows the x-axis broken up which results in the top bar measuring only 1.5 times that of the second bar which in reality the difference between the two is much more, 5 times as long in fact.
The second plot correct this and it is clear the actual difference in value between the 2 categories.
We’ve included this example which is from an article in The Economist where they identified mistakes they have made in their previous visualizations.
This type of behaviour not only helps learn from their past mistakes but also creates transparency which causes the reader to trust the source more even though they have made errors in the past.
Owning up to one’s mistakes is often looked at with respect instead of avoiding it pretending it didn’t happen.
Let’s also look at an example where the axis of a bar chart does not begin at 0.
Source: Calling Bullshit
Here we are comparing the average number of hours worked per week by different countries. Here it looks like Germany has quite a lead over Italy, France in Belgium.
If we replot the data and include the 0 value, we can re-evaluate and conclude that the differences between the countries we identified are not nearly as great as they originally appeared.
Source: Calling Bullshit
It’s important to note that including the 0 value on axes is particularly agreed upon for bar plots but not agreed upon for other plot types. Often it could help you analyze to zoom into areas of interest in scatterplots or line plots, however other times it could be a method used to communicate one’s own agenda.
For more discussion on this see:
4.2.3. Are Gridlines or Labels Necessary?¶
This isn’t necessarily going to be a solid rule, however, it definitely warrants a discussion.
Gridlines are heavily debated in the Data Visualization community and people disagree on if they are needed at all.
My take on this depends on what your question is and how you are trying to answer it.
In a lot of cases, gridlines can distract from the fundamental insight of the plot and it’s best not to overuse them since instead of helping your plot, they can make it harder to read.
Or if it’s necessary to know a specific value, it may be more appropriate to use a plot with labels and ignore gridlines (as seen in the middle plot). If the values are not necessary and only the comparison between the categories in a bar plot specifically, then omitting labels and gridlines may even be the most effective in this case.
4.2.4. Add Informative Titles¶
Readers often remember the story you are telling instead of the exact data and your plot’s title is a contributing factor. Chart titles frame the story in your data and thus it’s important not to simply title your plots with the metrics it’s plotting but with the insight you are trying to convey. This will make it more likely that the reader will retain the visualization’s goal.
Take the below example.
From this title alone, the reader will be able to know right away the point of the plot and no longer needs to decipher what the creators were trying to communicate, nor look elsewhere for the narration. It is immediately clear why this visualization has been created and the question it is answering.
4.2.5. Highlight What’s Important¶
Although data visualization will present the data for the audience, sometimes we need an additional step to make it that much more obvious why the plot exists or what the key point of it is. Highlighting distracts the reader from the noise and “highlights” the important information in the plot and tell the desired story.
The following example from Data Visualization shows how in this case we have ordinal data and are unable to sort as we would normally. Instead, we highlight the day of the week that has the highest donation amounts and add annotations to explain why this is occurring.
4.2.6. Don’t use Many Channels for Different Fields¶
Adding several channels such as size, colour and position to a graph, can overwhelm the visualization and can frustrate or confuse the reader quickly.
We’ve seen where we have used both colour and size for a single measure, however, I’m speaking on giving several channels to many different measures.
The example below shows how hard it could potentially be to find data within a visualization. Here we can see how easily a data point is located when colour alone is used as a channel, however, when we have size and colour finding specific data points within the data becomes much harder.
Source: socviz.co
A more effective option would be too simple create a separate plot.
4.2.7. Use Colour Effectively¶
<IP_ADDRESS>. Categorical Use¶
We discussed how using multiple channels for a single field can aid in communicating clarity to the reader, especially if someone has a colour seeing deficiency but when position or size is being represented, having colour as an additional channel can be disorienting.
Source: Data Visualization
In the case above, we see that if there are many bars or categories, the plot becomes much more confusing. Had this plot had fewer bars, the colour channel may have been better executed.
Colour channels in general work better when there are less than 5-8 distinct categories.
<IP_ADDRESS>. Numeric Use¶
Tableau gives several colour palettes to choose from with the option of making your own.
When it comes to numeric data, we will need a spectrum of colours to represent a field.
Generally speaking, we use a sequential colour spectrum with a single hue when communicating numeric data.
Here we represented the temperature in both the y axis and the colour channel just to make our point clearer.
The general rule of thumb is to avoid a spectrum with too many colours as it can be unintuitive which colour is associated with each range of values.
The exception is if a Diverging palette is used.
Diverging colour schemes show 2 colours on opposite sides of a spectrum that converge to a critical point (or diverge from a center point to 2 separate colours). We use this type of scheme when the data has a natural midpoint (such as temperature or percentage).
4.3. Where Things Go Wrong¶
Let’s take a look at some examples of poorly constructed visualizations in the wild.
4.3.1. How Xiaomi Stacks up Against the World’s Biggest Smartphone Makers¶
Here we have a visualization published by Forbes, generally a reputable source and yet here we can already see some clear problems.
The first thing I noticed was that although “Q2 China Market Share” and “Q2 Global Shipment (Millions)” are separate plots, I immediately wanted to connect the two and got confused why the 13.00% orange bar was larger than the 21.2 orange bar. After further investigation, I concluded that both bar charts have separate units and are plotting different things but the initial confusion was still there. We also have the broken bars in 2 locations which drastically misleads the public that there is less of a separation between the values than there is!
4.3.2. A crisis of faith in democracy? (New York Times.)¶
At first glance, this visualization doesn’t look too bad, but the problem with this visualization is in the way it was made from the given data upon further inspection.
First, the x-axis is representing people born in different periods of time and the graphs are not representing a time of measure. A line graph in this last is somewhat deceptive even if that wasn’t the intent.
The data from this graph was collected by asking the respondents to rate the importance of living in a democracy from 1 to 10 with 1 being Not at all Important and 10 being Absolutely important. This graph is only plotting the difference of respondents who vote 10. That being said people although they may not have rated it 10, most people still rated the importance of living in a democracy quite high.
If instead, we plotted the average rating over the different age generations, we still get a downward trend but our scale on the y axis is not nearly as jarring as initially perceived.
4.3.3. Nature Climate Change¶
Here we have an example where someone was attempting to visualize everything and the kitchen sink. Climate change is difficult to explain in the best of times, and so when someone attempts to explain as much as possible in a single graphic, it’s not surprising that it fails.
We have multiple colour channels, shapes and marks, 2 scales, labels and axes, multiple legends and a colour spectrum.
I’m just putting this in here because you may feel like you are being clever at finding a way to put everything in a single figure, but if it’s this much effort to create, it’s going to be that much more effort for the reader to try and actually decipher the thing.
4.4. Data Science Ducks¶
A duck is a data graphic that prioritizes style and design over information and substance. The term was coined by Edward Tufte who is a well-known statistician currently working at Yale University.
Generally speaking, infographic-style plots and graphs or gimmicky methods of communicating information are described as a duck. In many cases, presenting data in such a way can dilute the message and hinder the clarity of the insight.
4.4.1. iPad - iproblem¶
In 2011-2012, when Apple released a new version of its iPad, the website https://gizmodo.com wrote an article on its new battery capacity with this visualization.
It boasts a 70% larger battery but there are multiple reasons this is a duck. First, although the battery is larger, the battery life remained unchanged and simply needed to increase for the larger screen and more demanding technical components.
Secondly, the length and width of the battery on the left have been increased by 1.7 times which results in 2.9 times the area!
This is also an example of how using 2 channels (area and position) can be problematic for a single measure.
4.5. Make-up (better) Plots¶
Visual.ly, a known infographics site produced this to explain cosmetic usage in different countries.
Instead of providing clarity, however, it’s clear that their determination to use cosmetic shapes proves to seriously compromise the graph. 17.9% is only slightly higher than 6.8% and 6.2,6.4 and 6.8% all look the same height. Even if they had sorted the “bars” in ascending or descending order, there would still be so much wrong in this graph.
4.6. Pizza Pie¶
Here, we have a pretty typical and reoccurring culprit in data visualization.
YouGov posted this visualization via Twitter in March 2017 and the aftermath as bad as you expect it to be.
YouGov describes itself as “an international research data and analytics group.” and considering their line of business you’d think that they would be more aware of the problems in this plot.
Right away we know the portions add up to far more than 100%, 485% in fact.
This is an example where the designer wanted to utilize the pizza theme and design but then sacrificed any clarity and Fact. A bar plot would have been a far superior plot type.
4.7. A Game of Good or Evil¶
Let’s see if you can identify the following as
1.
2.
3.
4.
5.
6.
Source for these plots:
Solutions!
Can go either Good or Evil
Evil
Evil
Good
Evil
Good


2018-2019 Academic Year
Pretalks begin an hour earlier in LC 303B (unless otherwise indicated)
| Date | Room | Speaker | Title | Host |
| Aug 15 11:00am |
LC 312 | Luigi Ferraro (Wake Forest University) |
Hopf algebra actions on some AS-regular algebras of small GK-dimension (No pretalk) |
Kustin |
| Sep 7 3:30pm |
LC 303B | Robert Vandermolen (University of South Carolina) |
An explicit kernel construction for Grassmannian flops | (local) |
| Oct 5 3:30pm |
LC 303B | Mohammed Alabbood (University of South Carolina) |
Classification in PG(3,q) of classes of smooth cubic surfaces up to Eckardt points | (local) |
| Oct 12 3:30pm |
LC 303B | Yoav Len (Georgia Tech) |
Lifting Tropical Intersections | Kass |
| Oct 26 3:30pm |
LC 303B | Alicia Lamarche (University of South Carolina) |
Exceptional collections of toric varieties associated to root systems | (local) |
| Nov 2 |
||||
| Nov 9 3:30pm |
LC 303B | Keller Vandebogert (University of South Carolina) |
More on Compressed k-algebras | (local) |
| Nov 16 3:30pm |
LC 303B | Tracy Huggins (University of South Carolina) |
Multiple Perspectives on Essential Dimension | (local) |
| Dec 7 3:30pm |
LC 303B | Philip Engel (University of Georgia) |
Tilings of Riemann Surfaces | Kass |
| Feb 1 3:30pm |
LC 303B | Jesse Kass (University of South Carolina) |
Counting nodal curves over an arithmetically interesting field | (local) |
| Feb 22 3:30pm |
LC 303B | Owen Biesel (Carleton College) |
A fine moduli space of enriched structures | Kass |
| March 26 3:30pm |
LC 317R | Mohammed Alabbood (University of South Carolina) |
PhD Defense | (local) |
| April 5 3:30pm |
LC 303B | Jesse Kass (University of South Carolina) |
An introduction to counting curves arithmetically | (local) |
Abstracts
Mohammed Alabbood - Classification in PG(3,q) of classes of smooth cubic surfaces up to Eckardt points
In this seminar, we will classify classes of smooth cubic surfaces in PG(3,q) up to Eckardt points where q is prime and q>7. By considering configurations of 6 points in general position in the projective plane PG(2,q), we can describe subsets of projective space PG(3,q) that correspond to non-singular cubic surfaces with m Eckardt points. Recall that a non-singular cubic surface, say X, can be viewed as the blow up of PG(2,q) at 6 points in general position. Furthermore, there are 45 tritangent planes on X. Classification of cubic surfaces with m Eckardt points have been studied by Segre. However, we give another way to classify these cubic surfaces by defining an operation on the set of all triples of lines on the cubic surface that correspond to 45 tritangent planes on X.
Mohammed Alabbood - PhD Defense
In our thesis, we use the Clebsch map to construct cubic surfaces with twenty-seven lines in PG(3,q) from 6 points in general position in PG(2,q) for q=17,19,23,29,31. We classify the cubic surfaces with twenty-seven lines in three dimensional space (up to e-invariants) by introducing computational and geometrical procedures for the classification. All elliptic and hyperbolic lines on a non-singular cubic surface in PG(3,q) for q=17,19, 23, 29, 31 are calculated. We define an operation on triples of lines on a non-singular cubic surface with 27 lines which help us to determine the exact value of the number of Eckardt point on a cubic surface. Moreover, we discuss the irreducibility of classes of smooth cubic surfaces in PG(19,C), and we give the corresponding codimension of each class as a subvariety of PG(19,C).
Owen Biesel - A fine moduli space of enriched structures
The enriched structures on a stable curve over a field parameterize the different ways of smoothing that curve, but it is less clear how to define the set of enriched structures for a family of stable curves over an arbitrary base scheme. We give a new, more general definition of enriched structure that reduces to the original for stable curves over a separably closed field, and show that the resulting fine moduli space has a universal property in terms of Néron models for the universal curve's Jacobian. This is joint work with David Holmes.
Philip Engel - Tilings of Riemann Surfaces
A k-differential on a Riemann surface is a nonzero section of the kth tensor power of the canonical bundle. When k = 3, 4, or 6 the moduli space of k-differentials contains a natural discrete subset: Surfaces tiled by hexagons, squares, or triangles respectively. It is possible to compute the volume of the moduli space by enumerating these tiled surfaces, using techniques from representation theory pioneered by Eskin and Okounkov. After summarizing this work, I will describe recent work joint with P. Smillie on the k = 5 case and the enumeration of Penrose tilings.
Luigi Ferraro - Hopf algebra actions on some AS-regular algebras of small GK-dimension
The classical Chevalley-Shephard-Todd Theorem gives a characterization of when a group acting linearly on the commutative polynomial ring has a ring of invariants that is isomorphic to a polynomial ring. Understanding when group actions (or more generally, Hopf actions) on AS-regular algebras give AS-regular invariant rings has proven to be a difficult problem. We provide some new examples of Hopf actions on some AS-regular algebras such that the ring of invariants is also AS-regular.
Jesse Kass - Counting nodal curves over an arithmetically interesting field
Given two general degree d complex polynomials f(x,y) and g(x,y), the equation f(x,y) + t g(x,y) defines a singular curve for exactly 3 (d-1)^2 complex values of t. This is a classical result that has been generalized in many ways to results counting complex curves, but the problem of generalizing it by replacing the complex numbers with a more arithmetically interesting field, such as the rational numbers or a finite field or..., has only been taken up recently. In my talk, I will explain results due to the speaker, Kirsten Wickelgren, and Marc Levine in the latter direction.
This talk is practice for talks at Geometry & Arithmetic of Surfaces Workshop.
Jesse Kass - An introduction to counting curves arithmetically
A long-standing program in algebraic geometry focuses on counting the number of curves in special configuration such as the lines on a cubic surface (27) or the number of conic curves tangent to 5 given conics (3264). While many important counting results have been proven purely in the language of algebraic geometry, a major modern discovery is that curve counts can often be interpreted in terms of algebraic topology and this topological perspective reveals unexpected properties.
One problem in modern curve counting is that classical algebraic topology is only available when working over the real or complex numbers. A successful solution to this problem should produce curve counts over fields like the rational numbers in such a way as to record interesting arithmetic information. My talk will explain how to derive such counts using ideas from A1-homotopy theory. The talk will focus on joint work with Kirsten Wickelgren on the cubic surface and results on more general hypersurfaces by Marc Levine.
There will be no pretalk, and the talk will only be 30 minutes.
Tracy Huggins - Multiple Perspectives on Essential Dimension
Given a finite group G and a field k, can G be realized as the Galois group of a field extension of k? This is known as the inverse Galois problem and is known to be difficult to answer in general.
The essential dimension of a finite group G over k measures the complexity of G by probing a relaxed form of the inverse Galois problem. Essential dimension can be approached from multiple perspectives, which together place essential dimension at the intersection of study of étale algebras, versal polynomials, and classifying functors. I will discuss a few of these different perspectives during my talk
Alicia Lamarche - Exceptional collections of toric varieties associated to root systems
Given a root system R, one can construct a toric variety X(R) by taking the maximal cones of X(R) to be the Weyl chambers of R. The automorphisms of R act on X(R); and a natural question arises: can one decompose the derived category of coherent sheaves on X(R) in a manner that is respected by Aut(R)? Recently, Castravet and Tevelev constructed full exceptional collections for D^b(X(R)) when R is of type A_n. In this talk, we'll discuss progress towards answering this question in the case where R is of type D_n, with emphasis on the 'base' case of D_4.
Yoav Len - Lifting Tropical Intersections
My talk is concerned with combinatorial aspects of intersection theory. When tropicalizing algebraic varieties, each of their intersection points maps to a tropical intersection point. Characterizing this locus is a fundamental problem in tropical geometry. In my talk, I will appeal to non-Archimedean and polyhedral geometry to characterize the locus in various cases. The solution leads to a combinatorial tool for counting multitangent hyperplanes of algebraic varieties, detecting dual defects, and for computing Newton polygons of dual varieties.
Keller Vandebogert - More on Compressed k-algebras
This will be the technical version of my CMS talk. The pretalk will introduce nonstandard terminology and give some examples (ie, Tor-algebras, Buchsbaum-Eisenbud resolution, compressed, inverse systems, etc). The main talk will go over some recent results regarding the structure theory of Artinian compressed k-algebras and outline the techniques involved.
Robert Vandermolen - An explicit kernel construction for Grassmannian flops
We will discuss the current work in producing an explicit kernel that induces the derived equivalence which arises from the Grassmannian flop. Specifically we will see that the essential image of the functor associated to this kernel aligns with a(n) (exceptional) collection first studied by Kappronav. Further we will explore some interesting geometric properties which the kernel of this functor enjoys and their curious ties to Geometric Invariant Theory. Future directions for a more general technique in producing these interesting kernels, will also be discussed. The pre-talk will discuss the previous work of Ballard et. al. in a similar kernel and it's geometric connections to the homology of projective spaces.


By having an account you to create your own path to the beautiful trips of all the time. Make it simple and stunning is the key to a successful path. WayFarer gives you the opportunity to make your journey simple by booking a seat on any trip and travel safe, in comfort and like a boss.


Agenda
- Dataset Demos
- Mob Coding a Flask Site
- Live Coding
- A Note on Class Site
Notes from Looking at Your Code
- Try to limit cutting and pasting tutorial code
- requirements.txt
- Virtual Enviornments
- Foucs on Simple
Demos
5 minutes demos on the dataset or blog assignments
Dataset Assignment Due at Midnight
Feedback will come before Saturday
Mob coding a flask login site
The only rule is no cutting pasting code
Live Coding a Django Login Page
Polls!
After you complete the tutorial - try to make changes to personalize it.
Demos on Polls Tutorial
Let's see what you create!


Affordable Housing Advocates Fight Proposed Arena in LA Court
by NATHAN SOLISLOS ANGELES (CN) – Residents of the Los Angeles suburb of Inglewood argued in court Tuesday that city officials and the owner of the L.A. Clippers violated a state affordable housing law when they agreed to negotiations for a proposed new basketball arena.
Clippers owner Steve Ballmer wants to move the NBA team from the Staples Center in downtown Los Angeles to the city of Inglewood, about 10 miles south.
But members of the Uplift Inglewood coalition claim city officials violated a California housing law when they took their sale to a commercial developer instead of opening the property to an affordable housing project, which is a priority for the community.
The Los Angeles Rams are also building an NFL stadium, which many residents say has already driven up rents. Priority should be given to affordable housing and not another sports complex, according to the residents who sued Inglewood and Ballmer’s development company Murphy’s Bowl.
Uplift Inglewood claims the 15-acre piece of city property should be considered surplus land that is not being used by the city.
On Tuesday, Los Angeles Superior Court Judge Daniel Murphy asked the group’s attorneys what their definition of surplus land is and why Inglewood’s move for economic development falls short of that land being in use.
Uplift Inglewood attorney Tom Casparian with Cozen O’Connor said cities will often prioritize economic development, but state lawmakers have set a priority for affordable housing under California’s Surplus Land Act.
Murphy asked whether Inglewood officials are putting the land to use if they are using it for economic development.
Casparian said having a fire station or a park on the property would be considered a use under the law, and so would affordable housing. But he argued Inglewood officials instead entered into a three-year exclusive negotiation with Ballmer’s development company, which could result in transfer of the property for the Clippers’ arena.
Murphy’s Bowl attorney John Spiegel from Munger Tolles Olson said California has had its definition on the books for 50 years and the courts have never stepped in to stop economic development on so-called surplus land.
Inglewood and Murphy’s Bowl also argue the property in question is not zoned for residential homes, because it’s under a noise corridor in the flight path to Los Angeles International Airport.
Residents, on the other hand, have claimed Inglewood is short on affordable housing units.
The city’s attorney Casey Sypek with Miller Barondess said it will have a report on that issue by next spring. Murphy asked if he should issue an order for the city to produce that report now, but he made no decision from the bench Tuesday. Instead he said he will issue his ruling on Uplift Inglewood’s petition for a writ of mandate sometime in the next few days.
Last year, the owners of a different Inglewood arena that the L.A. Lakers and L.A. Kings used to call home also sued the city over claims that Mayor James Butts told them to terminate their contract agreement so the city could pursue tenants for a supposed business-technology center.
Madison Square Garden Company, the owners of The Forum, said the city was negotiating with the developers behind the proposed Clippers’ arena for months when Butts made claims of the tech park.
After Tuesday’s hearing, Casparian said Inglewood officials’ argument boils down to their claim that they know better than what to do with the land despite the Legislature’s intention.
“Nobody here is trying to stop economic development,” the coalition’s attorney said, adding that the city failed to offer the property to entities that could create affordable housing or parks.
Inglewood resident Derek Steele said displacement due to rising rents and homelessness are some of the largest issues residents are facing. More than ever, Inglewood is in need of both jobs and homes.
“I don’t understand why they always have to pit affordable housing against economic development,” said Steele, an organizer with Uplift Inglewood.
The coalition is also represented by the law firm Public Counsel.
Copyright © 2019 courthousenews.com


Designates the version of the architecture that is in use. The default value will increase with each release of DITA.