O SlideShare utiliza cookies para otimizar a funcionalidade e o desempenho do site, assim como para apresentar publicidade mais relevante aos nossos usuários. Se você continuar a navegar o site, você aceita o uso de cookies. Leia nosso Contrato do Usuário e nossa Política de Privacidade.
O SlideShare utiliza cookies para otimizar a funcionalidade e o desempenho do site, assim como para apresentar publicidade mais relevante aos nossos usuários. Se você continuar a utilizar o site, você aceita o uso de cookies. Leia nossa Política de Privacidade e nosso Contrato do Usuário para obter mais detalhes.
Building A User-Definable, Flexible UI with Oracle Application Express (ApEx) By Bradley D. Brown, InteliVideo
Who am I?• Bradley D. Brown • Today http://bradleydbrown.blogspot.com • InteliVideo in April 2012• Founder • Video Monetization Platform • TUSC in 1988 • Built it to sell training online • Sold to Rolta in 2008 • Focused on mid and long tail and corporate deals • IntelliReal in 2005 • ApEx provides a “quick turns” • Sold to Equifax in 2011 approach to our offering • 10+ other companies, boards • Founders Institute• Professor – DU• Advisor for Founders Institute• Author – 6 technical books
My Interests• Making a difference• Helping people – teaching, advising, …• Building companies• Using my talents with technology• The outdoors
User Definable• Data Driven • Trade-offs • Drive code based on data • Performance rather than hard coded • “Readability” of code • Examples • Too many choices • ES valuation model at IntelliReal • Advantages • Partners “turning off” partners • Quick Turns on InteliVideo site • Testing 100s of models,• Flexible Database variable changes, etc. can all be done programmatically • Do you need the ability to add (perfect value) “columns” without “adding columns?”
Flexible UI• Data Driven • My bottom line • What page to start at (after • If I’m doing the original login) coding or I’m going to make a change to my code and • What partners to show there is an assumption (i.e. • Colors to display a hard coded number that I might put into my code), I• Easy with Apex stop and think • Authorization rules • Should I add a column to a table and should I change • Display rules at all levels the code so it points at the column? • What level? Per user? Per customer?
Independent Nation – POC Goals• Dave read the book• Called the author – Fipp (John Avalon)• Met with him and discussed the concepts• We met with numerous political campaign target market experts• I developed the software, secured data,…• We did demos to politicians, target market people, etc.• EC2 platform
Political Premise• Politicians want to share their views with targeted groups of people who are voting• Key target groups (lobstermen, working moms, first time home owners) • Identify and find those people • Invite them to custom events (per group) • Drive custom messages (reduced taxes for lobster, better day care options, incentives for buying your first home) – email, text, phone • Visit the networkers
Project / POC Goals• Provide intelligence to political campaigns• Build a GUI and GIS application (with ApEx)• Application for Independent Nation, but wanted something we could use for any customer with Google map needs• Application that is dynamic and flexible• Design and develop application that allows customization by changing data, not code.• Data about people, their properties or addresses they live at, and other information about them – yet, stay open for others
Application Specifics• Independent Nation is a company that specializes in provide intelligence about voters to political campaigns• Data sourcing - merged voter registration, voter contribution and numerous other data sources as the starting data set• Goal was to provide a flexible database design that will allow for SIMPLE attribute additions without new coding. New data feeds won’t require DB changes.
Application Design• Developed for Independent Nation• Every user • Starts in a different part of the world • Has their own color scheme and search criteria• Uses Google Maps • Could integrate other mapping solutions in• Database • Generic driving table with attributes • Not many tables (i.e. simple design) 12
Political contributors in NJ• Contributors by party contributed to… 13
Key Tables• Application Data • User Driven Data • Attribute • User • Category • User Attribute • People • User Attribute Color • People Attribute • User Option • Property • User Option User • People Property
Attribute Table• Attributes (fields) • Parent Attribute • Short Description • Text 1,2 • Long Description • Data 1,2 • Category • Number 1,2
Category Table• Categories of • Add a new category, assign Windows/Tabs it to attribute(s) and it shows up for all of the • Category ID people… • Short Description • Full Description • Parent Category
People• People • ID • First, Last Name • Voter ID • Property ID• People Attribute • People ID • Attribute ID • Start and End Date • Source, Integrity • Text, Number, Date Values
Properties and People• Property • ID • Address • Phone, Cell • Valuation • Lat and Long• People Property • People ID • Property ID • Start and End Date
User Specific Data• User Attribute Color • Colorization • Limiting data• User Option • Saved Filters • Descriptions, Include, Exclude • Starting map location• User Option User • Users who share a filter • Default filter
Functions• Get_Desc • Get_People • Gets the description for a • Brains for everything here specific attribute for a • Pipeline (or table-based) specific user function• Get_Option • Finds the people that live • Gets the default filter for a within the lat/long range user on the map, matching the filters
Let’s Add a New Category• Add the category• Change attributes to be in the category• Refresh the Materialized View• Test it out in the UI
Let’s Create a New Filter• Education of Too Youngs…• Color by education level• Include <18 year olds• Exclude other age categories• Save it
List of People Matching• Uses the same service as the map• Shows the details• Can be exported
Search• Person’s name• Municipality• Address• District
Finds People• Clicking View shows them on the map
Performance• Created materialized • Faster Spatial view Options • PEOPLE_MV • Change from lat/long to spatial • Indexed search column columns • sdo_geometry• Turned on query re- • Change query to write use sdo functions • ALTER SESSION SET query_rewrite_enabled=TRUE; • Or…I could have just changed queries (people_mv)
How the Maps Works• AJAX • select * from table(cast(get_people(:P6_SW • var url = "f?p=&APP_ID.:6: _LAT, :P6_NE_LAT, || v(app_session) || :P6_SW_LONG, :P6_NE_LONG, ::::P6_SW_LAT,P6_SW_LO :P1_COLOR_ATTRIBUTE_ID, NG,P6_NE_LAT,P6_NE_LO independent_authentication.g NG,P6_ZOOM,P6_MAPTYP et_user_id(:APP_USER),:P1_IN E:" + sw.lat() + "," + CLUDE_LIST, sw.lng() + "," + ne.lat() + "," :P1_REMOVE_LIST, + ne.lng() + "," + zm + "," + :P1_SHOW_UNCOLORED, mt; :P1_PEOPLE_ID,• See Page 6 in my nvl(:P1_ROWS,1000)) as people_Table)) application • XML Report • Cast function as if it’s a table
Other Options• Could use a Cloud provider • Yahoo Pipes requires data in XML format • Yahoo Pipes • Can come from ApEx too • Google App Engine • iPerspective• We put this in a hosted environment • Amazon EC2 • MaxApex
BTW – Political Reality• Politicians don’t decide much of anything • Their interns and experts do• They don’t want to pay for anything• They do know what groups they want to get to• They cannot craft a message to them – for fear one person will get the wrong message and spread it• They want to deliver generic messages• This killed Independent Nation in the end…
Getting Started, then Other Mapping I’ve Done• Heat Maps• GeoSearch• Highlight and Visual Search• Test Scores within a Radius• Get Creative!