Some libraries have duplicate dependencies.
If you want prevent errors and warnings you should exclude duplicates from one of library:
compile (‘org.docx4j:docx4j-ImportXHTML:3.2.1’) { exclude “slf4j-log4j12” }
Some libraries have duplicate dependencies.
If you want prevent errors and warnings you should exclude duplicates from one of library:
compile (‘org.docx4j:docx4j-ImportXHTML:3.2.1’) { exclude “slf4j-log4j12” }
Create Gradle Spring Boot project with SPRING INITIALIZR
I chose Groovy language for the project, but if you want Java, text below with little changes also helps you.
Edit build.gradle and add to it bootRun section
buildscript { ext { springBootVersion = '1.3.1.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } apply plugin: 'groovy' apply plugin: 'idea' apply plugin: 'spring-boot' jar { baseName = 'myapp' version = '0.0.1-SNAPSHOT' } sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile('org.codehaus.groovy:groovy') testCompile('org.springframework.boot:spring-boot-starter-test') } task wrapper(type: Wrapper) { gradleVersion = '2.9' } // this code split parameters and allow us use parameters in our application bootRun { if ( project.hasProperty('args') ) { args project.args.split('\\s+') } }
create MyController class
@Controller class MyController implements CommandLineRunner { private Logger logger = LoggerFactory.getLogger(this.getClass()) @Override void run(String... args) throws Exception { if(!args) { logger.warn("You must pass at least one parametr.") logger.warn("Example: bootRun -Pargs=\"arg1 arg2 arg3\"") } // print parameters which we sent from command line args.each{ arg -> logger.info(arg) } } }
Run application
gradle bootRun -Pargs=”arg1 arg2 arg3″
First off all you could find out some plugins https://grails.org/plugins/search?q=mongo
1. Edit BuildConfig.groovy
add string like this: compile ‘org.mongodb:mongo-java-driver:3.0.3’ to dependencies section
dependencies { //... compile 'org.mongodb:mongo-java-driver:3.0.3' }
2. Edit Config.groovy
mongodb.uri = "mongodb://username:password@your.mongodb.server/yourDataBaseName" mongodb.database = "yourDataBaseName"
3. Add to resources.groovy
beans = { mongoClientURI(MongoClientURI) { bean -> bean.constructorArgs = [grailsApplication.config.mongodb.uri.toString()] } mongoClient(MongoClient) { bean -> bean.constructorArgs = [ref(mongoClientURI)] bean.destroyMethod = 'close' } mongoDb(mongoClient: 'getDB') { bean -> bean.constructorArgs = [grailsApplication.config.mongodb.database.toString()] } }
4. Add to any controller (in my case MyController)
package mypackage import com.mongodb.DB class MyController { DB mongoDb def users() { def collection = mongoDb.getCollection('myCollection') collection.insert(new BasicDBObject(['name':'Piter'])) def users = collection.find(new BasicDBObject(['name':'Piter'])).toArray() render (contentType: 'application/json', text: JSON.serialize(users)) } def user() { def userId = params.userId def collection = mongoDb.getCollection('myCollection') def user = collection.findOne(new BasicDBObject(['_id': new ObjectId(userId)])) render (contentType: 'application/json', text: JSON.serialize(user)) } }
Для правильной сортировки строк на украинском языке или любом другом, необходимо явно указывать локаль Locale. Для решения данной проблемы используем класс пакета java.text – Collator.
ArrayList<String> countries = new ArrayList<String>(); countries.add("Єгипет"); countries.add("Туреччина"); countries.add("Ісландія"); countries.add("Аргентина"); System.out.println("Before sort:"); System.out.println(countries); System.out.println("After regular sort:"); Collections.sort(countries); System.out.println(countries); Locale ukrainian = new Locale("uk", "UA"); Collator ukrainianCollator = Collator.getInstance(ukrainian); Collections.sort(countries, ukrainianCollator); System.out.println("After locale sort:"); System.out.println(countries);
I have some view (“basicView.gsp”) and want to pass other view content (“_someTemplate.gsp”) to this view to javascript variable (“template”).
basicView.gsp:
<html> <head> ... </head> <body> ... <script> var template = '${raw(include(view:"myTemplates/_someTemplate.gsp").replaceAll('\n',''))}'; </script> </body> </html>
_someTemplate.gsp:
<div> <h1>Some header</h1> <p>Lorem ipsum dolor sit...</p> </div>
Resulted html:
<html> <head> ... </head> <body> ... <script> var template = '<div><h1>Some header</h1><p>Lorem ipsum dolor sit...</p></div>'; </script> </body> </html>
Details:
Create Grails app in ItelliJ IDEA 14 as in this manual –
https://vaadin.com/wiki/-/wiki/Main/Vaadin+on+Grails+-+Create+project+in+IntelliJ+IDEA
But use only 1. and 2. points.
After 2. point use next suggestions:
add to BuildConfig.groovy:
to dependencies – runtime ‘org.hibernate:hibernate-validator:5.1.1.Final’
to plugings – compile “:vaadin:7.5.2”
click Apply Grails changes to IDEA project structure
run – grails vaadin-quickstart
Next couple steps:
press “+” and select Grails:
select “your app” in Module:
change name on “your app name”:
result:
Thats all.
def someMap = [ 'phones':['iPhone','Galaxy','Nexus'], 'laptops':['HP','MacBook','Samsung'], 'tablets':['Galaxy Tab','iPad','Asus'], ] someMap.eachWithIndex{ k, v, index -> println "${k}:${v} - ${index}" }
Result:
phones:[iPhone, Galaxy, Nexus] – 0
laptops:[HP, MacBook, Samsung] – 1
tablets:[Galaxy Tab, iPad, Asus] – 2
def map = [a:"cc", b: "dd"] println "map - " + map println "map.keySet() - " + map.keySet() println "map.values() - " + map.values() println "map.entrySet() - " + map.entrySet() println "map.entrySet().key - " + map.entrySet().key println "map.entrySet().value - " + map.entrySet().value
Result:
map – [a:cc, b:dd]
map.keySet() – [a, b]
map.values() – [cc, dd]
map.entrySet() – [a=cc, b=dd]
map.entrySet().key – [a, b]
map.entrySet().value – [cc, dd]
apt-get install pptpd
nano /etc/pptpd.conf
localip 10.0.0.1
remoteip 10.0.0.100-200
nano /etc/ppp/chap-secrets
username pptpd password *
nano /etc/ppp/pptpd-options
ms-dns 8.8.8.8
ms-dns 8.8.4.4
service pptpd restart
check:
netstat -alpn | grep :1723
nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT
# ======================== ufw ===================
ufw allow 22
ufw allow 1723
nano /etc/ufw/before.rules
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow forward traffic to eth0
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
# Process the NAT table rules
COMMIT
# before the line # drop INVALID packets ... add:
-A ufw-before-input -p 47 -j ACCEPT
ufw disable
ufw enable
Ничего не предвещало беды, OS X оповестила меня об обновлениях системы. Apple рекомендовала обновить SMC для устранения возможных проблем с аккумулятором в будущем вот ссылка на это обновление http://support.apple.com/kb/DL1626. При установке обновления произошел сбой, система перезагрузилась и в результате мой Mac начал шуметь кулером как вертолет, после снова потребовалось установить это же обновление. Выполнив перезагрузку я увидел значек , в последствии я узнал, что это означает данная система не может быть загружена на вашем устройстве.
После этого происшествия было проведено невообразимое количество всяких экспериментов, а также посещение нескольких авторизованных центров Apple в Киеве, серия звонков в представительство Apple в Москве (так как на Украине такого представительства – нет, есть только официальный дистрибьютор). Итог получился неутешительный: в сервисном центре предлагали заменить материнскую плату по программе обмена, сумма составила примерно $500. Естественно такие деньги для восстановления устройства 2010 года выпуска я тратить не стал…
Самое интересное, что мне удалось поставить на Mac Os X 10.6.8 и он даже загружался, и я мог видеть рабочий стол и элементы управления, но длилось это не более 2-3 сек, после чего аппарат уходил в “сон”, после нажатия любых кнопок система снова активировалась, но подсветка экрана не включалась, рассмотреть, что либо можно было только при ярком свете, через 2-3 сек Mac снова засыпал… Сделав скриншот с “Об этом Mac”-> “Отчет о системе” я увидел, что вышеуказанное обновление каким-то чудесным образом прошило мне в аппарат SMC для MacBook Pro (13-inch, Early 2011) это видно на скриншоте, судя по данным Apple http://support.apple.com/kb/HT1237:
MacBook был “торжественно” положен на полку до лучших времен или для продажи по запчастям.
Спустя несколько месяцев было решено продать полурабочее устройство. Я отфотографировал аппарат и напоследок с товарищем решили его еще раз помучать. У товарища нашелся переходник на DVI и мы подключили Mac к внешнему монитору, к нашему удивлению он работал, но при этом родной экран не был активен, а так же кулер работал не выключаясь. Так как мы получили возможность неограниченно по времени проводить манипуляции с устройством мы вооружились Google и провели серию, как оказалось позже успешных действий.
Итак рецепт:
далее пишем SmcFlasher.efi -force -LoadApp 2010MBP15.smc -norestart и снова жмем Enter
После проделанных манипуляций у меня перестал шуметь кулер. Я выключил и снова включил MacBook и к моему искреннему удивлению аппарат заработал! Этот пост я пишу именно с него.
P.S. Хотелось бы предостеречь потенциальных экспериментаторов – все, что вы будете делать, вы будете делать под свою ответственность без каких либо гарантий!
Немного погуглив вы скорее всего обнаружите
PHPExcel – отличный класс для манипуляций с данными формата Excel.
Можно использовать просто подключив как класс к вашему проекту, а можно воспользоваться трудом коллег и подключить как модуль: Модуль PHPExcel для kohanaframework
На момент написания поста – при загрузке с github данного модуля папка vendor/PHPExcel – оказалась пуста, просто ложим туда содержимое самого класса PHPExcel.
Использование модуля достаточно простое и описано в Readme.
Кратко продублирую
чтение данных из файла spreadsheet.xlsx, находящегося в корне нашего сайта:
$spreadsheet = Spreadsheet::factory( array( 'filename' => 'spreadsheet.xlsx' ), FALSE) ->load() ->read(); foreach ($spreadsheet as $v) { echo $v['A'].','; // где $v['A'] - данные из ячейки A страницы Excel }
запись данных в файл Excel (в модуле обнаружены ошибки, ждем правок, для создания файлов пока можно использовать модуль https://github.com/rafsoaken/kohana-phpexcel):
$spreadsheet = Spreadsheet::factory(array( 'author' => 'Kohana-app', 'title' => 'Отчет', 'subject' => 'Тема', 'description' => 'Описание', 'path' => '/', 'name' => 'report' )); $spreadsheet->set_active_worksheet(0); $as = $spreadsheet->get_active_worksheet(); $as->setTitle('Потребители'); $as->getDefaultStyle()->getFont()->setSize(9); $as->getStyle('A1:G1')->applyFromArray(Kohana::$config->load('styles.header')); $as->getRowDimension(1)->setRowHeight(24); $as->getStyle('A1:G1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER); $as->getStyle('A1:G1')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER); $as->getColumnDimension('A')->setWidth(8); $as->getColumnDimension('B')->setWidth(12); $as->getColumnDimension('C')->setWidth(46); $as->getColumnDimension('D')->setWidth(36); $sh = array( 1 => array('День','Пользователь','Количество','Цена'), 2 => array(1, 'Женя', 5, 587), 3 => array(2, 'Денис', 3, 981), 4 => array(3, 'Анна', 1, 214) ); $spreadsheet->set_data($sh, false); $spreadsheet->send();
Для тех кому лень качать из разных источников вот ссылки на укомплектованный модуль для соответствующих версий:
phpexcel_kohana3.2