728x90

 JetBrains사의 IntelliJ IDEA 버젼6부터 Groovy와 Ruby를 지원하기 시작했다.(Groovy도 Ruby와 비슷한 스크립트언어다.)
그런데 IntelliJ IDEA가 뭔지 처음 들어봤다. 이녀석 찾아봐도 국내엔 설명이 없고 위키백과 영어버젼에만 나와있다. 대략 상용화된 JAVA IDE라고 한다. 그러니까 자바로 만든 리펙토링 툴인데 프로그래머가 빠르고 쉽게 자신의 코드를 redesign하도록 도와준다고 한다. C#을 사용하면서 비슷한 툴을 몇번 본 적이 있다. 같은 내용이면 method로 빼내주고 scop를 알아보기 쉽게 표시해주고 그런 녀석인가보다. 2001년에 개발되어 빠른 속도로 퍼지고 있다고 한다. 벌써 버젼6까지 나온 것을 보면 꽤 장사가 잘되나 보다.
이 툴의 성공비결은 다른 공개 개발툴과의 호환성이 좋다는 것인데 CVS, Subversion, Apache Ant ,JUnit등을 지원해준다고 한다. Groovy와 Ruby까지 지원해주니 꽤 유용한 녀석인 것 같다. 하지만 라이센스를 얻기 위해서는 미화 500$정도가 든단다.

728x90
728x90

http://www.webdesignerwall.com/tutorials/advanced-css-menu/
CSS-Techniques

1. Triadic Background Setting with CSS
The Silverback web site uses three background images to create the illusion of 3D with simple CSS. No documentation is provided, however the source code is quite intuitive. [via Wilson Miner]

CSS-Technique

2. Creative Use of PNG Transparency in Web Design
With proper PNG support in Internet Explorer 7, and some handy JavaScript and CSS tricks to account for older browsers, we can use PNG images to greatly enhance our design vocabulary.

CSS-Technique

3. CSS Server-Side Pre-Processor

CSS-Technique

4. Advanced CSS Menu

CSS-techniques - Advanced CSS Menu

5. CSS SiteMap

CSS-techniques - beTech » CSS SiteMap » Oct 3, 2007

6. Styling File Inputs with CSS and the DOM
File inputs (<input type=”file” />) are the bane of beautiful form design. No rendering engine provides the granular control over their presentation designers desire. This simple, three-part progressive enhancement provides the markup, CSS, and JavaScript to address the long-standing irritation.

CSS-Technique

7. A Savvy Approach to Copyright Messaging
Derek Powazek suggests adding a copyright message to a photo and use CSS to crop its view. This is supposed to accomplish the goal of adding robust copyright information without defacing your own work.

Screenshot

8. Particletree Category List

CSS-techniques - Particletree » Automatically Version Your CSS and JavaScript Files

9. Advanced CSS Menu Trick
What we want to do here, is instead of simply altering the state of the navigation item the user is currently rolling over, we want to alter the non navigation items as well.

Screenshot

10. CSS hover effect

CSS-techniques - CSS hover effect | Veerle's blog

11. Creating a table with dynamically highlighted columns like Crazy Egg’s pricing table

CSS-techniques - Creating a table with dynamically highlighted columns like Crazy Egg's pricing table

12. A Stripe of List Style Inspiration
A different type of list and navbar styling. As stripes.

CSS List Style

13. Rediscovering the Button Element

CSS-techniques - Particletree » Rediscovering the Button Element

14. Dynamic CSS With Variables
Geoffrey Grosenbach describes how you can integrate CSS variables in CSS coding — with Ruby on Rails.

Dynamic CSS

15. Hyperlink Cues with Favicons
I wanted to extend the concept of hyperlink cues a little. For links that point to external sites, what if, instead of showing a generic ‘external link’ icon, we showed that site’s favicon?

CSS-techniques - Drop Shadow CSS

16. A CSS styled table version 2

CSS-techniques - A CSS styled table version 2 | Veerle's blog

17. CSS Step Menu
A method of designing the so-called step-menus, which have some steps users have to go through in order to achieve some aim. This menu offers a varying amount of steps, dependent upon the type of user accessing the application.

Stepmenu

18. Creating bulletproof graphic link buttons with CSS | 456 Berea Street

CSS-techniques - Creating bulletproof graphic link buttons with CSS | 456 Berea Street

19. Iconize Textlinks with CSS
Links are fun, but sometimes we don’t know where they take us. With this little CSS technique a user can identify a link by its icon. The updated release of the technique.

Screenshot

20. Better Ordered Lists (Using Simple PHP and CSS)
Ordered lists are boring! Sure you can apply background images and do quite a bit of sprucing up to a regular ordered list, but you just don’t get enough control over the number itself.

Screenshot

21. Circular Menu with CSS
This article shows how a beautiful circular navigation menu is created. In Spanish with Source code and an example.

Circular Menu with CSS

22. CSS Dock Menu

CSS-techniques - CSS Dock Menu

23. Digg-like navigation bar using CSS
This tutorial explains how to design a digg-like navigation bar using a liquid design with rounded corners for links.

Screenshot

24. 13 Awesome Javascript CSS Menus
13 “fresh” JavaScript+CSS-based navigation menus in a brief overview. Among other things Slashdot Menu and Sexy Sliding Menu displayed below.

CSS Menu

25. CSS Pricing Matrix
A CSS-based matrix in which clicking on a highlights the associated cell in the top row and left column giving an indication of relationships among the provided information. Similar solution: Tablecloth.

CSS Pricing Matrix

26. CSS List Expander
So, we have an unordered list that can go on in depth as much as we want. The script analyzes the list tree and applies toggle functions for expanding/collapsing child objects.

List Expander

27. How to create VISTA style toolbar with CSS
Reproducing Vista toolbar, with buttons and hover effect in cross-browser compatible CSS and (X)HTML.

Vista CSS Toolbar

28. Fade Out Bottom
This is a demonstration of the effect where the bottom of the page seems to fade out. The technique makes use of an fixed position div (bottom: 0%) with a transparent PNG image and a high z-index value.

CSS-techniques - Fade Out Bottom

29. Scrollovers - A New Way of Linking
Everyone is familiar with hover-effects. This CSS+JavaScript-based techniques creates the Scrolleffect - not really necessary, but it’s nice to know, how it can be done.

Scrollovers

30. How to Style an A to Z Index with CSS

CSS-techniques - How to Style an A to Z Index with CSS | Smiley Cat Web Design

31. CSS List Boxes
Using a simple unordered list this experiment aligns the boxes across the page with the end result being to showcase items like services, products, or specials. One of cool thing about this — if you turn off styles — is the extractable semantics with the headings and paragraphs used.

List Boxes

32. How-to create a “Table of Contents” Navigation
In as little as 8 lines of HTML, and 5 lines of CSS, the Table Of Contents Navigation block can be integrated in your site ready for even more styling.

Table of Contents

33. CSS Recipe for Success

CSS-techniques - CSS - A Recipe for Success

34. Partial Opacity

CSS-techniques - Stu Nicholls | CSSplay | Partial Opacity

35. Simple Round CSS Links (Wii Buttons)

CSS-techniques - Simple Round CSS Links ( Wii Buttons )

36. How to make sexy buttons with CSS

CSS-techniques - How to make sexy buttons with CSS

37. CSS Pull Quotes

CSS-techniques - CSS Pull Quotes | Design Meme

38. Drop Shadow CSS

CSS-techniques - Drop Shadow CSS

39. CSS Speech Bubbles
Easy to customize speech bubbles coded in CSS and valid XHTML 1.0 strict.Tested in all major browsers.

Screenshot

40. CSS Double Lists

CSS-techniques - CSS: Double Lists | Mike’s Experiments | MikeCherim.com

41. Perspective Text with CSS

CSS-techniques - Mike’s Experiments: Archives Page | A Record of My Madness | Powered by the GreenBeast CMS RSS Newsmaker - -

42. Better Email Links: Featuring CSS Attribute Selectors
Learn how to generate code for displaying the e-mail automatically once mailto is used. CSS Attribute Selectors in action which is not supported by Internet Explorer 6 and 7.

Screenshot

43. CSS: Menu Descriptions
This is a CSS technique that could be useful if you want to give users accessible added content such as tool-tips, notifications, or alerts, without adding unnecessary clutter to your page. And since it doesn’t rely of JavaScript, it should be useful to everyone, even disabled users.

Screenshot

Further Techniques

44. CSS Transparency Settings for All Browsers

CSS-techniques - CSS Transparency Settings for All Browsers

45. Time Sensitive CSS Switcher
CSS Switching script that changes style sheet based on time of day.

46. Custom Reading Containers
This amazing little script allows the user to resize any container.

47. Eric Meyer’s CSS Reset

CSS-techniques - CSS Tools: Reset CSS

48. PNG Overlay
Create a transparent PNG overlay which can be used as a mask / frame around regular JPEG or GIF so users can upload photos without having to worry about using any graphics program to apply filters, plus it saves time.

49. Turning Lists into Trees

CSS-techniques - odyniec.net

50. Create Resizable Images With CSS

728x90
728x90
Ruby's Concurrency Nightmare
Ruby on Rails, like most other programming technologies, now finds itself caught in the concurrency quagmire. While RoR has a streamlined focus on the Web application domain, parallelism isn't as limited in terms of domain, platform or application—it's everywhere.

Read James Reinders' counter to this article.

It's interesting that James would extol the virtues of Ruby on Rails in a forum dedicated to discussing concurrency. Why? Ruby on Rails has done a magnificent job of wrangling the complexity of Web applications into a relatively simple model-view-controller concept, but Ruby enthusiasts know that the technology is embarrassingly nonfunctional when it comes to concurrency.

Describing Ruby's "somewhat cooperative" threading scheduler, the official Ruby wiki notes the language's limitations, most shockingly with regards to the 10ms timeout to guarantee atomicity and allow context switching. "On a high-end system, a 10ms timeslice can be an extremely long time; when running a thousand threads, as might be common in a large massively-concurrent application, it would take at least ten seconds for all threads to get a timeslice. Because of the issues associated with this 10ms timeslice and those associated with green threading in general, concurrency in Ruby is typically achieved by running or spawning additional Ruby processes."

Ruby also boasts some native-incompatible threading features such as the ability to kill threads from anywhere in the program, invoke infinite sleep states and enter critical sections at will.

Benjamin Gorlick has written an informative piece on the challenges of threading in Ruby and the hopes its aficionados have for concurrency support in the future. Rails, especially, "was not designed with multi-threading in mind. It was coded completely non-thread safe. There is no reentrancy in many code paths and there is no good locking on important data structures, especially during development mode. It appears rails core is assuming everyone is going to stuff their servers with as much RAM as possible. I recommend 8-16GB of RAM for applications over ten pages (That was a joke, sort of). The RAM solution works until you reach the point of running a huge installation. Assuming you are using mongrel to serve your rails applications, most developers are coming up with hacks to move logic out of rails so the mongrel processes will be lighter. This is done using basic message queues and partly helps this sort of operation. Small shared hosting applications and small projects really suffer from the rails lack of multi-threading implementation."

New tools are on the horizon, however. Gorlick writes about JRuby, a Java implementation of the Ruby programming language that uses Java threads (generally, native OS threads). "Since Java no longer uses green threads, JRuby is able to map one ruby thread to one OS thread," Gorlick explains. "This means it is truly concurrent and the JRuby team is working to make it more safely concurrent in all the core classes."

Another tool is the Rubinius virtual machine for the Ruby programming language. Loosely based on the Smalltalk-80 architecture, Rubinius is written in C and has several concurrency primitives such as Channels, Actors, Tasks and Threads. "Rubinius is able to create and manage 1000 threads instantly with no noticeable overhead. Java and Rubinius allow threads to run concurrently (i.e., access the heap concurrently) and since Rubinius implements the same way Java does so it should have performance much like JRuby, although there are still potential bugs and missing features," according to Gorlick.

New Analogies: Experts Needed
I realize that James was merely admiring the elegant focus of Ruby, not its aptitude for concurrency. But I find it supremely interesting that Ruby on Rails, like most other programming technologies, now finds itself caught in the concurrency quagmire.

Furthermore, RoR is adapted to an MVC convention because the Web application domain doesn't need too many additional models. Parallelism isn't as limited in terms of domain, platform or application—it's everywhere.

James's questions bear repeating: Following Ruby's "Convention over Configuration" mantra, what should be the conventions of parallelism be? Certainly, OpenMP and Threading Building Blocks have gone a long way toward standardizing threading code via libraries of common parallel methods. So, are we already achieving CoC, or could there be additional ways to define standard threading and implicit parallelism while forcing developers to specify only their unconventional programming decisions?

With regards to the other Ruby tenet, "Don't repeat yourself," again one could argue that contributions to parallelism libraries are a way to reduce unnecessary labor. But in the context of Ruby, that also means that information is not sprinkled around in hard-to-trace regions of code, but kept in unambiguous repositories. Is there an analogy for concurrency?

Regardless, parallelism solutions can learn from RoR's domain-specific nature—even if RoR needs a push to enter the age of concurrency.

출처: http://www.devx.com/go-parallel/Article/36235?trk=IntelGo%5FCplusSpecial
================================================================================
루비의 당면 과제에 대해 말하고 있는 듯 보인다.
여기서는 동시성에 대해 언급하고 있는데 Ruby on Rails(ROR)에서 thread를 생성하고 실행할 때 10ms(0.1초)정도 소요된단다. 앞서 루비를 소개할 때 스크립트 언어가 느리다고 했는데 thread는 더 느린가보다. (thread가 수백개정도 생성되는 경우가 web application에서는 흔한 일이니까 치명적일 수도 있다.)

Ruby는 몇몇 native-incompatible threading features를 자랑한단다. 이걸 뭐라고 설명해야 할까? thread를 다룰 때 thread의 상태에 상관없이 해당 쓰레드를 kill할 수 있는 능력이 있단다.(이거 thread를 다룰 때 괘 골치아픈 문제다.)

Benjamin Gorlick란 유명한 사람이 앞으로 Ruby는 동시성에 대한 지원이 있어야 한다고 말했단다. 그사람 말에 따르면 Ruby는 multi-threading을 염두하지 않고 만들어졌다. (쓰레드가 없는 것이 안전하단다.)
많은 code에서 재진입을 허용하지 않고 있으며 그것은 중요한 자료구조들을 보호하는 것에 (특히 개발하는 도중엔 더욱) 좋지 않다. Ruby는 서버컴퓨터에서 RAM의 용량이 충분하다고 생각하고 만들어졌다.(RAM이 부족한 상황을 준비하지 않았다는 말. 10page 이상의 프로그램을 위해 8~16G RAM을 권장한다고 그래놓고 농담이란다.ㅡㅡ;)
이 문제를 해결하기 위해 mongrel를 사용하는 경우가 있다고 하는데 mongrel은 사전에 잡종개라고 되어 있다. 아마 다른 언어를 혼용해서 사용하는 것 같다. 기본적으로 ROR을 사용하지만 thread와 관련된 부분은 다른 것을 사용한다는 것 같다.(내가 알기로는 JRuby를 사용해서 thread는 자바의 thread를 쓰기도 한다.) 이런 mongrel processes는 좀더 가볍단다. 소규모 호스팅 applications와 소규모 프로젝트들은 루비의 멀티쓰레딩때문에 생기는 랙(lack)때문에 고생이 많단다.

JRuby를 쓴 Gorlick가 말하길 새로운 tool들이 떠오르고 있단다. 바로 위에서 내가 말한 내용이다. JRuby에서 Ruby언어를 사용하면서 thread는 JAVA의 thread를 쓴다. 자바가 더이상 green thread를 사용하지 않기 때문에 Ruby의 thread하나당 OS thread하나로 매핑시킬 수 있단다.


다른 tool은 Rubinius virtual machine이다. 루비전용 가상머신 정도 되겠다. Rubinius는 Smalltalk-80 architecture에 기반을 두고 만들어졌기 때문에 C로 만들어졌다. 그리고 몇몇 동시성에 대한 원형을 가지고 있는데 Channels, Actors, Tasks and Threads가 그 예다. Rubinius는 눈에띄는 오버헤드없이 1000개의 thread를 생성하고 관리할 수 있다. JAVA와 Rubinius는 thread가 동시성을 가지도록 해준다.(heap에 동시에 접근할 수 있다는 말이다.) Rubinius는 JRuby만큼의 효율을 보여주지만 여전히 가능한 버그들(potential bugs)을 가지고 있고 특징이 없다(missing features)고 Gorlick이 말했다.
728x90
728x90
마이크로소프트가 신규 OS 커널의 프로토 타입을 발표했다. MS 사내행사인 '테크페스트(TechFest)’에서 선보인 이 개념은 ‘Singularity(특이성)’라 불리며, 고난도 컴퓨팅 연구가 주목적이다.

MS에 따르면 이 개념은 윈도우 차기 버전 혹은 도스의 재탕도 아니다. 아직 확실한 설명은 없지만 윈도우를 포함한 현재의 OS 보다 높은 신뢰성과 안정성을 지녔다고 한다.

MS 리서티 릭 라시드 부사장은 "Singularity는 차기 윈도우와는 상관이 없다"며 "OS와 애플리케이션간 정보 교환 방법에 대한 새로운 패러다임을 제시할 것"이라고 밝혔다. 곧, MS 연구원들이 신규 아이디어를 빠르게 시험할 수 있도록 지원하는 다리라는 설명이다.

싱귤래리티 아키텍처.

(제공: Microsoft Research)
구체적으로 보면 Singularity는 현재의 일반적인 OS에 채택된 C나 C++ 대신 MS의 고수준 프로그램 언어인 C#의 확장판으로 기술돼 있다. MS 측은 “C#을 이용하면 ‘버퍼 오버 런’과 같은 에러를 피할 수 있어 악성코드에 대한 방어력이 증대된다”고 주장했다.

이 프로토 타입은 MS의 코드플렉스(CodePlex) 웹 사이트에서 무료로 다운 받을 수 있다. 단, 이는 연구자용 개발 킷(RDK)임을 유념해야 한다.

이 RDK에는 소스코드나 빌드 툴, 테스트 스위트, 설계 메모 등과 기타 자료가 포함돼 있다. 또 MS 리서치 라이선스에 근거, 비상용 연구 프로젝트에서만 사용 가능하다.

한편, MS는 이 SW를 5년 이상 전부터 연구했다고 한다. 40명 이상의 MS 연구원들이 이 프로젝트에 참여해 보안이나 프로그램 언어, 툴에 관한 아이디어를 제공했다. 그 시작에는 ‘근대적인 OS’를 만들어 보자는 야심이 있었다.

윈도우, 유닉스, 리눅스, 맥 OS 등은 1960년대 중반에 개발된 Multics에 기반하고 있다. 즉, 우리가 현재 사용하고 있는 OS는 40여년 전 기술이 모태인 것이다. 그리고 MS는 Singularity로 이런 구도에서 탈피하려 한다.

==========================================================================
dos나 windows계열의 OS는 C와 C++이 운영체제의 기반이 되어 있다. C++이 객체지향언어라고는 하나 완전한 객체지향 언어는 아니다. 기것을 C#으로 대체한다면 어떤 일이 생길까?
난 운영체제에 대한 지식이 많이 없어서 내가 생각하는 것이 맞다는 믿을 순 없다.
하지만 C#이라면 지금처럼 알수없는 주소에 접근하려고 한다면서 뜨는 오류창은 사라질 것이다. 운영체제에서 사용하는 서비스들이 지금보다 자유롭게 움직일 것으로 보인다. 지금은 운영체제가 하나의 프로그램으로 다른 프로그램을 관리해야 하는데 그러한 구분이 사라지면 속도가 훨씬 개선될 것으로 보인다.

하지만 JAVA에서 JVM이 필요하듯이 C#이 구동되기 위해서는 프레임워크도 있어야 하고 실행환경이 있어야 한다. 그 말은 운영체제를 시작하기 위해서는 부팅시스템이 또 필요하다는 말이다. 그리고 C와 C++과 달리 C#은 MS에서 만든(JAVA를 본따서 만들었지만) 언어이니만큼 경쟁회사의 프로그램들은 제대로 작동하지 않을 수도 있다. 한국은 거의 독식하고있고 세계적으로도 꽤 많은 부분을 차지하고 있는 MS에서 점점 경쟁사죽이기에 나가면 멋지다~하고 넉놓고 있을 게 아니라 반기를 들만한 새로운 개념이 등장해야 할 것 같다.
728x90

+ Recent posts