itora web

15Oct/110

creare un fork da un plugin su Github e svilupparlo come submodule

Sto sviluppando un'applicazione in CakePhp 2.0 e voglio usare dei plugin che sono ancora fermi alla versione 1.3 di CakePhp. Per ora, rinominare qualche cartella sembra essere sufficiente. Per tenere traccia del lavoro fatto e per far si che qualcun altro possa usufruirne, ho trovato molto utile "git sumbodule". Vediamo come creare un fork da un plugin e svilupparlo in locale come un submodule.
Per prima cosa installiamo la versione 2.0 di cake e inizializzamo un repository git.
Poi andiamo su github e scegliamo il plugin da adattare alla versione 2.0 di Cake, per esempio il plugin categories di CakeDc. Creiamo un fork con il bottone... fork. Poi Andiamo in "Admin", selezioniamo il repository appena forkato e diciamo a github quale deve essere il "default branch", in questo caso, scegliamo il 2.0.
Importante! quando cloniamo o installiamo come submodule un repo da github, questo si porta con appresso tutti i branches. Sta a noi decidere con "git checkout nomebranch" su quale branch lavorare.

Aggiungere il submodule

Dobbiamo dire a git di aggiungere un submodule contenente il codice del nostro fork, per esempio git@github.com:user/categories.git

git submodule add git@github.com:user/categories.git app/Plugin/Categories

Se vogliamo aggiungere solo un particolare branch, per esempio il 2.0, dobbiamo aggiunger il flag -b al comando precedente

git submodule add -b 2.0 git@github.com:user/categories.git app/Plugin/Categories

Poi spostiamoci nella cartella del plugin appena scaricato e diciamo a git dove e' il repository remote

cd app/Plugin/Categories
git remote add push git@github.com:user/categories.git

Proviamo a modificare un file del plugin, e sempre dalla cartella del plugin, eseguiamo il commit ed il push.

git add .
git commit -m "test commit"
git push master
Aggiungere l'indirizzo remote originario del repo forkato

Automaticamente, la nostra "origin" e' il nostro repo forkato su github, non il repo originario(quello di CakeDC in questo esempio).
Per dire a git di scaricare gli aggiornamenti fatti dagli sviluppatori di cakedc, dobbiamo aggiungere un altro remote.
sempre nella cartella del submodule

git remote add upstream git://github.com/CakeDC/categorie.git
Sincronizzare il nostro submodule con il repo originario forkato

Per scaricare gli aggiornamenti

git fetch upstream

Per fare un merge fra gli aggiornamenti appena scaricati da upstream ed il vostro repo in locale

git merge upstream/master

Per capire la differenza tra "git pull upstream" e "git fetch upstream", consiglio di leggere il punto "Pull in upstream changes" di questa guida.
Qui un link su stackoverflow riguardante questa parte.

Rimuovere submodules

Per rimuovere un submodule erronemente creato:
Delete the relevant line from the .gitmodules file.
Delete the relevant section from .git/config.
Run git rm --cached path_to_submodule (no trailing slash).
via Stackoverflow

Clonare un progetto contenente submodules
git clone git://github.com/user/progettoconsubmodules.git

Questo clonera' il progetto e la cartella del submodule, ma non il contenuto di quest'ultima. Per farlo lanciamo:

git submodule init
git submodule update

Altre info su questa parte nel git pro book

11Oct/110

Jquery screensaver

Uno screensaver stile windows, fatto con jquery.
questo l'html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<style>
body{
	background-color:#b0c4de;
	margin:0px;
	width:100%;
}
#container{
	position: relative;
}
#saver{
	background-color:lime;
	width:100px;
	height:100px;
	position: fixed;
	z-index: 50;
}
</style>
</head>
<body>
	<div id ="container">
		<div id ="saver">I'm a screensaver
		</div>
	</div>
</body>
</html>

Dopo la fine del tag

head

inserite questo codice js

<script>
$(function(){
var savescreen = function(speed, vertical, horizontal){
	$("#saver").animate({left: '+='+horizontal, top: '+='+vertical}, speed);
	$("#saver").animate({left: '-='+horizontal, top: '+='+vertical}, speed);
	$("#saver").animate({left: '-='+horizontal, top: '-='+vertical}, speed);
	$("#saver").animate({left: '+='+horizontal, top: '-='+vertical}, speed);
};

$(function(){
	larg_saver = $('#saver').width();
	alt_saver = $('#saver').height();
	width = $(window).width();
	height = $(window).height();
	margin_top_saver = (height - alt_saver)/2;
	margin_left_saver = (width - larg_saver)/2;
	$('#saver').css('top',0);
	$('#saver').css('left',margin_left_saver);
  });

window.setInterval(function(){
	speed = 1000
	savescreen(speed, margin_top_saver, margin_left_saver);
}, 1000);

});
</script>

Qui una demo per lo screensaver in jquery

Filed under: Uncategorized No Comments