text:
A couple weeks ago I happened upon an article by Hacknot called "Invasion Of The Dynamic Language Weenies". It starts out well enough, complaining that our industry is dominated by unsubstantiated claims (what else is new?). I'm going to use the pronoun "he", because 1) I don't know this person's real name, and 2) it's a safe bet that the person who wrote this is male. That's just the reality of our industry today. He qualifies what he says by saying that this fever is invading the software development realm. I think it's been there for a long time. What about Sun's claims back in the mid-1990s that Java was "write once, run anywhere" technology? I can tell you from experience that was hype. Some people will tell you it still is.
At first he focuses on an article he read in the Feb. 2007 issue of IEEE Computer, called "Programmers Shift to Dynamic Languages", by Linda Paulson. He goes through some quotes that seem based more on emotion than fact and says, "See? This is what I'm talking about" (I'm summarizing). He then launches off of a claim that is made in the article:
What really piqued me was the following quote from Stephen Deibel, chairman of the Python Software Foundation and CEO of Wingware, a company whose principal offering is Wing IDE — an IDE for Python development. In support of the claim that DLs make for more compact code, the author offers the following quote from Deibel:
Python would use 10 to 20 percent of the amount of code that Java or C++ would use to write the same application.
He spends most of the rest of the article expressing doubts and sneering about this claim. I didn't like the tone, but I agree with the doubts. I think the claim is pretty extreme. Maybe Python in combination with some libraries that take care of a lot of stuff for the programmer, like Rails does for Ruby, does the trick. Like with O-O, programmers will probably gain more power out of the library they're using than from their own code.
It's amazing some of the stuff you can do with Rails. All you have to do is watch the "Creating a weblog in 15 minutes" screencast on the Rails site to see that. Try doing the same thing in Java or .Net and see if you can do it as fast and in as little code, to see what I mean. This isn't to say that Java and .Net couldn't get similar gains in app. development speed by taking the same approach Rails does. I think it'd be possible, but difficult to implement mostly because of the way Sun and Microsoft structured the mechanism of dynamically creating classes. It's so verbose as to cause most programmers to not even venture into this territory.
He continues:
Actually, I had trouble imagining how it might be true even within limited domains. Though I've principally used Java for the last 10 years or so, and C/C++ for five years preceding that, I have a basic familiarity with Python, having written a few utilities here and there with it. Reflecting on those experiences I could see no basis for such a startling claim to code brevity.
But it's not only this claim made for Python that I find impossible to reconcile with my own experience and reason. I find many of the claims made for other DLs to be equally dubious. I have a basic knowledge of DLs such as Perl and Ruby, and have worked with PHP quite a bit. Reflecting on my experiences with these, I cannot find any support for the grandiose claims made by proponents of some of these languages either.
I was tweaked by Hacknot's argument here, so I decided to do a case study using C#/.Net 1.x and Smalltalk. I cover a bit of that here, but I'll deal with most of it in a later post. I'll just say that in terms of lines of code written/generated, the differences were not as great as I anticipated. I was a bit surprised. Smalltalk still came out (slightly) ahead of C#. It was a simple example, the equivalent of a console application. Perhaps if the task was more complex Smalltalk's power would've been more evident. In my opinion the Smalltalk code was clearer in expressing the process. It took less time to write as well. In any case, I was humbled. I had been taken in by the notion that DLs would dramatically reduce the lines of code one would have to write, just generally. I never bought the notion that it would be 80-90% smaller, but I thought a reduction of 25-50% would not be unreasonable.
To set up further argument, Hacknot gives his definition of dynamic vs. statically typed languages:
What Is A Dynamic Language?
There is no canonical definition of a Dynamic Language, but some generalizations are possible. A dynamic language generally possesses one or more of the following features:
- Dynamic typing – Variables need not be declared before use. Their type is not determined until runtime.
- Runtime code modification – Class hierarchies and other logical aspects of the code's structure can be modified on the fly e.g. methods may be added to classes / objects.
- Interpretation – Source code is read at runtime, translated into machine code as it is read, then executed.
Dynamic languages include JavaScript, PHP, Tcl, Ruby and Python. They are often referred to as "scripting" languages.
By contrast, static languages have the following general features:
- Static typing – Variable and parameter types must be explicitly assigned so that they are known at compile time.
- Fixed code structure – Classes and other code structures are immutable at runtime.
- Compilation – Code is compiled into some intermediate form, often machine code, which is later executed.
Static languages include C, C++ and Java.
I've heard about others equating dynamic languages to "scripting languages". To me this never seemed justified. One would be hard pressed to find anyone familiar with Lisp or Scheme calling them "scripting languages". In my experience scripting languages are task-oriented. They're designed to help you glue processes together to create a new process. Some examples are Bourne Shell/BASH, and AWK. I would even include Perl in this list, because it first became popular among Unix system administrators as a more powerful scripting language (more powerful than writing a script in a shell). When web apps. became popular Perl got brought into that. From what I hear it's still a so-called "write-only" language. You can write a program in it, but it's difficult to go back and modify it later. It's been that way for years. Scripting languages are generally like this. Trying to read and understand a shell script can be a real trip.
Ruby, as an example, can be used as a scripting language, but it more closely resembles a language that would be used for building applications. I can't speak for Python too much because I haven't used it.
He is correct about his 3 properties of dynamic languages, but he leaves out some things. Here's a good article on dynamic language properties. Dynamic languages often have:
- Late binding, meaning that an object is not bound to other objects until it's called for at run time. This allows code to be modified while a program is running, and it'll still work. If you've used "edit and continue" within Visual Studio, this is emulating what I'm talking about here, within the context of an early-bound environment. Essentially what "edit and continue" does is recompile the changed module, and literally patches the updated binary code/bytecode into memory. Not easy to do. Even so, Microsoft developers missed this feature when Visual Studio.Net was first introduced, because it wasn't there. It was re-introduced with VS 2005. Late-bound languages accomplish the same thing naturally, though I imagine in a different way. They're designed for this.
- An Eval() function, which allows code to be compiled/interpreted dynamically at runtime. This may be incidental code that needs to be formed dynamically, executed for a particular function, and is then thrown away. It can also be used to create a script interpreter environment within a running application.
- Higher-order functions. This is a technical name for a function which takes one or more functions as argument(s), and/or returns a function. It's helpful to think of this in mathematical terms. For example, a derivative in Calculus takes a function and produces another function. This doesn't mean it has to be used in a mathematical context. I am saying that a background in mathematics helps in understanding this concept.
- Modification of code/code generation at runtime. This allows a program to modify a code library, or itself, to suit its needs. Lisp is well known for this.
- Closures, also known as Lambda expressions, or anonymous methods (recently added to .Net). They are blocks of code that basically act like a named function, but have no name. A program merely carries references to them for as long as they are needed. A key characteristic is like normal functions they are lexically scoped, which means that they acquire the scope where they are defined, no matter where they are ultimately invoked. They are often used to carry out an incidental step in a program. They come in handy, because they substitute for rarely used class methods. They are constructed or used at runtime by higher-order functions.
- Functional programming. Some dynamic languages have functional programming features. This means that the value of a variable, or the state of a program is always represented by a function, and a variable can only be assigned to once. (h/t to Giles Bowkett for the link)
- Continuations. These allow a program to access, and even change its own state at will. This can mean persisting the call stack and restoring it to its former state later, or it could mean changing where the return value of a function actually goes (ie. you can have it go somewhere else besides the function's caller).
- Introspection, also known as reflection. This allows a program to look at an object and figure out at runtime what type it is, what methods it has, what the parameters are to those methods, etc. Java and .Net have this as well.
- Macros. This is a meta-programming construct which allows the programmer to add new features to, or change the syntax in a dynamic language. Lisp is known for this feature. This is especially useful in creating embedded domain-specific languages (DSLs).
Giving Hacknot the benefit of the doubt, he was trying to come up with a list that was common to all dynamic languages. With the exception of Visual Basic, most other dynamic languages have some of the features I list above.
So what do these features get you? Here are some that I can think of:
- Modification of code/code generation at runtime – An example of this is what the Rails framework does, in the Ruby language. Based on metadata in the database it dynamically creates the code for the object-relational mapping (ORM) model, which the programmer can access from his or her application code, and it creates code for what's called a "scaffold" of the web client interface.
- Continuations – An example of where this becomes really powerful is the Seaside web framework for Squeak, and exception handling in CLOS (Common Lisp Object System) (h/t to Giles Bowkett).
- Closures – A good example of what this gains you can be seen in the following Smalltalk code:
| list output1 output2 |
list := #('Jim' 'John' 'Mike' 'Matt' 'Cindy' 'Melinda' 'Sally').
output1 := list collect: [:each | 'student: ', each].
output2 := list select: [:each | (each at: 1) = $M].
output1 will be all of the names with "student: " prepended to them: #('student: Jim' 'student: John' 'student: Mike' 'student: Matt' 'student: Cindy' 'student: Melinda' 'student: Sally').
The select method does a test, in this case it tests whether each name starts with the letter M. output 2 will be #('Mike' 'Matt' 'Melinda').
Both collect: and select: methods are higher-order functions that form new collections out of what's in "list", by iterating over it and sending each element to the closure that was sent to the method. The closure is in []'s. Each closure takes parameter(s) (the ":each" part) and produces output (whatever the expression in []'s evaluates to). The pipe ('|') separates the parameters from the code. Each time the closure is called by collect:, it returns "student: <student name>", and collect: adds that to a new collection it's made. Each time the closure is called by select:, it tests the value. If the closure returns true, that entry is added to the new collection select: has made. If it returns false, it does not get added. When collect: has iterated over all the elements of "list", it returns its new collection. The same goes for select:.
The actions carried out by collect: and select: could've been carried out using a foreach loop in .Net or Java, but once you understand the principles involved, this approach is simpler.
Hacknot is largely correct about his feature list for static languages, but I'd call them characteristics of an early-bound language instead, since I've read that Python has static typing features, as well as dynamic types. I'd take issue with his characterization that static languages have a fixed code structure. In large part this is true, but in Java and .Net it's possible to construct classes at runtime, and instantiate them, though this is very cumbersome. The other features I would add to the list Hacknot gave are:
- Early binding. All modules that make up a program are bound together into an executable at compile time. This executable image generally cannot be modified except by recompiling the program. Hacknot correctly points out that this doesn't mean that the entire body of source code has to be recompiled each time. The compilation step may only need to compile one module, which can then be integrated into the executable. There are other ways of speeding this up. Microsoft's compilers have incremental compilation, for example, where it tries to only recompile what's been changed inside a module, to make the process go faster. What this usually means is that in order for the program to be modified, it must be stopped, so that it can be recompiled, and then reloaded into memory for execution. In this case it must always start from a predetermined entry point in the program. ASP.Net somehow gets around this, probably by caching the JITted version of modules.
- Templates/generics, also known as parameterized types. This is a feature that was created in O-O languages to try to get around a couple of the inconveniences of static typing: manually creating repetitive code, or just taking Object as input and/or returning Object. They make it possible to create a class, or automatically generate a new function at compile time, where the programmer tells the class or function what type(s) to use within itself. This technically creates repetitive code, but the programmer doesn't have to deal with it. He or she can just deal with the code template. This preserves the feature of static typing, because once the new class or function is created the types within it are fixed. The way they're typically used are as a way of automating type casts.
Hacknot argues that static typing is like documentation for your "intent":
Consider that when you remove type qualification from the source code, you're also removing some documentation of your intent. . . . Consider also — if it's good form to give your identifiers meaningful names to aid in comprehension, isn't it equally good form to explicitly assign them types, for exactly the same reason?
Hacknot touches on this later, but I'll address it here. He likes static typing because it's something that can be caught by the compiler. This also means that all types are enforced. It's binding. It's not like a variable name where its meaning, as far as its type, is flexible. Even in strongly typed languages programming teams I worked with often named variables like "iCount" and "strItem", simply because we didn't want to bother to go looking in the code for where a variable was declared, and what type it was. We wanted to just get it from the name. This began to fade once I got into .Net programming, but I still used this technique from time to time.
As far as intent goes, let's take a look at some code. This is from a real project I did as a test case between C# and Smalltalk, which I'll discuss more in another post. I'm using a Hashtable, which contains arrays as values in the key-value pairs (this is .Net 1.x code):
public static bool ValidateClassForDepartment(
Employee.zDept department,
Employee.zClass employeeClass)
return (Array.IndexOf(((Employee.zClass [])
employeeClass) != -1);
By the way, just at first glance, is my intent clear here? What am I doing? Modern business apps. use collections all the time. They're essential to doing any serious development. But why would I have to do this, if strong, static types are supposed to help someone see exactly what my intent is? In fact a lot of functions within .Net and Java have been like this (for .Net up until Version 2.0). They input and return objects of type Object, because the designers wanted them to be generic. There was no way they could anticipate all of the different types that programmers would want to use and receive. Object is at the top of the class hierarchy, so it's a safe bet. But what does this do for the programmer? Not much. Not even a compiler could catch a type mismatch in this case. The error would not be caught until the program was run. Even in the days when the C language was popular, library functions often took parameters or returned a value of type void *, because there was no way to anticipate what a caller would pass in, or what type would be returned.
Say I was unfamiliar with this collection, but I knew I needed to fetch values out of it. I wouldn't know how the values were put in there, because I hadn't looked at that code yet. So I fetch out Objects. What can I do with them? There a couple ways I could figure this out. I could go to the source code where these objects were inserted, and see what type they are. Or, I could run the code in a debugger and inspect what types I'm getting. How is this different from using a dynamic language? It's not. I would use the same techniques to figure out what type(s) are in the collection.
In the case of the .Net code I am either forced to type cast what I get out of Hashtable to the type I need, or I suppose I could've subclassed Hashtable, and created my own type-specific accessors. Do I like extra overhead? No! This is the downside of static typing–inflexibility in library functions. Let's take a look at the same functionality in Smalltalk, a dynamic language, using a Dictionary container (the equivalent of Hashtable in .Net):
validateEmployeeClass: empClassSymbol
forDepartment: deptSymbol
^(deptClassAssociations at: deptSymbol)
includes: empClassSymbol.
I don't know about you, but this looks clearer to me; less cruft. The one part that's probably unclear to those unfamiliar with Smalltalk is that the "includes:" method is doing a test of whether the array includes empClassSymbol. I was able to get this clarity because of the dynamic nature of the language. I don't have to type cast because all variables are just references to objects. The references pay no attention to the type they're referencing. I can put an array into a Dictionary and get that same array back out when I access it.
Hacknot asks a question here, but then backs away from exploring the answer:
What about Python's other dynamic feature, runtime code modification. Can it result in a reduction in code volume of 80 to 90 percent? I find this impossible to assess, as I have insufficient familiarity with self-modifying code. But I might mention that this lack of experience is quite intentional. Even when I find myself using a language that permits runtime code modification, it is a feature I am loathe to use for it seems to me to hold great potential for producing a code base that is hard to understand, and therefore difficult to debug and maintain. Additionally, there is significant cognitive complexity that goes along with dynamically modifying code, not unlike the intrinsic difficulty that accompanies multi-threaded code. In my view, this level of complexity is to be avoided if possible.
I think all he'd have to do is take a look at a framework that generates its own code at runtime, like Rails, and then see how little code the developer has to write to see that perhaps runtime code generation/modification is a good thing.
He equates "runtime code modification" to "self-modifying code", and misses the point. He then says, "It's too scary, so I won't go there." This is just my opinion, but I think it's this sort of attitude which eventually leads to permanent unemployment among developers like him. The fact that he thinks multithreading is scary as well, and should therefore be avoided, only reinforces this point. Multithreading is increasingly becoming an issue that developers must deal with, because CPU cores are reaching a speed limit. The only way program speed can be increased is by multithreading. It's just a matter of how it will be achieved. I personally don't employ multithreading at the drop of a hat either, but I use it where I think it's necessary.
Self-modifying code sounds scary to a lot of folks, but think of it this way. A lot of .Net and Java programmers are increasingly writing parts of their programs in XML as a metalanguage. They run the XML through code generators to get their .Net or Java code pieces, using it to generate code that they're probably not going to look at. They just want the functionality out of it. Now imagine if instead of using XML they used .Net or Java code to generate code in their respective languages. This is essentially what "self-modifying code" is: generating code using the same language you are generating code for; using Java to generate Java code, or using .Net to generate .Net code. It doesn't have to be scary. Where I think it gets into "weird" territory for most people is that most dynamic languages put the programmer into a constantly "active" environment, like Lisp, Smalltalk, or Ruby. In these cases, there's little distinction between a program being in an active or inactive state, since it's possible to modify a program while it's running. This is unlike the traditional development model of writing code when a program is inactive (non-existent in memory), compiling the code, and then activating the program.
It's possible to generate Java code in Java and .Net code in .Net, but it's a verbose, laborious process. Some have ventured into that territory, but most have not. The reason "self-modifying code" becomes a feature in dynamic languages is the fact that it's easier to do.
Hacknot asks some good questions here, but the answer may be that the developers he's complaining about accept some things, which I've covered above, as a given. He doesn't seem to understand what their basis for judgement is:
To reiterate, the abbreviation that brings ostensible benefit to the original author of the code may be an impediment to other's comprehension of the code. Further, how do we know that the presence of compile-time type checking is not a nasty inconvenience, but an efficient eliminator of even nastier runtime errors caused by unanticipated type coercions? Without a detailed assessment of the negative effects of dynamic typing, how can we possibly determine its net effect on development speed? It seems to me that we can't. But it also seems that many DL enthusiasts are willing to ignore such inconvenient issues, even when directly confronted by them.
For instance, I notice that in "Programming Ruby", at the top of Dave Thomas' list of techniques for debugging Ruby problems is "Run your scripts with warnings enabled" — in other words, examine the sort of information that a compiler would already have given you, were you using a static language! This tendency to exaggerate the advantages of some language feature while deliberately ignoring the disadvantages of that same feature is characteristic of much DL advocacy.
I thought this quote was interesting:
Indeed, the gap between what I wrote and what I intended is where so many bugs lie, that I have come to appreciate the value of being as precise as possible in specifying my intent. Therefore I use Design By Contract, because each contract is one more opportunity for me to spell out to myself, the compiler, and future maintainers, exactly what I intend and what assumptions I'm making.
An awareness of my own limitations is the most significant factor in determining my approach to software development as a whole. That's why the dynamic language features that a weenie would call "flexible" I would call "an opportunity to err".
"The gap between what I wrote and what I intended is where so many bugs lie". I think this gets to the heart of why I like dynamic languages. The intent shines through more. It's not burdened with cruft, which obscures the intent of the process I'm trying to express, which it sounds to me is what he's talking about here. Design by Contract is not a bad idea, but this is not something that is achieved by merely using a statically typed language. It helps, but often more code needs to be added to insure that inputs and outputs meet requirements and assumptions. In a dynamic language a little more code would have to be added than in a static language to insure types were correct, and to produce an intelligable error message if they weren't.
A proposal in a paper I found while writing this might make things easier on everybody. It argues that future languages should contain both static and dynamic typing features, so developers don't have to make a black or white choice. And indeed, such languages are appearing. As I said earlier, I believe Python is one of them. Groovy is another. Whenever Microsoft comes out with their Orcas release of .Net, it will be another answer to this.
I thought his statement about "understanding my limitations" was interesting. He's basically saying, "This is my skill level and I'm sticking to it," which is fine. If he wants to stay where he is, he has every right to stay there. What I'm wondering about is why he's so stuck up about other people making other decisions. He does say later that he really dislikes the emotionalism that is encouraged within our industry, which is a valid criticism, but he also really disses dynamic languages, as if they have no worth whatsoever. I think such judgements coming from him are really unjustified. He comes at dynamic languages from the standpoint of someone who's uncomfortable with them to begin with.
Here's a series of doubts Hacknot has about the claims made for dynamic languages. They're not really based on anything, but for what it's worth, it raises questions that should be answered:
Most DLs are interpreted rather than compiled. This means that your test/debug cycle no longer includes an explicit "compile" or "link" step which, DL weenies claim, makes for a "development cycle [that] is dramatically shorter than that of traditional tools." Maybe so, but how significant an impact does that have on overall development speed? You don't have to wait for the compile/link to occur, but you still have to wait for the thing to execute so you can test it, and interpreted languages are often slower to execute than compiled ones. So how much do you really gain overall? And there are other confounding factors. Perhaps the compile-time type checking of a static language serves to catch bugs that a DL won't pick up until runtime, in which case some of your test/debug cycles for a DL will be spent catching type-related problems that a static language would've detected before execution began. I say "perhaps" because I just don't know — I'm only speculating. I don't have the data and so I can only guess as to what the net effect is on development speed. The problem is, the dynamic language weenies don't appear to have the data either; but somehow they've attained surety in its absence. Again we see the advantages of a feature (interpretation) being extolled but its disadvantages being ignored.
Like I was saying earlier, modern development has often demanded things of developers that belie what Hacknot is talking about with respect to the advantages of statically typed languages. There have been plenty of cases where static typing doesn't gain you anything, because the developer had to make a "generic" choice.
I think he's totally off base in saying that debugging is slowed down because "you have to wait for the program to execute." I've written some Ruby on Rails code on my 1 Ghz laptop. Granted it was for a simple app., but it ran plenty quick. For an interpreted language it ran fast.
Hacknot complains that the "dynamic language weenies" haven't provided any data to back up their claims "but somehow they've attained surety". I think it's a matter of these developers having attained a sufficient level of experience with static languages that they assume everyone else has come to the same conclusions as they have about them. Obviously they were wrong, as Hacknot is a perfect case in point.
Many language comparisons performed by DL enthusiasts focus on concision as if it were the sole measure of programmatic worth. However there are many aspects of a code base that contribute to an overall assessment of its condition, volume being only one of them. Structure, commenting, consistency, naming, performance and maintainability all influence the efficiency with which programmers can work on a body of code. I would say the primary influencers are the qualities of the programmers themselves.
I think this is true for the most part, except that experienced developers tend to like technologies that support them to the best of their abilities. A weak language can waste a developer's time. This is something he doesn't cover at all: the powerful features in DLs. I don't know if it was deliberate, but in effect he's set up a strawman by saying the "weenies" claim that all of the advantages flow from them not having to deal with types in their application code. I certainly wouldn't argue that. There are some advantages that flow from this, transparency in process being one of them, but not major ones, in my opinion. I personally like concise code. It's easier for me to read. The less cruft I have to wade through the better. Granted it's really helpful if the developer puts clear names on things, and structures the program well. Obfuscated code is never a good thing, in my opinion. And static typing doesn't help with this. A process that's written in obfuscated code is going to be nearly as bad in a static language as in a dynamic one. Yes, in a static language there is more information, but it's not going to give you the answer as to what the intended process is. I've seen code written in a statically typed language written by a programmer who only used single-character variable names for everything. His process was unintelligable. I could pick out parts of it, but I could never get the whole thing without going to him and asking, "What were you trying to do here?"
I'd liken strong typing to training wheels, of a sort. Not that developers don't need it for a significant part of their career, but after a point strong typing can feel like a straightjacket. It gets in the way, rather than supporting you.
One of the least influential factors influencing development speed is the amount of typing you have to do. We have IDEs with numerous keystroke-saving mechanisms built in such as smart editors, keyword expansion, templates, macros and so on. If code volume were significant as an influencer of overall productivity, then we would expect touch typists to be at a significant advantage to the hunt-and-peck typists which are so common in our occupation.
Yet there is no shortage of syntax-obsessed language comparisons of the form:
Here's a toy task implemented in SSL (some static language). Observe that it takes 20 lines of code to implement. Oh, the humanity! Now here's the same task implemented in SDL (some dynamic language). It only takes 10 lines. Therefore you're twice as productive in SDL as in SSL.
I guess what he'd really like to look at is a full-fledged project with some real meat on it. Obviously it's hard to do that in discussion forums. People don't want to look at reams of code just to see someone make a point. I think what he's really expressing here is he wishes there were more formal studies done, which is a perfectly reasonable request.
I can only speak for myself. There have been many cases where I have had ideas that I've abandoned because I felt as though there was too much work involved. It was the amount of code I'd have to write and the machinations I'd have to go through to get it done. If it could've been expressed more simply, I would've been inclined to go ahead with it. To say that the amount of code you have to write doesn't matter I think just misses the mark. I think I should only have to write as much code as necessary to adequately express my intended process. I prefer using formal logic for this. It's closer to what I'm actually thinking. I'd rather not be concerned with how the computer is going to execute it. In my opinion, most static languages force the programmer to think in terms of how the computer is going to execute your process. They take the focus off the process, and put it on the mechanism that executes the process. I'm using "mechanism that executes the process" as a metaphore for, as Ramon Leon often says, "the work that programmers do to help the compiler do its job" of translating the source code into object code. I'd suggest that this is the reason Hacknot said earlier that so many of his bugs come from what he wrote being different from what he intended. He got distracted by the mechanism and was not focused on the process he intended to write.
Regarding the arguments made that dynamic languages are gaining legitimacy because of corporate backing:
Let's not be so naive. Corporations are out to make money. They are not interested in advancing the software development field, championing an ideology or improving your productivity, except in so far as those activities will yield some financial return. If a company appears to be hopping upon your favorite DL's bandwagon, they are simply acknowledging "There is money to be made here." Commercial exploitation is not a hallmark of engineering worth. It will be in many corporations best interests to actively fuel the hype surrounding a DL in order to generate sales of their own related products and services. Hence the advent of the execrable job title "Technology Evangelist".
When the dynamic language hysteria dries up — and it surely will — these same companies will eagerly pursue the very next trend to surface, just as soon as they can find something to sell to the niche market it has created. We've seen this same pattern so many times throughout the history of this industry, its reoccurrence is utterly predictable. Recall that when OO first came to the fore, companies everywhere were suddenly remarketing their existing fare as being object oriented.
He's kind of beating a dead horse here. C++ and Java, the two languages he's used most would not be the standards in the industry that they are without the hype he complains about. In fact, I'd venture to guess he wouldn't have been using these languages, but some older ones.
Some of what he says is true here, but I think dynamic languages are here to stay. Groovy has support by Sun for Java. Microsoft, though they haven't come out with it yet, has been moving forward with adding dynamic language features to .Net for the past two years, and is set to release these modifications next year. In fact these DL features are necessary for some of what Microsoft wants to accomplish with .Net.
The present IEEE article concluded with a statement from Carl Howe, principal analyst for Blackfriars Communications, a market research firm. He is also apparently a "longtime Unix coder". He claims:
Languages are tools for programmers. As the problems change, people use new languages.
I suggest that of all the factors driving the current interest in DLs, a changing problem set is about the least important.
Even in the wider development community, the need to solve new problems is rarely to be found as a force driving adoption. Howe seems to be suggesting that adoption of a new language occurs when a developer finds themselves facing a problem that is not addressed well by existing languages, forcing them to search further a field for something more suitable. I suggest that the exact opposite is generally true. Enthusiasts start with the desired solution in mind — the new toy they want to play with — and go looking for a problem to apply it to.
I think this is where Hacknot starts coming off the tracks. What attracted me to Ruby on Rails, and then to Squeak and Seaside was the fact that I had been working on web applications for the past year-and-a-half, and I had been using ASP.Net 1.x. My experience with ASP.Net began well, because it provided a good training ground for learning how web applications work, but over time I became disturbed by some real shortcomings I saw in it. There were situations I had reached where the development tool I was using, Visual Studio.Net, was of no help at all. The page model that the ASP.Net API insisted I use really caused problems for me on one project, where I had to deal with taking submits from sections of a page, not the whole page at once, and updating multiple sections of the display as a result. I got it done, but at the end I was ashamed of the code I wrote. I kept up the code as best I could, but it was basically a mess. What I kept hearing from others is that even with these shortcomings, ASP.Net was still better than the Java equivalent in terms of the amount of code one had to write to get the same thing done. This was important to me because I had tight deadlines. C# and Java have been weak languages (VB.Net fairs a bit better, but not much), which are gradually getting stronger with time. The reason they can seem reasonable for many tasks is because of the tools, APIs, and components that support them.
I was attracted to Ruby on Rails because right off the bat I could see it solved problems much more efficiently than ASP.Net 1.x could've dreamed of doing. There are qualities to the Ruby language that enable it to do what it does well, which while possible in an environment like .Net and Java they're more difficult to achieve. Groovy, based on the JVM, has its Grails framework (which is similar to Rails). Work is being done as I write this to create a Ruby.Net compiler. I think it will be achieved one of these days.
There were some aspects of RoR that puzzled me though. I've later come to know that the reason for the confusion was that the RoR version I was looking at used associations to simulate the named parameter syntax in Smalltalk. In fact there were many similarities I could see between Ruby and Smalltalk.
I was attracted to Seaside on Squeak (a modern version of Smalltalk), because it enables the web developer to write code as though they're working on a desktop application, which is really what I wanted all along, from the time I first started writing web apps. State is maintained by the framework using continuations, alleviating the developer from having to think about it. .Net and Java simply cannot do this, not without a ton of work done on them, with significant costs in performance. Seaside does not have this impediment. Further, it uses a component model for building web pages. So you can have multiple independent components on a page that each receive their own submits, and/or update their own section of the page.
The statelessness of the web demanded new solutions to the problem, because the older languages were inadequate for the job, at least in the way they were being used. The older languages were fine for the GUI and console app. era. They could get the job done reasonably well, though I'm sure dynamic languages could've shined even then if the hardware speeds had been fast enough. The real problem I've seen with the web is that the technology behind it has been one kludge after another. Giving credit where I think it's due, ASP.Net was a step in the right direction, but it's a far cry from RoR and Seaside on Squeak.
One of the more desperate claims weenies are prone to making is that their DL of choice has a syntax that is somehow more natural, expressive or intuitive than those of other languages. Sometimes they'll go even further, claiming that the DL syntax is so intuitive that it enables some sort of direct mind-CPU connection.
I don't think I've ever claimed that the native syntax of a dynamic language was more "natural". This can come close to being achieved using domain-specific languages in a DL. I have used the term "expressive", but I think that's accurate. If you compare between code written in a DL vs. an SL, you'll see that the intended process tends to jump out at you more in a DL than in the equivalent SL code. As for the "direct mind-CPU connection", well, I think that's way off. The CPU doesn't even enter into it. That's what I'm trying to get away from, in fact.
I think where the "natural" adjective comes from is there are programmers who have a background in mathematics, like myself, who see what can be done in terms of syntax, and they really like it, because it matches with how they like to translate problems into a codified form, whether it be in mathematical terms, or in programming language code. "The language of math" is one that's often tripped me up, but as a hobby I occasionally venture into those waters to learn more about it. The syntax of Smalltalk feels good to me though (there I go with the emotions…).
I'm using these rather well chosen examples to illustrate what should be self-evident — all programming languages are arbitrary, artificial constructs which must be learnt. They cannot be intuited. Further, what constitutes a "natural" syntax is infinite in scope and varies dramatically between individuals depending on what languages they have been exposed to in the past, amongst other factors. The language designer chose a syntactic option that was most natural to him at the time.
This is true. Every programmer who uses a programming language written by someone else is adapting ideas to the model of that language. Some languages are better at accomplishing some tasks than others. They are not all created equal, despite the claims about "all languages being Turing Complete". Ah yes, but the question is how much effort do you have to go through to get something done. Yes, you could implement continuations in Java, but how much effort would you have to put into that, and would it even be worth it?
The rest of Hacknot's post is not really worth commenting on. I don't like arguing with people who froth at the mouth. He dismisses dynamic languages as the mere whimsy of fanatics, and blames the advocacy behind them for the sorry state of our industry.
The blame is misplaced. The reason for the emotionalism is partly because the people who choose to stay in this business are generally the people who are passionate about what they do. They're the ones who survive in it. Being in the technology business is tough. Another part of it is some people know who the true buyers of technology are, and they're not us developers. They're people who, in the least, hopefully have a bit of a clue about technology, because that's the most we can expect of them right now. If you're an experienced developer you know who I'm talking about. They are guided by salesmanship, not technological merit. One reason technologists resort to hype is because they know this. If languages were never hyped, we'd still be programming in assembly language today, or maybe Cobol and Fortran. Frankly I'm thankful we're not.
I'll give my own opinion in response. I understand his frustration. I used to get frustrated with the claims that open source (basically, read "Linux" into that) is inherently "secure", "never crashes", and "will take over the desktop from Windows". Time has borne out that these claims are not true as absolutes. It certainly doesn't mean that open source software is bad or inadequate to solving real problems. I've never liked it when advocates make something out to be more than it is. There are instances, I've discovered in the last year, where open source software is really good, and ahead of anything else out there. It's actually innovative. I think some of that breathlessness Hacknot complains about is people acknowledging this innovation.
Secondly, dynamic languages were not just invented by "corporations who are out to exploit the gullible". They were invented by some serious academics. A few I can think of are Dr. John McCarthy who invented Lisp, Dr. Gerald Sussman and Dr. Guy Steele who wrote Scheme, Dr. Alan Kay who invented Smalltalk, and Guido van Rossum who invented Python, among others. All of these people are trying to advance the state of the art of computer science, not take it backwards as Hacknot suggests.
I think DLs, with the exception of a few, represent a purist vision of the future of programming. Future programming languages will probably not look exactly like them, but their influence will most definitely be felt. It already has been. The ideas of OOP, introspection/reflection, closures/lambda expressions came out of work that was done decades ago in the DL realm. The truth is that modern programming languages are playing catch-up to what DLs represent. I personally, as a developer who cares about his craft, will be better off for it, thank you very much. Unlike Hacknot I don't think dynamic languages are the path into a fever swamp for technology. Quite the contrary. They're the next step in making our industry a mature profession, though they're not the endpoint. Just a step along the way.
Giving credit where it's due, a lot of what I've stated as problems with static languages, in terms of application development issues, have been solved in .Net 2.0, and recent versions of Java. I've read up on .Net 2.0, though I have not done any work in it yet. I look forward to seeing more of what Groovy can do, and what Orcas ends up being from Microsoft. I'd like to see these languages progress to include more of the powerful features I've discussed, down the road.


text:
MASSILLON, Ohio - Three Dragon pitchers combined to shut out Malone University over the first eight innings, and Tiffin baseball was able to hold on for a 4-3 victory on Tuesday afternoon.
Gunnar Boehm took the mound first for the Dragons, going three innings and giving up just two hits and a walk. Jacob Boyd followed with two innings of no-hit ball and a pair of strikeouts and would eventually be credited with the win, the first of the freshman's collegiate career.
Aaron George then stepped in and worked the sixth, seventh, and eighth innings and allowed only three hits while also striking out three.
TU got on the scoreboard in the third inning as Colin Bedell crossed the plate on a Pioneer error and Zach Campbell recorded an RBI single to put the Dragons up 2-0.
Tiffin added a run in the eighth on a Kole Klasic RBI single, followed by a fourth score in the top of the ninth as Jack Dennis knocked an RBI single of his own that would prove to be the difference in the game.
Malone was able to rally for three runs in the bottom of the ninth, but Tiffin managed to record the final out before the Pioneers could tie or take the lead, earning the 4-3 win.
Pioneer starter Tyrus Jones was also strong on the bump, going seven innings and not allowing an earned run.
BeDell finished with three hits and a run scored, while Campbell recorded an RBI and his seventh multi-hit game in 13 outings this year.
Despite facing a conference opponent in Malone, the game will not count towards G-MAC records, as the Pioneers are not one of the eight teams that the Dragons are scheduled to play as part of the conference rotation this season.
Regardless, Tiffin will look to build off the win as they jump back into conference action this Friday and Saturday for a four-game series at Cedarville.

subset: commoncrawl


text:
Complete Story
2015 MDCD Scholarship Application Is Now Available
Three $5,000 Scholarships To Be Awarded
In 2015, MDCD will continue the tradition of offering three $5,000 scholarships for students of employees of MDCD member stations.
The "MDCD Broadcasters Scholarship" is defined below. The "MDCD Broadcasters Scholarship" will be awarded to the child of a Commercial, Non-Commercial or Associate Member of MDCD. The parent must be an employee of a MDCD member company by February 20, 2015, and continue to be employed at the time of the award. One student from each region of MDCD (Maryland, DC, and Delaware) will be selected.
Please note -- previous recipients of the MDCD Scholarship are not eligible to apply for the 2015 Scholarship.
Scholarship application packages must be post marked by Friday, February 20, 2015.
All applicants will be acknowledged by e-mail in April 2015.
Please duplicate the enclosed application as needed.
If you have questions, please call the Association office at (888) 366-6323. Thank you.
2015 MDCD Fillable Application


text:
- Driver Guide
- Where to Drive
- T-Mobile Arena
T-Mobile Arena
Instructions for drivers
Who wants to pay for parking? T-Mobile makes it easy to catch an Uber to and from the game. And with a designated area for rideshare vehicles, it's easy for drivers to cash in on the action.
Rider pickups
Meet your riders at the Northwest Lot of Excalibur.
Be aware the surrounding area will be busy with pedestrians walking near the venue.
Rider dropoffs
- When driving passengers to T-Mobile Arena just follow the directions in your Uber Driver app and get your riders as close as possible to their preferred entrance.
Pickup tips for drivers
All Uber pickups from events must be done from the designated Uber area located at the Northwest Lot of Excalibur.
To get to the lot, take W Tropicana East towards the Strip and exit at Excalibur.
Traffic on event days may be difficult to navigate. If you can't locate your rider it's a good idea to call or text them to see where they are.
Staging at the lot is permitted.
More at T-Mobile Arena


text:
When is a Paint Jam not a Paint Jam? When it's a PRINT JAM. We are excited to announce our
Posts Tagged 'creative arts'
Paint Jam Night:Graffiti – social spray painting workshop with street artist 'Artista' + DJ music & a bar – at Goldfinger Factory, Trellick Tower
BOOK TICKETS We are excited to have #Artista running Graffiti/spray painting workshops for Paint Jam London in the
Christmas corporate party ideas – why does it have to be so tedious? Or does it? Try painting, drinks, DJ & canapes, all in a pop-up art studio – with Paint Jam London
Friends often have a look of dread rise across their faces when they talk about their work Christmas
Live painting & an art pop-up shop – Paint Jam does LONDON DESIGN FESTIVAL 2014
London Design Festival came to our doorstep this year, with the creation of the new Queens Park district – showcasing
Paint Jam London fuses art & music – for Freshers at The Institute, kilburn.
Art and music fusion is a big part of our concept at Paint Jam London – so it was a
EAST LONDON Paint Jam events – at CARGO Shoreditch & on the streets…
Paint Jam London is all about offering art to everyone, and experiencing art made on the fringes – so what
Our Ali Miller 'Cut-out memories' exhibition – at Le Meridien, Piccadilly
We are delighted to present 'Cut out memories' is a bold body of art by Ali Miller, curated by Paint
London's original POP-UP Painting events – PAINT JAM LONDON
Paint Jam is London's original POP-UP painting event, giving everyone an artist experience in a fun, social space. Founded by London abstract
Our new flyer – Paint Jam London 2013
Paint Jam's 'Communal Canvas' workshop
Explore your inner artist at a Paint Jam Communal Canvas event, in our fun and uplifting, pop-up social art studio.


text:
Marisa Crawford is the author of the poetry collection The Haunted House (Switchback, 2010), and the chapbook 8th Grade Hippie Chic (Immaculate Disciples, 2013). She is founding editor of the feminist website WEIRD SISTER, and lives in Brooklyn, NY.
"This collection is about obsessions and how we are always building them, surrendering to them, or evading them. In the opening poem we learn that Bloomingdale's, its 'brown bag' held like a bomb, are the objects of the speaker's side-eye, tell-it-slant gaze: I saw the Bloomingdale's out of the corner of my eye / & with the way the light was hitting it, it looked like a mirage. / Like a temple… What is really being wrestled with is love, its losses, despair, denial of that despair, learning to love one's own body and self, and all the ways we trick ourselves into making it through the hours and days and shifts of this grinding blue world. The last couplet of the book: There was that big sign on Route Nine that said, 'Free Air.' Somebody told me, memory is a tire. Change it. Go from there."
Marisa Crawford's Big Brown Bag, my copy of it, anyway, begins with a hand-written epigraph that reads "life sucks, let's go shopping!", emblazoned in the blue of the pen I'd just handed her. The printed epigraph is equally telling: an excerpt from Plath's The Bell Jar, something about discarded wardrobe items disappearing into the "dark heart of New York."
Big Brown Bag is a little brown book that is simultaneously perfunctory and deeply profound; it paints a world in broad, plastic strokes, which yield to pure moments of bereavement, and which seem concurrently brooding and blithely consumerist: "I got the long black dress. The dress that leads to nowhere." Crawford's mourning is deemed unavailing in this first line of the collection, but it provides the impetus for the poems to come, which are rife with strongly voiced juxtapositions in the vein of this first tidbit.
Goodie's, the fictional department store where our protagonist has found employment, provides a backdrop where she can mask her devastation in the trappings of modish fashion and sticker-prices. Ok, there aren't sticker prices, but there is a tension between authentic feeling and the culture of buying cool shit: "I am floating toward the earrings and I am pulling toward the world."
Crawford's speaker is authentic in the sweetest way. Not "sweet" like Little Bo Peep sweet, but "sweet" like things were sweet in the 90's, when 8th graders wore Smashing Pumpkins shirts and watched The Breakfast Club as a rite of passage. All of these things figure in the broader narrative of Big Brown Bag, as the collection is interested in the perennial MacGuffin of "growing up." The speaker has "grown up," is as grown up as 30 is, and debauches in naiveté with the acumen of the poetic eye.
This is a collection that finds something like joy in the art of masking mourning in the mundanity of trend-shopping facilitation; it is an aggregate of verse-moments that recall the zenith of childhood's ambition and carouses in its weird disaffection. Mainly, though, it's good.
These poems are plainly stated, sharp, and strongly voiced. They are well-wrought, without a word misplaced, but they paint a speaker who is less sure-tongued. The speaker happens upon a kind of insight that conflates the agony of loss with the quiet satisfaction of having replaced the vital parts.
Life sucks, let's go shopping. Let's wear different blacks and ride them into the dark heart of wanton anonymity. Pick up Marisa Crawford's Big Brown Bag, put Gazing Grain Press' fourth chapbook inside, and settle down for a good read. You'll find your sense of self negotiable, but forward motion is untenable without a degree of caprice. "Memory is a tire. Change it. Go from there."


text:
Gastroenterology, Hepatology and Motility
School of Medicine > Internal Medicine > Gastroenterology, Hepatology & Motility > Fellowship
Gastroenterology Fellowship Information
The Fellowship Training Program at the University Of Kansas School of Medicine has a long tradition of excellence and a proven track record of producing competent and compassionate gastroenterologists for both clinical practice and academic careers. Gastroenterology has become an increasingly complex subspecialty over the years and today's gastroenterologists need to be up to date with the practice of general gastroenterology, as well, as more subspecialized fields within gastroenterology, such as hepatology, advanced interventional endoscopy, motility and the management of complex chronic diseases, such as inflammatory bowel disease. Our goal is to produce well rounded gastroenterologists who are able to competently practice within these fields and also to prepare academically minded individuals to competitively pursue further advanced training in these areas. Each fellow's program can be tailored to the ultimate final goal of individualized training. All fellows will have comprehensive training in general gastroenterology and endoscopy, six months of dedicated research time, six months of hepatology practice, and exposure to advanced endoscopic techniques.
Our general GI program includes 10 months of consultation, and upper and lower endoscopy training in the first year. The volume of EGD and colonoscopies at both facilities is sufficient to provide training to each of our fellows. In the second and third years, 6-12 months of exposure to advanced interventional endoscopy including therapeutic endoscopy with treatment of bleeding, treatment of cancer, placement of stents, ERCP with sphincterotomy, and stone extraction occurs. A program of endoscopic ultrasound has been in place and is now expanding within our division and can be in the future an area of training for our fellows.
Outpatient clinic exposure is a critical feature of our training program and critical to the understanding of the care of patients with GI disorders. Each of our fellows participates in ambulatory GI and hepatology clinics, both at the University and at the Kansas City VA. A feature of our program is a dedicated continuity clinic for each of the fellows. These are designed to enable the fellow to recruit patients that are of interest to the fellows or that the fellows have seen on the wards or in the endoscopy lab and to provide longitudinal ambulatory care. These clinics are staffed by faculty who supervise the assessment and decision making process of the fellows.
The Leaders in Gastroenterology have published (Gastroenterology) a guideline for the development of three year programs. Their recommendations are that at least 5 months of the training have an intensive exposure to hepatology. Our program has an independent liver transplant program and independent faculty whose focus in training is in hepatology and liver transplantion. At least five months of our program will include separate rotations with inpatient and outpatient hepatology consultation, liver biopsy and paracentesis performance, liver biopsy interpretation, and pre and –post liver transplant evaluation and management.
Research in emphasized by the Leadership in Our GI training program. At least 6 months of research is designed for each fellow. As mentioned above, for those Fellows interested in a career in clinical research or academics, a longer period of time can be obtained. This will be clinical or a mixture of clinical and basic research, taking advantage of those faculty members who have active research programs. Our Division currently has active research in the areas of Barrett's esophagus and GERD, Liver diseases, GI cancer prevention, GI motility, and advanced endoscopy. Fellows are encouraged to select areas of interest and then to interview with the faculty and develop the programs that they would be involved with. An outline of goals, expectations, and publications should be agreed upon at the start of the research experience.
Several conferences each week are available and required for the fellows to attend. The primary educational conference of the Division is GI Grand Rounds which takes place 5:00 to 7:00 pm each Tuesday evening. It has a long tradition at KU Medical Center and is well attended by faculty both within our division and guest faculty from other departments. The fellows and house staff on the GI service attend the conference and present cases and reviews. It provides the integration of patient presentation with test results, pathologic specimens, radiographic studies, surgical intervention, and consultation with other appropriate services. This conference involves journal clubs, during which important recent GI papers are discussed, core GI lectures, GI physiology discussions and presentations of interesting clinical cases. There are also dedicated pathology review conferences at both the University Hospital and VA Medical Center to review interesting and relevant pathologic specimen that were obtained during endoscopy or liver biopsy.
The program of education as outlined above is designed to provide training and experience for the fellow, allowing him/her to give that person the opportunity to develop competence of a specialist in gastroenterology. This training includes clinical expertise with the development of history and physical exam skills, consultation skills, interaction with other services in the evaluation and management of patients, use of radiology, surgery, pathology, and related disciplines in the assessment and management of patients with gastroenterologic disorders. In addition competence in endoscopy including esophagogastroduodenoscopy, esophageal dilation, flexible sigmoidoscopy and proctoscopy, colonoscopy with polypectomy, percutaneous liver biopsy, percutaneous endoscopic gastrostomy, biopsies of the mucosa of the esophagus, stomach and small bowel, and colon, treatment of bleeding, both variceal and non-variceal are taught at KU Medical Center and at the VA Medical Center. Competences is determined not only by the numbers but by their ability to appropriately assess patients, understand the indications and the risks, proceed with careful evaluation during the procedure and recognize disease processes and plan appropriate intervention. The American College of Gastroenterology has developed (with other societies) guidelines for numbers of cases and the minimums that they require are easily met during our training program.
During our conferences and consultation we would expect to have formal instruction and clinical experience and opportunities to all variety of these diseases of the gastrointestinal track.
- Diseases of the esophagus including reflux inflammatory diseases, ulcerative, and infectious disease.
- Acid peptic and Helicobacter related disorders of the gastrointestinal track.
- Motility disorders including gastroesophageal reflux disease, dysphagia (its analysis and management), gastroparesis of all types, pseudoobstruction, and chronic constipation.
- (Functional) bowel disorders including dyspepsia, Irritable bowel syndrome, chronic abdominal pain and non-cardiac chest pain.
- Inflammatory bowel diseases including ulcerative colitis, ulcerative proctitis, Crohn's disease, and other inflammatory diseases including pseudomembranous colitis, colitis associated with collagen vascular disorders.
- Malnutrition, malabsorption, and other disorders of nutrient assimilation.
- Vascular disorders including ischemic bowel, arteria-venus malformations etc.
- Gastrointestinal infections including Helicobacter, retroviral, "herpes, CMV, hepatitis, fungal and mycotic, and parasitic diseases.
- Gastrointestinal neoplasms including esophageal cancer, gastric cancer, small bowel cancer, colon cancer, pancreatic cancer, and hepatocellular carcinoma, and biliary tract tumors.
- Gastrointestinal diseases associated with acquired immunodeficiencies syndrome.
- Cholelithiasis and choledocholithiasis
- Chronic liver diseases:
- Related to alcohol, related to chronic vial hepatitis, related to biliary tract disorders including primary biliary cirrhosis, primary sclerosing cholangitis.
- Drug induced hepatic injury
- Management of chronic liver disease including assessment of portal hypertension including ascites and bleeding with utilization of paracentesis, TIPS, and endoscopic and surgical techniques.
In particular during consultation and during conferences the trainee should be able to evaluate patient who present with symptoms such as dysphagia, abdominal pain, acute abdomen, acute and chronic nausea and vomiting, malabsorption, diarrhea, constipation, gastrointestinal bleeding, jaundice, cirrhosis, with and without protal hypertension and malnutrition, genetic or inherit disorders, depression, neurosis, and somatizations syndromes The trainee should understand assessment, the use of consultative advisers to assist and the ultimate treatment.
A gastroenterologist often works closely with gastrointestinal surgeons, and our program emphasizes a good relationship with these colleagues. We stress the understanding of surgical indications, management of patients pre and post operatively, and integrating care and testing with our surgical colleagues in the management of patients. At the conference level, and in daily clinical care, we emphasize that the trainees understand the indications, contra indications, complications, limitations and interpretation of a variety of diagnostic and therapeutic procedures. These include radiographic procedures such as ultrasound of the abdomen, computed tomography, magnetic resident imaging, vascular and nuclear medicine. In the invasive radiographic program, we encourage the fellows to understand the complications, limit his management of patient asses and interpret percutaneous cholangiography, vascular intervention, TIPS, and drainage procedures as utilized by the interventional radiologist.
Our program also maintains an active clinical and research motility program and a fully complimentary diagnostic GI laboratory. Fellows are exposed and understand the indications and application of gastric, pancreatic and biliary secretory tests including gastrin levels, gastric analysis, secretions, hydrogen breath testing, urea breath testing, pancreatic polypeptide levels, and motility studies including esophageal manometry, gastroduodenal manometry, anal rectal manometry, and 24-hour ph monitoring.
Exposure to endoscopic retrograde cholangiole-pancreatography is available. It is our goal to expose all fellows to the appropriate indications and application of these techniques and diagnosis and management of there patients. A certain level a competence is required not only with diagnostic but therapeutic procedures in ERCP before the individual can be fully certified. These include papillotomy and biliary and pancreatic stent placement. Competence will be measured by the expert faculty that is available supervising those procedures.
Our clinical faculty is currently composed of 12 individuals at the University and VA Medical Center; nationally and internationally recognized faculty members are actively involved in fellowship education. Four faculty members are located primarily at the VA and eight at the University Medical Center. Four faculty members are hepatologists with a primary interest in management of liver diseases and are involved with liver transplantation. Our faculty encompasses expertise in all areas of GI including general gastroenterology, esophagology, inflammatory bowel diseases, motility, hepatology, and interventional endoscopy with ERCP and endoscopic ultrasound. Facilities for gastrointestinal surgery, gastrointestinal radiology, and gastrointestinal pathology are readily available both the VA Hospital and Kansas University Medical Center. Close interaction with critical care, ICU, pulmonary, oncology, and interventional radiology provide for the full spectrum of patient management and fellow training opportunities.
Follow the links below to review the Division of Gastroenterology/Endoscopy Fellowship Resident Agreement (and attachments) and our institutional policies.
- University of Kansas Medical Center Resident Agreement is found on the General Information page of the Office of Graduate Medical Education web site.
- Housestaff Policy and Procedure Manual (PDF) is found on the Policies & Procedures page in the Office of Graduate Medical Education web site.
- Gastroenterology/Hepatology Universal Application Form (MS Word)


text:
Appleton police investigating apparent blood on car parked on north side
If you can help solve a crime, please contact the appropriate police agency. Duke Behnke/USA TODAY NETWORK-Wisconsin
APPLETON - Police are investigating what appears to be blood on a car parked overnight on the city's north side.
On Thursday, police were called to the area of North Union Street and East Bradford Avenue for suspicious activity, Appleton police Sgt. Dave Lund told USA TODAY NETWORK-Wisconsin.
A USA TODAY NETWORK-Wisconsin photographer on scene described a white Buick sedan with what appeared to be blood on the driver's side door and a pool on the street below. Appleton police squad cars in addition to the Crime Scene Unit van were there Thursday afternoon.
Lund said he did not have additional details Thursday afternoon.


text:
We all have bad days, sometimes weeks and occasional months. I haven't had a horrifically bad day for a while, but I have my ups and downs like everyone else. I find that stress really drains me, and my physical body doesn't respond well to stress anymore. I know that the first 36 years of my life, which was riddled with horrible stress caused by anger, unresolved pain and childhood trauma, did tremendous damage to my body.
Instead of being consumed with self-pity or martyrdom, I have learned to listen to my body and higher self and take extra good care of my "whole" self. I take the cues from my body and just go with the flow.
For instance, this week I am extra tired, dreaming alot, and have trouble falling asleep. Instead of pushing myself to exhaustion and burn out (which will happen), I take into account that I have manifested some new things in my life, along with undergoing some past life therapy regression. In the past I would have ignored my body and mind and just plowed through the day, and the next one, thinking I was super human in every way and ended up having to stay in bed for a day or two resting up and letting my mind process the sub-conscious changes that were occurring. Now, I fulfill my responsibilities for the day, and do whatever my body tells me to. I take a nap, pamper myself, or write down what information or inspiration I'm channeling. If I don't empty my mind of the info I receive, it get's "full" and I get overwhelmed and feel stressed out. If I don't rest and allow my body mind and spirit to process change, I burn out.
Environment is important to me. When I'm in one where there is a lot of conflict, negativity, or at work where there is a lot of illness and death, I feel drained and often get headaches. I've learned some great techniques for energetic\spiritual grounding and protection that keep me focused on my purpose there instead of feeling like a slug. Click the highlighted link and the "Rescue Mediums" have an awesome page on grounding and protection. Love that show!! Lol!!
Instead of enhancing your crappy day or awful week with more negativity or self defeating or destructive behavior, sit with yourself and be quiet. What is this dark time telling you? Here are some things your higher self or your guides might be saying…
"You're stressed and angry because you need to be true to yourself and stop pleasing others"
"Over Medicating (in any way) is only masking your issues, it's time to accept help to heal"
"You started a new job or project and your sub-conscious is a bit stressed. Take time for yourself and rest up more until you adjust."
"It's time to leave this relationship. It no longer serves your greater good."
"You've just gone through a big loss. Give yourself permission to be sad and let out your grief."
"You're going through a break up. Take time to grieve and adjust. Get more rest."
Your "dark" days are there for a reason. When we dip down to that side, we get a glimpse of what we need to heal, change or we need to rest and take care of yourself. It's your "mind-body-spirit voice" manifesting in the physical. When we are experiencing a negative response to something it's an opportunity to sit with that feeling and figure out why we are responding that way. When we listen to that inner voice, we can heal and change what is causing the negative response. Remember that the message is always about YOURSELF and no one else. The outside stimuli (no matter who or what it is) is only there to trigger what YOU need to heal or fix. If you finger point or blame, you only cheat yourself out of your own path of growth.
Maybe there is that awful bitch at work that irks you all the time. She causes you severe stress. On the other hand, you can take your stress response and ask what YOU need to do to improve this for YOURSELF. Maybe you need to be more assertive and report this person (this takes vast inner strength for a people pleaser and it's time you address these issues), or maybe this is your cue to take those courses you want to take to get a promotion or another job. Get it?!
Being in the dark and embracing it's gifts, helps our light shine brighter. We get stronger and more in tune with our self and our purpose. So take it easy on yourself, and take care of yourself.


text:
Innovative adhesive lining in the wings and cups keeps this clever bra in place and can be worn up to 25 times. The underwire style is the perfect choice under backless, strapless, low-cut styles, with padded plunging cups that create enhanced cleavage with minimal coverage.
Earn up to 10 bonus points per dollar!
Save time this holiday season and let us help you get your Nordstrom gifts ready to give. Some items may not be eligible for certain gift wrap options.


text:
Guardian Camera Club Review
A portfolio of six of my photographs has been reviewed by a Guardian picture editor and are featured on the Guardian Camera club website!
Check out the review at http://gu.com/p/2gen3
The Joys of Adobe Photoshop Lightroom
I recently got Adobe Photoshop Lightroom and it's fantastic!
I'm in utter love with this program. It affords me huge freedom and ease to edit my pictures, with the kind of functions I've always dreamed of.
I've edited this picture I took of a happy chap in the Democratic Republic of the Congo this summer, from a somewhat flawed, colour shot to a very clean black and white one. I played around a lot with a combination of exposure, darks, highlights, noise, camera correction and so on. I really love the exaggeration of highlights on the forehead.
What I love about Lightroom so far (I got it last night) is the endless ability to make very substantive changes to a picture without compromising quality. I love the ability to adjust the black of a shot, to reduce noise and increase detail. I have so far found it incredibly fast, and without the long waits when developing in traditional Photoshop that we're become accustomed to. Will post more results of my experiments with Lightroom soon….
Photo Essay, Faces of Kinshasa.
My favourite thing to photograph are faces. I like people. Often I think its people who make the picture.
A famous photographer once said, he found faces the most interesting thing to photograph, because for him, the human eyes are like lakes and the nose and contours of the faces like roaming hills.
I love to photograph faces because their so alive, they express something pure, something of the truth of the subject. The creases of our faces give us up.
Here are some of my favourite faces from my recent trip to the Democratic Republic of Congo with non-profit Menelik Education.
DRC Shots Made into Menelik Postcards.
I am very proud to say that three of my photographs from a recent trip to the Democractic Republic of Congo with non-profit Menelik Education have been made into postcards! Here are the choosen photographs.
Tiny Bon Bon stands amongst the shadows of a classroom in the Lembo-Menelik International Academy
Three young girls fascinated by the camera stare across a desk of the Lembo-Menelik International Academy
The streets of Kinshasa, as seen through the window of a Congolese taxi
I met Sifa in the DRC this summer, of the numberous I took of my friend, I really think this portrait manages to capture a little of her very kind, warm and friendly nature. Sifa, 18, has recently finished her baccalaureate and this october, with the continued support of Menelik Education, started a degree in International Relations at the protestant University of Kinshasa. She lives in and amongst the lively village-like bustle of Mama Jacquis compound, a safe haven for many, with her mother and younger brother Patrice.
Birmingham Lions American Football.
These are some of my photographs from a recent American Football match at The University of Birmingham, between the victorious Birmingham Lions and the Loughborough Aces.
Kinshasa, Democratic Republic of the Congo.
This summer I travelled to Kinshasa, Democratic Republic of the Congo, as a volunteer photographer for the non-profit organisation Menelik Education. This was a real privilege.
Menelik Education is a Congolese-led charity working to improve conditions in Kinshasa, D.R.Congo, in the areas of education, health, and living conditions.
I miss the city and the characters I meet there dearly.
Here are a selection of my photographs of the sights and of the faces of Kinshasa.


text:
Despite ongoing uncertainty and turmoil in 2012, prospects for the European economy in 2013 and beyond are less dark than expected. A strong recovery is certainly not for tomorrow, but the worst is now behind us.
European invested stock continued to grow in 2012, albeit at a modest 3% in Euro terms. The three core markets all grew, whilst CEE growth slowed. But, echoing macro trends, the periphery recorded another year of decline.
Deleveraging continued across Europe in 2012, with equity growth close to 5% and debt at 1%. Non-bank lending and corporate bond issuance expanded further, while traditionally dominant bank lending remained flat.
Property market sentiment remains mixed, as the macro outlook varies across Europe. Lenders are more cautious than investors in our annual survey. Highly selective lenders do expect growth in their loan books, but no better lending conditions. Investors feel buying opportunities have returned to normal and debt availability has improved. In our view, sentiment has been slow to improve due to the debt-related workout, especially in Europe. But, things are not as bad as they seem, considering:
European investment volumes were up 6% in 2012. Cross-border investment activity has increased with a wide range of capital sources – from US to Asia Pacific – focused on investing in Europe.
Most of the markets are now fairly priced with our Fair Value Index at its highest score since 2003. Property markets have never been so attractive, especially compared to the historically low bond yields.
The total liquidity ratio remains still below its 10-year average in Europe. However, based on inter-regional liquidity, Europe is the most attractive region for new international investors. Apart from stock size, investors should consider these liquidity ratios. This should trigger more interest in a few alternative markets across Europe such as Sweden or Poland.


text: November 27, 2014 at 5:56 PM Thai food more popular than pizza in Seattle Posted by Gene Balk Can you imagine a Seattle without Thai food? It may seem unthinkable today, but it wasn't until 1981 that a Seattle Times food writer was able to announce: "Seattle finally has an authentic Thai restaurant." Even if it took us a while to discover Thai cuisine, we've certainly made up for lost time. In fact, new survey data from… More Comments | More in Demographics, Market Research | Topics: food, restaurants


text: Recent Categories Users Badges Search Sign in to your account If you are new here please register for an account Username Password Remember Me Sign In Forgot Username? Forgot Password? Batwoman.tv Admin Registered on Saturday, 28 July 2018 Last seen was 1 week ago Subscribe 27 Replies 3 Questions 0 Badges Eric Johnston is the primary admin of Batwoman.tv as well as Supergirl.tv and Stargirl.tv. He's been involved in the entertainment industry for over four years now and enjoys covering DC hero shows. You will give the people of Earth an ideal to strive towards. They will race behind you, they will stumble, they will fall. But in time, they will join you in the sun, Kal. In time, you will help them accomplish wonders. Questions (3) Assigned (0) Replies (27) My Posts - Questions (3) My Posts Who Should Play Kate Kane? more than a month ago Batwoman.tv General Last replier: Help Us Find the Bugs more than a month ago Batwoman.tv Site Messages Welcome to Batwoman.tv more than a month ago Batwoman.tv Site Messages There are no discussions available here currently Page : 1


text:
Blockchain/Proof-of-Work Security, 51% Technique
Budget £10-20 GBP
The aim of this task is not to cause any damage, rather demonstrate that 51% technique can be carried out on low hashing coins.
The project involves carrying out a 51% technique on PoW. The URL below is exactly what to be done for this task and instructs how to carry out a 51% technique successfully.
[login to view URL]
Your job will be;
1. Go through the URL and understand what is expected. (all details are in the link)
2. Choose a low hashing coin which is on PoW consensus and the mining cost is minimal.
3. Determine that an exchange has at least $1 of that coin so that the 51% technique could be implemented on the coin demonstrating double spending.
4. Guide us through the process of mining of the coin and help to build the longest chain. As we don't aim to buy mining machine for mining longest chain, so nicehash will be used for mining.
5. Determine that a successful double spend is possible.
Bottom Line: Step 1-3 should not take more than 1 hour. Your main job will be helping us with step 4 and 5 to mine that coin and build the longest chain to carryout double-spending.
Note: The experiment is for educational purposes and not to cause any damage.
1 freelancer is bidding on average £44 for this job
If you want to implement your idea, then I am always ready for you Being a professional developer means to understand all the requirements of the project, and find the best way to implement it with the highest quality. More


text:
today Oct 9, 2007
LONDON/NEW YORK (Reuters) - Officials at French drugmaker Sanofi-Aventis and Pfizer declined to comment on Monday on market talk Pfizer was looking to buy stakes from Sanofi's major shareholders.
"We don't comment on rumors or market speculation," a spokesman for Pfizer in New York said.
"We've nothing to say -- we don't comment on market rumors," a Sanofi spokesman said.
Oil company Total and cosmetics firm L'Oreal , which jointly own about 23 percent of Sanofi's share capital, have previously made it clear they do not consider their stakes strategic. L'Oreal and Total were not immediately available to comment.
© Thomson Reuters 2019 All rights reserved.


text:
Ensuring the preservation and restoration of species and habitats in Saxony, by offering free advice and relevant qualifications to land users.
Projects & Practice
A dairy farm in Wallonia invested in renewable energy production from manure and produced milk using a more environmental friendly process.
A project offering training modules targeting bovine breeders to promote alternative methods to maintain healthy livestock and decrease the use of antibiotics
The local community of Ballstadt created a financially self-sustaining combined village shop and café, which acts as an important meeting place for the local community.
An all-day bus tour to another country with 24 agri-food entrepreneurs and about ten experts and advisors has proved an innovative way of developing business ideas and the skills and confidence to implement them.
RDP funding helped convert a disused building into an inspiring renewable energy visitor centre in Feldheim – Germany's first village to be supplied with 100 % renewable energy.
Testing the transferability of landscape management to other Natura 2000 sites.
LEADER support was used to exploit the potential of using large quantities of waste wood from landscape management as a renewable energy source.
The development of an online platform helped stimulate and support rural enterprises to turn to e-business.
In an area where cattle breeding is predominent, LEADER funding helped explore the potentials of producing biogas from manure produced in the farms.


text:
Nominations for the 2019 Cultural Medallion are closed.
- Nominees must be Singapore Citizens or Permanent Residents of Singapore who are of good character.
- Nominations for the Cultural Medallion and Young Artist Award are accepted for living artists, as both awards will not be conferred posthumously.
Selection Criteria
Cultural Medallion nominees are assessed upon the extent to which they have achieved or demonstrated all of the following:
- Artistic excellence and professional maturity, manifest through an outstanding and distinctive body of work
- Extraordinary contribution and leadership in shaping the development of Singapore's arts and culture;advancing his/her field of arts practice; and bringing the arts to the local public through educational and/or community development efforts
- Being an inspiration and role model to other artist
- Good standing and recognition internationally
Victor Chang (DID: 6346 9198)
Abdul Hamid Roslan (DID: 6346 9498)
Irdawati Roslan (DID: 6346 9645)


text:
Our Philosophy.
Nature Meets Science.
For centuries, African people have used powerful botanicals as traditional healing elixirs. Terres d'Afrique has studied how people use these relatively unknown ingredients. The curative and restorative power of many African plants is legendary for a reason. They work. In crafting our products, we have combined these ingredients in potent formulations that maximise their skin care benefits; the culmination of years of exploration, field research and laboratory development.
Uplifting Serum
With Kigelia, Baobab & Buchu
Terres d'Afrique Uplifting Serum is a light gel with potent anti-aging properties. Easily absorbed, this serum will lift the skin, leaving it feeling firm and smooth. Suitable for all skin types.
Skin Tightening and Firming
Kigelia extract has proven tightening and firming properties, reducing wrinkles and fine lines.
Fights Free Radicals
Vitamin C, flavonoids, polyphenols and the powerful Super-Oxide-Dismutase are potent anti-oxidants that act as freeradical scavengers, reducing damage caused by oxidation.
Evens Out Skin Tone and Reduces Sunspots
Active compounds in kigelia (quinones, irridoids, coumarines and flavonoids), combined with rooibos leaf extract, Aloe ferox and buchu even out skin tone and reduce sunspots. Buchu has antiseptic properties that prevent bacterial growth, reducing blemishes and blotches.
Prepares for Hydration
Low molecular weight Hyaluronic acid prepares the skin for hydration, allowing active compounds from our hydrating products to penetrate deeper into the skin.
Protects Against UV Damage
UVB damage leads to modification of DNA structure and subsequent alteration of cell functioning and accelerated skin aging.
The UVA induced damage leads to loss of a fragment from the circular DNA of the mitochondria, which may result in a disruption of mitochondria functioning and energy synthesis. This is thought to be a major mechanism by which UVA radiation causes photo-aging of human skin. DNAGETM, a plant extract from the candle tree (Cassia Alata) protects two types of DNA from UV damage: it protects nuclear DNA against UVB and mitochondrial DNA (mtDNA) against UVA. Additionally, DNAGETM supports the endogenous repair process of the cells.
This combination of protection and repair allows preventing UV induced skin alterations (clinical demonstration).
94% Fairtrade
99.5% Natural
94.2% Organic
30 ml & 50 ml*
*Professional only


text:
DEAR BARRY: I bought a 10-year-old house a year ago. The home inspection was clean, but I just discovered something the home inspector missed. Water has been leaking into the garage, above the door header. Two contractors have bid $11,000 for the repairs. My home inspector took a second look and offered to pay me $2,500, as long as I sign a paper absolving him of further liability. What should I do? –Paul
DEAR PAUL: If the inspector offered to pay you $2,500, he probably recognizes that he made an error in his inspection. If the inspection contract that you signed has a limit on liability, you may have to accept the amount that he has offered. You should read the contract to see what it says about liability limitations.


text:
Quick Links to Other Popular Features
A mixed ability race. All runners are welcome.
Medal - Pre Race Warmup - Baggage Area- Changing- Showers - Km Markers - Marshals - Water Station - Toilets
Normal Entries - affiliated: GBP 14.00
Normal Entries - unaffiliated: GBP 16.00
End Time: 1:00 pm
In Advance : £14.00 (affiliated) £16.00 (unaffiliated)
You can predict your finish time for this race based on a recent race you've run. Enter the details below - select a similar type of race (hilliness and terrain) for the best prediction.
Click here for your training plan for this race
No comments have been posted yet for this race - be the first to post something!
Are you the organiser of this race? - Click here to make changes to this race listing


text:
Salesforce Account Based Marketing (ABM) Reporting
There are a couple main issues with current Salesforce Account Based Marketing (ABM) Reporting:
1. Campaign influence reporting is somewhat useful, but gives 100% credit to the full value of the deal for every campaign that touches the opp (double counting or worse); usually the last touch updates the record.
2. No Marketing Automation data (Pardot, Marketo, etc.) or sales rep touches included in the reports. This provides 2 dimensional view (only sales or only marketing influence on deal) vs. a 3D view showing both side's contributions.
3. No fractional or multi-touch attribution reporting available. Relying on last touch campaign influence makes it difficult/impossible to make accurate ROI decisions on what channels/campaigns/tactics are working and where to increase/decrease marketing spend.
This is a known issue with Salesforce that many people are struggling with.
AttributeApp is a purpose built multi-touch attribution reporting tool that combines marketing automation data with Salesforce campaigns, Account, and Opportunity data in a custom object to solve this problem. It is designed for B2B marketers typically with multiple contacts at the account level, long sales cycles, and many campaigns/tactics that are influencing a deal over time.
Account based attribution can be difficult to track without getting the data in one place and normalized. With the the AttributeApp managed package installed and Account Based filtering enabled, AttributeApp Account Based Attribution Reporting can help answer many of these questions right in Salesforce.
Turn on Account Filters, Select from any Salesforce Account Field (i.e. select a single account or groups of accounts):
From there, you can see an Attribution Rollup Report (this shows underlying tactics; same can be done for campaigns)
Drill down to a single opportunity to see all of the contacts at the account level and the interactions sales and marketing have had with those contacts from first touch to last touch:
AttributeApp can answer many common B2B market questions, like:
How can we give partial (Fractional), weighted Multi-touch attribution credit for first/ last touch, and other influential campaigns or tactics at the account level?
AttributeApp Filter:
My reps aren't good at filling out Opportunity Contact Roles; Can we see attribution at the account level without this?
AttributeApp Filter:
Yes – turn off Opportunity Contact Roles or give 100% credit to all contacts at the account
Other Questions AttributeApp reports can help answer:
- What Campaigns (Salesforce and/or marketing automation) have influenced an account or set of accounts?
- What % of our best customers are involved in, or completely untouched by, a specific campaign?
- What is the first campaign anyone at this account has ever responded to and who/when?
- What campaigns or tactics are best as "openers", or driving the most first touch ROI?
- What campaigns or tactics are the best as "closers", or more common as the last touch campaign or tactic?
AttributeApp combines your company's marketing automation data with Salesforce opportunity and account data to provide these insights. Interested in a demo to talk through your specific org's needs or want to start a free 14 day trial? Get started here.
ABM Blog Posts
How do you get your Sales team to use Opportunity Contact Roles?A common question and pain point for B2B marketers is …
How to Combine Content and Account-Based MarketingHow Multi-Touch Attribution Analysis bridges the divide With all of …
Pardot Account Based Marketing — 8 TipsFor those who plan to start Pardot Account Based Marketing, …
Marketing Attribution Errors: How NOT to do B2B marketing attributionHere are examples and anecdotes of marketing attribution errors and …
Account Based Marketing in Pardot – 3 Ways Multi-Touch Attribution Supports and ImprovesAccount Based Marketing in Pardot According to SiriusDecisions, over 90% …


text:
Top Beauty School Articles
Hair Design School Articles
Makeup Schools Articles
Cosmetology Schools Articles
Beauty Schools in New York (NYC)
Beauty Schools in Texas (TX)
Beauty Schools in Arizona (AZ)
Beauty Schools in Florida (FL)
Cosmetology Schools in New York (NYC)
Cosmetology Schools in Texas (TX)
Cosmetology Schools in Arizona (AZ)
Cosmetology Schools in Florida (FL)
Best Beauty Schools Should Be A Cut Above
By Laurie Brown
Don't let the name fool you. Any beauty, cosmetology, or styling school can post sophisticated titles such as academy or institute on its front door, but only a top-rated school, with an earned reputation for guaranteed job placement will land you the job you deserve.
Look for a school that integrates the science of cutting, styling, coloring, skin care, and nail technology with the artistry of esthetics and make-up. The best beauty school will produce a portfolio of students who have landed great jobs in reputable salons, as well as visibly demonstrate a cutting-edge approach to today's styling and cosmetology applications.
Most importantly, make a personal visit to every school on your list. And let your intuition guide you. How friendly is the staff? Do the students look engaged and productive? Are they working on mannequins or live models? Is the environment professional, creative, upbeat, and especially clean?
Make time to sit down with an enrollment counselor with pertinent, well-thought out questions, such as:
In response, the enrollment counselor should demonstrate a unique interest in your creative abilities, helping to identify your particular talents and how the best beauty school can best meet your needs.
Beauty School Never Ends
It's safe to say that beauty school never ends. No, you don't actually spend your entire life in a classroom; you do graduate at some point. However, that doesn't mean you will ever stop learning. All of the best beauty school students begin learning the second they enter their desired beauty school on the first day, and they never stop learning until the day they retire from the beauty industry.
The beauty industry is cutthroat. Especially in times like these, where we're facing a recession, the beauty industry is one that will never die. Regardless of the economy, people always want to look people. That's where the top beauty school students and graduates come in. These beauty-seeking customers want you to make them beautiful, and you will learn to do that in beauty school. However, you don't learn everything before graduation. You will always be learning new techniques, new styles and new ways of doing things. Whether you learn it from the new hair stylist that started yesterday or the 80 year old woman sitting in your chair while you style her hair. Just as technology is always changing, the beauty industry is as well. There are always new techniques, new products and new ways of making the customer happy.
You may graduate from the best beauty school, but don't think that means you're done learning. There is no shortage of knowledge to gain, and it's not the kind of knowledge you gain from lectures, homework and tests; it's the kind of knowledge you get from experience.
Find a school near you
Your Zip Code:
- Select All Degrees -


text:
With 27 years of experience in the industry, we're specialists in crafting
bespoke and seamless sheet metal fabrications. From expert warehouse solutions
to timeless architectural products — we manufacture a broad range of metal
solutions under one roof.
With 27 years of experience in the industry, we're specialists in crafting bespoke and seamless sheet metal fabrications.
Our ideal customer requires metalwork for architectural and interior-design purposes as well as sheet metal fabrications for storage, handling and logistics in warehouses. Our team have first-class bending, forming and finishing skills — and have established our company as one that you can rely on.
We are enthusiastic about designing and producing aesthetically pleasing sheet metal fabrications that are high-quality, appealing to the eye and practical to use.
We work with a wide variety of metals, including stainless steel, pewter, zinc, copper, brass, aluminium and mild steel sheet metal for industrial, retail, commercial, and domestic sectors.
There's nothing we feel more passionate about than creating a high-end architectural piece — like one of our handcrafted metal bar tops — which has been designed with exceptional detail. Or producing bespoke solutions to suit your requirements, whether that be industrial or domestic.
Are you looking for a manufacturer who can create bespoke metal brackets for your warehouse or commercial unit? You're in the right place if so. We manufacture a wide range of metal brackets for industrial, commercial and construction applications. Whether you need L shaped brackets to secure a free-standing shelf, or stainless steel brackets to…Find out more
We are incredibly passionate about creating beautifully handcrafted and timeless custom metal bar tops, bar fronts and back fittings for our clients. Our stunning bar tops include the most intricate detailing and exquisite finishes for some of the most iconic venues in the UK and the World. Whether your architectural project requires a bar top with…Find out more
If you need a bespoke trolley, manufactured for use in industry, you're in the right place. We're a UK-based company, happy to work with you to develop a design to suit your requirements, meaning you have the ideal equipment to maximise efficiency in your warehouse or other commercial unit. We can also reverse-engineer your existing…Find out more