Что такое gem? – Ruby. Исповедь самоучки
При разработке приложения на Ruby, использование gem’ов (gem – в переводе означает “драгоценный камень”, правильно читается как джем, но многие почемуто говорят “гемы”) не редкость. По факту gem – это готовый набор классов облегчающий работу программиста, иными словами “сторонняя библиотека”. Таким образом программист сосредотачивается на основных тонкостях своей писанины. Как результат – увеличивается скорость разработки, и как побочный эффект программист не изобретает велосипед..gem – это архив, внутри которого, помимо самой библиотеки находится файл спецификации, который помимо всего прочего включает в себя информацию:
– версия библиотеки
– зависимости от других gem’ов
– описание gem’a
Gem’ы создаются независимыми программистами, при разработки типовых задач. Устанавливаются в систему одноимённой утилитой gem (она устанавливается вместе с RVM).
Искать нужные джемы стоит на сайте проекта rubygems.org (RubyGems – менеджер пакетов (джемов)), на гитхабе и на независимом проекте ruby-toolbox.com
Gemset’ы
Поскольку джемы разных версий могут конфликтовать, под каждый проект принято создавать отдельные джемсеты, которые представляют из себя набор определенных джемов, с определенными версиями, заточенными под нужную вресию руби. Давай, специально под данный учебник создадим джемсет samouchka:
$ rvm use 2.0.0@samouchka --create --default
Где:
– use – начать использовать указанный джемсет
– 2.0.0 – версия руби (мы же помним да, что RVM позволяет работать на одном сервере с разными версиями руби)
– samouchka – имя джемсета
– –create – создать джемсет
– –default – использовать этот джемсет по умолчанию. В итоге, при каждом запуске окна терминала, только что созданный джемсет будет выбран автоматически.
проверить текущий джемсет можно командой
$ rvm current
Установка gem’ов
$ gem install sinatra
Gem sinatra – микрофреймворк
Легким движением пальцев, фрейворк sinatra установлен. По умолчанию устанавливается самая последняя версия джема. Операция
gem install
скачивает архив и распаковывает его, проверяет зависимости, учитывая версии, и при необходимости скачивает и их тоже, не забыв при этом обновить для себя файлик спецификации. В состав джемов могут входить также и исполняемые файлы (я думаю bundler и rake наиболее известные). Команда gem install отлично подходит, когда к приложению подключается 1-2 джема. Но мы же не хотим плясать с бубном когда нам нужно установить 10-20 разных джемов, при всем при этом мы хотим чтобы одна часть джемов работала в окружении разработки, а другая в продакшне. На помощь приходит Bundler и Gemfile
Bundler – это джем, который занимается установкой джемов. Файл Gemfile является неотделимым атрибутом для работы bundler’a. Gemfile представляет из себя обычную программу на Ruby, которая описывает установщику какие джемы каких версий и для чего нам нужны.
Вот пример того, как может выглядить Gemfile:
source 'http://rubygems.org' gem 'sinatra', '~> 1.4.4' gem 'mongo', '1.9.2' gem 'bson' '1.9.2' gem 'bson_ext', '1.9.2' gem 'unicorn', :group => :production group :development, :test do gem 'shotgun' end group :test do gem 'rspec', '>= 2.6' end
Чтобы установить указанный джемы, достаточно перейти в каталог с Gemfile’ом и набрать в консоле команду
$ bundle install
Помимо установки всех джемов в одну строку, bundle разрешает все конфликты зависимостей и записывает результат работы в файл Gemfile.lock, у меня он выглядит так:
GEM remote: http://rubygems.org/ specs: bson (1.9.2) bson_ext (1.9.2) bson (~> 1.9.2) kgio (2.9.2) mongo (1.9.2) bson (~> 1.9.2) rack (1.5.2) rack-protection (1.5.2) rack raindrops (0.13.0) shotgun (0.9) rack (>= 1.0) sinatra (1.4.4) rack (~> 1.4) rack-protection (~> 1.4) tilt (~> 1.3, >= 1.3.4) tilt (1.4.1) unicorn (4.8.2) kgio (~> 2.6) rack raindrops (~> 0.7) PLATFORMS ruby DEPENDENCIES bson bson_ext mongo shotgun sinatra unicorn
Bundle имеет еще ряд фич, таких как например установка джемов прямо из репозитария гитхаба, или групповой require. Про все это можно почитать здесь http://www.ruby-doc.org/docs/ruby-doc-bundle/
qpi2.livejournal.com
Знакомство с Gem. Часть первая / Habr
Доброго времени суток!Введение
Каждый рубист, да и вообще программист, рано или поздно начинает задумываться о написании своих библиотек. Ему начинает надоедать перетаскивание одних и тех же кусков кода в другие проекты. В Ruby лекарством от данного заболевания являются gem‘ы. Итак, давайте познакомимся с ним поближе.
С чего начать
Для начала неплохо было бы отыскать запылившийся файлик с расширением .rb. Нашли? Ok, двигаемся дальше.
Далее нам необходимо создать файл с названием hello-world.gemspec, где, как вы, вероятно, догадались hello-world — имя вашего будущего gem’a.
Следующим нашим шагом будет заполнение этого самого файла (если так можно выразиться, файла-спецификации). Содержание его должно выглядеть следующим образом:
Gem:Specification.new do |g|
g.name = 'hello-world' # имя нашего gem'a
g.version = '1.0' # его текущая версия
g.summary = 'This is the first gem in my life.' # описание... сами знаете чего
g.files = ['lib'/helloworld.rb'] # список файлов
g.author = 'krovatti' # и, разумеется, автор... как же без него...
end
Отлично, но собирать то нам пока нечего! Почему? Мы забыли создать helloworld.rb. Давайте немедленно исправим нашу оплошность:
class HelloWorld
def initialize
puts "Hello, World!'
end
end
Фуууух! Теперь, когда мы имеем минимальный набор файлов, мы можем приступить к сборке нашего с вами gem’a. Для его сборки мы должны использовать команду
gem build hello-world.gemspec
В случае удачного выполнения данной операции на выходе мы получим файл с название
Постойте-ка
Вы хотите поделиться своим gem’ом с другими людьми? Если да, то вы запросто можете это сделать следующей командой:
gem push hello-world-1.0.gem
После выполнения этой команды мы должны увидеть следующее:
Pushing gem to RubyGems.org... Successfully registered gem: hello-world (1.0)
Увы, мы этого не увидим. Знаете почему? Потому, что мы с вами ещё не зарегистрированы на RubyGems. Сделать это можно здесь.
Теперь повторите команду push и всё будет ok.
All over the world
Теперь наш gem сможет установить любой рубист
gem install hello-world
После того, как установка будет завершена напишем следующий код и выполним его:
require 'rubygems'
require 'hello-world'
inst = HelloWorld.new
В результате чего мы увидим заветное
Hello, World!в нашей консоли.
Стопэ!
Вообще-то мы наследили на RubyGems. Вы же об этом не забыли? Удалим наш gem следующей командой:
gem yank hello-world -v 1.0
Да и из нашего списка gem’ов можно удалить. Поигрались и хватит!
gem uninstall hello-world -v 1.0
Заключение
Сегодня мы с вами познакомились с поистине замечательным инструментом по имени gem. Теперь вы знаете, что если что-то случиться, gem обязательно придёт к вам на помощь.
habr.com
RubyGems — подробно / Habr
Для начала определимся с понятиями:
RubyGems — фрэймворк для установки и запаковки Ruby библиотек и приложений.
gem — пакет(файл) с библиотекой или приложением. Имеет стандартизированный вид и расположен в хранилище в сети.
В чем же предназначение RubyGems?
До того как появилась RubyGems, для установки новой библиотеки нужно было найти, скачать её, попытаться установить, часто лишь для того, чтобы убедиться в отсутствии нужных зависимостей. Если же библиотека запакована с помощью RubyGems, достаточно попросить RubyGems сделать это за нас и получить установленную, интегрированную библиотеку со всеми нужными зависимостями. В дополнение ко всему утилита gem — платформонезависима, неважно какую ОС вы используете, везде механизм установки библиотек и приложений будет одинаков. Здорово, правда?
Под катом будут описаны:
1) Поиск, получение деталей, установка gem’s
2) Доступ документации по установленному gem
4) Работа с версиями gem’s
5) Создание собственных gem’s
1. Поиск, получение деталей, установка gem’s
Допустим в вашем текущем проекте генерируется много XML. И где то вы слышали, что есть замечательная библиотека Jim Weirich’s Builder library, которая позволит вам создавать XML прямо в коде Ruby.
Посмотрим, доступна ли она в качестве gem:
% gem query --details --remote --name-matches build
*** REMOTE GEMS ***
AntBuilder (0.4.3)
Author: JRuby-extras
Homepage: jruby-extras.rubyforge.org
AntBuilder: Use ant from JRuby. Only usable within JRuby
builder (2.1.2)
Author: Jim Weirich
Homepage: onestepback.org
Builders for MarkUp.
...
–details — отображает детали о найденном gem
–remote — ищет на удалённом хранилище (–locale — поиск на локальной машине)
Номер около названия каждого gem, показывает последнюю версию.
Список всех доступных версий для определённого gem, запустим команду list с опцией –all:
% gem list --details --remote --all builder
*** REMOTE GEMS ***
builder (2.1.2, 2.1.1, 2.0.0, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.0,
1.0.0, 0.1.1, 0.1.0)
Author: Jim Weirich
Homepage: onestepback.org
Builders for MarkUp.
Для установки самой последней версии:
% gem install builder #RubyGems сам выберет последнюю
По умолчанию (если вы не используете RVM), для установки gem’s используются общие системные директории, так что под Unix нужно добавлять sudo перед командой gem.
Список уже установленных на вашем компьютере gem’s:
gem list
*** LOCAL GEMS ***
builder (2.1.2)
2. Чтение документации по установленному gem
Мы установили gem builder, возникает вопрос, как с ним работать?
В большинстве случаев gem содержит документацию, она хранится в /doc директории, например:
#Узнаем путь где хранятся наши gem's
% gem environment gemdir
/usr/local/lib/ruby/gems/1.9.0
/usr/local/lib/ruby/gems/1.9.0/doc — здесь лежит документация к установленным gem’s
/usr/local/lib/ruby/gems/1.9.0/doc/builder-2.1.2/rdoc/index.html — полный путь к документации gem’а builder в моём случае
Есть 2 способа читать документацию:
1. Заходить в директорию с документацией гема и запускать файл index.html
2. Более простой способ, запустить web сервер, командой % gem server
По умолчанию он запустится на порту 8808 и будет доступен по ссылке localhost:8808
В браузере вы увидите документацию на все установленные gem’s.
Путь к директории с gem’s и порт могут быть перезаданы с помощью опций -p и -d
3. Использование установленных gem’s
После установки gem, достаточно написать команду require<имя gem>, чтобы подключить его. Т.е. работа с гемами не отличается от работы с обычными библиотеками.
# пример генерации XML с помощью установленной нами библиотеки
require 'builder'
xml = Builder::XmlMarkup.new(target: STDOUT, indent: 2)
xml.person(type: "programmer") do
xml.name do
xml.first "Dave"
xml.last "Thomas"
end
xml.location "Texas"
xml.preference("ruby")
end
4. Работа с версиями gem’s
Что если последняя вышедшая версия используемого вами gem не совместима с той которую вы используете сейчас?
К счастью, RubyGems позволяет нам одновременно хранить несколько версий gem. Указанные ниже команды установят обе версии builder.
% gem install builder -v 2.1.2
% gem install builder -v 1.1.0
% gem list builder
*** LOCAL GEMS ***
builder (2.1.2, 1.1.0)
#Подключение builder v.1.1.0
gem 'builder', '= 1.1.0'
require 'builder'
xml = Builder::XmlMarkup.new(STDOUT, 2)
xml.person do
name("Dave Thomas")
location("Texas")
end
Тут доступны ещё несколько трюков:
gem 'builder' , '> 1'
— использовать версию больше чем первуюgem 'builder' , ''>= 2.2.0', '< 3.0''
— использовать версию больше 2.2.0 и меньше 3.0Полный список выражений:
= идентичная версия
!= неидентичная версия
> версия больше чем
< версия меньше чем
>= большая и равная версия
<= меньшая или равная версия
~> примерно больше чем (подробнее RubyGems docs)
5. Создание собственных gem’s
Тут всё довольно просто, опишу базовые шаги, подробности можно почитать здесь
- написание кода соответсвующего gem структуре
- создание файла спецификации (ourgem.gemspec)
- создание gem файла
% gem build mygem.gemspec
- размещение созданного гема на сервере rubygems.org
%gem push mygem.gemspec
Источники:
http://docs.rubygems.org/
Programming Ruby 1.9 3rd Edition
habr.com
gem – это… Что такое gem?
2) Компьютерная техника: Global Event Manager, Gpl Engine Manager, Graphical Environment For Multimedia, Graphical Environment For Music
3) Американизм: Government Electronic Market, Government Employees Medical
4) Спорт: Game Enhancement Module, Gaming Excellence Merit, Global Expeditions Maniac
7) Сельское хозяйство: Germplasm Enhancement Of Maize, Grain Equalization And Management
8) Шутливое выражение: Green Eyed Monster
9) Химия: Generalized Equilibrium Modelling
10) Религия: Gifts Enable Mission, Global Episcopal Mission, Great Expectations Ministries
11) Экономика: Global Emerging Market
12) Автомобильный термин: generic electronic module
13) Музыка: Gospel Entertainment Music, Great Electronic Music
14) Сокращение: GPS Embedded Module, Generic Entity Model, Global Environmental Monitoring, Global Express Mail , Global positioning system (GPS) Embedded Module, Graff Electronic Machines Ltd , Graphite Epoxy Motor, Germanic , Global Emerging Markets15) Университет: Gamecock E Mail, Gateway To Educational Material, Graduate Education For Minorities
16) Физика: Graviton Electro Magnetic
17) Физиология: Gender Evaluation Methodology
18) Электроника: Generic Equipment Model
19) Вычислительная техника: Graphical Environment Manager, Graphics Environment Manager, расширение файлов векторной графики программных продуктов Delrina, а также Venture версий до 4.2, Graphics Environment Manager , Generalized Executive for realtime Multiprocessor applications , Giotto Extended Mission 21) Банковское дело: ипотечный кредит, платежи по которому возрастают в течение определённого периода22) Транспорт: Global Electric Motorcar
23) Фирменный знак: Global Electric Motorcars
24) Экология: Global Environmental Multiscale
25) СМИ: Great English Magazine
26) Деловая лексика: Goal Established And Maintained, Growth and Emerging Markets
27) Образование: Gateway To Educational Materials, Gateway To English Mastery, Girls Education Movement, Going The Extra Mile, Great Educator and Mentor
29) Сетевые технологии: Global Electronic Messaging
30) Океанография: Gulf Ecosystem Monitoring
32) HR. Global Engineering Center
33) Имена и фамилии: Glenn E. Marshall
34) Общественная организация: Good Enthusiastic Member
35) Чат: Generic Electronic Mail
37) Программное обеспечение: Genealogy Extension Module, Globally Executable Mhp, Graphic Environment Manager
38) Международная торговля: Global Export Manager, Growth Enterprise Market
Универсальный англо-русский словарь. Академик.ру. 2011.
universal_en_ru.academic.ru
GEM – это… Что такое GEM?
2) Компьютерная техника: Global Event Manager, Gpl Engine Manager, Graphical Environment For Multimedia, Graphical Environment For Music
3) Американизм: Government Electronic Market, Government Employees Medical
4) Спорт: Game Enhancement Module, Gaming Excellence Merit, Global Expeditions Maniac
7) Сельское хозяйство: Germplasm Enhancement Of Maize, Grain Equalization And Management
8) Шутливое выражение: Green Eyed Monster
9) Химия: Generalized Equilibrium Modelling
10) Религия: Gifts Enable Mission, Global Episcopal Mission, Great Expectations Ministries
11) Экономика: Global Emerging Market
12) Автомобильный термин: generic electronic module
13) Музыка: Gospel Entertainment Music, Great Electronic Music
14) Сокращение: GPS Embedded Module, Generic Entity Model, Global Environmental Monitoring, Global Express Mail , Global positioning system (GPS) Embedded Module, Graff Electronic Machines Ltd , Graphite Epoxy Motor, Germanic , Global Emerging Markets15) Университет: Gamecock E Mail, Gateway To Educational Material, Graduate Education For Minorities
16) Физика: Graviton Electro Magnetic
17) Физиология: Gender Evaluation Methodology
18) Электроника: Generic Equipment Model
19) Вычислительная техника: Graphical Environment Manager, Graphics Environment Manager, расширение файлов векторной графики программных продуктов Delrina, а также Venture версий до 4.2, Graphics Environment Manager , Generalized Executive for realtime Multiprocessor applications , Giotto Extended Mission 21) Банковское дело: ипотечный кредит, платежи по которому возрастают в течение определённого периода22) Транспорт: Global Electric Motorcar
23) Фирменный знак: Global Electric Motorcars
24) Экология: Global Environmental Multiscale
25) СМИ: Great English Magazine
26) Деловая лексика: Goal Established And Maintained, Growth and Emerging Markets
27) Образование: Gateway To Educational Materials, Gateway To English Mastery, Girls Education Movement, Going The Extra Mile, Great Educator and Mentor
29) Сетевые технологии: Global Electronic Messaging
30) Океанография: Gulf Ecosystem Monitoring
32) HR. Global Engineering Center
33) Имена и фамилии: Glenn E. Marshall
34) Общественная организация: Good Enthusiastic Member
35) Чат: Generic Electronic Mail
37) Программное обеспечение: Genealogy Extension Module, Globally Executable Mhp, Graphic Environment Manager
38) Международная торговля: Global Export Manager, Growth Enterprise Market
Универсальный англо-русский словарь. Академик.ру. 2011.
universal_en_ru.academic.ru
Пишем API gem: что такое Hypermedia API и как с ним подружиться
В предыдущей статье мы разметили основную структуру гема, определились с библиотекой для HTTP запросов и написали метод для работы с первой API точкой – получением списка всех тикетов. После этого я планировал начать добавлять все остальные точки, но столкнулся с проблемой, которую мы и будем решать в этой статье: поддержка Hypermedia API.
Hypermedia API
Hypermedia API – относительно новая и относительно спорная концепция. Основной её смысл заключается в том, что API приложения возвращает не только данные, но и ссылки на другие, связанные с оригинальным запросом, ресурсы. Рассмотрим это на примере GrooveHQ API. Вот в каком виде он возвращает json для тикета:
{
"ticket": {
"assigned_group": null,
"created_at": "2012-07-17T13:41:01Z",
"number": 1,
"priority": null,
"resolution_time": null,
"title": null,
"updated_at":"2012-07-17T13:41:01Z",
"href": "https://api.groovehq.com/v1/tickets/1",
"closed_by": "[email protected]",
"tags": ["important"],
"links": {
"assignee": {
"href": "https://api.groovehq.com/v1/agents/[email protected]"
},
"customer": {
"href": "https://api.groovehq.com/v1/customers/[email protected]"
},
"state": {
"href": "https://api.groovehq.com/v1/tickets/1/state"
},
"messages": {
"href": "https://api.groovehq.com/v1/tickets/1/messages"
}
}
}
}
Видишь ключ “links”? Вот это те самые ссылки на другие ресурсы. Разработчику не нужно идти в документацию, он может исследовать возможности API путём навигации по таким вот ссылкам. Эта идея задокументирована как Hypertext Application Language и для её JSON версии даже есть формальная спецификация.
Если вас интересует моё личное мнение, то я считаю эту идею как минимум странной. Изучать API не по документации, а путём просмотра ответов от самого API? Нет, спасибо.
Первым моим позывом было отбросить эти ссылки вообще. Но потом я осознал одно преимущество: при помощи этих ссылок можно чуть облегчить написание библиотеки, так как они позволяют легко строить цепочки запросов используя лишь несколько небольших абстракций поверх обычного запроса. Этим мы сегодня и займёмся.
В комментариях подсказали ещё один плюс – изменение адресов ресурсов при использовании HAL не ломает клиенты.
Пишем Resource и Relation
Как я сказал выше, использование HAL позволит строить цепочки запросов к ресурсам. Осталось только придумать, как это реализовать. В этот момент становится очевидным, что простыми JSON хэшами нам не обойтись: понадобятся новые классы, объекты которых будут возвращаться запросами к API.
Классов этих будет всего два: GrooveHQ::Resource
и GrooveHQ::Relation
.
GrooveHQ::Resource
– не более чем небольшая обёртка вокруг JSON данных. Помимо самих данных, объекты этого класса хранят API клиента (GrooveHQ::Client
) и коллекцию ссылок на другие ресурсы. Выглядит класс вот так:
# ./lib/groovehq/resource.rb
module GrooveHQ
class Resource
attr_reader :rels, :data
def initialize(client, data)
@client = client
@data = data
@rels = parse_rels
end
def parse_rels
@data["links"].each_with_object({}) do |(relation, value), result|
result[relation] = Relation.new(@client, value["href"])
end
end
end
end
Метод #parse_rels
берёт ссылки из json ответа и для каждой ссылки строит объект класса GrooveHQ::Relation
, который позволит там проводить последующие запросы к связанным ресурсам. Обрати внимание на each_with_object
– если раньше не видел этот метод, то посмотри документацию к нему и используй по необходимости.
GrooveHQ::Relation
так же хранит в себе объект API клиента плюс ссылку на сам ресурс. Таким образом, для реализации этого класса нам достаточно простого Struct и одного метода, который делает запрос при помощи клиента:
# ./lib/groovehq/relation.rb
module GrooveHQ
class Relation < Struct.new(:client, :href)
def get(options = {})
client.get href, options
end
end
end
Усложняем запросы к API
Теперь, когда обёртки (wrapper), упрощающие работу с Hypermedia API написаны, нам лишь нужно использовать их при проведении запросов к API. Для этого нам нужна ещё одна обёртка, вокруг методов HTTParty. Для этого я создал новый модуль GrooveHQ::Client::Connection
состоящий пока что из трёх методов: request
, parse_data
и get
. Рассмотрим их по-отдельности:
def request(http_method, path, options)
response = self.class.send(http_method, path, { query: options })
data = response.parsed_response
parse_data(data)
end
#request
принимает HTTP-метод, ссылку и опции, затем использует HTTParty для проведения запроса и отправляет полученный JSON в метод #parse_data
. Результат #parse_data
и будет результатом любого запроса:
def parse_data(data)
data = data.values.first
case data
when Hash then Resource.new(self, data)
when Array then data.map { |hash| parse_data({resource: hash}) }
when nil then nil
else data
end
end
В зависимости от типа данных мы либо сразу возвращаем объект класса Resource
, либо возвращаем массив таких объектов (путём рекурсивного вызыва #parse_data
), либо сразу возвращаем результат запроса.
Обрати внимание на data = data.values.first
и {resource: hash}
: дело в том, что GrooveHQ API всегда возвращает результат с корневым ключом, в том время как наш ресурс в этом корневом элементе не нуждается. Поэтому мы всегда отбрасываем корневой ключ и берём только сами данные. А чтобы это отбрасывание ничего не сломало при рекурсивном запросе, мы задаём свой корневой ключ в цикле.
Собираем всё вместе
Теперь нам остаётся только обновить метод #tickets
и проверить, что новый код работает с цепочками запросов любой длинны! Так как я уже подключил модуль GrooveHQ::Client::Connection
внутри класса GrooveHQ::Client
, то я могу использовать новый метод #get
внутри модуля GrooveHQ::Client::Tickets
:
module GrooveHQ
class Client
module Tickets
def ticket(ticket_number, options = {})
get("/tickets/#{ticket_number}", { query: options })
end
end
end
end
Теперь можно делать такие безумные вещи:
client = GrooveHQ::Client.new
puts client.ticket(1).rels["assignee"].get.rels["tickets"].get(page: 2).first.data["created_at”]
В этот момент гем действительно готов для добавления любых других API точек. Но ты, наверное, заметил один ужасный косяк: я всё ещё не написал ни единого теста! Согласен, уже пора. В следующей статье посмотрим, как покрывать гемы тестами и делать mock’и API запросов.
Коммит, кстати, здесь: 8056904. А твои комментарии и ответы на них – чуть ниже. Наверняка у тебя уже накопились вопросы, на которые я буду рад ответить.
mkdev.me
Gem – это… Что такое Gem?
2) Компьютерная техника: Global Event Manager, Gpl Engine Manager, Graphical Environment For Multimedia, Graphical Environment For Music
3) Американизм: Government Electronic Market, Government Employees Medical
4) Спорт: Game Enhancement Module, Gaming Excellence Merit, Global Expeditions Maniac
7) Сельское хозяйство: Germplasm Enhancement Of Maize, Grain Equalization And Management
8) Шутливое выражение: Green Eyed Monster
9) Химия: Generalized Equilibrium Modelling
10) Религия: Gifts Enable Mission, Global Episcopal Mission, Great Expectations Ministries
11) Экономика: Global Emerging Market
12) Автомобильный термин: generic electronic module
13) Музыка: Gospel Entertainment Music, Great Electronic Music
14) Сокращение: GPS Embedded Module, Generic Entity Model, Global Environmental Monitoring, Global Express Mail , Global positioning system (GPS) Embedded Module, Graff Electronic Machines Ltd , Graphite Epoxy Motor, Germanic , Global Emerging Markets15) Университет: Gamecock E Mail, Gateway To Educational Material, Graduate Education For Minorities
16) Физика: Graviton Electro Magnetic
17) Физиология: Gender Evaluation Methodology
18) Электроника: Generic Equipment Model
19) Вычислительная техника: Graphical Environment Manager, Graphics Environment Manager, расширение файлов векторной графики программных продуктов Delrina, а также Venture версий до 4.2, Graphics Environment Manager , Generalized Executive for realtime Multiprocessor applications , Giotto Extended Mission 21) Банковское дело: ипотечный кредит, платежи по которому возрастают в течение определённого периода22) Транспорт: Global Electric Motorcar
23) Фирменный знак: Global Electric Motorcars
24) Экология: Global Environmental Multiscale
25) СМИ: Great English Magazine
26) Деловая лексика: Goal Established And Maintained, Growth and Emerging Markets
27) Образование: Gateway To Educational Materials, Gateway To English Mastery, Girls Education Movement, Going The Extra Mile, Great Educator and Mentor
29) Сетевые технологии: Global Electronic Messaging
30) Океанография: Gulf Ecosystem Monitoring
32) HR. Global Engineering Center
33) Имена и фамилии: Glenn E. Marshall
34) Общественная организация: Good Enthusiastic Member
35) Чат: Generic Electronic Mail
37) Программное обеспечение: Genealogy Extension Module, Globally Executable Mhp, Graphic Environment Manager
38) Международная торговля: Global Export Manager, Growth Enterprise Market
Универсальный англо-русский словарь. Академик.ру. 2011.
universal_en_ru.academic.ru