Home of the Week: A build, and a hunt for barn board
by Carolyn IrelandThe listing: 7132 Campbell Rd., Campbellcroft, Ont.
Asking Price: $1,895,000
Taxes: $7,528 (2018)
Lot Size: 26 acres
Agents: Dee McGee and Tina Hubicki (Chestnut Park Real Estate Ltd.)
The back story
Moya McPhail and Ralph Walker discovered soon after they met that one of the things they shared in common was a desire to live in an antique English barn.
That was many years ago and the couple lived in historic Port Hope, Ont. for a time before they decided to move outside the town and find an old barn they could transform into a comfortable home.
The couple soon discovered, however, that converting a rustic barn into a house brings all sorts of challenges – including the potential for a colony of cluster flies that never want to leave.
“We said, ‘Okay, we’ll build a new barn,'” Ms. McPhail, principal at Moya McPhail Design, says.
About eight years ago, the couple purchased 26 acres north of Port Hope, near the tiny hamlet of Campbellcroft, Ont.
The land was undoubtedly carved from one of the old 100-acre farms in the rolling hills of Northumberland County, Ms. McPhail says.
One of the existing buildings was an industrial shed that a previous owner used for storing large equipment, then turned into a bungalow. Ms. McPhail eyed the 12-foot high ceilings and decided that the space would be ideal as the starting point for the new house.
“It was, for us, the perfect opportunity for the barn idea.”
There was also a garage with an addition on the rear that could provide living space while construction was underway on the main residence.
Ms. McPhail then set out to design a new house in the style of a barn that wouldn’t look out of place in the countryside of England.
The house today
While Ms. McPhail designed a new house, Mr. Walker was scouring Ontario for salvaged beams from tumble-down barns. His search took him north to Orillia, south to Dunnville and east to Kingston and Napanee.
Today the new part of the house has an open living area with a height that reaches 22 feet in the glass lantern atop the building.
The antique beams weren’t sturdy enough to support the structure so the builder used beams of new material. Mr. Walker found an old-fashioned sawmill in Northumberland and worked with the owner to reclaim the surface of the old wood and use it to clad the modern beams.
“I was his helper,” Mr. Walker says.
The couple documented the laborious process of skimming wood from 18-foot beams in photographs that now hang in the mud room.
Ms. McPhail, meanwhile, started by creating a dining room large enough to accommodate the heirloom furniture that was passed down to her from her mother.
“This was really important to us,” she says of the large dining table and chairs. “My grandmother had it shipped from Scotland.”
Sliding glass doors in the dining room provide a view of the pond. They also let in the breeze when the weather’s warm.
Ms. McPhail and Mr. Walker often have dinner gatherings for friends from Port Hope or visiting family.
The kitchen at the centre of the home has an 11-foot island where guests can gather during dinner preparations.
“I wanted it to be a community kitchen and I wanted it to be part of the living space,” Ms. McPhail says.

Built-in appliances and lots of storage space keep the kitchen uncluttered. A wood floor with an antiqued finish is comfortable underfoot, while the rest of the main living space has heated concrete floors that have been stained and polished.
“We wanted it to be kind of unique, but we didn’t want it to be too pretentious,” Ms. McPhail says of the interior.
In the living area, a Rumford fireplace has a surround of metal panels with the appearance of oil-rubbed bronze.
“I think mantles are overrated,” Ms. McPhail says, of her choice to eschew a more traditional fireplace design. She adds that the finish ties in well with the hardware on the doors and windows.
The original part of the house has been converted to a bedroom wing.
Rondelle windows in the main living area bring light to the bedroom wing, which was rebuilt with new floors that accommodate the home’s geo-thermal heating and cooling system.
The former entryway has been turned into a garden room with a sink useful for potting plants.
There are four bedrooms and a semi-ensuite main bathroom.
In the master bedroom, tall windows provide views of the land and forest outside. Floor-to-ceiling built-in cupboards provide closet space.
An ensuite master bathroom has a stand-alone bathtub with views to the outdoors. There’s also a walk-in shower and a water closet.
The area behind the separate garage now provides separate home offices for Ms. McPhail and Mr. Walker. There’s also a bathroom and an outdoor terrace.
Real estate agent Dee McGee of Chestnut Park Real Estate Ltd. says the space could easily provide a guest house with two additional bedrooms.
The best feature
The 26-acre parcel of land includes five acres of perennial gardens, a meadow, hardwood forest and stands of evergreens. The couple dubbed the property “Willowae” for the black willow trees which grow there.
“It’s like a little mini provincial park,” Mr. Walker says.
A former wetland has been turned into a pond stocked with fish.
“I had to learn how to grow things in wet soil,” Ms. McPhail says of the area around the pond.
Ms. McPhail also created a spiral garden around a well.
Mr. Walker built stone walls and a set of stairs to partially enclose the raised septic bed at the rear. The design is known as a “shepherd’s pass” in Europe because the sheep are funneled into the narrow stairs in single file.
Ms. McPhail says trails through the forest provide a tranquil place to walk.
“That’s where the deer sleep in the daytime,” Mr. Walker says.
 We have a weekly Real Estate newsletter to help you stay on top of news on the housing market, mortgages, the latest closings and more. Sign up today.
home of the week
Home of the Week: Country comforts in small-town Ontario Asking: $1,195,000


ECL 201 News and Updates
Note: Always remember, mere video lectures are never a replacement for classroom teaching.
About Me
B.E. (Electronics & Communication),
M.Tech (Electronics),
Ph.D. (Electrical Engineering)
Contact Information
--------------------------------------------------Office Address:
--------------------------------------------------
Dr. Ankit A. Bhurane
Faculty Room (222)
Second Floor, IIIT Building,
BSNL RTTC, Seminary Hills 440006
--------------------------------------------------
Contact:
--------------------------------------------------
Email: ankit.bhurane[at]gmail.com
Mobile: (+91)<PHONE_NUMBER>/9970199225


Tamar Braxton Twerks In Front Of The Camera And People Understand Why David Adefeso Is So In Love With Her
by Alexis StoneTamar Braxton sings, and twerks in front of the camera, and fans cannot have enough of her. She looks gorgeous with a curly hairdo, and people cannot stop praising her in the comments.
Someone told her: ‘@tamarbraxton you are flawless and this hair is everything I’m so here for it!! ❤❤❤’ while another fan told Tamar that they completely understand why David Adefeso is so in love with her.
A follower wrote: ‘I shouldn’t be smiling this hard after I just got the worst news 😭😭’ while another fan said: ‘She looks like a light skin Toni Braxton in this video .. my Tay Tay is gorgeous.’
Someone else posted: ‘If you call em daddy,😩😩😩😂🤣🤣🤣 that’s all I heard watching this with no sound.’
Another follower said: ‘I LOVE when you rock darker hair colors… just brings all that melanin magic out!’
A fan posted: ‘@tamarbraxton omg I love you so much Mrs. Braxton and I been wanted to meet you for the longest hope you notice me😍😍😍’
Someone else wrote: ‘Sis you still got that struggle twerk going on 🤣🤣🤣 but the glow is obvious your face is gorge.’
Other than this, it was reported just the other day that the gorgeous singer performed with a hurt leg, but she still managed to impress her audience just like always.
‘My ankle wanted to swell and act stupid🙄 BUT!! We still got our lives last night! Come meet us tonight get your tickets at Bethesda supper club.com,’ Tamar captioned her post.
Fans loved her voice and look, regardless of the injury and pain she had to bear while on stage.


This is an introduction to memory analysis. Terms and notions described here are used in the Heap Profiler UI and the corresponding documentation. You need to be familiar with them to use the tool effectively.
Common Terms
This section describes common terms used in memory analysis, and is applicable to a variety of memory profiling tools for different languages. If you already have experience with, say, Java or .Net memory profilers, chances are high that you are familiar with them.
Object Sizes
Memory can be held by an object in two ways: directly by the object itself, and implicitly by holding references to other objects, and thus preventing them from being automatically disposed by a garbage collector (GC for short).
The size of memory that is held by the object itself is called shallow size. Typical JavaScript objects have some memory reserved for their description and for storing immediate values.
Usually, only arrays and strings can have significant shallow sizes. However, strings often have their main storage in renderer memory, exposing only a small wrapper object on the JavaScript heap.
Nevertheless, even a small object can hold a large amount of memory indirectly, by preventing other objects from being disposed by the automatic garbage collection process. The size of memory that will be freed, when the object itself is deleted, and its dependent objects made unreachable from GC roots, is called retained size.
Retaining Paths
The heap is a network of interconnected objects. In the mathematical world, this structure is called a graph. A graph is constructed from nodes connected by means of edges. Both nodes and edges have labels: nodes (objects) are labelled using the name of the constructor function that was used to build them, edges are labelled using the names of properties.
The sequence of edges that needs to be traversed in order to reach one object from another, is called a path. Usually, we are only interested in simple paths, i.e. paths that do not go through the same node twice.
We call a retaining path any path from GC roots to a particular object. If there are no such paths, the object is called unreachable and is subject to disposal during garbage collection.
Dominators
The dominator of an object A is an object that exists in every simple path from the root to the object A. That means, having the dominator object removed from the heap (with all its references being cut), the object A will become unreachable from GC roots, and will be disposed.
Dominator objects comprise a tree structure, because each object has exactly one dominator. A dominator of an object may lack direct references to an object it dominates, that is, the dominators tree is not a spanning tree of the graph.
Collection-like objects may retain big amounts of memory, when they dominate other objects. Such nodes of the tree are called accumulation points.
V8 Specifics
In this section we describe some memory-related topics that only correspond to the V8 JavaScript virtual machine. Reading them might help to understand why heap snapshots look this way.
JavaScript Object Representation
Numbers can be presented either as immediate 31-bit integer values (they are called small integers, or SMIs for short), or as heap objects (called heap numbers). The latter are used for values that can't fit into the SMI form, e.g. doubles, or for cases when a value needs to be boxed, e.g. for setting properties on it.
String content can be either stored in the VM heap, or externally in the renderer's memory. Content received from the Web (e.g. scripts sources) doesn't get copied onto the VM heap, instead, a wrapper object is created and used to access external storage.
When two strings are concatenated, their contents are initially stored separately, and are joined only logically, using an object called cons string. Joining of the cons string contents is performed only when it's needed, e.g. when a substring of a joined string needs to be constructed.
Arrays are used extensively in the V8 VM for storing large amounts of data. Dictionaries (sets of key-value pairs) are backed up by arrays. Thus, arrays are the basic building block for JavaScript objects. A typical JavaScript object posesses two arrays: one for storing named properties, another for storing numeric elements. In the case when the number of properties is very small, they can be stored internally in the JavaScript object itself.
A map object describes object kind and its layout. For example, maps are used to describe implicit object hierarchies, as described here.
Object Groups
Each native objects group is made up from objects that hold mutual references to each other. Consider for example a DOM subtree, where every node has a link to its parent and links to the next child and next sibling, thus forming a connected graph. Note that native objects are not represented in the JavaScript heap — that's why they have zero size. Instead, wrapper objects are created. Each wrapper object holds a reference to the corresponding native object, for redirecting commands to it. In its own turn, an object group holds wrapper objects. However, this doesn't create an uncollectable cycle, as GC is smart enough to release object groups whose wrappers are no longer referenced. But forgetting to release a single wrapper will hold the whole group and associated wrappers.


Wow. Another day another opportunity for memes. Warning: Memes may cause cardiovascular nirvana, rheumatoid halitosis, and cognitive dissonance.
Lack of masculinity
This amazing typo
“Black slave” AG- money comes from Soros
Better to have civil discourse
So many me-s
Still seems about right. We’re all serfs on the plantation.
Bad apple is a really nice word for psychopathic killer
Selected quotes from Iranians… probably just selection bias
“Racism”
I don’t have a meme for this. It’s just creepy af.
This is probably for the best. We’ll see.

Maybe he gets it…
It’s a wicked web
That’s a creepy theart…
If only… still miss you brother
Alleged…
This page is synchronized from the post: ‘Meme the News!!!!- 5/9/18’


VIRTUOSITY A film review by Christopher Null Copyright 1995 Christopher Null
In the not so distant future (1999 A.D.), Virtual Reality has progressed to the point where the Virtual part isn't so clear. With the help of nanotechnology (read: really small) machines, VR simulations can take on a physical form composed of millions of these teeny robots. When a semi-crazed engineer decides to bring his ultimate bad guy VR program to life, he sneaks the chip into some of this robotic glop. Thus, Sid 6.7 is born.
Sid (Russell Crowe) is version number 6.7 of a compilation of 183 personalities: mass murderers, serial killers, and Hitler-types.  And who would have thought ... when you let Sid out of the lab, Sid wants to kill. Preferably on national television.
Enter Parker Barnes (Denzel Washington), ex-cop sent up the river for the accidental slaying of two people. Turns out that Barnes is the only one who has a chance of stopping Sid (see also, DEMOLITION MAN), so out of the lock-up he comes. Partnered with him is criminologist Madison Carter (Kelly Lynch), who holds her own as the first lead female I've seen in ages who *doesn't* get romantically entangled with the hero.
Full of wicked, cutting-edge special effects, VIRTUOSITY makes a strong entry into a summer of lifeless films. It takes a while to get rolling, and the early character development is weak, but pretty soon, everyone's caught up in this innovative take on the cat and mouse game. I won't spoil the twists, but the dynamic between Sid and Barnes is quite interesting to watch. Crowe, as Sid, is the real star, playing the megalomaniacal killer with perfect poise and egocentrism, eerily reminiscent of Malcolm McDowell's Alex from A CLOCKWORK ORANGE. The only complaint I have is that with 183 professional killers inside him, you'd think he'd be a better shot with a pistol.
VIRTUOSITY has its flaws, though. The main problem is that the premise of Reality vs. Fantasy isn't taken as far as it could have been (TOTAL RECALL was the last good example of this). The filmmakers have made it very clear which world we're in at all times, mainly because they're really, really busy showing off what their visual effects guys can do (expect an Oscar nomination). Supporting cast is also boring (even Academy Award winner Louise Fletcher (ONE FLEW OVER THE CUCKOO'S NEST) is wasted).
Director Brett Leonard, who just came off the dismal HIDEAWAY, has thankfully redeemed himself here. Maybe the best recommendation I can give is that VIRTUOSITY is still on my mind as I replay the intriguing parts, and that's all too rare in Hollywood these days.
RATING: ***1/2
+-------------------------------+ |* Unquestionably awful | |** Sub-par on many levels | |*** Average, hits and misses | |**** Good, memorable film | |***** Perfection | +-------------------------------+
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


NEXT GAMERS
What is Next Gamers?
Next Gamers is a student group within the MIT dorm Next House.  Next Gamers has both formal and informal gatherings. Sometimes we're hosting an event with snacks or a themed game night, other times a few people spontaneously get together to game in the evening or an individual can simply play a video game on their own.
How can you get involved?
Next Gamers typically hosts board game and video game events separately, so if you're interested in one or both, we encourage you to join Next Gamers! Regardless, membership is not a requirement to participate in Next Gamers events. If you do join Next Gamers, you become a general member (i.e. you don't join either half specifically), and can participate in any event freely.
Membership is open to any currently enrolled MIT student. You do not have to live in Next House to become a member of Next Gamers. We have no dues or prerequisites for members, and joining is super simple! First, you can either email<EMAIL_ADDRESS>to express interest or add yourself to the<EMAIL_ADDRESS>mailing list.
Then, once you participate in any Next Gamers affiliated event, you'll be considered a full member.
To get even more involved, you can run for a Next Gamers Exec position. We hold elections near the start of every Spring semester. For full details on the 5 Exec positions and how elections are run, refer to the Constitution on our People page.
What games do we have?
Next Gamers boasts a huge collection of both board games and video games (for the PS4). Check out the Games page to see a full catalog of our game collection as well as instructions on checkout and usage!
Who helps run Next Gamers?
We depend on all of our members to keep the group thriving! As far as official leadership goes, we have an Executive Board of 5 Nexties. For info on the current Next Gamers Exec as well as a peek at our full Constitution, visit the People page.


| Service Types | Service descriptions |
|---|---|
| Admin Support | The importance of administration is incontestable in any consideration of today’s world, whether it is business or technology. For the highest professional standard, optimization of departmental service quality and productivity most of the organizations are in need of additional or core administrative stuffing facility, that’s where we came in. Our highly trained and experienced admin support team is ever ready to answer your call of duty. EZ Cyber Solutions been providing the following services successfully in this perspective since 2013. Data entry, Personal / Virtual assistance, Project management, Transcription, Web research, Other – admin support; To learn more about our services, or pricing detail, or to contact our customer support team, please submit an inquiry. |
| SALES & MARKETING | Are you an entrepreneur or business owner? Are you looking for someone to promote your website or product or services? Are you searching the ways to reach global clients with your own innovations? Then you have come to the right place! EZ Cyber Solutions is one of the best digital or online sales & marketing organization across the world. We can transform your thoughts into your business reality. The sales & marketing team of EZ Cyber Solutions now providing the following services: i) Display advertisement, ii) Email & marketing automation, iii) Lead generation, iv) Market & customer research, v) SEO – Search Engine Optimization, vi) SMM – Social Media Marketing etc. Please submit a quarry to learn more about us… |
| WRITING | EZ Cyber Solutions has a great reputation for it’s various writing services. The writing experts of EZ Cyber Solutions are ever ready to work for your company or projects with high quality and on time services. They understands your needs first to provide you the most accurate and customized writing services. The ultimate customer service is what defines EZ Cyber Solutions to the world community. List of services: i) Academic & Research, ii) Copy writing, iii) Creative writing, iv) Editing & proofreading, v) Articles & blog writing, vi) Resume & cover letter writing, vii) Technical writing, Viii) Web content writing, To learn more about our pricing and services, please submit a quarry. |
| DATA SCIENCE & DATA ANALYSIS | The advancement in the information & communication technology has turned the world into a global village, where most of the organizations have a digital presence or online business management system. Data analysis & data visualization has become the most significant expertise of any organization to survive and make constant profits in this technologically advanced as well as competitive market. EZ Cyber Solutions has data science department where our experts team is providing high quality services with a relatively competitive price. EZ Cyber Solutions has already helped more than 300 companies to adopt profitable business strategies using most advanced data visualization tools like Google analytics, R, Crystal report, MATLAB, MS Excel etc. and their core subject knowledge in applied mathematics, statistics as well as operation research . We look forward to helping your business as well. A brief list of our services: i) A/B Testing, ii) Data visualization, iii) Data extractions, iv) Data mining & data management, v) Quantitative analysis etc. Please submit a quarry to learn more about our services and pricing. |
| CUSTOMER CARE | EZ Cyber Solutions has a very dedicated customer support team. There are two units of customer support experts. One is in charge of our internal customer care and another one is for our global outsourcing service. We have successfully managed to develop a strong network of clients and in the core of this achievement we have your trust, which is a great motivation for us to continue out support with the highest professional standard. please submit a quarry to learn more about our customer service facilities and pricing. |
| WEB & APPS DEVELOPMENT | EZ Cyber Solutions is a platform where we accumulated all the IT solutions in one place. As part of this initiative, we have third party contract with the most advanced web & apps development teams, who are capable of giving you the best product with incredibly low price. All you need is to let us know your requirements and we will come up with the best solutions for that, with your appointed time as well as highest quality possible. We also offer post project free one year maintenance for our services and a money back guaranty. |


IxD Experiment with coordinated views and GTFS data
In this short note, I explore a interaction design technique for creating coordinated views between a map visualisation (of a GTFS bus route) and a simple slider.
Garmin Public Transit Notification App I
In this note I begin designing a Garmin Smartwatch application that can notify me when I need to start walking towards the bus to make it home within a predefined time window. In this first part, I take a scenario-based design approach and move from a few scenarios to identifying high-level design features and technical components using C4 diagrams.
It is the first part of a series where I try to move from idea and a simple use-case scenario to a full application using the steps I teach others.
Annual Rhythms in Electricity Consumption?
I’m trying to find out how to analyse and visualize electricity consumption. I got this brilliant idea to visualize my annual consumption in correlation to daylight. Surely, when I analyze and visualise our electricity consumption, it should change significantly with the annual changes in daylight?
Electricity Data Visualisation Experiments
When I need to learn a new dataset or API, I often start out by creating some smaller visualisation experiments. This way I can familirize myself with the data and get some visual feedback (and exercise my visualisations skills).
Conversation about HCI interdisciplinarity, its ‘core’, pedagogy and being kicked around by technology
Note: This is a repost from the Medium post for archival purpose and to play around with the format.
It is a summary of conversation animated by a couple of concerns. Firstly, the long-running conversation in HCI about its ‘status’ as a field and its constitution. And secondly, the overall feeling of what it’s like being ‘kicked around’ by technology, which we sensed much of HCI have experienced for a long time. The conversation is depicted here as a series of turns between Henrik and Stuart but this is mainly for the purposes of presentation. In reality, Henrik initiated some notes, and Stuart then provided further commentary on the notes.


I held my first very own Tech Talk on Friday. Since I got to pick the topic, I chose my favourite: higher-dimensional geometry! I'm fairly pleased with the resulting slides, especially since we did end up identifying two minor glitches in them, which I fixed and which do indicate I didn't end up putting people to sleep over this. So, without further ado, here are the slides:
Thanks to everyone who attended. And especially to anyone who asked good questions! :) If you're following along at home, the slides with the big Intermission text on them is where I switched to Topologic for some hands-on demonstations.


process_times()
Return a three element f64 array containing the cpu time that has been used by the program and the real time that has elapsed since it was started.
The first element of the result corresponds to "user" time in seconds, the second element corresponds to "system" time in seconds and the third element is the elapsed real time in seconds. On operating systems that can't differentiate user and system time, the system time is zero. On operating systems that can't measure cpu time, the user time is equal to the elapsed real time and the system time is zero.


album
artist
display images
Query should contain either the keywords to search, or the ID to lookup
Market should be left blank unless you wish to limit results to only one market


## How to Use?
1. start icomet-server
2. assuming you are running nginx listening on port 8080, if not,
you will have to modify "8080" in this file to the exact port number,
configure your nginx.conf, add the lines below and restart:
location ~ ^/icomet/.* {
rewrite ^/icomet/(.*) /$1 break;
proxy_buffering off;
proxy_read_timeout 60;
proxy_connect_timeout 60;
proxy_pass http://<IP_ADDRESS>:8100;
}
3. navigate your web browser to http://<IP_ADDRESS>:8080/web/long-polling.html
or http://<IP_ADDRESS>:8080/web/forever-iframe.html
4. open a command line terminal, execute
curl "http://<IP_ADDRESS>:8000/pub?cname=a&content=hello"
Server push messages:


In this section we aim to provide a quick introduction for each module available in the Fisheries Trade Tools. The short videos below show the primary features developed in order to the user be able to interact accross the modules.
Module: Getting Data
It shows how the user can build the data for each country wished. After the selction, the user must save the data shown, otherwise the data will be discarded.
Steps:
Module: Mapping
Any change in the mapping table should be save, otherwise all alteration made will be lost. The save function creates a working table which is not considered in the process until to be updated. It works like a temporary table. Once that the user updates the mappping table, i.e., export all changes to the production table, then all modifications will be considered to the next steps.


Welcome to CyberSecurity Initiative
What is Cyber Security?
Cybersecurity is the practice of protecting systems, networks, and programs from digital attacks. These cyberattacks are usually aimed at accessing, changing, or destroying sensitive information; extorting money from users; or interrupting normal business processes. Implementing effective cybersecurity measures is particularly challenging today because there are more devices than people, and attackers are becoming more innovative.
READ MOREWhat is Hacking?
Hacking refers to activities that seek to compromise digital devices, such as computers, smartphones, tablets, and even entire networks. And while hacking might not always be for malicious purposes, nowadays most references to hacking, and hackers, characterize it/them as unlawful activity by cybercriminals—motivated by financial gain, protest, information gathering (spying), and even just for the “fun” of the challenge.
READ MOREHow Cyber Security works?
Using software to protect your systems and networks acts as a deterrent for hackers who prefer easy targets that require less effort and carry less risk of being caught. Although no software can promise 100% impenetrability, security software makes it that much harder for cyber criminals to create access points, and we can think of it as an extra layer of protection from hackers.
READ MOREWhy is it important?
Cybersecurity is important because it encompasses everything that pertains to protecting our sensitive data, personally identifiable information (PII), protected health information (PHI), personal information, intellectual property, data, and governmental and industry information systems from theft and damage attempted by criminals and adversaries.
READ MORE


A brief summary of personal skills and qualities drive and motivate me everyday
Able to create, imagine, initiate and learn new languages, experiment and look for new solutions.
Life is a process of constant and never ending learning and self-improvement. I'm aware that the more one knows, the better the chances of confronting challenges in daily reality.
I'm usually fully focused and possess a locked mentally on the goals I seek to achieve.
I fully understand that some answers can only be realized when one has an intuitive understanding of the world and the problem being faced.
Name:
Kelvin Murithi
Phone:
+(254) 705419309
Email:
flyboypac@gmail.com


The data distribution of the selected partition
will be displayed. If the data is not
computed yet, the appropriate compute jobs for the selected partition will be launched.
Select partition
Data distribution jobs are running and not finished yet. Please come back later when all jobs have
finished.


--- # Basics subject: Save on your refill of Sonne. description: Better skincare for better skin. # Headlines headline_1: Let’s make this easy. headline_2: We’re here to clean it up --- {{> header }} {{> socials }} {{> footerMarketing }}


Appendix C. The Regular Expression TesterTesting and experimenting with regular expressions requires the use of an application or language (and possibly the writing of code, too). To help you learn and test regular expressions, you may find it useful to download and use the standalone Regular Expression Tester application that was created specifically for this book. This appendix briefly describes this application.
|


Starter Template
A modern responsive frond-end framework based on Material Design
Speed up development
We did most of the heavy lifting for you to provide a default stylings that incorporate our custom components. Additioanly, we refined animations and transitions to provide a smoother experience for developers.
User Experience Focused
By Utilizing elements and priciples of Material Design , we are able to create a framework that incorporate components and animations that provide more feedback to users. Additionally, a single underlying responsive system across all platforms allow for a more unified user experience.
Easy to work with
We have provided detailed documentation as well as specific code examples to help new users get started. We are also always open to feedback and can answer any questions a user may have about Materialize.


Simple Interest Calculator
Amount
Rate
No. of Years
1%
1
2
3
4
5
6
7
8
9
10
15
20
25
30
40
50
60
70
80
90
100
Compute
© Everyone Can Get Rich


Updated
2020, ##, ##
COVID-19 Test Processing
Daily Report
TESTS RUN YESTERDAY
yesterday
TOTAL TESTS SINCE MARCH 25, 2020
{{TOTAL_COMPLETED}}


| Resource | Description |
|---|---|
| GET /api/v1/agency | List agencies |
| GET /api/v1/agency/:id | Show specified agency |
| POST /api/v1/agency/:id | Create an agency |
| PUT /api/v1/agency/:id | Update agency attributes |
| DELETE /api/v1/agency/:id | Delete specified agency |
| Resource | Description |
|---|---|
| GET /api/v1/package | List user packages. If user is an operator, the endpoint will show all packages related to his agency. |
| GET /api/v1/package | Show specified package. If user is a member, it will only show packages related to him. |
| POST /api/v1/package | Create package |
| PUT /api/v1/package/:id | Update package status and dates |
| Resource | Description |
|---|---|
| GET /api/v1/rate/calculate | Calculate package shipping cost |
| GET /api/v1/rate | List Mailcourier package rates |
| GET /api/v1/rate/:id | Show specified package rate |
| POST /api/v1/rate | Create package rates. Default status 0 |
| PUT /api/v1/rate/:id | Update specified package rates attributes |
| DELETE /api/v1/rate/:id | Delete specified package rates |
| Resource | Description |
|---|---|
| GET /api/v1/session | Show user oauth token using basic auth |
| POST /api/v1/session | Generate oauth token using basic auth |
| Resource | Description |
|---|---|
| GET /api/v1/user | List users |
| POST /api/v1/user | Create an user |
| GET /api/v1/user/:id | Show specified user |
| PUT /api/v1/user/:id | Update user attributes |


--- layout: post title: Registration Oasis date: 2003-11-01 19:53:15.000000000 -07:00 type: post published: true status: publish categories: - Case Studies tags: [] meta: _gcid: '47' _edit_last: '3110' _wp_page_template: default _intro_custom_banner: a:1:{s:3:"url";s:0:"";} _intro_text: default U_S_C_message: '' _dependencies: s:6:"a:0:{}"; _custom_background: a:5:{s:3:"url";s:0:"";s:16:"background-color";s:0:"";s:17:"background-repeat";s:6:"repeat";s:21:"background-attachment";s:6:"scroll";s:19:"background-position";s:8:"left top";} _bitly_trim: http://dddcommunity.org/?p=38 author: login: Vladimir Gitlevich email<EMAIL_ADDRESS>display_name: Vladimir Gitlevich first_name: Vladimir Gitlevich last_name: '' ---
At at large university I was brought in to work on a web based student registration system that interfaced to their mainframe system. The systems was to be deployed using WebSphere and EJBs. The existing mainframe system was to be reused and interfaced to by the new system.
I didn't know much about Session beans, or using the a web layer. I also didn't know much about the domain, though it is one we're usually familiar with at the surface: courses, sections, schedules, conflicts, registering, etc... There had been no work done modeling the application, or doing a UI. There had been work done on how to technically interface with the mainframe.
I sat down with my domain experts (mostly developers that had worked on systems there for many years. Occasionally I also talked to a systems analyst). From those talks I created a domain layer populated with appropriated classes – SectionLists, Sections, etc... I decreed that the middle tier would largely deal with this sane set of objects.
I made extensive use of the command pattern to deal with the distributed nature of the architecture. Those commands could then flow through the system. For example, there was a command to register a student for a particular section of a course. The UI layer could create this command and pass it to the mid tier. It would then be turned into an appropriate command for the mainframe host, processed, and finally the command result would be returned to the UI.
By making use of the model layer, and mocking up the host layer, the entire infrastructure could be tested with JUNIT. When the host interface portion was working, this could then be tested via JUNIT as well. It wasn't till the end of the project that the commands were slipped into the ultimate
UI/EJB framework. I had many talks with the UI developer who challenged that the various layers were working. Since the commands all worked via JUNIT, it was almost always a case of improperly using them, or of improper environment setup.
By using a common set of objects, across the tiers (except the host), all layers could reuse the objects, the common vocabulary, and the behavior and constraints of the objects. (For example, instead of having simply a collection of Sections, a SectionList could prohibit duplicates, or enforce other application rules).
The effort was a prototype. I left the project but later learned that virtually the entire set of commands and domain objects went intact into the final version.
©2003, Bruce Gordon


Email Details
Subject:
Lists to Be Sent To:
{ if(($c{email}->exists)&&(!$c{email}->is_sent)) { $OUT.=<<"+++";
+++ } }
{$c{list_description}}
From:
HTML URL:
HTML Content:
(will not apply if you have entered a
HTML URL)!
{$c{email}->get_value('html_content')}
Plain Content:
{$c{email}->get_plain_content}
Footer Text:
delete for
no footer
{$c{email}->get_plain_footer}
Send To A Friend Text:
delete for
no send to a friend
(this only works
for HTML emails)
{$c{email}->get_send_to_a_friend_footer}
{$c{email}->{error_text}}
{ if(!$c{email}->is_sent) { $OUT.=<<"+++";
+++ } }


{% capture panel_body %}
Leave a message for Congress
Take 5 minutes to fight campaign corruption.
Be Heard
{% endcapture %} {% include panels/panel_empty.html %}


--- layout: post title: Chapters 3 & 4 date: 2009-03-30 20:16:20.000000000 -06:00 type: post published: true status: publish categories: - Vlad in progress tags: [] meta: _gcid: '55' _gcuser: Vladimir Gitlevich content_type: book _bitly_trim: http://dddcommunity.org/?p=46 _edit_last: '3110' author: login: Vladimir Gitlevich email<EMAIL_ADDRESS>display_name: Vladimir Gitlevich first_name: Vladimir Gitlevich last_name: '' ---
25-Nov-2003
Domain Driven Design (Evans) II.
Notes by Jeff Miller
This meeting revisits the final published form of a book that SVP reviewed
in an earlier draft two years ago.
(some comments and questions unattributed)
(notes start with discussion in progress)
(previous to this point, Eric compared and contrasted model-driven
design with domain-driven design)
Eric: It depends on whether you demand that the classes in your model
have meaning in the domain.
Russ: "bits of responsibililty"
Eric: It matters that the classes in the model... The reason some
models give you that kick is that they are are close to the domain.
Robert: Is it easier to refactor the model, classes and objects, than
services?
Russ: Let me do a quick check here. "Most talented developers don't
have much interest in learning about the specific domain in which they
are working" ? (p.4) How true is that?
Robert: Probably, let's say, at Sun Microsystems, your domain is
technical stuff you're doing for someone else.
Eric: That's cheating. That's the exception that proves the rule.
("developers get interested in the domain when the domain is
technical").
Russ: Let's exclude technical domains, then. What do people think?
Mark: Key word... I think "talented" is misplaced. I'd use
the
generalization without this word.
Eric: You may be partly defining "talented" as a person with
enough
insight to be interested in the domain.
Russ: And connecting "talented" with "successful".
Mark: People may not care about "widgets" in the product sense
rather
than the GUI sense. The only way you can care about it is to really
learn it.
Eric: Often on larger projects there's an infrastructure team broken
off... The most talented developers get to pick what team to be on.
Where do they end up? The infrastructure team. They don't work on the
account reconciliation feature. Instead they do fancy framework
generalization about the UI or something.
[...]
Eric: I'd certainly like for talented developers to have interest in
the domain. When they were working on the account reconciliation code,
they did a better job than the person who replaced them. So part of
what I'm hoping from domain driven design is that we could give the
talented person a better way to think about the domain, a way that it
can be interesting. I don't think the group here is representative.
Russ: Of talented developers?
(general laughter)
Eric: Present company excepted.
Chris: Technical knowledge is often more transferable than domain
knowledge.
Eric: And the way domain-related development (notice I don't say
domain-driven development) is done is often very boring. And when you
add things to your resume... if you say you have mastered the specifics
of the cargo handling operations at a port, it would just be clutter.
You wouldn't put it on at all.
Chris: Yes, accounting, finance, there are a few generic, transferable
domains that would count.
Eric: And does your peer group of other developers... they think you're
really smart when you can do cool technical tricks. Do other
developers think you're smart when you find a better way to reconcile
accounts? No.
Tim: Interest...my personal interest sometimes in the complexity of a
domain. Multi-state tax law for multinational companies. So if I
tackle it as a complex problem, it's interesting, but if I got assigned
to it, it's not clear at the outset that it's actually quite an
involved problem. Now I'm working on music playlists, I'm a little
more interested in the domain.
Eric: If people in some domain want a new application to do something
more than create, read, edit, delete...

Eric: Sometimes, perhaps. People may not support and understand your
way of thinking. But think how exciting it could be to be among the
first to see rhyme and reason in how things move. Before that, people
would speculate on motion, and often they got it wrong.
John B: It's a very similar analogy, actually, to what often happens
in
software development. Speculation rather than testing.
Eric: We're still at that level with domain modeling with most domains.
There are a few that are better done, say accounting. There are some
powerful abstractions, a ledger, credit, debit, double-entry. It's
well on its way. But most other domains are virgin territory.
Eric: What's missing... what's missing is the idea that domain modeling
is a discipline. Saying "I'm good at diving into domains, finding
a
model, building software based on that." Being able to put that on
your resume, having it mean something among your peers.
Chris: I've certainly seen contract positions advertised for people
with skill doing domain modeling. They call them "Rational Rose
Modelers" or "UML modelers for the domain."
Eric: I guess there's a silver lining in that cloud.
Russ: Are you sure it's silver?
John B: There's this meta-skill, then, domain modeling, that you can
capture, otherwise you couldn't write a book on it.
Eric: Well, I guess _I_ couldn't write a book on it if it didn't exist.
Q: How do you tell if you have a good model for a domain, vs. a good
architecture in the model. You were saying that there are a lot of
things in the domain that aren't captured well by UML.
Eric: Perhaps it would be best to keep moving through the material to
answer that question.
Eric: Sometimes, when the code is closely tied to the model. You
might choose to move a method, to re-assign a responsibility. That can
mean the model has changed; the model in your head, not necessarily a
particular UML diagram.
Russ: You had a good example of having to create a larger-grained set
of objects in the system to be able to work well with an object
database, and that caused you to re-think the model and how you were
going to deal with the domain.
Eric: In our original model, perhaps we might call it an analysis
model, we had a large number of small objects in intricate
relationships. It was a serious performance problem in connection with
the database. So we needed to model the problem with fewer objects.
There were 3 possible outcomes: (1) the same concept, but different
implementations, rolling in subcomponents into the object which
aggregates them, absorbing variant behavior; (2) a modified model, not
as nice, but it works; (3) a new way of thinking about the problem that
also works well as a way of breaking down the domain. We had some of
each. But in each case, we said the way we think about the problem
will be tied to the implementation. Maybe the model will not be as
beautiful, but we do have to support it. There might be "teaching
models" to tell people about the domain, but there's only one domain
model that
Russ: Does anyone have a story about when there was an analysis model
that was at variance with the code?
(1): I had this issue. There were often subtle problems with the
model, things that were not implementable. We had to go back to the
analysts again.
Tim: We didn't go back to the analysis phase.
Russ: And you'd already used that time?
Tim: Yes. We would have had to cut into QA time. And yes, it was a
problem that the model was not really useful. Did the analysts get
paid? Yes. It met their criteria. Measured against our phase, well,
no. We had a notion of the model, but we were too busy coding
workarounds.
Eric: Did you change your objects to reflect new concepts or stick with
the original ones from the model?
Tim: Both. Sometimes we worked around it with a mapping layer, other
times the model was loosely enough defined that we could implement it
in a reasonably flexible way.
Eric: I'd like to distinguish between "UML", a representation
of what
someone thought was the model at some time, and "the model",
which is
how you are thinking about and communicating with the code.
Tim: An interesting part of this is that I'm sure the analysts had a
model which was not the UML. But it was transcribed to UML and we just
had to guess at what was missing.
Eric: UML just doesn't capture enough.
Russ: Isn't that what OCL is for?
(2): Usually you give people X and they are happy, occasionally people
ask for X, you give them X, and they wanted Y. But when you hand it
over, it does not provide people what they need to accomplish the task
in the environment -- speed, memory use, usability -- not a conceptual
mismatch, necessarily, but a poor implementation in terms of the
working context.
Eric: Extreme Programming says, "just don't try to understand it
all up
front". So they have elaborate practices to stay customer-focused
and
deliver something useful. You can get something done, delivering
feature-by-feature code. But part of the story is also agility,
responsiveness to changing requirements. Partly it's things like test
frameworks, refactoring, etc. to keep the _code_ quality high. But if
you have also been using domain driven design, the internals of the
software reflect what the customer cares about and wants to do, not
just the external interface, the services the software provides. So
you need a close relationship with a domain expert. This is not
necessarily the customer who is choosing and assigning value to
features, or the user who will be working about it. There is iteration
in code, while in domain knowledge, there's what I call knowledge
crunching, reflecting on what you have learned about the domain and
evolving your model to a more representative and more useful state.
Eric: Probably that's true.
Russ: It goes further than that. By modeling the domain well, by
coding that into the software, you also find that the next thing you
haven't designed yet, you're more likely able to fit it into the
existing software because of the way its structure reflects the
structure of the domain.
Eric: XP has more things to guard your process against spinning your
wheels and not making useful progress. You could apply a very
straightforward, procedural approach to an iterative development and
make good progress.
(2): You're talking about more about architecture, and I'm talking
about features.
Eric: You'll notice I don't actually talk about architecture except
toward the end of the book when I talk about architecture teams as a
way to organize larger development efforts. But for a domain with
complex requirements, where there are interrelationships among the
various pieces, then model-driven, domain-driven design is important.
Keith: I've worked with code where there's a model, but it has kind of
evaporated, it isn't visible in the code as you see it and work with
it. Do you need, at least, a good object oriented language?
Eric: Well, code of that description is not a model-driven design. And
how you get one is much of what this book is about. Especially part 2,
and part 3 is about getting a good one. So modeling -- what your
"Rational Rose Modeler" would be expected to do (looking at
Chris), is
the opposite of hands-on modeling.
Keith: In the case I'm thinking about, the team created a model and
implemented it.
Eric: Does it show up in the code?
Keith: You can't really see it. It's sort of like a fragmented mirror
or a Picasso painting.
Eric: Then it's not model-driven design.
John B: "Team = Code" ?
Keith : Conway's Law? The structure of the code reflects the structure
of the organization?
Russ: I think you were a little harsh about not being able to do
model-driven design in C. You can do object-like stuff if you don't
need inheritance. We had structures of function pointers, we passed
around a "this" pointer, and everything corresponded and felt
much like
you would feel programming in an object-oriented language.
Eric: I don't want to overstate it. But I think that choosing the
right language is really powerful. It's harder to write, it's harder
to read.
Russ: But I think you could read the code and see right back to the
model we were working with.
Mark: It depends more on the programmer. I've seen awful code in C++
and really clean code in C.
Eric: I'm not trying to pick good and bad among languages. But when
you want to do model-driven design...the model belongs to some style,
and mostly these days the model is in terms of interacting objects. So
choosing an object-oriented language gives you code which can be
expressed in terms closer to the model than other languages can easily
express. You need a programming language which supports your modeling
paradigm, whether it's object-oriented, mathematical equations, or a
chain of logical rules.
Eric: I'd certainly like to see a language that's better at supporting
object-oriented design than Java. I have worked with Smalltalk, which
I consider to be better, but it is not radically better, not in a
different league.
Keith: Have you considered Scarlet? You write the algorithmic parts,
the object and methods, in one part of the language, and separately
describe how the objects are composed.
Eric: You could consider the current fashion for compiling a system out
of UML and OCL as a programming language which is close to the model,
but I don't think it's a good programming language. I'd have to see
Scarlet to see what I think. I don't want to get into any religious
wars about programming languages, I'd just like to point out that you
want to choose the right tool for the job.
Eric: I try to stay away from the dichotomy between the "analysis
model" and the "implementation model". Each one is useless
in
isolation, since the analysis model doesn't tell you whether the system
actually obeys, say, a constraint you've noted in the model. This is
not to say that all parts of the model are equally important, but that
the core, meaningful, abstract concepts from the domain are expressed
in the model that your implementation is based on.
Tim:
Eric: I advise people not to get attached to any particular model.
There are always alternatives, or almost always. If you find that your
original model does not work for building the system, then I take that
as a sign for rethinking the model. So the shift I describe in the
book -- from composed groups of little objects, to a stack of tokens
and a parser which interpreted these as a little language. It was
equally elegant, but perhaps less accessible to some developers. And
it reflected a different model, a different way of thinking about and
expressing the concepts from the domain.
Russ: Key points from the introduction?
Eric: One point is not so much about whether you have a good model
(that's more part 3), it's about how to keep your model in sync with
your development.
Eric: I go further than that. I say everyone should be modeling, and
everyone should be programming. If you aren't doing that, you aren't
doing model-driven design. You have to do modeling as you program.
Russ: Let me say something heretical. What if you had a "thinker"
and
a "coder", and the coder goes back whenever there is a problem,
and
asks the model to be adjusted and fed back. Is that model-driven
design? Clearly there are communication costs.
Eric: I guess that could be model-driven design. But if you adapt your
implementation to be more do-able, you introduce a change in the model.
I wouldn't advocate that. You want someone's eyes on the code who
understands the model, and can recommend whether it's consistent with
the model to tweak the code a bit for the sake of implementation, or
whether there is some issue in the model which needs to be re-thought.
Every time I've seen this approach succeed, the people who had created
the model were also participating in coding it.
(1): Scaling of this approach?
Eric: Part 4 of the book discusses this. But there are also issues
about how to partition the model into chunks which make good objects
(Part 2).
Russ: Like the comparison between the elements of the model... and
saying that they are not things that you try to identify like
constellations in the night sky.
John: I see that when people try to reverse-engineer a system. They
look at all the stars, and say, "well, there's a scorpion in there
somewhere."
Russ: And you can extract the patterns with an automated tool.
Chris: (p.70) You seem to have defined the "application layer"
very
strictly. I might equate it to a "services layer". There is
some
business knowledge, often, in doing things like exposing tasks, in
doing error handling. That amounts to business logic. Recovery
strategies in the case of failures, perhaps.
Eric: I might not want to put those in the application layer. I talk
about services in the domain layer, services which are fundamentally
domain behavior, and others which are more application behavior.
Chris: I agree that there are two kinds of services. But I find that
even in things, like services for aggregating network traffic, there is
some business logic.
Eric: All right. Then there's a little workflow in there. But you
want to push it back if you can. A lot of workflow is not really
business related. Things like going from screen to screen in an
application. Or having an application which constructs a new account
in a particular way, but it doesn't necessarily matter that you do it
in that way to the domain.
Chris: I'm thinking of metaservices, which call to services which exist
in the domain. Have you worked with Struts or JFaces?
Eric: I've been on such a project, but I wasn't involved in that part
of the application.
Chris: I wanted to ask about applications of Struts or JFaces which
might be either in harmony with this approach, or at variance with it.
Eric: J2EE entity beans, I guess the recommended way to use them,
really separates your data from your behavior. Does Struts carry
baggage like that? I don't know.
Chris: What I wanted to see is if the recommended or common patterns
for using Struts were problematic. As an example from a different
framework, say, the .NET suggested practice of exposing RowSets all the
way from your database up to your UI objects?
(discussion of Microsoft approach... view through to the database as
a
way of scaling through stateless servers)
Azad: And what you might call, not the "Smart UI", but the
"Smart
Database" pattern, controlling things with stored procedures. For
certain applications, you can get quite a ways with this approach.
Eric: You could make it work in a model-driven way, but your modeling
paradigm would have to be in terms of entities, relationships,
triggers, etc. It strikes me as a rather masochistic way to do
modeling.
Russ: That's kind of a lead-in to the Smart UI pattern.
Bob: First... having the domain objects responsible for persisting
things. But unfortunately I've seen readers and writers all over the
system, knowing bits and pieces about the serialized form, breaking
encapsulation. I wanted to check in about where you were going.
Perhaps "what" should be persisted should belong to the domain
object,
and "how" should belong to the implementation?
John B: I think that is Chapter 6.
Eric: Yes. Let me just refocus on the goal. When you're looking at
the domain object, you can think about its domain meaning, not about
the implementation details of how it talks to the database. If you
have a framework that lets you disentangle the domain meaning and
behavior with the implementation.
Bob: I've used Aspects a lot lately, to isolate things like
persistence.
Eric: I've dipped my toe into this, and I thought it was neat. But
I'd just like to focus on whether the persistence framework helps you
read the code in terms of its domain nature (or at least gets out of
the way), or whether it does not.
Russ: I was curious to know about how aspects and refactoring interact
in practice. How well do they work together. Bob, have you been using
Aspects in a serious way?
Bob: More playing at this point, but I can give you a pointer to a blog
from a fellow at Microsoft, an entry something like "A Year With
Aspects", where he talks about the difficulties with multiple aspects,
dependencies and duplications, after working with AOP for a while.
Azad: How does the model interact with documentation?
Eric: If you start with the core notion that the model is a set of
concepts that you want to be able to communicate, to understand, to use
in talking about the domain and the software implementation, then any
way of documenting that is compatible with that is reasonable.
Azad: Or if you were dealing with something that was more heavily
rules-based. Or when your domain experts are expressing the domain in
different terms than you find useful for implementation.
Eric: I'd recommend using the same style for capturing domain knowledge
from the experts and for designing and implementing the system.
Azad: No question about that.
Eric: Or have a rules engine and integrate that into the system. But
it may be worse than modeling their rules as Java objects. You still
need a ubiquitous language which you can communicate in terms of the
domain, in terms of the design, and the implementation.
Robert: Perhaps in a lot of domains, there are a lot of little surface
rules in the processes you go through. But in order to build things
that will go a longer way, I feel there's a danger in not trying to
discover the objects.
Eric: The concepts of the domain.
Eric: It's hard to carry two models with a mapping between them. The
mapping is itself a modeling problem.
(4): Or in some languages, being able to overlay knowledge about how
to
connect things, to expose different ways of
Eric: So you're introducing candidate abstractions into the language,
in the terms of the domain?
Russ: So if your domain experts are not communicating in terms which
map very closely to the system you are building, you've lost a lot of
their expertise.
Azad: So I think that we disagree on one little point.
Eric: "Never do it" on my side, vs. "Avoid it." But
when I expressed
it that way in the book, the reviewers recommended that I remove all
the caveats and reservations. I really do believe that whenever there
is one model for talking to domain experts and another model for
programming, then we are really missing the boat. We won't get the
agility in the design.
Azad: Partly what I was trying to express was that in the currently
popular programming language, whatever that might be, there may be some
concepts that are key to the domain that aren't easily mapped or
modeled.
Mark: Something I wanted to ask that isn't in the book so explicitly
... trying to get the developers to buy in, having the whole team
involved ... but what about management? How do you change the culture
of management to allow teams of developers to do these things?
Eric: Managers are very buzzword-driven. If they are interested in the
buzzword (today maybe it's XP, tomorrow maybe Domain Driven Design),
you'll be more likely to be able to do it.
Robert: Managers also pay attention to success as well as buzzwords.
You try and make strong connections between this approach and
successful projects.
Eric: On the web site, there's actually something called "Managers'
Guided Tour To Domain Driven Design"
Mark: Is it in PowerPoint format?
Russ: A good lead-in to Smart UI. You really need forward-looking
management to take on model-driven development with nice testing and
all that. Smart UI gives you a quick burst of productivity up to a
certain point, then you run into a point where you can no longer scale
it. Model-driven and domain-driven... you start with something kind of
linear, lose a little from complexity, gain some from the set of
strong, interacting abstractions. It takes a little while for the more
advanced techniques to really bring home their benefits.
Eric: I do say that MDD is more important for cases where the domain
is
complex.
Bob: It's robustness. YAGNI works if you don't have to go back and
touch it. MDD is about robustness. A small change in the problem
domain is a small change in the objects and classes.
John B: XP's "system metaphor" speaks to this.
Eric: YAGNI applies a lot in model driven design, as well. For
analysis modeling, you don't have something that tells you when you can
stop.
Eric: Do the _simplest_ thing that can possibly work... it might be
really hard. Thinking profoundly in order to express the problem most
elegantly and most simply. It's really a profound breakthrough.
John B: Kent Beck expressed this as a question: "What is the simplest
thing that can possibly work? Why aren't you doing that?" rather
than
simply "Do the simplest thing that could possibly work." There's
a
level of reflection there that's missing without the questions.
Eric: Especially when you know you'll have a version 2, you need a
robust way of developing software like model-driven design. There may
be simple ways to solve simple problems where you may not have to use
such techniques. If your problem fits into a pre-existing tool, get it
off the shelf.
John B: I often start with a smart UI. I start in domains where the UI
is the biggest risk. Then I factor the domain objects out of the UI as
time goes on. I'm working on a graphical interface to a text-based
conferencing system, and I can see there are a set of objects wanting
to come out. But the next several stories don't call for that to
happen.
Russ: And then, when you've learned what you can from the first
prototype with the smart UI, you have a choice between factoring out
the domain objects, and retiring the prototype and re-building it.
Eric: You may have different experience from I about how easy it is to
refactor out of a smart UI. My experience has been that when I step
into a client's place where there isn't some sort of layered
architecture present, then I often will say that I do not know how to
help them. I've had a lot of trouble with escaping from a bad design.
(discussion of experiences factoring out of a smart UI: John B, Russ,
Jeff M)
Eric: Very early in the history of a system, especially if you are
probing for key risks, you can get away with a "Smart UI". But
if you
plan your system to have any sort of a life in development, you should
plan to have a domain layer.
Bob: How about non-layered architectures. Pipes and Filters?
Blackboard?
Russ: Composite?
John B: Composite sounds like the structure of the domain layer.
Russ: Are we the only people who have made a success out of a
non-layered architecture? (Russ describes a system that separates I/O
and other implementation concerns in specific service classes, but not
separate layers).
Eric: The four-layer architecture diagram I present is probably too
specific. The essence is isolating the domain. Have a domain layer
representing the software constructs relevant to business logic. It
sounds like what you describe is not a layered architecture, but it is
a separation of the domain. It's too bad it comes across as so much of
a specific prescription.
Bob: For domain-driven business applications, they pretty much do look
a lot like this layered architecture you present.
(partial list only)
Don Chin
Vince Nibler
Tim Huske
Mark Taylor
Robert Benson
Russ Rufer
Jeffrey Blake
Ken Scott-Hlebek
Carlos McEvilly
Batman/Tao
Tracy Bialik
Jeff Miller
Chris Lopez
John Brewer
Azad Bolour
Keith Ray
Bob Evans
Walter Vannini
(and several more, total 23)


Esmond Y. Kim
Contact
Portfolio
About
Portfolio
Introversion
A link to the deployed Introversion App.
A link to the Introversion repository.
Random Password Generator
A link to my Random Password Generator App.
A link to the Random Password Generator repository.


vignettes/v01-dataone-overview.Rmd
v01-dataone-overview.Rmd
The dataone R package enables R scripts to search, download and upload science data and metadata to the DataONE Federation. This package calls DataONE web services that allow client programs to interact with Member Nodes (MN) and DataONE Coordinating Nodes (CN).
See the full manual (help dataone
) for documentation.
To search the DataONE Federation Member Node Knowledge Network for Biocomplexity (KNB) for a dataset:
library(dataone)
cn <- CNode("PROD")
mn <- getMNode(cn, "urn:node:KNB")
mySearchTerms <- list(q="abstract:salmon+AND+keywords:acoustics+AND+keywords:\"Oncorhynchus nerka\"",
fl="id,title,dateUploaded,abstract,size",
fq="dateUploaded:[2013-01-01T00:00:00.000Z TO 2014-01-01T00:00:00.000Z]",
sort="dateUploaded+desc")
result <- query(mn, solrQuery=mySearchTerms, as="data.frame")
result[1,c("id", "title")]
pid <- result[1,'id']
The metadata file located in the above search can be downloaded with the commands:
The metadata file that describes the located research can be viewed in an XML viewer or text editor, once it is written to a disk file. This file details a data file (CSV) that can be obtained using the listed identifier, using the commands:
dataRaw <- getObject(mn, "df35d.443.1")
dataChar <- rawToChar(dataRaw)
theData <- textConnection(dataChar)
df <- read.csv(theData, stringsAsFactors=FALSE)
df[1,]
Uploading a CSV file to a DataONE Member Node requires user authentication. DataONE user authentication is described in the vignette DataONE-Federation
.
Once the authentication steps have been followed, uploading is done with:
library(datapack)
library(uuid)
d1c <- D1Client("STAGING", "urn:node:mnStageUCSB2")
id <- paste("urn:uuid:", UUIDgenerate(), sep="")
testdf <- data.frame(x=1:10,y=11:20)
csvfile <- paste(tempfile(), ".csv", sep="")
write.csv(testdf, csvfile, row.names=FALSE)
# Build a DataObject containing the csv, and upload it to the Member Node
d1Object <- new("DataObject", id, format="text/csv", filename=csvfile)
uploadDataObject(d1c, d1Object, public=TRUE)
The dataone
R package vignettes can be viewed using the R vignette
command, for example vignette("dataone-overview")
.
The dataone
vignettes describe these topics:
Searching for data in DataONE described in vignette searching-dataone.
Downloading data from DataONE described in vignette download-data
Uploading data to DataONE is described in vignettes upload-data and update-package.
The DataONE Federation is described in the vignettes DataONE-Federation.
Work on this package was supported by:
Additional support was provided for working group collaboration by the National Center for Ecological Analysis and Synthesis, a Center funded by the University of California, Santa Barbara, and the State of California.


Train Scheduler
Your one-stop app for all train info!
Current Train Schedule
Train Name
Destination
Frequency (min)
Next Arrival
Minutes Away
Add Train
Train Name
Destination
First Train Time (HH:mm - Military Time)
Frequency (min)
Submit


Cheshire3 Troubleshooting |
This page contains a list of common Python and Cheshire 3 specific errors and exceptions.
It is hoped that it also offers some enlightenment as to what these errors and exception mean in terms of your configuration/code/data, and suggests how you might go about correcting them.
The object the system is trying to use is null i.e. of NoneType. There are several things that can cause this:
HINT: The reported attribute might give you a clue to what type the object should be.
An instance of object type x, has neither an attribute or method called y.
ACTION: Check the API documentation for the object-type, and correct your script.
An object referred to as 'x' in the configuration for object 'y' has no configuration.
ACTION: Make sure that object 'x' is configured in subConfigs, and that all references to object x use the correct identifier string.
The zeerex_srx.xml file contains XML which is not well formed.
ACTION: Check this file at the suggested line and column and make the necessary corrections
If the error message looks like the following:
File "../../code/baseStore.py", line 189, in generate_id id = self.currentId +1 TypeError: cannot concatenate 'str' and 'int' objects
... then it's likely that your recordStore is trying to create a new integer by incrementing the previous one, when the previous one is a string!
ACTION: This can easily be remedied by addind the following line to the <paths> section of the <subConfig> that defines the recordStore:
<object type="idNormalizer" ref="StringIntNormalizer"/>
If there is space left on your hard drives, then it is almost certainly that the linux kernel has run out of semaphores for mod_python or Berkeley DB.
ACTION: You need to tweak the kernel performance a little. As root, you'll need to: echo "512 32000 32 512" > /proc/sys/kernel/sem. For more information, see: Clarens FAQ
The method you're trying to use requires x arguments, you only supplied y arguments.
ACTION: Check the API for the required arguments for this method.
HINT: All Cheshire3 objects require an instance of type Session as the first argument to their methods.
Oh Dear! Somewhere within one of your documents/records there is a character which cannot be encoded into ascii unicode.
ACTION: Use a UnicodeDecodePreParser or PrintableOnlyPreParser to turn the unprintable unicode character into an XML character entity.
Despite the best efforts of the preParsers there is badly formed XML within the document; possibly a malformed tag, or character entity.
ACTION: Check the document source at line x, column y.


Home
Menu
Online Order
Team
Contact
Welcome!
I'm a paragraph,check here to add your own text and edit me; it's easy , just click "edit text" or double click me to add your own content and make changes to the font.
Reservation


Alan Turing
Learn about Alan Turing!
The enigma who shortened world war two by two years, founded computer science and changed our lives forever.
The fact remains that everyone who taps at a keyboard, opening a spreadsheet or a word-processing program, is working on an incarnation of a Turing machine.
- Time magazine 100 Most Important People of the 20th century
Story of His Life
1912
Alan Turing was born in London, England
1934
Turing graduates from Kings college with first-class honours in mathematics
1936
Turing published a paper which mentioned a machine that code take over the role of every machine
1938
Turing obtained a PhD from Princeton
1939
Turing started work at Bletchly Park where worked on several things related to world war two, partially decrypting the german codes
1945
Turing was awarded the OBE by King George VI
1952
Turing was convicted for homosexual acts with Arnold Murray and given hormonal treatment to 'cure' him
1954
Turing passed away due to cyanide poisoning
1996
The annual Turing award started being giving out for technical or theoretical contributions to the computing community. The technical equivalent of the nobel prize for computers
1999
Time magazine named Turing as one of the 100 Most Important People of the 20th century
2013
Queen Elizabeth II signed a pardon for Turing's conviction for gross indecency


CrimPapers
Articles published on 28 April 2020
On 28 April 2020, 7 new articles were published in 5 journals.
Editorial Statement
Regulating Undercover Policing: Subjects, Rights and Governmentality
Gender and White-Collar Crime: Convenience in Target Selection by Thomas Dearden, Petter Gottschalk
Correction To: Understanding the Prevalence and Situational Characteristics of Hostage and Crisis Negotiation in England: An Analysis of Pilot Data From the National Negotiator Deployment Database
Online Social Support For Intimate Partner Violence Victims in China: Quantitative and Automatic Content Analysis by Tsz Hang Chu, Youzhen Su, Hanxiao Kong, Jingyuan Shi, Xiaohui Wang
Policy Roles in Promoting Affordable Housing For Survivors of Intimate Partner Violence by Rachel Keefe, Sur Ah Hahn
Does Sexism Mediate the Gender and Rape Myth Acceptance Relationship? by D. J. Angelone, Nicole Cantor, Tiffany Marcantonio, Meredith Joppa


cradle deploy production- Deploy static assets to Amazon S3:
cradle deploy s3- Deploy static assets including the Yarn "components" directory:
cradle deploy s3 --include-yarn- Deploy static assets including the "upload" directory:
cradle deploy s3 --include-upload


Problem
The current Creative Commons infrastructure buildouts use Debian GNU/Linux AWS EC2 instances with EBS volumes. Depending on chance (or race conditions), the mapping of block devices can be different from one host to another or between reboots.
Occasionally, devices can respond to discovery in a different order in subsequent instance starts, which causes the device name to change. (Amazon EBS and NVMe on Linux Instances - Amazon Elastic Compute Cloud)
Our Solution
Modern Amazon Linux AMIs resolve this by providing a udev
rule, but Debian
GNU/Linux does not yet do this. To ensure our systems are configured correctly,
At Creative Commons, we use the device specified during provisioning (ex.
/dev/xvdf
) to identify the correct NVMEe device. We then format it with a
label that can be used mounting during subsequent reboots.
Thankfully, AWS documents the the device specified during provisioning (ex. /dev/xvdf
):
For Nitro-based instances, the block device mappings that are specified in the Amazon EC2 console when you are attaching an EBS volume or during AttachVolume or RunInstances API calls are captured in the vendor-specific data field of the NVMe controller identification. (Amazon EBS and NVMe on Linux Instances - Amazon Elastic Compute Cloud)
We use SaltStack (creativecommons/sre-salt-prime
) to:
- Install the
nvme-cli
package - Use the
nvme
command to detect which/dev/nvme?n?
contains spec (ex.xvdf
) in the NVMe vendor specific data - Create a symlink (ex.
/dev/xvdf -> /dev/nvme1n1
) so that SaltStack can use/dev/xvdf
for the initial setup - Perform the intial setup
- Delete the symlink since:
- The initial setup formatted the volume with a label that is used to mount the filesystem
- There is no guarantee the symlink will be accurate on subsequent reboots and it might cause confusion
The states/mount/init.sls
state includes a complex shell
command (with Jinja2 variables) that loops through the NVMe devices and finds
the correct one:
for n in /dev/nvme?n? do if nvme id-ctrl -v ${n} | grep -q '^0000:.*{{ spec_short }}' then ln -s ${n} {{ spec_long }} fi done
Example variable values:
| Jinja2 Variable | Example Value |
|---|---|
{{ spec_short }} |
xvdf |
{{ spec_long }} |
/dev/xvdf |
Related Links
- Cloud/AmazonEC2Image/Buster - Debian Wiki
nvme-cli
package details in Debian buster- Debian buster — Debian Manpages
Other Solutions
While doing additional research for this blog post, I found additional solutions to the same problem. They're all good, but I apprecite the simplicity of a temporary symlink for setup versus maintaining custom udev rules (maybe I can help contribute a udev based solution to Debian or Debian's EC2 image). I can also easily imagine a more complex solution being a better fit if/when our infrastructure provisioining become more complex.
- oogali/ebs-automatic-nvme-mapping: Automatic mapping of EBS volumes via NVMe block devices to standard block device paths
- udev rule that invokes a Bash script to create symlinks
- CoreOS
- udev rules that invokes a Bash script to create symlinks
- AWS EBS NVMe udev rules
- udev rule that invokes a Pyton script to create symlinks
- this is a copy as Amazon only provides access to the source of Amazon Linux from within an Amazon Linux AMI: The yumdownloader --source command line tool provided in the Amazon Linux AMI enables viewing of source code inside of an Amazon EC2. (Amazon Linux AMI FAQs)


Meuporg: Emacs Integration
This file is part of the documentation of meuporg.
Table of Contents
1 Emacs minor-mode
If you are wise enough to have made the decision to use emacs, then your decision is even wiser now! If you did add the meuporg.el to your loaded files then emacs will automatically turn on the meuporg minor-mode (which is signaled by "!M!" in the mode-line) when a file is in a directory with a meup.org file in one of its parents. This mode provides elisp functions used to interact with meuporg and items, shortcuts to easily access these and fontifying of standard items.
2 Elisp Functions
2.1 Keyboard Shortcuts
The default prefix for all meuporg-mode commands is "C-!".
| Shortcut | Description | elisp function |
|---|---|---|
| C-! u | Save, and Update the main file (even when called from another file). | meuporg/update |
| C-! o | Open the main File. | meuporg/open-main |
| C-! n | Go to the Next item in the file. | meuporg/go-to-next-item |
| C-! p | Go to the Previous item. | meuporg/go-to-previous-item |
| C-! l | Highligths the items in the current-file and Lists them in another window (see Item List) | meuporg/show-items |
| C-! i t | Insert a "TODO" item. | meuporg/insert-todo |
| C-! i c | Insert a "CONTINUE" item. | meuporg/insert-continue |
| C-! i i | Insert a "IMPROVE" item. | meuporg/insert-improve |
| C-! i k | Insert a "CHECK" item. | meuporg/insert-check |
| C-! i f | Insert a "FIXME" item. | meuporg/insert-fixme |
| C-! i r | Insert a "FIXREF" item. | meuporg/insert-fixref |
| C-! i s 1 | Insert a "SECTION" item. | meuporg/insert-section |
| C-! i s 2 | Insert a "SUBSECTION" item. | meuporg/insert-subsection |
| C-! i s 3 | Insert a "SUBSUBSECTION" item. | meuporg/insert-subsubsection |
2.2 Item List
The function meuporg/show-items creates a new buffer containing all the items in the current file. These are listed in the order in which they appear, each on one line and a color code displays known items in some colour. It also uses specific items called structural items to make sense of the file.
2.2.1 Structural items
As a good programmer, you give your code a structure. I personnaly go further and give a tree like structure using a system inspired by LaTeX section, subsections, etc. For instance, the file itemDb.py of meuporg contains the code used to select only the items corresponding to a given criteria. It it structured like this:
SECTION Boolean management SUBSECTION Attribute class SUBSECTION Not class SUBSECTION AlwaysTrue class SUBSECTION AlwaysFalse class SUBSECTION And class SUBSECTION Or class SUBSECTION Criteria class SECTION A poor man's database for the items SUBSECTION Sorting methods SUBSECTION Obtaining items from the db SECTION Tests
Note that meuporg is very clever and uses LaTeX's "\section{}" as structural items. Thus, using meuporg/show-items in a TeX file will display something like this.
A structural item is just a regular item, except that it must have one of these names.
| name | depth |
|---|---|
| SECTION | 1 |
| SUBSECTION | 2 |
| SUBSUBSECTION | 3 |
| LEV1 | 1 |
| LEV2 | 2 |
| LEV3 | 3 |
| LEV4 | 4 |
| … | … |
| LEVN | N |
2.2.2 Use of the item list
The list of items uses its own shortcuts: when the cursor is on it, you can use any of these keys.
| key | description |
|---|---|
| q | Kills the buffer containing the item list and closes its window |
| RET | Opens the file containing the item at the line of the item under the cursor and kills the item list |
| <right> | Opens the file containing the item at the line of the item under the cursor and leaves the cursor in the item list |
| p | Moves cursor to the previous SECTION |
| n | Moves cursor to the next SECTION |
3 Syntax highlighting
As soon as a word is enclosed between exclamation marks, its font is changed.


Welcome to the home of the Monkees
We love to perform live shows, even at custom venues!
Subscribe to our newsletter to get the latest scoop right to your inbox.


Matrix Filler
YourNameHere
Dubs:
100
Continue this game later by saving this link!
Highscores
Name
Level
Dubs
delete me pls
instructions go here


| skimage.exposure.adjust_gamma(image[, ...]) | Performs Gamma Correction on the input image. |
| skimage.exposure.adjust_log(image[, gain, inv]) | Performs Logarithmic correction on the input image. |
| skimage.exposure.adjust_sigmoid(image[, ...]) | Performs Sigmoid Correction on the input image. |
| skimage.exposure.cumulative_distribution(image) | Return cumulative distribution function (cdf) for the given image. |
| skimage.exposure.equalize(*args, **kwargs) | Deprecated function. Use equalize_hist instead. |
| skimage.exposure.equalize_adapthist(image[, ...]) | Contrast Limited Adaptive Histogram Equalization. |
| skimage.exposure.equalize_hist(image[, nbins]) | Return image after histogram equalization. |
| skimage.exposure.histogram(image[, nbins]) | Return histogram of image. |
| skimage.exposure.rescale_intensity(image[, ...]) | Return image after stretching or shrinking its intensity levels. |
Performs Gamma Correction on the input image.
Also known as Power Law Transform. This function transforms the input image pixelwise according to the equation O = I**gamma after scaling each pixel to the range 0 to 1.
| Parameters : | image : ndarray
gamma : float
gain : float
|
|---|---|
| Returns : | out : ndarray
|
Notes
For gamma greater than 1, the histogram will shift towards left and the output image will be darker than the input image.
For gamma less than 1, the histogram will shift towards right and the output image will be brighter than the input image.
References
| [R75] | http://en.wikipedia.org/wiki/Gamma_correction |
Performs Logarithmic correction on the input image.
This function transforms the input image pixelwise according to the equation O = gain*log(1 + I) after scaling each pixel to the range 0 to 1. For inverse logarithmic correction, the equation is O = gain*(2**I - 1).
| Parameters : | image : ndarray
gain : float
inv : float
|
|---|---|
| Returns : | out : ndarray
|
References
| [R76] | http://www.ece.ucsb.edu/Faculty/Manjunath/courses/ece178W03/EnhancePart1.pdf |
Performs Sigmoid Correction on the input image.
Also known as Contrast Adjustment. This function transforms the input image pixelwise according to the equation O = 1/(1 + exp*(gain*(cutoff - I))) after scaling each pixel to the range 0 to 1.
| Parameters : | image : ndarray
cutoff : float
gain : float
inv : bool
|
|---|---|
| Returns : | out : ndarray
|
References
| [R77] | Gustav J. Braun, “Image Lightness Rescaling Using Sigmoidal Contrast |
Enhancement Functions” http://www.cis.rit.edu/fairchild/PDFs/PAP07.pdf
Return cumulative distribution function (cdf) for the given image.
| Parameters : | image : array
nbins : int
|
|---|---|
| Returns : | img_cdf : array
bin_centers : array
|
References
| [R78] | http://en.wikipedia.org/wiki/Cumulative_distribution_function |
Deprecated function. Use equalize_hist instead.
Contrast Limited Adaptive Histogram Equalization.
| Parameters : | image : array-like
ntiles_x : int, optional
ntiles_y : int, optional
clip_limit : float: optional
nbins : int, optional
|
|---|---|
| Returns : | out : ndarray
|
Notes
The algorithm relies on an image whose rows and columns are even multiples of the number of tiles, so the extra rows and columns are left at their original values, thus preserving the input image shape.
For RGBA images, the original alpha channel is removed.
References
| [R79] | http://tog.acm.org/resources/GraphicsGems/gems.html#gemsvi |
| [R80] | https://en.wikipedia.org/wiki/CLAHE#CLAHE |
Return image after histogram equalization.
| Parameters : | image : array
nbins : int
|
|---|---|
| Returns : | out : float array
|
Notes
This function is adapted from [R81] with the author’s permission.
References
| [R81] | (1, 2) http://www.janeriksolem.net/2009/06/histogram-equalization-with-python-and.html |
| [R82] | http://en.wikipedia.org/wiki/Histogram_equalization |
Return histogram of image.
Unlike numpy.histogram, this function returns the centers of bins and does not rebin integer arrays. For integer arrays, each integer value has its own bin, which improves speed and intensity-resolution.
The histogram is computed on the flattened image: for color images, the function should be used separately on each channel to obtain a histogram for each color channel.
| Parameters : | image : array
nbins : int
|
|---|---|
| Returns : | hist : array
bin_centers : array
|
Examples
>>> from skimage import data
>>> hist = histogram(data.camera())
>>> import matplotlib.pyplot as plt
>>> plt.plot(hist[1], hist[0])
[...]
Return image after stretching or shrinking its intensity levels.
The image intensities are uniformly rescaled such that the minimum and maximum values given by in_range match those given by out_range.
| Parameters : | image : array
in_range : 2-tuple (float, float)
out_range : 2-tuple (float, float)
|
|---|---|
| Returns : | out : array
|
Examples
By default, intensities are stretched to the limits allowed by the dtype:
>>> image = np.array([51, 102, 153], dtype=np.uint8)
>>> rescale_intensity(image)
array([ 0, 127, 255], dtype=uint8)
It’s easy to accidentally convert an image dtype from uint8 to float:
>>> 1.0 * image
array([ 51., 102., 153.])
Use rescale_intensity to rescale to the proper range for float dtypes:
>>> image_float = 1.0 * image
>>> rescale_intensity(image_float)
array([ 0. , 0.5, 1. ])
To maintain the low contrast of the original, use the in_range parameter:
>>> rescale_intensity(image_float, in_range=(0, 255))
array([ 0.2, 0.4, 0.6])
If the min/max value of in_range is more/less than the min/max image intensity, then the intensity levels are clipped:
>>> rescale_intensity(image_float, in_range=(0, 102))
array([ 0.5, 1. , 1. ])
If you have an image with signed integers but want to rescale the image to just the positive range, use the out_range parameter:
>>> image = np.array([-10, 0, 10], dtype=np.int8)
>>> rescale_intensity(image, out_range=(0, 127))
array([ 0, 63, 127], dtype=int8)


- Negotiation/Review
-
Salesforce
Last contact 4 days ago -
Samsung
Last contact 12 days ago -
Apple
Last contact 1 days ago -
Appboy
Last contact 7 days ago
- Proposal/Price Quote
-
Salesforce
Last contact 4 days ago -
Samsung
Last contact 12 days ago -
Apple
Last contact 1 days ago -
Appboy
Last contact 7 days ago
- Perception Analysis
-
Salesforce
Last contact 4 days ago -
Samsung
Last contact 12 days ago -
Apple
Last contact 1 days ago -
Appboy
Last contact 7 days ago
- Id. Decision Makers
- Value Proposition
- Needs Analysis
- Prospecting


{% extends "base.html" %} {% block title %} HomePage {% endblock %} {% block css %}{% endblock %} {% block content %}
Hi, I'm currently student at 42 (dev school Paris, FRANCE), during my study I can work on some personal stuff made with great people. I would share with you some experiences.


We buy users!
- optimize end-to-end communities
- orchestrate plug-and-play action-items
- reintermediate synergistic communities
- transition robust initiatives
- enable wireless supply-chains
- maximize sexy content
- syndicate sticky technologies
- redefine bricks-and-clicks content


175kg extreme body builder enlists in Bare Knuckle Fighting Championship
by Agency ReportAn extreme body trainer, Sajad Gharibi, better known as the Iranian Hulk due to his rare physique, is set to participate in the Bare Knuckle Fighting Championship.
The Bare Knuckle Fighting Championship is an American bare-knuckle boxing promotion based in Philadelphia.
It is the first promotion to hold an official state sanctioned and commissioned bare-knuckle boxing event in America since 1889; and its first event was held in 2018, with five events held as of April 2019, says the BKFC website.
The BKFC president, David Feldman, said of Gharibi: “This guy’s going to make his Bare Knuckle Fighting Championship debut in early 2020.
“We’re going to do a show entitled ‘USA vs. Iran: World War III.’
“He’s literally our biggest signing we’ve ever had.
“But he’s going to make his way over to Bare Knuckle Fighting Championship, he’s gonna make a home here, and we expect really, really big things from the Iranian Hulk,” Feldman said.
Gharibi, who currently weighs 175kg, gained fame in 2016 not only for his bizarre behemoth build but because he vowed to join the fight against terrorists in Syria.
His Instagram, which has 467,000 followers, is the place where he shows off his muscles and lifts more than his own body weight.


Normal mapping allows you to add surface details without adding any geometry. Typically, in a modeling program like Blender, you create a high poly and a low poly version of your mesh. You take the vertex normals from the high poly mesh and bake them into a texture. This texture is the normal map. Then inside the fragment shader, you replace the low poly mesh's vertex normals with the high poly mesh's normals you baked into the normal map. Now when you light your mesh, it will appear to have more polygons than it really has. This will keep your FPS high while at the same time retain most of the details from the high poly version.
Here you see the progression from the high poly model to the low poly model to the low poly model with the normal map applied.
Keep in mind though, normal mapping is only an illusion. After a certain angle, the surface will look flat again.
// ...
uniform mat3 p3d_NormalMatrix;
// ...
in vec3 p3d_Normal;
// ...
in vec3 p3d_Binormal;
in vec3 p3d_Tangent;
// ...
vertexNormal = normalize(p3d_NormalMatrix * p3d_Normal);
binormal = normalize(p3d_NormalMatrix * p3d_Binormal);
tangent = normalize(p3d_NormalMatrix * p3d_Tangent);
// ...
Starting in the vertex shader, you'll need to output to the fragment shader the normal vector, binormal vector, and the tangent vector. These vectors are used, in the fragment shader, to transform the normal map normal from tangent space to view space.
p3d_NormalMatrix
transforms the vertex normal, binormal, and tangent vectors to view space. Remember that in view space, all of the coordinates are relative to the camera's position.
[p3d_NormalMatrix] is the upper 3x3 of the inverse transpose of the ModelViewMatrix. It is used to transform the normal vector into view-space coordinates.
// ...
in vec2 p3d_MultiTexCoord0;
// ...
out vec2 normalCoord;
// ...
normalCoord = p3d_MultiTexCoord0;
// ...
You'll also need to output, to the fragment shader, the UV coordinates for the normal map.
Recall that the vertex normal was used to calculate the lighting. However, the normal map provides us with different normals to use when calculating the lighting. In the fragment shader, you need to swap out the vertex normals for the normals found in the normal map.
// ...
uniform sampler2D p3d_Texture1;
// ...
in vec2 normalCoord;
// ...
/* Find */
vec4 normalTex = texture(p3d_Texture1, normalCoord);
// ...
Using the normal map coordinates the vertex shader sent, pull out the normal from the normal map.
Earlier I showed how the normals are mapped to colors to create the normal map. Now this process needs to be reversed so you can get back the original normals that were baked into the map.
Here's the process for unpacking the normals from the normal map.
// ...
/* Transform */
normal =
normalize
( mat3
( tangent
, binormal
, vertexNormal
)
* normal
);
// ...
The normals you get back from the normal map are typically in tangent space. They could be in another space, however. For example, Blender allows you to bake the normals in tangent, object, world, or camera space.
To take the normal map normal from tangent space to view pace, construct a three by three matrix using the tangent, binormal, and vertex normal vectors. Multiply the normal by this matrix and be sure to normalize it.
At this point, you're done. The rest of the lighting calculations are the same.
(C) 2019 David Lettier
lettier.com